×
嵌入式 > 嵌入式开发 > 详情

基于MCU的室外移动机器人组合导航定位系统

发布时间:2020-06-18 发布时间:
|

对于在室外环境工作的移动机器人通常使用惯导/卫星组合导航方式。惯性导航系统[1]具有完全自主、抗干扰强、隐蔽能力好和输出参数全面等优点,但它的鲁棒性极低,误差会不断随时间累积发散。卫星导航系统具有精度高、定位范围广和误差不随时间累积等优点,但其自主性差、易受外界遮挡和干扰、接收机数据更新频率低等缺点。因此工程上常常将两者互补结合使用,组成卫星/惯性组合导航系统。

本文以低功耗MSP430F149为核心,设计了能够同时实现卫星导航(GNSS)接收机、惯性测量单元(IMU)、气压高度等导航信息的高速采集与高速合路传输,并进行初步导航定位信息融合的导航系统,即可为室外移动机器人提供直接的导航服务,也可作为高精度组合导航系统的原始测量信息高速采集系统。

系统设计的关键是利用单片机有限的接口资源实现了多传感器信息并行采集,设计了有效的数据同步方法,解决了气压传感器数据手册疏漏导致的无法接入问题,给出了机器人组合定位的基本方法。系统充分利用了MSP430F149单片机的能力,具有结构简单、低功耗、对传感器具有普适性等优点。

1总体设计

本系统由电源、气压计接口、IMU接口、GNSS接收机接口、SPI转UART模块及MSP430F149构成。系统组成如图1所示。

组合导航系统的功能实现分为IMU数据接收与解析、GNSS数据接收与解析、气压计数据接收与解析、组合导航解算以及数据输出五个部分。IMU数据接收与解析功能用来获取导航解算中需要的加速度和角速度信息;GNSS数据接收与解析功能用来获取导航解算中需要的位置和速度信息(松耦合组合)或者GNSS伪距和伪距率(紧耦合组合);气压计数据接收与解析功能用来获取高度信息;组合导航解算功能为系统核心,用来进行组合导航解算;数据的输出包括原始数据包的整合输出和解算结果的输出。

图1系统组成结构图

本文所使用的惯性器件和GNSS接收机都是RS-232电平的UART接口,具有通用性,用户可根据成本考虑不同精度的设备。气压计选用美国MEAS公司生产的MS5803-02BA,已经固化在电路中。

2硬件电路设计

2.1微控制器接口

整个组合导航定位系统需要三个UART接口和两个SPI接口。其中两个UART接口由430单片机自带的UART资源提供,另外一个UART接口由GPIO模拟SPI通过MAX3111E芯片转化得到;两个SPI接口由GPIO模拟得到。另外需要一个外部中断引脚捕获秒脉冲信号(PPS)、一个外部中断引脚捕获MAX3111E中断信号。MSP430F149管脚资源分配如表1所示。

2.2电源电路

本系统供电需求为3.3V供电,因此采用AMS1117稳压芯片,接入5V电源即可输出3.3V稳定电压,可提供1A电流,满足系统供电需求。电路设计如图2所示。

图2电源电路

2.3 IMU器件及GNSS接收机接口电路

IMU器件及GNSS接收机都采用UART接口方式接入,采用RS232协议。因此可使用430单片机上自带的两个UART接口,但是需要进行TTL电平与RS232电平转换。这里采用常见的MAX3232芯片,电路设计如图3所示。

图3 IMU及GNSS接口电路

2.4气压计MS5803-02BA接口电路

MS5803-02BA[3]是由MEAS公司生产的数字压力传感器,分辨率达10cm.芯片内部包含一个高线性的压力传感器和一个内部工厂标定系数的超低功耗24位ΔΣ型ADC.该款芯片有SPI和I2C两种接口方式,通过芯片的PS引脚配置了选择不同的接口方式(PS置低时,采用SPI工作模式;PS置高时,采用I2C工作模式)。本文所阐述的定位系统将气压计配置为SPI工作模式。MS5803-02BA与微控制器间的接口电路设计如图4所示。

图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输入端保持低电平。

 


『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
一只老鸟的嵌入式ARM学习心得