三轴加速度传感器设计Word文件下载.docx
- 文档编号:7795212
- 上传时间:2023-05-09
- 格式:DOCX
- 页数:27
- 大小:811.43KB
三轴加速度传感器设计Word文件下载.docx
《三轴加速度传感器设计Word文件下载.docx》由会员分享,可在线阅读,更多相关《三轴加速度传感器设计Word文件下载.docx(27页珍藏版)》请在冰点文库上搜索。
附录1原理图·
附录2PCB版图·
9
附录3C语言代码·
10
1、课程设计目的
综合应用模电、数电、微机原理、单片机原理、传感器原理及应用和专业知识,通过理论与实践相结合,掌握所学知识的综合应用方法,培养和提高解决本专业实际工程问题的能力。
2、课程设计内容和要求
2、1设计要求:
1.文献检索和综述;
2.掌握三轴加速度传感器的工作原理;
3.画出传感器装配结构图;
用protel绘制原理图;
4.所写说明书格式规范,内容完整;
5.参加答辩。
2.2、设计内容:
1.设计传感器整体结构;
4.以ADXL345三轴加速度计为模型,设计测量电路,给出电路元件参数;
5.基于单片机的采集与显示电路方案设计;
6.用ADXL345搭建测试系统,仿真实验处理结果。
3、设计方案及实现情况
3.1、设计思路
根据题目要求,首先要对传感器整体结构进行设计,以满足ADXL345三轴加速度计运行的环境;
其次,选择合适的通信方式使单片机与传感器能正常通信传输数据;
最后,对单片机外围结构进行设计,使单片机能正常工作,编写合适的C语言程序,使传感器传输的数据能够在外围器件上显示出来。
3.2、工作原理及框图
(1)工作原理
ADXL345三轴加速度计能够将三个方向的加速度g储存在其内部寄存其中,所以,通过适当控制指令以及与单片机
通信,就可将其传输到单片机中,然后对其进行编译。
显示模块这里使用的是LCD1602,编译后的数据传送到与LCD1602相连的I/O口,通过读写指令就可显示出数据。
每当ADXL345三轴加速度计记录数据发生变化时,就更新LCD1602中显示的数据,这样就达到了基于单片机的采集与显示电路的设计。
(2)系统框图
图1系统框图
3.3、主要电路模块的使用
(1)ADXL345电源模块
由于ADXL345使用的是3.3V供电电源,所以要对5V输入电源就行转化,这里使用的是RT9161电源芯片,比1117更低的压降,更快的负载相应速度,非常适合高噪声电源环境。
如图2,当输入电压为5V时,输出为3.3V,电路中所接的电容起滤波的作用。
图2RT9161电源模块
(2)ADXL345加速度计模块
ADXL345是一款小而薄的超低功耗3轴加速度计,分辨率高(13)位,测量范围达±
16g。
数字输出数据为16位二进制补码格式,可通过SPI或
数字接口访问。
它可以在倾斜测量应用中测量静态重力加速度,还可以测量运动或冲击导致的动态加速度。
其高分辨率,能够测量不到1.0°
的倾斜角变化。
图3ADXL345引脚图
表1引脚功能表
在本实验中,如图4,使用的是SPI通信,采用3线连接,片选接地,SDIO和SCLK与单片机相连进行通信。
ADXL345
图4SPI通信接口
表2存储数据所在寄存器地址
如图5为本实验中ADXL345加速度计的原理图示意。
图5ADXL345原理图
(3)单片机模块
在本实验中,使用到单片机的功能很少,因此,单片机工作在最小模块下。
图6晶振模块图7复位模块
图8单片机引脚连接图
(4)LCD1602显示模块
点阵图形式液晶由M×
N个显示单元组成,假设LCD显示屏有64行,每行有128列,每8列对应1字节的8位,即每行由16字节,共16×
8=128个点组成,屏上64×
16个显示单元与显示RAM区1024字节相对应,每一字节的内容和显示屏上相应位置的亮暗对应。
例如屏的第一行的亮暗由RAM区的000H——00FH的16字节的内容决定,当(000H)=FFH时,则屏幕的左上角显示一条短亮线,长度为8个点;
当(3FFH)=FFH时,则屏幕的右下角显示一条短亮线;
当(000H)=FFH,(001H)=00H,(002H)=00H,……(00EH)=00H,(00FH)=00H时,则在屏幕的顶部显示一条由8段亮线和8条暗线组成的虚线。
这就是LCD显示的基本原理。
表3LCD1602管脚功能
在此处,LCD1602的8个数据引脚需要上拉电阻来限制电流,同时3引脚可以接一个电位器用来调节显示屏背光亮度。
图9LCD1602原理图
3.4、实物结果图
由于在众多仿真软件中,没有ADXL345加速度计的模型,同时为了体现出ADXL345与MCU通信的过程,所以并不能用串行通信软件代替,所以此处通过,实物演示来例证。
图10实物结果图
4、课程设计总结
经过为期三周的课程设计,我对C语言有了更加深刻的认识。
在编写程序的时候,我才发现能看懂程序和能自己写程序是两个完全不同的概念,自己一开始写程序时,即便是一个很简单的功能模块,在编译时也可能产生很多错误,在不断的改错过程中,自己对C语言的语法结构有了深刻的理解,对编译过程中常见的错误也有了全面的认识。
通过这三周的课程设计,我在熟悉了EDA-V实验箱的操作同时,也学到了很多在学习课本知识时所体会不到的东西。
最初拿到课程设计任务书时,感觉每个模块都在做实验时用过,心想只要把各个模块组合到一起就可以实现系统功能了,但结果其实不然;
同时,通过实际动手连接元件,更加加深了我对ADXL345的深刻认识。
完成此次设计后,我不仅能对PROTEUS仿真软件熟练操作,能达到学以致用,同时还掌握了ADXL345和LCD1602的工作原理。
经过这一过程,我发现平常的学习在注重理论知识的掌握同时,要加强实验环节,只有通过不断地实践,我们才能把知识掌握的更牢固,理解的更透彻。
5、参考文献
[1]CreedHuddleston著,张鼎译.智能传感器设计.人民邮电出版社,2009
[2]松井邦彦著.传感器实用电路设计与制作.北京:
科学出版社,2005
[3]范茂军主编.互联网与传感器技术.北京:
机械工业出版社,2012
[4]刘爱华、满宝元主编.传感器原理与应用技术.北京:
人民邮电出版社,2010
[5]张宪主编.传感器与测控电路.北京:
化学工业出版社,2011
附录
1、原理图
附图1ADXL345与单片机原理图
2、PCB版图
附图2PCB版图
3、C语言代码
#include<
REG51.H>
math.h>
//Keillibrary
stdio.h>
INTRINS.H>
#defineucharunsignedchar
#defineuintunsignedint
#defineDataPortP0//LCD1602数据端口
sbitSCL=P1^0;
//IIC时钟引脚定义
sbitSDA=P1^1;
//IIC数据引脚定义
sbitLCM_RS=P2^0;
//LCD1602命令端口
sbitLCM_RW=P2^1;
sbitLCM_EN=P2^2;
//LCD1602命令端口
#defineSlaveAddress0xA6//定义器件在IIC总线中的从地址,根据ALTADDRESS地址引脚不同修改
//ALTADDRESS引脚接地时地址为0xA6,接电源时地址为0x3A
typedefunsignedcharBYTE;
typedefunsignedshortWORD;
BYTEBUF[8];
//接收数据缓存区
ucharge,shi,bai,qian,wan;
//显示变量
intdis_data;
//变量
voiddelay(unsignedintk);
voidInitLcd();
//初始化lcd1602
voidInit_ADXL345(void);
//初始化ADXL345
voidWriteDataLCM(uchardataW);
voidWriteCommandLCM(ucharCMD,ucharAttribc);
voidDisplayOneChar(ucharX,ucharY,ucharDData);
voidconversion(uinttemp_data);
voidSingle_Write_ADXL345(ucharREG_Address,ucharREG_data);
//单个写入数据
ucharSingle_Read_ADXL345(ucharREG_Address);
//单个读取内部寄存器数据
voidMultiple_Read_ADXL345();
//连续的读取内部寄存器数据
//------------------------------------
voidDelay5us();
voidDelay5ms();
voidADXL345_Start();
voidADXL345_Stop();
voidADXL345_SendACK(bitack);
bitADXL345_RecvACK();
voidADXL345_SendByte(BYTEdat);
BYTEADXL345_RecvByte();
voidADXL345_ReadPage();
voidADXL345_WritePage();
//-----------------------------------
//*********************************************************
voidconversion(uinttemp_data)
{
wan=temp_data/10000+0x30;
temp_data=temp_data%10000;
//取余运算
qian=temp_data/1000+0x30;
temp_data=temp_data%1000;
bai=temp_data/100+0x30;
temp_data=temp_data%100;
shi=temp_data/10+0x30;
temp_data=temp_data%10;
ge=temp_data+0x30;
}
/*******************************/
voiddelay(unsignedintk)
{
unsignedinti,j;
for(i=0;
i<
k;
i++)
{
for(j=0;
j<
121;
j++)
{;
}}
voidWaitForEnable(void)
{
DataPort=0xff;
LCM_RS=0;
LCM_RW=1;
_nop_();
LCM_EN=1;
while(DataPort&
0x80);
LCM_EN=0;
}
voidWriteCommandLCM(ucharCMD,ucharAttribc)
if(Attribc)WaitForEnable();
LCM_RW=0;
DataPort=CMD;
voidWriteDataLCM(uchardataW)
WaitForEnable();
LCM_RS=1;
DataPort=dataW;
_
}
/***********************************/
voidInitLcd()
WriteCommandLCM(0x38,1);
WriteCommandLCM(0x08,1);
WriteCommandLCM(0x01,1);
WriteCommandLCM(0x06,1);
WriteCommandLCM(0x0c,1);
}
voidDisplayOneChar(ucharX,ucharY,ucharDData)
Y&
=1;
X&
=15;
if(Y)X|=0x40;
X|=0x80;
WriteCommandLCM(X,0);
WriteDataLCM(DData);
}
/**************************************
延时5微秒
**************************************/
voidDelay5us()
{
_nop_();
延时5毫秒
voidDelay5ms()
WORDn=560;
while(n--);
起始信号
voidADXL345_Start()
SDA=1;
//拉高数据线
SCL=1;
//拉高时钟线
Delay5us();
//延时
SDA=0;
//产生下降沿
SCL=0;
//拉低时钟线
停止信号
voidADXL345_Stop()
//拉低数据线
//产生上升沿
发送应答信号
入口参数:
ack(0:
ACK1:
NAK)
voidADXL345_SendACK(bitack)
SDA=ack;
//写应答信号
接收应答信号
bitADXL345_RecvACK()
CY=SDA;
//读应答信号
returnCY;
向IIC总线发送一个字节数据
voidADXL345_SendByte(BYTEdat)
BYTEi;
for(i=0;
i<
8;
i++)//8位计数器
{
dat<
<
=1;
//移出数据的最高位
SDA=CY;
//送数据口
}
ADXL345_RecvACK();
从IIC总线接收一个字节数据
BYTEADXL345_RecvByte()
BYTEdat=0;
//使能内部上拉,准备读取数据,
dat|=SDA;
//读数据
returndat;
//******单字节写入*******************************************
voidSingle_Write_ADXL345(ucharREG_Address,ucharREG_data)
ADXL345_Start();
//起始信号
ADXL345_SendByte(SlaveAddress);
//发送设备地址+写信号
ADXL345_SendByte(REG_Address);
//内部寄存器地址,
ADXL345_SendByte(REG_data);
//内部寄存器数据,ADXL345_Stop();
//发送停止信号
//********单字节读取*****************************************
ucharSingle_Read_ADXL345(ucharREG_Address)
{ucharREG_data;
//发送存储单元地址,从0开始
ADXL345_SendByte(SlaveAddress+1);
//发送设备地址+读信号
REG_data=ADXL345_RecvByte();
//读出寄存器数据
ADXL345_SendACK
(1);
ADXL345_Stop();
//停止信号
returnREG_data;
//
//连续读出ADXL345内部加速度数据,地址范围0x32~0x37
voidMultiple
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 加速度 传感器 设计
![提示](https://static.bingdoc.com/images/bang_tan.gif)