图4 MS5803-02BA接口电路
MS5803-02BA的控制命令包括复位命令、温度ADC命令、气压ADC命令、ADC读取命令、PROM读取命令。控制命令如表2所示。
控制命令通过SDI口移位输入,响应结果从SDO移位输出。输入的电平判定在时钟信号的上升沿,输出的电平判定在时钟信号的下降沿。输出的气压值可以进行温度补偿,需要利用芯片内部PROM中的系数来补偿。ADC读取命令输入之后,输出24位ADC结果;PROM读取命令输入之后,输出16位补偿系数。
下面是读取ADC的C语言代码:
CSN_OFF_MS();//CS置低
SPI_WRITE_8BIT(CMD);//SDI移入8位CMD
delay_ms(10); //延时10ms
CSN_ON_MS();//CS置高
CSN_OFF_MS();//CS置低
SPI_WRITE_8BIT(0x00);//SDI移入8位0x00
result = SPI_READ_24BIT();//SDO移出24位
CSN_ON_MS();//CS置高
下面是读取PROM的C语言代码:
CSN_OFF_MS();//CS置低
SPI_WRITE_8BIT(CMD); //SDI移入8位CMD
result=SPI_READ_16BIT();//SDO移出24位
CSN_ON_MS();//CS置高
结合器件的使用手册及手册疏漏的地方,使用MS5803-02BA时需要注意:
1、温度和气压ADC命令发送之后,芯片内部需要一定的时间进行采样转换,具体时间与过采样率(OSR)有关,最大需求时间为10ms,因此本文采用的延时时间为10ms;
2、片选信号CS的下降沿到时钟SCLK信号的第一个上升沿至少要有21ns的时间延迟,否则命令无法正确写入芯片;
3、8位的ADC读取命令之后,必须保持CS片选信号持续为低,再产生24位时钟信号输入,将24位的ADC结果读取出来(即一个命令字为8位,但实际需要32个连续的时钟周期才能完整读取ADC结果);
4、对于PROM读取命令同ADC读取命令,一共需要24个连续的时钟周期完成,其中8位命令字输入,16位数据读出。
5、对于所有从SDO移位输出数据的同时,都需要SDI输入端保持低电平。
2.5 SPI转UART电路
由于MSP430F149的片上UART资源都被IMU器件和GNSS接收机占用,因此需要扩充一个UART接口才能满足定位系统与PC机间的通信。为此将MSP430F149上的GPIO模拟SPI,再通过MAX3111E芯片转成UART接口。
MAX3111E是MAXIM公司推出的全功能收发器,内部包含UART和RS232电平转换两个独立的部分。UART部分包括兼容于SPI的串行接口、可编程波特率发生器、发送移位寄存器、接收移位寄存器、8字长的FIFO以及4种可屏蔽中断发生器;RS232部分包括电泵电容、硬件关断(SHDN管脚),具有±15kV静电保护作用。它可以选择1.8432MHz或3.6864MHz两种晶振作为外部晶振,芯片能够工作在300bps~230kbps波特率,本文使用的是3.6864MHz晶振。MAX3111E与MSP430F149连接电路如图5。
图5 SPI转UART电路
本文关键字:机器人 机器人-智能车,电子知识资料 - 机器人-智能车