图4 GPRS电路图
4 系统软件设计
4.1 系统软件整体流程图
图5所示为系统软件整体流程图,首先对STM32进行初始化配置,包括时钟电路RCC高速时钟和低速时钟的起振、通用引脚GPIO输出输出模式的配置、串口USART波特率的设置,然后将SIM300设置为透传模式,进行网络连接(具体过程可参考3.3),成功连接网络之后,配置iNEMO模块各传感器的分辨率、字节对齐方式、读取频率等,然后分别读取腰部和腿部iNEMO模块的加速度、陀螺仪、磁力计原始数据,获得原始数据之后根据分别率的设置计算磁力计、陀螺仪、加速度的大小,最后通过扩展卡尔曼滤波融合得到腰部的俯仰角PITCH、腿部的偏航角YAW,结合两个角度信息通过查表法进行姿态判断,设置相应的标志位,通过GPRS将姿态标志位打包后发送到远程监控端。
4.2 姿态检测
如图6所示,iNEMO模块中L3GD20、LSM303DLHC 以及LPS331AP 通过I2C串行总线与单片机进行通信,I2C总线两根双向信号线一根是数据线SDA,另一根是时钟线SCL,通过上拉电阻接到正电源VDD,每个接到I2C总线上的器件都有唯一的地址,主机发送地址时,总线上的每个从机都将7位地址码与自己的地址进行比较,如果相同,则认为自己正被主机寻址。
iNEMO各个传感器的地址码宏定义如下:
#define ACC_ADDRESS 032 //加速度计地址码
#define MAG_ADDRESS 03C //磁力计地址码
#define GYRO_ADDRESS 0D6 //陀螺仪地址码
采集到传感器的数据之后,首先利用三轴陀螺仪信号,采用四元数的姿态表达式,积分求得姿态角,然后采用三轴加速度计和三轴磁力计,利用大地磁场和重力磁场在地理坐标系和运动坐标系之间的方向余弦进行绝对角度的解算,然后采用卡尔曼滤波进行前三者数据的融合,得到腰部的俯仰角PITCH、腿部偏航角YAW。通过大量实验建立姿态角与人体姿态的对应表如下:
4.3 GPRS发送