浙江工业大学单片机第五次实验.docx
- 文档编号:79577
- 上传时间:2022-10-02
- 格式:DOCX
- 页数:64
- 大小:384.50KB
浙江工业大学单片机第五次实验.docx
《浙江工业大学单片机第五次实验.docx》由会员分享,可在线阅读,更多相关《浙江工业大学单片机第五次实验.docx(64页珍藏版)》请在冰豆网上搜索。
Cortex-M4原理与实践实验报告
姓名
学号
指导老师
专业班级
学院信息工程学院
提交日期2017年12月2日
实验八:
三轴加速度传感器实验
一、实验目的
1.了解I2C总线的特点和功能;
2.了解加速度传感器的原理;
3.学会使用I2C总线对ADXL345芯片进行操作.
二、实验过程(包括流程图)
1.加速度传感器简介
加速度传感器的基本结构通常是质量—弹簧—阻尼二阶惯性系统。
由质量块m、弹簧k和阻尼器C所组成的惯性型二阶系统。
质量块通过弹簧和阻尼器与传感器基座相连接。
传感器基座与被测运动体相固连,因而随运动体一起相对于运动体之外惯性空间的某一参考点作相对运动。
由于质量块不与传感器基座相固连,因而在惯性作用下将于基座之间产生相对位移。
质量块感受加速度并产生与加速度成比例的惯性力,从而使弹簧产生与质量块相对位移相等的伸缩变性,弹簧变形又产生与变形量成比例的反作用力。
当惯性力与弹簧反作用力相平衡时,质量块相对于基座的位移与加速度成正比例,故可通过该位移或惯性力来测量加速度。
加速度器有很多类型:
位移式加速度传感器,应变式加速度传感器,由陀螺仪(角速度传感器)的改进的角加速度计等。
按照原理可以分为变磁阻式、变电容式、霍尔式等等。
2.加速度传感器资源及特性
我们的实验板中采用三轴数字加速度计ADXL345,ADXL345是ADI公司于2008年推出的采用MEMS技术具有SPI和数字输出功能的三轴加速度计,具有小巧轻薄、超低功耗、可变量程、高分辨率等特点:
它只有2mm×5mm×1mm的外形尺寸,面积大小相当于小拇指指甲盖的1/3;在典型电压。
电压VS=2.5V时功耗电流约为25~130μA,比先期采用模拟输出的产品ADXL330功耗典型值低了约70~175μA;最大量程可达±16g,另可选择±2、±4、±8g量程,可采用固定的4mg/LSB分辨率模式,该分辨率可测得0.25°的倾角变化。
ADXL345提供一些特殊的运动侦测功能,可侦测出物体是否处于运动状态,并能敏感出某一轴加速度是否超过了用户自定义门限,可侦测物体是否正在跌落。
此外,还集成了一个32级FIFO缓存器,用来缓存数据以减轻处理器的负担。
ADXL345可在倾斜敏感应用中测量静态重力加速度,也可在运动甚至振动环境中测量动态加速度,非常适合于移动设备应用,可望在手机、游戏和定位设备、微小型导航设备、硬盘保护、运动健身器材、数码照相机等产品中得到广泛应用。
3.ADXL345引脚功能描述
4.ADXL345的寄存器
5.实验流程图
图1实验流程图
三、实验代码、注释(最好每条注释)及现象
#include
#include
#include"inc/hw_memmap.h"
#include"inc/hw_types.h"
#include"driverlib/pin_map.h"
#include"driverlib/sysctl.h"
#include"driverlib/gpio.h"
#include"utils/uartstdio.h"
uint32_tui32SysClock;
#define_NOP()_nop()
#defineSLAVE_ADDRESS_W0x3A//写ADXL345L时的从机地址
#defineSLAVE_ADDRESS_R0x3B//读ADXL345L时的从机地址
//UART初始化
void
InitConsole(void)
{//由于UART0使用PA0,PA1两个引脚,因此需要使能GPIOA模块
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);
//因为有引脚复用,所以要对PA0和PA1两个引脚的功能进行选择,这里将它们选择为执行UART0模块的功能
GPIOPinConfigure(GPIO_PA0_U0RX);
GPIOPinConfigure(GPIO_PA1_U0TX);
//对于PA0和PA1两个引脚,在将它们作为UART功能使用之前,需要对它们做一些有关UART的配置
GPIOPinTypeUART(GPIO_PORTA_BASE,GPIO_PIN_0|GPIO_PIN_1);
UARTStdioConfig(0,115200,ui32SysClock);//波特率设为115200
}
//延时5个指令周期
voidDelay5us()
{
_NOP();_NOP();_NOP();_NOP();_NOP();
}
#defineNUM0
//IIC接受数据临时缓冲区
charI2C_RECV_DATA[]=
{
0x00,
0x00,
0x00,
0x00,
0x00,
0x00
};
voidI2C_Set_sda_high(void) 拉高SDA信号
{
GPIOPinWrite(GPIO_PORTE_BASE,GPIO_PIN_4,GPIO_PIN_4);//拉高PE4
_NOP();
_NOP();
return;
}
voidI2C_Set_sda_low(void)/********拉低SDA信号*******/
{
GPIOPinWrite(GPIO_PORTE_BASE,GPIO_PIN_4,0X00000000);//拉低PE4
_NOP();
_NOP();
return;
}
voidI2C_Set_scl_high(void)/***********拉高SCL信号************/
{
GPIOPinWrite(GPIO_PORTB_BASE,GPIO_PIN_5,GPIO_PIN_5);//拉高PB5
_NOP();
_NOP();
return;
}
voidI2C_Set_scl_low(void)/************拉低SCL信号***********/
{
GPIOPinWrite(GPIO_PORTB_BASE,GPIO_PIN_5,0X00000000);//拉低PB5
_NOP();
_NOP();
return;
}
voidI2C_STOP(void)/*********IIC信号结束信号函数**********/
{
inti;
GPIOPinTypeGPIOOutput(GPIO_PORTE_BASE,GPIO_PIN_4);//配置PE4为输出口
I2C_Set_sda_low();
for(i=NUM;i>0;i--);
I2C_Set_scl_low();
for(i=NUM;i>0;i--);
I2C_Set_scl_high();
for(i=NUM;i>0;i--);
I2C_Set_sda_high();
for(i=NUM+1;i>0;i--);
return;
}
voidI2C_Initial(void)/*********IC信号初始化*********/
{
I2C_Set_scl_low();
I2C_STOP();
return;
}
voidI2C_START(void)/**********IIC信号起始信号函数************/
{
inti;
GPIOPinTypeGPIOOutput(GPIO_PORTE_BASE,GPIO_PIN_4);//配置PE4为输出口
I2C_Set_sda_high();
for(i=NUM;i>0;i--);
I2C_Set_scl_high();
for(i=NUM;i>0;i--);
I2C_Set_sda_low();
for(i=NUM;i>0;i--);
I2C_Set_scl_low();
return;
}
intI2C_GetACK(void)/*********IIC获取应答函数**********/
{
intj;
GPIOPinTypeGPIOOutput(GPIO_PORTE_BASE,GPIO_PIN_4);//配置PE4为输出口
_NOP();
_NOP();
I2C_Set_scl_low();
for(j=NUM;j>0;j--);
I2C_Set_scl_high();
for(j=NUM;j>0;j--);
I2C_Set_sda_low();
for(j=NUM;j>0;j--);
I2C_Set_scl_low();
return1;
}
voidI2C_SetNAk(void)/********IIC设置应答函数********/
{
GPIOPinTypeGPIOOutput(GPIO_PORTE_BASE,GPIO_PIN_4);//配置PE4为输出口
I2C_Set_scl_low();
I2C_Set_sda_high();
I2C_Set_scl_high();
I2C_Set_scl_low();
return;
}
voidI2C_TxByte(unsignedcharnValue)/********IIC发送字节函数***********/
{
GPIOPinTypeGPIOOutput(GPIO_PORTE_BASE,GPIO_PIN_4);//配置PE4为输出口
inti;
intj;
for(i=0;i<8;i++)
{
if(nValue&0x80)//逐位判断,1拉高SDA,0拉低SDA
I2C_Set_sda_high();
else
I2C_Set_sda_low();
for(j=NUM;j>0;j--);
I2C_Set_scl_high();
nValue<<=1;//左移1位
for(j=NUM;j>0;j--);
I2C_Set_scl_low();
}
return;
}
unsignedcharI2C_RxByte(void)/***********IC接收字节函数**********/
{
GPIOPinTypeGPIOInput(GPIO_PORTE_BASE,GPIO_PIN_4);//配置PE4
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 浙江工业大学 单片机 第五 实验
![提示](https://static.bdocx.com/images/bang_tan.gif)