0,MS5611框图
1,原理图
项目需要用到MS5611气压计模块,原理图很简单明了,如下:
这里PS接GND是SPI接口模式,PS接VDD是I2C接口模式。我在设计原理图时候直接设置成了SPI模式,当然这个SPI不是纯粹意义的SPI接口,后面会有展开说。
2,关于MS5611
1,支持SPI模式和I2C模式其中现在网络上大量存在的代码基本都是I2C接口的。SPI接口占用线多但是有一个好处就是明确的延时。
2,这个器件在流片后厂家根据其每个芯片不同的物理特性将多个不一样的特性参数写在了RPOM里面。用户使用时候需要先一次性读出这些不变的参数,用来参与气压和温度的计算。
3,使用时候读出两个24位的数据,结合之前得到6个16位数据进行计算,就可以得到温度和气压。
4,海拔高度是根据海平面的气压结合当前气压(一般取101325,当然更准确的需要用当时当地的修正海压),用公式计算出来的数值,是气压的一个应用而已。
5,芯片需要一个复位命令。在SPI模式下时序如下;
这里我们看到SDO在执行复位期间是低电平的,执行完毕复位之后才拉高。 这是SPI模式的专利:可以等待SDO为高之后返回。I2C是不会有这个复位过程指示,用户程序只能在下次操作芯片之前延迟足够的时间3ms应该足够。
6,芯片支持多个精度,精度越高需要芯片转换或者运算的就越长,
7,平时MS5611不转换,我们只有在发送转换命令时候模块才进行ADC的采样等操作,至于采取何种精度的采样根据你发来的命令,比如上述命令表格就是各个不同精度对应的采样命令。
8,下发采样的命令时序例子如下:
这里看到可SDO为高电平才以为着采样完成,此后就可以都24位的D1或者D2了。
9,在执行完毕上述采样命令之后,就可以无堵塞读出24位结果。读24位的D1或者D2时序如下:
10,总结一下上述几个SPI操作指令,如下:
11,上述RESET 和D1 D2转换指令实际的格式类似,判断结束的条件也是SDO为1,不同的就是命令字,因此在实施时候可以看作1类指令。这样其实就归纳成下面三种指令
A,发送命令的指令。
B,都6个16位PROM内容的指令。
C, 读D1或者D2的指令。(都D1和都D2时序一样,跟在转D1换命令之后的都就是读出D1,D2亦然)。
12,随着要求的精度提高(OSR数值提高)一次D1或者D2转换需要占用10ms时间,这10ms如果用死循环方式空转处理器的话,可能耽误干别的活儿,尤其是用ZYNQ这样几百兆主频的处理器,这10ms可以干很多事情的。