本文主要是介绍6轴加速度角速度传感器的常用操作,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
六轴传感器一般是集成三轴加速度和三轴陀螺仪,可用在可穿戴、导航等应用系统中,以下简要说明此类传感器的常用流程。
- 传感器输出的原始数据是如何和实际陀螺加计数据对应起来的?
陀螺常用的单位为g,加计常用的单位为度/秒(dps),一般两者的数据寄存器都是16位的,比如陀螺X轴分为OUTX_L_G和OUTX_H_G,加计X轴分为OUTX_L_A和OUTX_H_A最高位为符号位,则输出范围应为(-32767~32767),此类传感器数据手册中对数据单位的转换形式一般有2种说明。
情况1:
如图Fig.1所示ST的LSM6DSO32数据手册中数据单位是以mg/LSB和mdps/LSB,假如陀螺和加计的量程分别选择±1000dps和±16 g,从寄存器中读出的原始数据定义为s16 gyro_raw和s16 acc_raw,则:
gyro_raw = (s16)((OUTX_H_G<<8)+OUTX_L_G) *35/1000(g)(dps)//将mdps转换为dps
acc_raw = (s16)((OUTX_H_A<<8)+OUTX_L_A)*0.488/1000//将mg转换为g
情况2:
如图Fig.2所示博士的SMI230对应的数据手册中单位为LSB/g和LSB/bps,同理,假如陀螺和加计的量程分别选择±1000dps和±16 g,从寄存器中读出的原始数据定义为s16 gyro_raw和s16 acc_raw,则:
gyro_raw = (s16)((OUTX_H_G<<8)+OUTX_L_G) /32.77(dps)
acc_raw = (s16)((OUTX_H_A<<8)+OUTX_L_A)/2048(g)
注意这里的2048 LSB/g实际是由32767/16计算的,32.77 LSB/bps是由32767/1000计算的。
2. 如何读取陀螺加计的原始数据?、
此类传感器一般都会支持SPI和IIC通信协议,以LSM6DSO32为例说明读写寄存器的过程,如下:
① 配置硬件接口,SPI/IIC驱动接口(下面的时序图以SPI为例说明)
② 配置陀螺和加计的量程和数据速率,如图Fig.3和Fig.4中分别向0x10寄存器和0x11寄存器设置陀螺和加计所需量程。此处是向寄存器写数据,故最高位为0(一般都是R/!W,读高写低)
③在数据手册寄存器映射章节,容易看出陀螺和加计的数据寄存器是连续的,故一般选择连续读模式,向SPI总线写要读的寄存器其实地址,此处注意最高位为1(比如从陀螺的X轴开始读数,则直接写0x80|0x22),再直接读出12个字节数据(包含了陀螺加计的原始数据)。
注意,若是用轮询的方式获取传感器数据,一般会根据状态寄存器中陀螺加计的数据更新标识来获取有效数据,如图Fig.7当GDA和XLDA数据标识为1时再从对应的寄存器中读取数据,否则会出现异常的数据,如图Fig.8中在静止状态下测试出现偏大的数据。
这篇关于6轴加速度角速度传感器的常用操作的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!