基于AT89S52的MEMS陀螺信号采集与处理系统设计
MEMS(Micro Electron Mechanical System)陀螺仪是一种可以精确测量物体方位的仪器,不仅成本低,体积小,重量轻,而且可以与微电子加工的电路实现集成,做到机电一体化。MEMS陀螺适用于汽车工业、惯性导航、计算机、机器人、军事等急需大量小型、廉价陀螺的应用领域,是国防、工业发展中必不可少的仪器。
但是,MEMS陀螺仪在实际应用中达不到需要的精度,为了提高陀螺仪系统工作性能和测量精度,对陀螺仪进行数据采集并减小误差是至关重要的。
ADIS16355惯性测量装置将三轴角速度感知与三轴加速度感知相结合,提供六自由度运动感知、嵌入式校准与传感器处理以及传感器-传感器交叉补偿,并大大提高信号稳定性(使用偏移稳定性为0.015 deg/sec),体积小于1立方英寸。ADIS16355是在整个温度范围内校准,具有卓越的偏压温度稳定性(0.005 deg/sec/°)。ADISl6355提供一个串行外部接口SPI(Serial Peripheral Interface),通过SPI可以对芯片进行配置,获得运行状态与测量结果等,其对外部供电要求不高,内部自带高精度的稳压电路,外围电路较少[1]。
AT89S52单片机[2]是一种低功耗、高性能CMOS 8位微控制器,具有8 KB在系统可编程Flash存储器,使用美国ATMEL公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,同时,AT89S52带有ISP下载功能,它利用在线编程器替代昂贵的单片机仿真器编程器,既方便使用,又节省开发费用。
本文结合单片机对ADIS16355惯性传感器进行控制,将采集的数据实时存储并通过LCD1602进行显示,最后对系统进行测试,并分析了系统存在的误差。
1 ADIS16355芯片数据采集硬件设计
根据数据采集系统的需要,系统以AT89S52作为主控单元,外扩一片6264静态存储器作为数据存储器,并设计AT89S52与ADIS16355通信的SPI接口模块、LCD显示模块、键控模块和在线编程模块,系统硬件连接框图如图1所示。
1.1 主控模块
控制单片机AT89S52具有8 KB Flash,256 B RAM,32 bit的I/O口线,看门狗定时器,两个数据指针,3个16 bit定时器/计数器,一个六向量两级中断结构,全双工串行口,片内晶振及时钟电路等功能[3]。它与ADIS16355陀螺仪之间通过SPI接口相连。因为AT89S52单片机没有专门的SPI接口,只能通过软件模拟P2.0口为时钟信号线与陀螺仪的SPI接口SCLK引脚相连,P2.1口为主输出从输入MOSI与陀螺仪SPI接口的数据输人SDI引脚相连,P2.2口为主输入从输出MISO与陀螺仪SPI接口的数据输出SDO引脚相连,P2.3口为片选信号。P3.2、P3.3为中断引脚,分别与ADIS16355的DIO1和DIO2相连,为数据转换中断。
1.2 LCD显示模块
系统显示部分采用液晶LCD1602芯片,其特点是:功耗低、体积小、质量轻、显示质量高、数字式,采用标准的16脚接口和单片机连接简单,操作方便,能够同时显示16×2即32个字符,1602液晶模块内部的字符发生存储器(CGROM)存储了160个不同的点阵字符图形,方便显示控制器采集出的数据。
1.3 在线编程模块
系统设计了在线编程模块,利用STC-ISP编程烧录软件实时在线下载程序,大大方便了开发者,提高了系统研发效率。
1.4 SPI接口模块通信与配置
SPI是MOTOROLA公司提出的同步串行总线方式,是一种全双工、同步、串行数据接口标准总线,与其他串行总线相比,它具有电路结构简单、速度快、通信可靠等优点[4]。标准的SPI总线由4根信号线组成:时钟信号(SCLK)、主输入从输出线(SDI)、主输出从输入线(SDO)和片选信号(CS)。
系统中ADIS16355通过SPI接口与外部进行通信,需要外部设备MCU通过该接口对其内部各寄存器进行设置,图2所示是一个典型的写入控制寄存器命令的数据帧。由芯片资料[5]可知,DIN系列的首位是1,第二位是0,后面是目标寄存器的6 bit地址和8 bit数据命令,因为每一个写命令包含一个数据位,所以给整个16 bit寄存器空间写值时要求有两个数据帧。图3为ADIS16355读操作SPI时序图,由芯片资料[5]可知ADIS16355完成一次SPI通信包括16 bit数据,其中第1位是SPI传输的读写状态标识,第2位为0,紧跟着的6 bit是目标寄存器地址,最后8 bit是在写操作时将要写进寄存器的数据,如果是读操作则忽略,完成ADIS16355的一个读操作需要进行两次16 bit的SPI通信,其中第一次是写入将要读取的寄存器地址,该寄存器的内容将在第二次SPI通信出现在ADIS16355的DOUT信号线上,输入SPI的主设备。
本设计中控制器与ADIS16355进行SPI通信的每个数据帧为16 bit,而AT89S52的数据宽度为8 bit,所有内部寄存器和数据空间存储器都是8 bit宽度组成,作为主设备在其发出有效的SPI片选信号使能ADISl6355后,要对其自身的SPI数据寄存器进行两次写操作,才能在总线上完成一次16 bit数据传输。
2 软件设计
ADISl6255陀螺仪所有的数据和命令的读取和写入都是通过读写寄存器来完成的。通过AT89S52单片机编写程序读取ADISl6355内部相应的寄存器地址,相应读取回来的12 bit或者14 bit长度的数据经过换算再乘以对应的比例因子就得到了相应的x、y、z轴陀螺仪和加速度计以及内部温度信息。
在启动陀螺仪前,首先要对陀螺仪的各个寄存器进行正确的设置。由参考文献[5]、[6]知,设置GYRO_OFF和GYRO_SCALE寄存器对陀螺仪三轴输出的灵敏度和偏差进行用户自校准;设置SMPL_PRD寄存器,选取合适的采样频率;设置SENS/AVG寄存器,定义陀螺动态量程以及对应的数字滤波器;设置MSC_CTRL寄存器,定义自检位以及数据更新中断位;设置COMMAND寄存器,定义数据校正模式;设置ALM_CTRL寄存器,为数据报警。
陀螺仪自身带有一个校准控制指令,在读取数据之前需要用户的自定义校准,具体操作方法[6]是将MSC_
CTRL寄存器的第10位置1,20 ms后,读取状态寄存器的值,如果为0x0000,表明自检通过,否则表明陀螺仪存在如供电超限、SPI通信错误等问题,响应的错误位将在状态寄存器中标出。
MEMS陀螺仪数据采集软件设计主要是对AT89S52的程序设计。系统上电复位后,首先完成单片机初始化,对陀螺仪各个自由度寄存器参数设置,初始化LCD1602,初始化SPI接口,陀螺仪自校准过程,定时器和相应中断打开,数据存储及更新,最后通过按键分别显示X、Y、Z轴陀螺仪和加速度计以及内部温度信息。系统软件程序采用Keil μVision4软件编写,Keil μVision4是基于80C51内核开发的,可以用C语言和汇编语言进行编程,C编译工具在产生代码的准确性和效率方面达到了较高的水平,并且可以附加灵活的控制选项,在开发大型项目时非常实用[7]。其软件程序流程图如图4所示。
评论