本帖最后由 le062 于 2015-5-3 18:23 编辑
四轴板载了MPU6050,HMC5883L及BMP280三个传感器,没有选MS5611的原因是这货居然要30多软妹币。
计划是通读三个传感器的技术手册,根据三个传感器的技术规格,制定一个IIC总线上的数据采集方案。
BMP280:datasheet上标明的精度只有1米,但是我看iphone6上测高软件显示精度有0.1米,响应也还可以,估计误差0.2以内是可以保证的。下图是推荐参数,果断选Indoor navigation模式,才0.65mA,妥妥的。
![]()
运行模式选择普通模式好了,不过读寄存器时,需要考虑时钟的同步处理。 手册中表14说明了在最高精度模式下,最大输出频率为26.32,不用想了,就是这个feel。 总体设置参考下图:
看完数据手册,确定在最高精度最大频率下是做不到采集及传输同步的,因为它只有measuring标志,最大频率下只有0.5ms的等待间隔,如果想通过该标志位做到同步,就要求iic访问状态寄存器的频率至少为2k,这样使带宽浪费很严重。嗯,折中一下,按照25Hz的频率访问BMP280,每次连续读取0xF7~0xFC寄存器。带宽大概计算下:(2+1+6) * 10 * 25 = 2250 bit/s。
BMP280的校准有些复杂,需根据规格书中推荐方式进行操作。
HMC5883L:这个片子有两种模式,连续转换和单次转换,连续转换频率被限制到75Hz,单次转换周期由6.26mS的写(读)-测时间决定,即(1000/6.26) = 160Hz。由于这版电路中未将DRDY脚连接到MCU,无法通过IO中断获得转换完成信号,我这儿打算以8ms或10ms间隔进行写读。
在400kIIC总线频率下,1ms差不多可以传输40字节,可以对任意传感器完成两次采集操作,所以这个访问频率是可以保证的,合理的读写规格下,可以保证各传感器的采样周期不会受到不可控的阻塞。在8ms周期下,带宽:(3 + 8)* 10 * 1000 / 8 = 13750bit/s。
自检测试:相当于测三次,一次正常的,一次带正偏置,一次负偏置,偏置都是1.1高斯左右。软件检查这三次的XYZ轴磁场值是否满足偏置规则即可。
总的来说,HMC5663L的操作非常简单,配置好了,周期读取即可。
MPU6050:6050的数据手册比较长,大概看了下,它输出的是加速度和角速度,考虑到在不同量程下的精度不一样,可以拟定一个量程动态调整的规则,如达到80%上限时,自动提升量程,小于30%量程时,降低量程。在使用动态量程的情况下:带宽计算公式:(3 + 8)* 10 * (f_accel + f_gyro) ,在采样频率1k情况下,得220000。
IIC总带宽是400k,另外两个传感器占用5%的样子,也就是说 f_gyro最大可以提升到2k。
采集方式软件上可以通过一个1ms定时器,一个周期内,先等待6050采样完成,然后将六轴数据读取出来,并进行量程判断及变更;然后判断5883的8ms间隔是否达到,达到就进行一次访问;同样以25Hz的频率访问280即可。
在RTOS中,这个IIC的1ms处理周期必须拥有最高优先级,被阻塞时间不能超过200uS。如果不能保证这一点,可以在中断中进行逻辑和数据存储的处理。