基于MCU的室外移动机器人组合导航定位系统
D); //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电路
MAX3111E的控制命令分为写配置命令、读配置命令、写数据命令以及读数据命令四种。本文写入芯片的配置命令是0xE809,8bit数据长度、使能 FIFO、发送中断使能、波特率38400bps.数据的写入需要在每个字节前面加上0x81,例如若要发送字节0x55,则需要从DIN端移位输入 0x8155.
下面是连续发送n个字节的C语言代码:
SPI_WRITE_16BIT(0xE809);//写配置命令
delay_ms(10);//延时10ms
SPI_WRITE_16BIT(0x8100+DATA1);//发送第1个数据DATA1
delay_ns(250);//延时250ns
SPI_WRITE_16BIT(0x8100+DATA2);//发送第2个数据DATA2
……
delay_ns(250);//延时250ns
SPI_WRITE_16BIT(0x8100+DATAn);//发送第n个数据DATAn
使用MAX3111E时需要注意:
1、片选信号CS的下降沿到时钟SCLK信号的第一个上升沿至少要有100ns的时间延迟;
2、芯片判定片选信号CS失效时,需要CS管脚保持高电平的时间至少为200ns.因此当需要连续发送数据时,两个写数据命令之间至少需要200ns,建议间隔250ns;
3、写配置命令需要晶振工作稳定,因此可以在写配置命令后再读配置,直到写入和读出的配置数据相应位相同时才保证芯片按需求配置完毕。
3软件设计
3.1 GPIO模拟SPI实现方法
使用GPIO模拟SPI,对选定的IO口进行时序上的电平操作,模拟出SPI时序。本文将SPI的电平操作采用宏定义的方式,可参考表3中的源代码。
程序按照SPI逻辑关系使用上述的宏定义,可以在选定的IO端口产生SPI信号,并且可以灵活的控制每个CS有效期间的时钟数。使用GPIO模拟的SPI 具有操作直观、灵活可变等优点。相比较模拟得到的SPI,控制器上自带的SPI接口基本不占用控制器资源,发送和接收的移位、时钟信号的产生都交由内部 SPI模块处理。而GPIO模拟的SPI需要控制器不断对IO进行操作,因此会占用控制器处理时间。时钟信号也因对电平操作消耗机器周期,导致时钟信号速度有限。
3.2数据的采集和处理方法
IMU和GNSS接收机的数据会主动发送到430单片机的UART接口,本文采用中断接收的方式接收数据,将每次到来的一个字节循环存储在指定的存储区;气压计需要430单片机查询式获取高度信息。因此当需求IMU或者GNSS信息的时候,需要在存储区内扫描数据,扫描依据是设备发送一帧数据的协议(帧头、帧尾、CRC等),再根据协议获取相应物理量的数值;当需要高度信息的时候,需要430单片机对气压计发送控制字获取信息。在对IMU和GNSS信息扫描时需要一个变量ptr保存有效数据的首地址在存储区内的偏移地址,为了不重复使用已用数据,需要在利用完信息后,破坏这一帧有效数据的帧头帧尾。
另外需要注意,使用循环存储数据和扫描取用这种方式,需要数据的处理速度
- 便携式移动机器人手持监控系统设计(02-27)
- 移动机器人感测系统电路设计(08-02)
- 时下机器人的关键技术及应用(09-09)
- 移动机器人的选择与整体规划(09-18)
- 轮式移动机器人伺服控制系统设计(10-02)
- 移动机器人的那些避障方法你知多少?(10-22)