一、基础知识
首先,MS5611是什么
MS5611气压传感器是由MEAS(瑞士)推出的一款SPI和I²C总线接口的新一代高分辨率气压传感器,分辨率可达到10cm。该传感器模块包括一个高线性度的压力传感器和一个超低功耗的24位Σ模数转换器(工厂校准系数)。
计算温度:
D2 = MS5611_DO_Conversion(OSR_Temp);
delay_ms(10);
dT = D2 - (((u32)c5)*256) ;
Temperature = 2000 + dT*((float)c6)/8388608 ;
计算大气压:
D1 = MS5611_DO_Conversion(OSR_Pressure) ;
delay_ms(10) ;
OFF = (((int64_t)c2)*65536 + (((int64_t)c4*dT)/128)) ;
SENS = (((int64_t)c1)*32768) + (((int64_t)c3*dT)/256) ;
if(Temperature 《 2000) //µ±Î¶ÈÖµTEMPСÓÚ2000ʱÐèÒª&TImes;öζȲ¹³¥
{
T2 = (float)(dT*dT)/0x80000000 ;
Aux = (Temperature - 2000)*(Temperature - 2000) ;
OFF2 = 2.5f*Aux ;
SENS2 = 1.25f*Aux ;
if(Temperature 《 -1500) //µ±Î¶ÈÖµTEMPСÓÚ-1500ʱÐèÒª&TImes;öζȲ¹³¥
{
Aux = (Temperature+1500)*(Temperature+1500);
OFF2 = OFF2 + 7*Aux;
SENS2 = SENS2 + 5.5f*Aux;
}
}
else
{
T2 = 0 ;
OFF2 = 0 ;
SENS2= 0 ;
}
Temperature = Temperature - T2 ;
OFF = OFF - OFF2 ;
SENS = SENS - SENS2 ;
Pressure = ((D1*SENS)/2097152 - OFF)/32768 ;
海拔计算:
AlTItude = (44330.0f*(1.0f - pow((float)Pressure/101325.0f, 0.190295f))) ;
MS5611主要用于智能手机、海拔高度测量和导航辅助,做四轴的朋友一般都了解。
其次,对于飞行器的姿态控制,我们使用GY-86 10DOF 的模块,里面带有MS5611 + MPU6050 + HMC5883,通过IIC协议读取数据进行操作。MS5611挂在MPU5060的从I2C接口上。MS5611的I2C地址为0b111011Cx,其中C比特位由CSB引脚决定,为CSB引脚的补码值(取反)。GY-86上 MS5611的CSB引脚接地,所以CSB引脚值为0,8位I2C地址为0b1110111x(0xEE),7位I2C地址为 0b1110111(0x77)。
这里,0b表示二进制,0x表示十六进制,数字前加0表示八进制。例如:
‘\077’ //是8进制表示‘ ’,0可以省略,因为C,C++规定不允许使用斜杠加10进制数来表示字符;
‘\0x3F’ //是16进制表示。这些都是C语言中的基础
二、运行结果
三、相应模块
程序涉及的模块有:
RCC:复位及时钟控制模块,用于初始化STM32 USART外设时钟及IO口复用时钟;
IIC:模拟IIC 协议,好多人都说STM32的硬件IIC模块用不了,主要是因为STM32 的硬件 IIC 模块有个天生的 BUG,就是不能被中断,也就是IIC要处于中断的最高级,ST在自己后来的 DataSheet 中已经证实了这一点。
Delay:利用系统时钟SysTIck,也号称“滴答”,写的延时模块;
USART:串口模块;
MS5611:MS5611模块配置。
技术专区
- Alexa语音服务软件扩展STM32Cube
- 结合DNN API驱动未来神经网络应用的解决方案
- 针对于高端移动通信和汽车市场的四集群设计
- 一款基于帧捕捉的开源图形调试器应用设计
- 即将成为标准配置的最新安全技术:后视摄像系统