1 设计任务书本设计主要涉及的专业课程有:
1、单片机原理及应用
2、信号分析与处理
3、计算机控制技术
4、传感器技术
5、电子线路CAD
6、数字电子技术
7、复变函数与积分变换
1、基于MEMS集成电路检测倾斜角度案例:MEMS三轴陀螺仪的倾斜角检测应用;知识点包括MEMS陀螺仪的检测原理、检测电路、常用芯片型号,常见MEMS陀螺仪应用场合及注意事项。
2、基于MEMS集成电路检测加速度案例:MEMS三轴加速度计的加速度检测应用;知识点包括MEMS加速度的检测原理、检测电路、常用芯片型号,常见MEMS加速度计应用场合及注意事项。
根据设计任务并完成以下目标
- 了解六轴传感器MPU6050工作原理以及其工作方式。
- 熟练运用ARM完成对传感器的操作与控制;
- 传感器数据通过串口通信在上位机上模拟显示;
- 系统与手机通过蓝牙进行数据传输;
该系统主要可以完成对倾斜角及加速度的检测、数据通过蓝牙上传到手机、与上位机进行信息交互、上位机显示三轴方向加速度、显示三轴方向倾角、实时显示MPU6050的传感器状态曲线、数据3D模拟显示等功能。
结合所学课程和设计任务,制定了相应的工作任务,合理规划工作步骤。
2 设计论证及计划市面上已经出现了众多以陀螺仪或加速度传感器为核心的智能设备,本次课程设计以此为课题具有可行性。
现代工业生产设备的发展正在朝着向大型化,高速化,连续化和自动化的方向发展。其复杂程度日益增加,所涉及的知识范围广泛,不但包括机械设计、材料科学,现在又加入了计算机技术、光学、电路技术等,其不但价格昂贵,维护也同样麻烦。面对如此庞大的机械设备,我们必须需要一些仪器仪表来进行辅助检查与测试,我们希望这些仪器仪表具有一定的智能,不但要具有实时检测、自动报警、结果显示与保存等功能,还要具有体积小、重量轻、便于携带等优点。然而传统的机电仪表虽然具备某些优点,但其本身也是机、电、光、算的结合物,其使用与维护也相当的复杂,不利于当今机械设备的发展。
随着现代网络技术的发展和企业规模的快速扩大,功能独立的近距离的传统仪器测量已不能满足工业需求,远距离且大规模的测量仪器群将是未来发展的趋势。由于传统的仪器是模拟信号,不利于计算机的控制与运算,将不可能胜任现代企业管理及技术发展的需要。
由上分析,我们意识到传统的测量仪器在成本价格、制作技术、操作简便性等方面存在着不足,不能满足社会的需要。而近年来发展起来的虚拟仪器技术则在成本价格、制作技术、操作简便性方面有着不俗的表现,能很好的满足现代科学技术发展的需要,是仪器仪表未来发展的的重要方向。
六轴传感器MPU6050近年来广泛应用于各个领域,是未来智能设备中不可或缺的重要元件智能型手机、平板装置设备、手持型游戏产品、游戏机、3D遥控器、可携式导航设备。
本课程设计是在MDK环境下完成的,采用C语言进行编程,完全采用面向对象的开发思想,具有很大的个人发挥空间,完成同一种功能可以从不同方面下手解决。MDK源自德国的KEIL公司,是RealView MDK的简称。在全球MDK被超过10万的嵌入式开发工程师使用。目前最新版本为:MDK5.14,该版本为 uVision5 IDE集成开发环境,是目前针对ARM处理器,尤其是Cortex M内核处理器的最佳开发工具。
设计规划:
针对此次课程设计,设计如下规划,如图2.1所示。
图2.1 课程设计规划
本章主要对课程设计的背景进行了介绍并对设计进行规划,制定出合理的工作流程。
3 硬件系统设计倾角加速度检测系统,主要要完成对温度、加速度、倾斜角的采集、显示等工作。传统上采集加速度利用的是三轴加速度传感器而采集倾斜角利用的是三轴陀螺仪,针对本次课程设计要求成本相对较高。鉴于上述原因,本系统采用MPU6050六轴陀螺仪作为核心传感器。外部数据信号经 MPU6050将输入的模拟信号转换成数字信号,并通过IO口传送到单片机系统( STM32RCT6)。单片机系统将接收的数字信号译码处理,通过TFTLCD将温度及各个方向倾角显示出来,如图3.1说所示。
图3.1 设计整体架构(见附件)
3.2.1MCU的选型及分析
STM32F103RCT6是ST公司推出的一款以CortexM3为核心设计的32位单片机,远超8位51单片机,能出色完成设计任务。STM32的优异性体现在以下几个方面。
1.超低的价格。以8位机的价格,得到32位机,是STM32最大的优势。
2.超多的外设。STM32拥有包括:FSMC、TIMER、SPI、IIC、USB、CAN、IIS、SDIO、ADC、DAC、RTC、DMA等众多外设及功能,具有极高的集成度。
3.丰富的型号。STM32仅M3内核就拥有F100、F101、F102、F103、F105、F107、F207、F217等8个系列上百种型号,具有QFN、LQFP、BGA等封装可供选择。同时STM32还推出了STM32L和STM32W等超低功耗和无线应用型的M3芯片。
4.优异的实时性能。84个中断,16级可编程优先级,并且所有的引脚都可以作为中断输入。
5.杰出的功耗控制。STM32各个外设都有自己的独立时钟开关,可以通过关闭相应外设的时钟来降低功耗。
6.极低的开发成本。STM32的开发不需要昂贵的仿真器,只需要一个串口即可下载代码,并且支持SWD和JTAG两种调试口。SWD调试可以为你的设计带来跟多的方便,只需要2个IO口,即可实现仿真调试。

STM32F103RCT6原理图,如图3.2所示。
图3.2 MCU原理图
3.2.2 传感器的选型及分析
设计要求完成对倾斜角、加速度和温度的检测,完成以上要求分别需要3轴陀螺仪、3轴加速度传感传感器、温度传感器考虑到成本等各方面因素本次课程设计选用具有多种功能的6轴传感器(MPU6050)来完成对数据的检测。
MPU6050 是 InvenSense 公司推出的全球首款整合性 6 轴运动处理组件,相较于多组件方案,免除了组合陀螺仪与加速器时之轴间差的问题,减少了安装空间。MPU6050 内部整合了 3 轴陀螺仪和 3 轴加速度传感器,并且含有一个第二 IIC 接口,可用于连接外部磁力传感器,并利用自带的数字运动处理器(DMP: Digital Motion Processor)硬件加速引擎,通过主 IIC 接口,向应用端输出完整的 9 轴融合演算数据。有了 DMP,我们可以使用InvenSense 公司提供的运动处理资料库,非常方便的实现姿态解算,降低了运动处理运算对操作系统的负荷,同时大大降低了开发难度。
MPU6050 的特点包括:
① 以数字形式输出 6 轴或 9 轴(需外接磁传感器)的旋转矩阵、四元数(quaternion)、欧拉角格式的融合演算数据(需 DMP 支持)。
② 具有 131 LSBs/° /sec 敏感度与全格感测范围为±250、±500、±1000 与±2000° /sec的 3 轴角速度感测器(陀螺仪)。
③ 集成可程序控制,范围为±2g、±4g、±8g 和±16g 的 3 轴加速度传感器。
④ 移除加速器与陀螺仪轴间敏感度,降低设定给予的影响与感测器的飘移。
⑤ 自带数字运动处理(DMP: Digital Motion Processing)引擎可减少 MCU 复杂的融合演算数据、感测器同步化、姿势感应等的负荷。
⑥ 运作时间偏差与磁力感测器校正演算技术,免除了须另外进行校正的需求
⑦ 自带一个数字温度传感器。
⑧ 带数字输入同步引脚(Sync pin)支持视频电子影像稳定技术与GPS。
⑨ 可程序控制的中断(interrupt),支持姿势识别、摇摄、画面放大缩小、滚动、快速下降中断、 high-G 中断、动作感应、触击感应、摇动感应功能。
⑩ VDD 供电电压为 2.5V±5%、 3.0V±5%、 3.3V±5%; VLOGIC 可低至 1.8V
⑪ 陀螺仪工作电流: 5mA,陀螺仪待机电流: 5uA;加速器工作电流: 500uA,加速器省电模式电流: 40uA@10Hz。
⑫ 自带 1024 字节 FIFO,有助于降低系统功耗。
⑬ 高达 400Khz 的 IIC 通信接口。
⑭ 超小封装尺寸: 4x4x0.9mm(QFN)。

MPU6050传感器实物图如3.3所示,其检测轴如图3.4所示。
3.3 MPU6050实物图
图3.4 MPU605检测轴方向

MPU6050的内部框图如图3.5所示。
图3.5 MPU内部框图
其中SCL和SDA是连接MCU的IIC接口,MCU通过这个IIC接口控MPU6050,另外还有一个IIC接口:AUX_CL和AUX_DA,这个接口可用来连接外部从设备,比如磁传感器,这样就可以组成一个9轴传感器。VLOGIC是IO口电压,该引脚最低可以到1.8V,我们一般直接接VDD即可。AD0是从IIC接口(接MCU)的地址控制引脚,该引脚控制IIC地址的最低位。如果接GND,则MPU6050的IIC地址是:0X68,如果接VDD,则是0X69。MPU6050外围电路如图3.6所示。
图3.6 MPU6050外围电路图
MPU6050工作原理:


陀螺仪检测也不是完全精确的,存在一定的误差。由于陀螺仪测量角度时使用积
图3.7 积分误差
分,会存在积分误差,如图3.7所示,若积分时间Dt越小,误差就越小。这十分容易理解,例如计算路程时,假设行车时间为 1 小时,我们随机选择行车过程某个时刻的速度Vt乘以1小时,求出的路程误差是极大的,因为行车的过程中并不是每个时刻都等于该时刻速度的,如果我们每5分钟检测一次车速,可得到Vt1、Vt2、Vt3-Vt12这12个时刻的车速,对各个时刻的速度乘以时间间隔(5分钟),并对这12个结果求和,就可得出一个相对精确的行车路程了,不断提高采样频率,就可以使积分时间Dt变小,降低误差。
同样地,提高陀螺仪传感器的采样频率,即可减少积分误差,目前非常普通的陀螺仪传感器的采样频率都可以达到8KHz,已能满足大部分应用的精度要求。
更难以解决的是器件本身误差带来的问题。例如,某种陀螺仪的误差是0.1度/秒,当陀螺仪静止不动时,理想的角速度应为0,无论它静止多久,对它进行积分测量
得的旋转角度都是0,这是理想的状态;而由于存在0.1度/秒的误差,当陀螺仪静止不动时,它采样得的角速度一直为0.1度/秒,若静止了1分钟,对它进行积分测量得的旋转角度为6度,若静止了1小时,陀螺仪进行积分测量得的旋转角度就是360度,即转过了一整圈。只有当正方向误差和负方向误差能正好互相抵消的时候,才能消除这种累计误差。
三轴加速度传感器检测原理:

由于直接用陀螺仪测量角度在长时间测量时会产生累计误差,引入了检测倾角的传感器。测量倾角最常见的例子是建筑中使用的水平仪,在重力的影响下,水平仪内的气泡能大致反映水柱所在直线与重力方向的夹角关系,利用图3.8中的T字型水平仪,可以检测出横滚角与俯仰角,而偏航角是无法以这样的方式检测的。在电子设备中,一般使用加速度传感器来检测倾角,它通过检测器件在各个方向的形变情况而采样得到受力数据,根据F=ma转换,传感器直接输出加速度数据,因而被称为加速度传感器。由于地球存在重力场,所以重力在任何时刻都会作用于传感器,当传感器静止的时候(实际上加速度为0),传感器会在该方向检测出加速度g,不能认为重力方向测出的加速度为g,就表示传感器在该方向作加速度为g的运动。
图3.8 T字型水平仪

当传感器的姿态不同时,它在自身各个坐标轴检测到的重力加速度是不一样利用
各方向的测量结果,根据力的分解原理,可求出各个坐标轴与重力之间的夹角,如图3.9所示。
图3.9 重力检测
因为重力方向是与地理坐标系的“天地”轴固连的,所以通过测量载体坐标系方向轴与重力方向的夹角即可求得它与地理坐标系的角度旋转关系,从而获知载体姿态。
加度度传感器检测的误差:
由于这种倾角检测方式是利用重力进行检测的,它无法检测到偏航角(Yaw),原理跟 T字型水平仪一样,无论如何设计水平仪,水泡都无法指示这样的角度。
另一个缺陷是加速度传感器并不会区分重力加速度与外力加速度,当物体运动的时候,它也会在运动的方向检测出加速度,特别在震动的状态下,传感器的数据会有非常大的数据变化,此时难以反应重力的实际值。
利用磁场检测角度
为了弥补加速度传感器无法检测偏航角(Yaw)的问题,我们再引入磁场检测传感器,它可以检测出各个方向上的磁场大小,通过检测地球磁场,它可实现指南针的功能,所以也被称为电子罗盘。由于地磁场与地理坐标系的“南北”轴“固联”,利用磁场检测传感器的指南针功能,就可以测量出偏航角(Yaw)了。
磁场检测器的误差
与指南针的缺陷一样,使用磁场传感器会受到外部磁场干扰,如载体本身的电磁场干扰,不地理同环境的磁铁矿干扰等等。
姿态融合与四元数
可以发现,使用陀螺仪检测角度时,在静止状态下存在缺陷,且受时间影响,而加速度传感器检测角度时,在运动状态下存在缺陷,且不受时间影响,刚好互补。假如我们同时使用这两种传感器,并设计一个滤波算法,当物体处于静止状态时,增大加速度数据的权重,当物体处于运动状时, 增大陀螺仪数据的权重,从而获得更准确的姿态数据。同理,检测偏航角,当载体在静止状态时,可增大磁场检测器数据的权重,当载体在运动状态时,增大陀螺仪和 GPS 检测数据的权重。这些采用多种传感器数据来检测姿态的处理算法被称为姿态融合。
在姿态融合解算的时候常常使用“四元数”来表示姿态,它由三个实数及一个虚数组成,因而被称之为四元数。使用四元数表示姿态并不直观,但因为使用欧拉角(即前面说的偏航角、横滚角及俯仰角)表示姿态的时候会有“万向节死锁”问题,且运算比较复杂,所以一般在数据处理的时候会使用四元数,处理完毕后再把四元数转换成欧拉角。
该设计采用精英STM32F1开发板的IIC接口连接MPU6050模块,本章实验功能简介:程序先初始化MPU6050等外设,然后利用DMP库,初始化MPU6050及使DMP,最后,在死循环里面不停读取:温度传感器、加速度传感器、陀螺仪、DMP姿态解算后的欧拉角等数据,通过串口上报给上位机(温度不上报),利用上位机软件,可以实时显示 MPU6050 的传感器状态曲线,并显示3D姿态,可以通过KEY0 按键开启/关闭数据上传功能。同时,在 LCD 模块上面显示温度和欧拉角等信息。DS0来指示程序正在运行。
MPU6050引脚说明
该模块引出8个引脚功能说明如表3.1所示。
表3.1 MPU6050功能引脚说明

序号 引脚名称 说明
1

VCC 3.3/5V 电源输入
2 GND 地线
3 SCL I2C从时钟信号线SCL(模块上已接上拉电阻)
4 SDA I2C从数据信号线SDA(模块上已接上拉电阻)
5 XDA I2C主串行数据信号线,用于外接传感器
6 XCL I2C主串行数据信号线,用于外接传感器
7 AD0 从机地址设置引脚:接地或悬空,地址为:0X68
接VCC时,地址为:0X69
8 INT 中断输出引脚
其中的SDA/SCL、XDA/XCL通讯引脚分别为两组I2C信号线。当模块与外部主机通讯时,使用SDA/SCL,如与STM32芯片通讯;而XDA/XCL则用于MPU6050芯片与其它I2C传感器通讯时使用,例如使用它与磁场传感器连接,MPU6050模块可以把从主机SDA/SCL接收的数据或命令通过XDA/XCL引脚转发到磁场传感器中。但实际上这种功能比较鸡肋,控制麻烦且效率低,一般会直接把磁场传感器之类的I2C传感器直接与MPU6050挂载在同一条总线上(即都连接到SDA/SCL),使用主机直接控制。

所要用到的硬件资源主要有STM32开发板和MPU6050模块,它们的连接方式如图3.10所示。MPU6050模块与外部连接,引出了VCC、GND、IIC_SDA、IIC_SCL、MPU_INT和MPU_AD0等信号。其中,IIC_SDA和IIC_SCL带了4.7K上拉电阻,外部可以不用再加上拉电阻了,另外MPU_AD0自带了10K下拉电阻,当AD0 悬空时,默认IIC地址为(0X68)。模块的IIC_SCL、IIC_SDA分别连接在STM32的PC12、PC11上面。XDA和XCL是用来扩展连接磁力传感器使MPU6050转换为“九轴传感器”。

图3.10 连接方式图
本章主要介绍CMU的选型外设,以及各种传感器测角度的原理及缺陷,MPU6050利用姿态融合算法弥补传统传感器设计缺陷。MPU6050各个接口的功能介绍,单片机与MPU6050连接方式的设计。
4 软件系统设计系统软件设计环境是MDK,软件设计由主程序模块、MPU6050程序模块、串口通讯模块以及液晶驱动程序模块组成。
1)初始化IIC接口
MPU6050采用IIC与STM32F1通信,所以我们需要先初始化与MPU6050连接的SDA和SCL数据线。
2)复位MPU6050
这一步让MPU6050内部所有寄存器恢复默认值,通过对电源管理寄存器1(0X6B)的bit7写1实现。复位后,电源管理寄存器1恢复默认值(0X40),然后必须设置该寄存器为0X00,以唤醒MPU6050,进入正常工作状态。
3)设置角速度传感器(陀螺仪)和加速度传感器的满量程范围
这一步,设置两个传感器的满量程范围(FSR),分别通过陀螺仪配置寄存器(0X1B)和加速度传感器配置寄存器(0X1C)设置。我们一般设置陀螺仪的满量程范围为±2000dps,加速度传感器的满量程范围位±2g。
4)设置其他参数
这里,我们还需要配置的参数有:关闭中断、关闭AUX IIC接口、禁止FIFO、设置陀螺仪采样率和设置数字低通滤波器(DLPF)等。本章我们不用中断方式读取数据,所以关闭中断,然后也没用到 AUX IIC 接口外接其他传感器,所以也关闭这个接口。分别通过中断使能寄存器(0X38)和用户控制寄存器(0X6A)控制。MPU6050可以使用FIFO存储传感器数据,不过本章我们没有用到,所以关闭所有FIFO通道,这个通过FIFO使能寄存器(0X23)控制,默认都是0(即禁止 FIFO),所以用默认值就可以了。陀螺仪采样率通过采样率分频寄存器(0X19)控制,这个采样率我们一般设置为50即可。数字低通滤波器(DLPF)则通过配置寄存器(0X1A)设置,一般设置DLPF为带宽的1/2即可。
5)配置系统时钟源并使能角速度传感器和加速度传感器
系统时钟源同样是通过电源管理寄存器1(0X6B)来设置,该寄存器的最低三位用于设置系统时钟源选择,默认值是0(内部8M RC震荡),不过我们一般设置为1,选择x轴陀螺PLL作为时钟源,以获得更高精度的时钟。同时,使能角速度传感器和加速度传感器,这两个操作通过电源管理寄存器2(0X6C)来设置,设置对应位为0即可开启。至此,MPU6050的初始化就完成了,可以正常工作了(其他未设置的寄存器全部采用默认值即可),接下来,我们就可以读取相关寄存器,得到加速度传感器、角速度传感器和温度传感器的数据了。