三轴位置传感器模块设计与实现毕业设计

上传人:1666****666 文档编号:37228647 上传时间:2021-11-02 格式:DOC 页数:52 大小:2.95MB
收藏 版权申诉 举报 下载
三轴位置传感器模块设计与实现毕业设计_第1页
第1页 / 共52页
三轴位置传感器模块设计与实现毕业设计_第2页
第2页 / 共52页
三轴位置传感器模块设计与实现毕业设计_第3页
第3页 / 共52页
资源描述:

《三轴位置传感器模块设计与实现毕业设计》由会员分享,可在线阅读,更多相关《三轴位置传感器模块设计与实现毕业设计(52页珍藏版)》请在装配图网上搜索。

1、三轴位置传感器模块设计与实现三轴位置传感器模块设计与实现三轴位置传感器模块设计与实现目录目录摘要摘要 .IABSTRACT.II引言引言.11 绪论绪论.21.1 传感器技术.21.1.1 什么是传感器.21.1.2 传感器的分类.31.1.3 传感器的基本特性.31.2 三轴加速度传感器.41.2.1 加速度传感器的原理.41.2.2 加速度传感器的应用.52 三轴位置传感器模块设计方案三轴位置传感器模块设计方案.62.1 理论基础.62.1.1 坐标分析.62.1.2 静止到运动的判断.72.1.3 位置的计算.72.2 系统框架.92.2 本章小结.103 三轴位置传感器的硬件设计三轴位

2、置传感器的硬件设计.113.1 系统的硬件架构.113.2 硬件设计.113.2.1 8051 单片机模块.113.2.2 三轴加速度传感器.133.2.3 单片机外围电路.143.3 电路设计.153.3.1 I2C总线技术.153.3.2 原理图设计.173.4 本章小结.184 三轴位置传感器的软件设计三轴位置传感器的软件设计.194.1 单片机常用操作.204.1.1 系统的复位及初始化.204.1.2 计数器/定时器.204.1.3 中断.224.2 程序设计.23三轴位置传感器模块设计与实现4.2.1 加速度采集.234.2.2 位置计算.244.2.3 显示模块.264.3 实验

3、结果.274.4 本章小结.455 结论与展望结论与展望.46致致 谢谢.47参考文献参考文献.48三轴位置传感器模块设计与实现I摘要摘要在电子技术高度发达的今天,加速度传感器扮演的角色也越来越重要。加速度传感器在航天领域,汽车领域,以及人们的日常生活中都有着广泛的应用。三轴加速度传感器是加速度传感器的一种,它可以测量三个坐标轴的加速度,从而准确反映物体的运动状态,确定物体的空间位置。本课题主要的内容是用三轴加速度传感器结合单片机设计出基于人体位置变化的三轴位置传感器模块,并实现该模块。传感器使用的是 ADI 公司的 ADXL345,它小而薄、超低功耗,并且具有多个功能。使用 8051 单片机

4、作为主控芯片,能够比较容易的实现该模块,完成预期目标。本课题的重点,一方面是对空间上各轴的加速度准确的采集,其次是设计出合理的算法,根据采集到的加速度信息计算出人体运动状态下位置的变化。根据本文提出的方案,设计并实现的模块,能够实时的采集到加速度信息,并且准确计算出人体距离初始状态的位置变化,正确的显示出来。关键词:三轴加速度传感器;ADXL345;8051 单片机三轴位置传感器模块设计与实现IIABSTRACTIn the electronic technology is highly developed today, the acceleration sensor is playing a

5、n increasingly important role. Automobile acceleration sensor in the field of aerospace, areas, and peoples daily life have a wide range of applications.Three axis acceleration transducer is a kind of acceleration sensor, it can measure three coordinate axis acceleration, so as to accurately reflect

6、 the state of motion object, determine the position of an object in space.The main content is to use three axis accelerometer with MCU design three shaft position sensor module based on the change of body position, and the realization of the module. The sensor is used ADI companys ADXL345, which is

7、small and thin, and low power consumption, and has a plurality of functions. Using 8051 microcontroller as the main control chip, can the module easier, achieved the expected target.The focus of this topic, on the one hand on the space axis acceleration accurate acquisition, the second is to design

8、a reasonable algorithm, calculate the change of human body motion position according to the acceleration information acquisition to.According to the scheme proposed in this paper, the design and implementation of the module, real-time acquisition to the acceleration information, and accurately calcu

9、late the position changes of the human body from the initial state, displayed correctly.Keywords:Three axis acceleration sensor;ADXL345; 8051 single chip microcomputer 三轴位置传感器模块设计与实现 1引言引言当今时代由于电子技术,计算机技术的快速发展,传感器在日常生活中的应用也越来越多。本课题所使用的三轴加速度传感器具有体积小,重量轻的特点,可以测量空间加速度,能够完全准确反映物体的运动性质,在控制,仪器仪表等领域,以及其他的电

10、子设备,例如智能手机,笔记本电脑,数码相机等方面都有着最广泛的应用。本课题设计的三轴位置传感器主要是对人体位置变化的测量,要完成该传感器模块,首先得掌握 ADXL345 传感器以及 8051 单片机的工作原理,它们的性能。其次用 protel 软件设计出整个模块的原理图,并制作出相应的 PCB 板。最后调试电路,根据电路的连接,在单片机上使用 Keil Software 公司开发的 Keil uvision 软件,编写程序采集出各轴的加速度,并设计出合理的算法,计算出人体在空间上的位置变化 。本论文详细论述了基于人体位置状态变化的三轴加速度传感器模块的设计。第一章介绍了传感器技术,并对三轴加速

11、度传感器的性能予以分析,以及传感器今后的发展。第二章根据实际需求设计出解决方案,在实现解决方案的过程之中会碰到哪些关键的技术点。第三章根据第二章提出的解决方案,对三轴位置传感器进行了详细的硬件设计,包括电路原理图的绘制,根据需求选择元器件,在原理图的基础上对实际电路连接、调试。第四章是根据实际的电路连接情况,对本课题的传感器模块软件设计,使用 I2C 总线技术读取加速度信息,并根据实际情况对加速度信息予以校正,最后设计出适当的算法,计算出人体运动状态下位置的变化。第五章是对整个设计方案的优点和不足之处予以总结,并对课题的实际意义予以展望。三轴位置传感器模块设计与实现 21 绪论绪论1.1 传感

12、器技术传感器技术1.1.1 什么是传感器什么是传感器传感器的英文翻译为 Transducer 和 Sensor 。Transduce 的定义为它是一种装置,可以将能量从一个域变换到另一个域。而 Sensor 定义为这种装置用来感知被检测系统的参数,他能把特定的被检测信息按一定规律转换成某种便于处理、易于传输的信息。所以传感器可定义为:能感受或响应规定的被测量对象并按照一定规律转换成可用信号输出的器件或装置。传感器通常由直接响应被测量的敏感元件和产生可用信号输出的转换元件以及相应的电子线路组成,如图 1-1 所示。图 1-1 传感器的组成传感器技术设计多学科与技术,包括物理学科中的各个门类以及各

13、个学科门类。由于现代技术发展迅速,敏感元件与传感器产品的更新换代周期越来越短,使得一些新型传感器具有原理新颖、机理复杂、技术综合等鲜明的特点,因此,需要不断的更新生产技术,配备相关的生成设备,同时需要配备多方面的高技术人才协同攻关。传感器要求具有高的稳定性、高的可靠性、高的重复性、低的迟滞和快的响应,做到准确可靠、经久耐用,对于处于工业现场和自然环境下的传感器,还要求具有良好的环境适应能力,能够耐高温,耐低温,抗干扰,耐腐蚀,安全防爆,便于安装,调试和维修。传感器的应用领域十分广泛。无论是农业、工业和交通运输业,还有能源、气象、环保和建材业;无论是高新技术领域,还是传统产业;无论是大型成套设备

14、,还是日常生活用品和家用电器,都需要采用大量的敏感元件和传感器。例如,一座大型钢铁厂需要 20 000 台套传感器和检测仪表;大型石油化工厂需要 6 000 台套传感器和检测仪表;大型发电机组需要 3 000 台套传感器和检测仪表等。相对于信息技术领域的其他技术(特别是信息处理技术) ,传感器技术发展缓慢,三轴位置传感器模块设计与实现 3;但一旦成熟,其生命力强,不会轻易的退出竞争舞台,可长期应用,维持发展的能非常强。像应变式传感器技术已有 70 多年的历史,硅压阻式传感器也有 40 多年的历史目前仍然在传感器技术领域占有重要的地位。1.1.2 传感器的分类传感器的分类传感器种类繁多,功能各异

15、。 由于同一被测量可用不同转换原理实现探测,利用同一种物理法则、化学反应或生物效应可设计制作出检测不同被测量的传感器,而功能大同小异的同一类传感器可用于不同的技术领域,故传感器有不同的分类法。图 1-2 对传感器进行了分类.图 1-2 传感器的分类1.1.3 传感器的基本特性传感器的基本特性传感器的基本特性可以分为静态特性和动态特性。三轴位置传感器模块设计与实现 4传感器静态特性传感器静态特性传感器静态特性是输入信号不随时间变化时,描述传感器的输入量与输出量之间关系的函数,而静态特性的主要参数有:线性度,灵敏度,分辨率,迟滞,重复性,漂移。1、线性度:传感器的输入量与输出量之间的实际关系曲线偏

16、离直线的程度,又称为非线性误差。2、灵敏度:传感器在稳态信号作用下输出量变化对输入量变化的比值。3、分辨率:分辨率是指传感器能够感知或检测到的最小输入信号增量。分辨率可以用绝对值或与满量程的百分比来表示。4、迟滞:在相同测量条件下,对应于同一大小的输入信号,传感器正、反行程的输出信号大小不相等的现象5、重复性:传感器在输入量按同一方向作全量程多次测试时所得输入输出特性曲线一致的程度。6、漂移:传感器在输入量不变的情况下,输出量随时间变化的现象。传感器动态特性传感器动态特性传感器动态特性是指传感器对动态激励(输入)的响应(输出)特性,即其输出对随时间变化的输入量的响应特性。研究动态特性可以从时域

17、和频域两个方面采用瞬态响应法和频率响应法来分析。经常采用的输入信号为单位阶跃输入量和正弦输入量。1.2 三轴加速度传感器三轴加速度传感器加速度传感是基于加速度的基本原理去实现工作的,加速度是个空间矢量,一方面,要准确了解物体的运动状态,必须得到三个坐标轴上的分量;另一方面,在预先不知道物体运动方向的场合下,只有应用三轴加速度传感器来测量加速度信号。1.2.1 加速度传感器的原理加速度传感器的原理大多数加速度传感器是根据压电效应的原理来工作完成的。所谓的压电效应就是对于不存在对称中心的异极晶体加在晶体上的外力除了使晶体发生形变以外,还将改变晶体的极化状态,在晶体内部建立电场,这种由于机械力作用使

18、介质发生极化的现象,加速度传感器就是利用了其内部的由于加速度造成的晶体变形这个特性,晶体变形就会产生电压,只要计算出产生电压和所施加的加速度之间的关系,就可三轴位置传感器模块设计与实现 5以将加速度转化成电压输出。而三轴加速度传感器是加速度传感器的一种,因此它也是基于这个原理设计的。1.2.2 加速度传感器的应用加速度传感器的应用加快度传感器可以应用于车辆运动姿态的测量,车辆在行驶中,由于路面的不平整,会产生跌宕,对驾驶的舒适度产生影响,而如果配备了三轴加速度传感器,那么它就可以采集出车辆行驶过程中的三个轴向的加速度值,计算出车与路面的倾角,并分析这三个加速度的形成原因,从而可以调整驾驶的位置

19、,使得驾驶的舒适性大大的提高。加快度传感器还可以应用于机械设备的振动检测,机械设备在工作时,会产生一定的振动,而这种振动对机械是无益的,它可能使得机械零部件的失效,甚至带来一定的安全隐患。如果安装了加速度传感器,那么在机械工作的时候,它就可以计算出振动的频率,以及幅值等参量,并且由系统予以统计,以至于可以早期查找出安全隐患。并且如果机械是有悬臂的,它根据测量出的加速度的值,可以计算出悬臂的偏角,以及所处的位置,有助于操作人员及时的修正。加速度传感器还可以应用于各种电子产品,比如现在越来越多的人使用智能手机,在阅读文章,玩游戏的时候,使用加速度传感器可以模拟出人体对手机位置的操作,从而方便了人们

20、的一些操作,使人们的日常生活更加的方便,更加的科学化,人性化。加速度传感器在人体方面的应用也越来越多,比如在人体跌倒方面的应用,人体跌倒时,加速度的值会有很大的变化,并且发生时间短,可以根据这些,检测出人体是否发生跌倒,特别对于老人的监护,这种应用显得尤为重要。还有计步器方面的应用,在人体运动时,采集出加速度的值,从而计算出走了多少路程,并且可以根据实际的需要计算出消耗的热量,这样对于经常锻炼的人群,显得更加人性化。三轴位置传感器模块设计与实现 62 三轴位置传感器模块设计方案三轴位置传感器模块设计方案2.1 理论基础理论基础因为我们所设计的三轴位置传感器模块主要应用于人体运动状态下的位置变换

21、,并且可以从 ADXL345 三轴加速度传感器中采集到三个轴的加速度信息,因此把加速度作为自变量,将人体的位置信息作为变量。很显然,加速度对时间的二次积分就是位移,从而再经过处理,就可以得到最终的位置信息。2.1.1 坐标分析坐标分析通常分析一个物体所处的位置状态,所用的是笛卡儿坐标系和球面坐标系,因为从 ADXL345 中采集到的加速度信息是基于笛卡尔坐标系的,也就是通常所说的直角坐标系,因此在本论文的研究是在直角坐标系中介绍的。如图 2-1,是常用的空间直角坐标系。图 2-1 空间直角坐标系三个坐标轴分别为 X 轴,Y 轴,Z 轴,如图 2-1 任意一点 P 可以表示为(x0,y0,z0)

22、 。假设 X,Y,Z 三个坐标轴的单位向量为: ,那么 P 点的向量ijk表示为: (2-1)000*rxiyjzk在人体运动时,传感器模块也跟着做出相应的运动,因此我们可以建立一个关于人体的空间直角坐标系,从而反映出模块的位置变化。令 X 轴方向为正向,Y 轴方向为侧向,Z 轴方向为垂直方向,如图 2-2 所示三轴位置传感器模块设计与实现 7图 2-2 人体坐标系2.1.2 静止到运动的判断静止到运动的判断为了能够准确的测量出人体位置状态的改变,因此当人体从静止状态变为运动状态时的判断很重要。并且对于加速度模块,即使静止的放在一个位置,它采集到的加速度信息还是有波动的,因此必须确定一个阈值,

23、当采集到的各轴加速度变化,小于这个阈值时,认为它是静止的,大于这个阈值时则认为它开始运动了。人体在静止状态下,加速度变化介于0.15g0.15g 之间,因此可以将 0.15 作为判断的一个阈值。假设加速度采样时间为 t,前一时刻和当前时刻的加速度值分别为 a_old 和a_new。则运动状态发生变化时有|a_newa_old|0.15,若满足该式,则进行加速度的二次累加计算出相应的位移,若不满足,则跳过累加。这样就确保了位移计算的准确性2.1.3 位置的计算位置的计算获得位置信息,是最终的目的,因此对位置的准确计算很重要。理论上计算位置根据以下过程。设 ,为 x,y,z 方向的单位向量ijk,

24、表示各坐标轴随着时间的变化时各轴的方向向( )xxee t( )yyee t( )zzee t量。 ,是采集到的三个加速度xayaza ,是各空间方向的加速度( )a x( )a y( )a z三轴位置传感器模块设计与实现 8 则空间加速度为: (2-2)( ( ), ( ), ( )aa x a y a z在上式中: (2-3)( )(*)*xxyyzza xaeaeaei (2-4)( )(*)*xxyyzza yaeaeaej (2-5)( )(*)*xxyyzza zaeaeaek 于是速度和位移分别为式(2-6)、(2-7) (2-6)( )( )v ta t dt (2-7)( )

25、( )s tv t dt实际采集到的加速度是离散的点,因此需要做数值积分,但是思路却是基于上边的方法。因为对向量的计算在具体的程序实现是比较困难的,所以本论文设计了一种比较容易实现的方法来求位移。以标准的空间坐标系为基准,在运动的过程中,通过加速度传感器采集到的加速度数据都会和标准的 x,y,z 轴有一定的夹角。因此可以先计算出夹角,然后各个坐标轴单独求加速度分量。设 为标准空间坐标系 x 轴与加速度模块 x 轴, 为标准空间坐标系 y 轴与加速度模块 y 轴, 为标准空间坐标系 z 轴负方向与加速度模块 z 轴夹角。如图 2-3图 2-3 倾斜角度图由数学知识可以计算出 , 的值为: )(t

26、an 221zyxaaa(2-8)三轴位置传感器模块设计与实现 9 (2-9)(tan221zxyaaa (2-10)(tan221zyxaaa从而只需要在采集的各轴加速度上乘以对应角度的余弦值就可以求出对应的标准空间坐标系下各轴的加速度,再进行数值积分,就能求出位置。2.2 系统框架系统框架由于本课题所设计的三轴位置传感器模块需要对数据进行采集,处理,并且显示出处理后的数据。因此可以分为以下几个子模块,主控模块,加速度采集模块,显示模块,电源。图 2-4 是系统的整体框架图 2-4 系统整体框架其中主控模块是 8051 单片机,负责对采集到的加速度信息进行分析处理,加速度采集模块为 ADXL

27、345 三轴加速度传感器,显示模块为 1602 液晶显示屏,对计算出的位置予以显示,电源负责给整个传感器模块供电。2.2 本章小结本章小结本章根据三轴位置传感器模块在对人体运动状态下的位置的变化测量需求,首先介绍了传统的空间直接坐标,建立了人体的坐标系。判断人体从静止状态到运动状态很重要,因为加速度计有个波动范围,因此需要有一个阈值能够判断出状态的主控模块主控模块显示模块显示模块加加 模模 速速 块块 度度 采采 集集 电电 源源三轴位置传感器模块设计与实现 10变化。接着分析了传统的位置计算方法,提出了改进后的位置计算方法,很明显传统的思路虽然简单,可实际应用时却要进行向量运算,而改进后的方

28、法只需要求出传感器各轴偏转的角度,就可以确定出标准空间坐标系上各轴的加速度值,从而只需要进行简单的数值积分就能得到位置信息。最后设计了三轴位置传感器的整体框架。在下面的章节,会做出更详细的设计。3 三轴位置传感器的硬件设计三轴位置传感器的硬件设计3.1 系统的硬件架构系统的硬件架构根据上一章系统框架的设计,具体实现的硬件构架如图 3-1 所示。该框架由四个子模块构成:8051 单片机微处理器模块,ADXL345 加速度传感器模块,1602 液晶显示模块,以及电平转换模块。三轴位置传感器模块设计与实现 11I2C 总线SDA 数据线SCL 时钟线 图 3-1 硬件构架如图 3-1,加速度传感器模

29、块和 8051 单片机之间采用 I2C 总线进行通信,因为ADXL345 采用的是 3.3V 供电,而单片机系统采用的是 5.5V 因此必须进行电平转换。这里使用 SN74LVC4245 芯片作为电平转换模块,加速度计采集到的信息是基于3.3V 的电信号,通过该模块,将其转换为基于 5.5 的电信号,再通过 I2C 总线送给单片机。同样,单片机发送指令时,通过 I2C 总线,将基于 5.5V 的电信号送给电平转换模块,该模块将其转换为基于 3.3V 的电信号,再送给 ADXL345 模块。只有这样才能够采集到正确的加速度信息。3.2 硬件设计硬件设计3.2.1 80518051 单片机模块单片

30、机模块单片机是整个系统的核心,实现了对各模块的控制,根据本课题所设计的传感器的基本要求,单片机低功耗是必须的,还有就是能够高速的处理数据,以满足实时性的要求。8031 单片机片内不带程序存储器 ROM,使用时用户需外接程序存储器和一片逻辑电路 373。8051 是一种 8 位元的单芯片单芯片微控制器,并且内部有 4K ROM。STC89C52单片机单片机1602液晶显示液晶显示SN74LVC4245电平转换电平转换ADXL345加速度传感器加速度传感器三轴位置传感器模块设计与实现 12本课题选用的是 STC89C52 单片机,是一种增强型 8051 单片机。对于传统的8051 单片机有 1 个

31、 8 为的 CPU,时钟电路可以提供 6 时钟机器周期和 12 时钟机器周期,内部有 4KB 的 ROM 来存储程序,最大可以扩展到 64KB,而且它的数据存储器为 128B,这样就方便了数据的存储,同 ROM 一样,它也可以扩展到64KB。8051 单片机提供了两个 16 位的定时器有时候也叫计数器,它们可以在中断以及定时计数时使用。总线的扩展电路为 64KB。8051 单片机的功耗极低,并且拥有很高的性能,是一个 8 位的微控制。图 3-2 给出了 STC89C52 的芯片管脚图图 3-2 STC89C52 管脚图该芯片有以下特点:1工作电压范围从 5.5V 到 3.3V 变化,这样就方便

32、了外设电路的集成,而不需要进行电平的转换2它从 4KB 的程序存储器 ROM 扩展到了 8KB,从而可以编写更多代码的程序,以满足更多的需要。3在芯片上集成的 RAM 为 512B,而传统的只有 128B。4它具有 EEPROM 功能,这样方便了数据的存储,不受系统掉电的影像。5外部中断有 4 路,都是下降沿中断方式或者使用低电平触发电路6可以使用异步串口模式 UART,对于程序的调试帮助很大很明显可以看出 STC89C52 芯片,可以充分的完成本课题的需求,低功耗,高三轴位置传感器模块设计与实现 13速处理数据,电路简单,操作方便。3.2.2 三轴加速度传感器三轴加速度传感器在三轴加速度传感

33、器的选择上,选用的是 ADI 公司的 ADXL345 加速度传感,ADXL345 的体积小,尺寸大小为 3 mm 5 mm 1 mm,拥有极低的功耗,并且拥有高度 13 位的分辨率,最高的测量范围可以从-16g 到达+16g,数字输出的格式为16 位的二进制补码,通信方式可以采用 SPI 或 I2C 串行通信,这样就方便了与单片机外围电路的设计。ADXL345 在移动设备的应用上十分的广泛。它可以测量出人体位置变化时的静态重力加速度和动态加速度。因为它很灵敏,因此可以精确的测量出不到 1.0的角度变化。ADXL345 传感器在三个轴向上加速的测量是十分强大,它提供了多个测量范围,有-2g+2g

34、,-4 g+4g,-8g+8 g 的测量范围,并且最大可以达到-16g+16g 的测量。ADXL345 的功能框图如图 3-3:图 3-3 ADXL345 功能框图从 ADXL345 的功能框图可以看出,它提供了两个中断,并且它的中断很灵活,使用时可以映射到任意的一个中断引脚,方便了我们了操作,并且它的内部已经集成了模数转换,因此我们采集到的直接就是 16 位的数字量。为了后期程序的编写,这里给出了 ADXL345 的寄存器映射,如图 3-4 所示。三轴位置传感器模块设计与实现 14图 3-4 寄存器映射3.2.3 单片机外围电路单片机外围电路1.1602 液晶显示屏液晶显示屏液晶显示器也称之

35、为 LCD。这里我们选用的是字符型液晶显示器 LCD1602,它可以用于显示字母、数字以及符号。图 3-4 为 1602 液晶显示屏的电路图。图 3-4 1602 液晶显示屏电路图从图 3-4 可以看出,1602 采用的是 16 脚带背光的标准脚。RW 为读写操作脚,当该脚为低电平的时候进行写,高时候进行读操作。RS 为寄存器的选择操作脚,如三轴位置传感器模块设计与实现 15果是低电平时它用的是指令寄存器,高电平的时候用的是数据寄存器。E 为使能端,由高电平变为低电平时候,液晶屏执行显示命令,D0D7 为双向数据线,进行数据的传输。2.电平转换电平转换在三轴位置传感器模块的设计中,ADIXL3

36、45 由 3.3V 的电压进行供电,但是单片机却是以 5v 电压运行供电,所以需要加入电平转换芯片,在这里我们选用的是SN74LVC4245,SN74LVC4245 是一种 3.3v 电平和 5v 电平转换芯片,它有三态输出,是一种 8bit 总线收发器。其引脚图如图 3-5 所示。图 3-5 SN74LVC4245 引脚图3.3 电路设计电路设计3.3.1 I2C 总线技术总线技术I2C 总线是由 PHLIPS 公司开发的一种简单的双向的二进制串行总线,I2C 总线由数据线 SDA 和时钟线 SCL 构成,可以发送和接收数据。在 CPU 和被控制的模块之间以及模块与模块之间进行双向的传输,最

37、大传输速度可以达到 100Kbps。在被控制电路均并联在这条总线上,如图 3-6 所示。图 3-6 I2C 串行总线连接在 I2C 串行总线中,要求每个模块都有唯一确定的地址,在数据的传输中,I2C三轴位置传感器模块设计与实现 16总线上并接的每一个模块既是主控器又是发送设备,CPU 发送的信息分为地址和控制信息,其中地址信息用来选择被控制的器件电路,确定控制电路的种类。控制信息决定该模块的需要调整的信息量。I2C 总线在接正电源时需要使用上拉电阻。当 I2C 总线不工作时,数据线和时钟线均被拉高,同时如果总线上的电路器件的输出为低电平,都会使 I2C 总线的信号变为低电平,也就是 SDA 及

38、 SCL 在器件上表现为线与关系,如图 3-7 所示。图 3-7 I2C 总线在传送数据之前,主控器先发送起始信号,通知接收器件做好接收的准备,在通信结束时,主控器发送停止信息,通知接收器件停止接收。起始信号和停止信号是启动和关闭 I2C 总线器件的关键信号,如图 3-8 所示。图 3-8起始信号:SCL 为高电平时,SDA 由高电平向低电平的跳变,开始传送数据。停止信号:SCL 为低电平时,SDA 由高电平向低电平的跳变,结束传送数据。应答信号:接收数据的接收器件在收到 8 位的数据之后,向发送数据的主控器件发出特定的低电平脉冲,表示已经接收到了数据。如果未收到应答信号,则判断为是受控器件发

39、生了故障三轴位置传感器模块设计与实现 17在时钟信号 SCL 为高期间,数据线 SDA 上的数据必须处于稳定状态,只有在SCL 上的信号为低期间,SDA 上的电平状态才允许变化。并且 SDA 先上传送的数据必须为 8 的整数倍,每传送一个字节,必须有一个确认信号。如图 3-9 所示。图 3-93.3.2 原理图设计原理图设计前面主要介绍了各子模块的作用以及工作原理,本节中主要给出了该模块的原理图,如图 3-10,图 3-11 是对原理图中引脚的补充说明。三轴位置传感器模块设计与实现 18图 3-10 电路原理图图 3-10 原理图说明3.4 本章小结本章小结本章先介绍了三轴位置传感器的硬件构架

40、,然后把整个构架拆分为多个模块,详细介绍了各模块的器件的选择,以及器件的特性。因为这里设计的电路是基于I2C 串行总线通信的,因此本章还介绍了 I2C 总线的工作原理,最后设计出了电路的原理图。即使电路搭建了起来,它也是不能够工作的,还必须进行详细的软件设计,下一章将详细分析让电路工作起来,并采集加速度信息,计算位置状态信息的软件设计。三轴位置传感器模块设计与实现 194 三轴位置传感器的软件设计三轴位置传感器的软件设计 本课题是要采集出空间坐标系下各轴的加速度信息,并计算出人体的位置变化,并显示在液晶屏上。根据这个需求,软件设计部分的流程图如图 4-1 所示。小于阈值大于 阈值图 4-1 程

41、序设计流程图本程序的设计是在 keil uVision 环境下进行了。Keil uVision 是美国 Keil Software 公司出品的 51 系列兼容单片机 C 语言软件开发系统,与汇编相比,C 语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。并且 Keil uVision 生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。在开发大型软件时更能体现高级语言的优势。Keil uVision 软件提供丰富的库函数和功能强大的集成开发调试工具 。开 始上电延时各模块初始化采集加速度阈值判断计算位置显示数据结束三轴位置传感器模块设计与实现 204.1 单片

42、机常用操作单片机常用操作4.1.1 系统的复位及初始化系统的复位及初始化8051 单片机复位的目的在于使得 CPU 和系统中的其他功能器件都处于一个确定一个确定的初始状态,并且从这个初始状态,8051 单片机复位的条件是必须使 RST段加上两个周期的高电平图 4-2 给出了一种复位电路。这种复位电路的工作原理是通电时,电容两端等同于短路,于是 RST 引脚上为高电平,然后电源通过电阻对电容充电,RST 端电压慢慢下降,降到一定程序,即为低电平,单片机开始正常工作。图 4-2 单片机的一个复位电路所谓初始化,是单片机上电,或要做一件事之前的准备工作,比如键盘扫描,先定义变量,定义哪些变量.给变量

43、赋什么初值.选定哪些口输出输入等. 一般的情况下是在上电的时候初始化,还有就是程序跑飞和出现异常时也要初始化,初始化的目的就是把所有用到的标志位、变量回到你的初始值,以及引脚的分配,配置寄存器写入需要的值,像时钟的选择(内部、外部)一般在上电时就做好,以后不是特殊需要是不改动的,引脚功能的分配也是一上来就设置好。而本课题研究的三轴位置传感器,在单片机系统上电复位之后,首先要进行的就是对 ADXL345 模块以及 1602 液晶模块进行初始化,只有这样系统才能够正常的采集数据,并且准确的显示出计算的数据4.1.2 计数器计数器/ /定时器定时器8051 单片机片内有两个十六位定时器计数器:定时器

44、 0(T0)和定时器 1(T1)。三轴位置传感器模块设计与实现 2116 为的定时器/计数器的实质就是一个加 1 的计数器,可实现定时和计数两种功能,其功能通常又程序进行设置。当定时器/计数器设置为定时方式时,计数器的加 1 信号由振荡器的 12 分频信号产生,也就是每过一个机器周期,计数器加上 1,直到计数器达到最大值溢出。当定时器处于计数工作方式时,计数器对来自外部输入引脚T0 和 T1 的信号进行计数,外部脉冲的下降沿将触发计数。在每个机器周期的器件,采样外部引脚输入电平,若前一个机器周期采样值为 1,后一个机器周期的采样值为 0,那么计数器的值加 1。TMOD 是定时器/计数器方式寄存

45、器用于控制 T0 和 T1 的操作模式,各位的定义模式如图 4-3。图 4-3 TMOD 各位的模式定义TCON 是定时器/计数器的控制寄存器,其格式如图 4-4 所示。图 4-4 控制寄存器 TCON(88H)只要计数脉冲的间隔相等,则计数值就代表了时间的流逝。由此,单片机中的定时器和计数器是一个东西,只不过计数器是记录的外界发生的事情,而定时器则是由单片机提供一个非常稳定的计数源。那么提供组定时器的是计数源是什么呢?其实就是由单片机的晶振经过 12 分频后获得的一个脉冲源。晶振的频率当然很准,所以这个计数脉冲的时间间隔也很准。一个 12M 的晶振,它提供给计数器的脉冲,就是 12M/12

46、等于 1M,也就是 1 个微秒。也就是说计数脉冲的间隔与晶振有关,12M 的晶振,计数脉冲的间隔是 1 微秒。定时器/计数器的定时/计数范围:工作方式 0:13 位定时/计数方式,因此,最多可以计到 2 的 13 次方,也就是8192 次。工作方式 1:16 位定时/计数方式,因此,最多可以计到 2 的 16 次方,也就是65536 次。工作方式 2 和工作方式 3,都是 8 位的定时/计数方式,因此,最多可以计到 2三轴位置传感器模块设计与实现 22的 8 次方,也说是 256 次。预置值计算:用最大计数量减去需要的计数次数即可。4.1.3 中断中断中断是指计算机在执行某一程序的过程中, 由

47、于计算机系统内、 外的某种原因, 而必须中止原程序的执行, 转去执行相应的处理程序, 待处理结束之后, 再回来继续执行被中止的原程序的过程。 MCS - 51 单片机有 5 个(8052 有 6 个)中断源, 为了使每个中断源都能独立地被允许或禁止, 以便用户能灵活使用, CPU 内部在每个中断信号的通道中设置了一个中断允许触发器, 它控制 CPU 能否响应中断。只有对应的中断允许触发器被使能(置“1” ) ,相应的中断才能得到相应。通常情况下中断操作是和定时操作结合起来使用的,下面介绍下中断允许控制寄存器 IE 和中断优先级控制寄存器 IP。中断允许控制寄存器 IE (0A8H)图 4-5

48、中断允许控制寄存器EX0:外部中断 0 允许位ET0:定时器/计数器 0 中断允许位EX1:外部中断 1 允许位ET1:定时器/计数器 1 中断允许位ES : 串行口中断允许位EA :中断总允许位中断优先级控制寄存器 IP(0B8H) 图 4-6 中断优先级控制寄存器PX0:外部中断 0 允许位PT0:定时器/计数器 0 中断允许位三轴位置传感器模块设计与实现 23PX1:外部中断 1 允许位PT1:定时器/计数器 1 中断允许位PS : 串行口中断允许位4.2 程序设计程序设计在本节将对加速度采集模块,显示模块,以及最终的位置计算进行详细的算法设计。4.2.1 加速度采集加速度采集该模块实现

49、了对加速度数据的准确采集,图 3-4 已经 ADXL345 的寄存器映射表,根据 I2C 的通信规则,可以进行如图 4-7 的器件寻址,并根据图 4-8 的 I2C 的时序图进行代码的编写。图 4-7 I2C 寻址图 4-8 I2C 时序图在具体加速度采集时,可以按照如下步骤进行:让 ADXL345 开始工作,首先三轴位置传感器模块设计与实现 24产生下降沿,并且时钟线要拉低。即就是 SDA 和 SCL 都要从高电平变为低电平。然后进行应答信号的接收与发送。不管接收还是发送,时钟线都是由高电平变为低电平。然后根据图 3-4 的寄存器映射,对 ADXL 初始化,选择读取速度,校正x,y,z 三轴

50、加速度的偏移量。因为我们要获得三个轴的加速度信息,因此要在0 x320 x37 地址范围内连续读出 ADXL345 内部加速度数据,首先发送设备地址和要写入的信号通过总线写入 ADXL345,再从 0 x32 发送存储单元地址,然后发送设备地址加上要读信号,使用循环连续读取 6 个地址数据,存储在全局变量 BUF 中。4.2.2 位置计算位置计算从 ADXL345 采集到的是二进制数,因此必须把二进制数转换为 10 进制数,也就是合成数据,根据加速度传感器的数据手册,乘上系数 3.9 再除以 1000 这样变为以 g 为单位的加速度信息,有助于后期数据的处理。根据等式(2-8)、(2-9)、(

51、2-10)计算出采集到的加速度和建立的标准空间坐标系各轴的夹角,也就是归于一个方向进行计算。因为可能会有正负的变化,计算角度时,经过反正切运算之后,它的取值范围是-90 度到 90 度,因此即使是负角,它的余弦值也是正值,所以这里的加速度信息,不能让它进行绝对值处理,否则就会一直的累加,造成错误。这里以 x 轴位置的计算的算法为例,y,z 轴的计算与之完全相同。步骤如下:(1)先从 ADXL345 读取 X 轴的加速度信息,并处理成以 g 为单位的数据。令此时的加速度 ax_old,再读取一个数据令它为 ax_new。 (2)计算三个轴的加速度变化是否都超过了阈值,如果都超过了,平台的倾斜角度

52、也会发生变化,此时重新计算倾斜角度,否则的话,倾斜角度没有发生变化。(3)如果 ax_old 与 ax_new 之差的绝度值大于阈值,对 x 方向的速度进行累加,对距离进行累加,否则保持不变。并设一个标志量 flag,它的初始值为 0,如果进行了数据累加,那么令它的值为 1。(4)因为选用的采样频率为 12.5Hz,因此采样间隔为 0.08 毫秒,采样十次显示一次结果。所以循环进行(2)、(3)步。(5)如果最后的 flag 为 1,也就是运动状态发生了变化,此时的速度令它为一次判断的初速度,距离为一次累加的初始状态。否则的话令此时的速度为 0,距离还是保持不变。 图 4-9 给出了算法的具体

53、流程图:三轴位置传感器模块设计与实现 25NYNYNY图 4-9 x 轴位置计算算法流程图采集加速度数据为 old采集加速度数据为 new三个轴|new-old|0.15重新计算倾斜角度倾斜角度保持不变X 轴|new-old|0.15求速度和加速度,令Flag=1Flag=0Falg=1V0=Vt,S0=StV0=0,S0=S0结束三轴位置传感器模块设计与实现 264.2.3 显示模块显示模块 这里液晶显示采用的是 1602 液晶屏,图 3-4 是它的电路图。 LCD1602 的芯片基本操作如图 4-10:图 4-10 1602 的基本操作 读操作时候的时序如图 4-11:图 4-11 读操作

54、时序写操作时候的时序如图 4-12:图 4-11 写操作时序 知道了 1602 的读写时候的时序图,就很容易写出它的驱动程序。它的初始化过程为先延时 15ms,再写指令 38H(不检测忙信号) ,延时 5ms,写指令 38H(不三轴位置传感器模块设计与实现 27检测忙信号) ,延时 5mS,写指令 38H(不检测忙信号) ,以后每次写指令、读/写数据操作均需要检测忙信号,写指令 38H:显示模式设置,写指令 08H:显示关闭,写指令 01H:显示清屏,写指令 06H:显示光标移动设置,写指令 0CH:显示开及光标设置。 实际上我们显示的数据分为两行,它的每一行从 0 开始到 15 有 16 个

55、位置。也就是说每行最多显示 16 个字符,可以本课题满足要求。 它的流程图为:图 4-12 1602 驱动流程图4.3 实验结果实验结果根据前面的算法,在 keil 软件中编写相关的代码,下载在单片机中后,整个模块的运作结果如图 4-13、4-14 所示:开始Lcd 初始化延时设置第一行位置显示第一行内容设置第二行位置设置第二行内容三轴位置传感器模块设计与实现 28图 4-13 平台初始位置的读数图 4-14 平台位置发生变化的读数图 4-13 是平台初始位置的读数,很明显初始位置的读数都为零,图 4-14 为位置状态发生变化时候的读数,平台位置发生变化时,它的读数也发生了变化,因为该模块主要

56、应用于人体,所以此时在模块变化时候还有一定的误差,这是可以通过设定阈值改进的。三轴位置传感器模块设计与实现 29程序的源代码如下:#include #include /Keil library #include /Keil library#include #define uchar unsigned char#define uint unsigned int#define DataPort P0 /LCD1602 数据端口sbit SCL=P14; /IIC 时钟引脚定义sbit SDA=P13; /IIC 数据引脚定义sbit LCM_RS=P26; /LCD1602 命令端口sbit LC

57、M_RW=P25; /LCD1602 命令端口sbit LCM_EN=P27; /LCD1602 命令端口#define SlaveAddress 0 xA6typedef unsigned char BYTE;typedef unsigned short WORD;typedef bit BOOL;BYTE BUF8; /接收数据缓存区 uchar ge,shi,bai,qian,wan; /显示变量int dis_datax,dis_datay,dis_dataz; /变量float idata T,K,Q,Q0,T_0,K0,angy,angz,angx;/Q,T,K 为 x,y,z 轴

58、的加速度。angx,angy,angz 为相对于标准位置的偏移角度float idata vx0=0,vx=0,vy0=0,vy=0,vz0=0,vz=0;float idata sx=0,sx0=0,sy=0,sy0=0,sz=0,sz0=0; void delay(unsigned int k);void InitLcd(); /初始化 lcd1602void Init_ADXL345(void); /初始化 ADXL345void WriteDataLCM(uchar dataW);void WriteCommandLCM(uchar CMD);void DisplayOneChar(u

59、char X,uchar Y,uchar DData);三轴位置传感器模块设计与实现 30void conversion(uint temp_data);void Single_Write_ADXL345(uchar REG_Address,uchar REG_data); /单个写入数据uchar Single_Read_ADXL345(uchar REG_Address); /单个读取内部寄存器数据void Multiple_Read_ADXL345();/连续的读取内部寄存器数据void Delay5us();void Delay5ms();void ADXL345_Start();vo

60、id ADXL345_Stop();void ADXL345_SendACK(bit ack);bit ADXL345_RecvACK();void ADXL345_SendByte(BYTE dat);BYTE ADXL345_RecvByte();void ADXL345_ReadPage();void ADXL345_WritePage();/转化数据void conversion(uint temp_data) wan=temp_data/10000+0 x30 ; temp_data=temp_data%10000; /取余运算qian=temp_data/1000+0 x30 ;

61、temp_data=temp_data%1000; /取余运算 bai=temp_data/100+0 x30 ; temp_data=temp_data%100; /取余运算 shi=temp_data/10+0 x30 ; temp_data=temp_data%10; /取余运算 ge=temp_data+0 x30; /*/void delay(unsigned int k)三轴位置传感器模块设计与实现 31unsigned int i,j;for(i=0;ik;i+)for(j=0;j121;j+);/*/BOOL WaitForEnable(void)BOOL result;LCM

62、_RS=0;LCM_RW=1;LCM_EN=1;_nop_();_nop_();_nop_();result=(BOOL)(DataPort&0 x80);LCM_EN=0;return result;/*/void WriteCommandLCM(uchar CMD)while(WaitForEnable();LCM_RS=0;LCM_RW=0;LCM_EN=0;_nop_();_nop_();DataPort=CMD;_nop_();_nop_();LCM_EN=1;_nop_();_nop_();LCM_EN=0;三轴位置传感器模块设计与实现 32/*/void WriteDataLCM

63、(uchar dataW)while(WaitForEnable();LCM_RS=1;LCM_RW=0;LCM_EN=0;_nop_();DataPort=dataW;_nop_();LCM_EN=1;_nop_();_nop_();LCM_EN=0;/*/void InitLcd()WriteCommandLCM(0 x38);WriteCommandLCM(0 x0c);WriteCommandLCM(0 x06);WriteCommandLCM(0 x01);/*/void DisplayOneChar(uchar X,uchar Y,uchar DData)Y&=1;X&=15;if

64、(Y)X|=0 x40;X|=0 x80;WriteCommandLCM(X);WriteDataLCM(DData);三轴位置传感器模块设计与实现 33/*延时 5 微秒(STC90C52RC12M)不同的工作环境,需要调整此函数,注意时钟过快时需要修改当改用 1T 的 MCU 时,请调整此延时函数*/void Delay5us() _nop_();_nop_();_nop_();_nop_(); _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();/*延时 5 毫秒(STC90C52RC12M)不同的工作环境,需要

65、调整此函数当改用 1T 的 MCU 时,请调整此延时函数*/void Delay5ms() WORD n = 560; while (n-);/*起始信号*/void ADXL345_Start() SDA = 1; /拉高数据线三轴位置传感器模块设计与实现 34 SCL = 1; /拉高时钟线 Delay5us(); /延时 SDA = 0; /产生下降沿 Delay5us(); /延时 SCL = 0; /拉低时钟线/*停止信号*/void ADXL345_Stop() SDA = 0; /拉低数据线 SCL = 1; /拉高时钟线 Delay5us(); /延时 SDA = 1; /产生

66、上升沿 Delay5us(); /延时/*发送应答信号入口参数:ack (0:ACK 1:NAK)*/void ADXL345_SendACK(bit ack) SDA = ack; /写应答信号 SCL = 1; /拉高时钟线 Delay5us(); /延时 SCL = 0; /拉低时钟线 Delay5us(); /延时三轴位置传感器模块设计与实现 35/*接收应答信号*/bit ADXL345_RecvACK() SCL = 1; /拉高时钟线 Delay5us(); /延时 CY = SDA; /读应答信号 SCL = 0; /拉低时钟线 Delay5us(); /延时 return CY;/*向 IIC 总线发送一个字节数据*/void ADXL345_SendByte(BYTE dat) BYTE i; for (i=0; i8; i+) /8 位计数器 dat = 1; /移出数据的最高位 SDA = CY; /送数据口 SCL = 1; /拉高时钟线 Delay5us(); /延时 SCL = 0; /拉低时钟线 Delay5us(); /延时 三轴位置传感器模块设计与实

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!