基于TI MSPM0G3507多功能GPS测速仪系统开发设计
1 项目背景及构想
本文引用地址:https://www.eepw.com.cn/article/202503/468220.htmGPS应用无处不在,比如汽车导航应用,应急救灾,各种app 的LBS(基于位置的服务),给我们生活带来各种便利。可以说,没有GPS,我们寸步难行,尤其是目前很火的自动驾驶。结合自己工作主要也是和车联网V2X 相关,但是对GPS 的了解也只百度百科的认识程度,一直想做一个小东西,来进一步了解GPS 模块的相关特点。另外在有时候骑共享单车时候,总会听到有语音提示,想到如果自己实现的话,可以采用什么样的方案呢?
所以就有了这个项目的构想,即要结合GPS,又要有语音模块,主要结合这两方面来构想产品的功能。
主要解决的问题是:通过解析GPS 数据,获取速度,及低成本的语音提示功能的实现。
项目的亮点:TI 芯片低成本的语音提示功能的实现。
2 实现的主要功能
这个项目利用GPS 模块开发一款多功能测速仪,主要实现以下功能:
(1)按键切换室内模式和户外模式
(2)户外模式使用GPS 同步时间
(3)使用GPS 模块输出的经纬度等信息计算速度
(4)使用地磁传感器通过LCD显示电子罗盘方向角
(5)室内模式实现时钟和定时器功能
(6)使用喇叭播放自定义报警音
3 系统架构图和流程图
流程图:
4 硬件选型
MCU
LP-MSPM0G3507 LaunchPad™ 开发套件是基于MSPM0G3507 的易用型评估模块(EVM),具有128 KB闪存、32 KB SRAM、2 个12 位4 Msps ADC、DAC、3 个COMP、3 个运算放大器、CAN-FD、MATHACL 的80MHz Arm M0 + MCU。
该板包含三个按钮、两个LED(其中一个是RGBLED)以及模拟温度传感器和光传感器,还有一个外部缓冲器,用于显示4 MSPS 时的高速ADC 性能。
特性
外部环境光传感器
RGB 显示PWM 控制
用于显示4 MHz 高速ADC 的外部缓冲器
外部温度传感器
一个词形容:就是精美!
GPS 模块
GPS 北斗双模导航定位模块ATGM336HATGM336H-5N 系列模块是9.7×10.1 尺寸的高性能BDS/GNSS 全星座定位导航模块系列的总称,该系列模块都是基于中科微第四代采用完全自主知识产权的低功耗GNSS SOC 芯片一AT6558,支持多种卫星导航系统,包括中国的BDS(北斗卫星导航系统),美国的GPS,俄罗斯的GLONASS,欧盟的GALILEO, 日本的QZSS 以及卫星增强系统SBAS(WAAS, EGNOS,GAGANMSAS)。ATGM336H 是一款真正意义的六合一多模卫星导航模块,包含32 个跟踪通道可以同时接收六个卫星导航系统的GNSS 信号,并且实现联合定位、导航与授时。具有高灵敏度、低功耗、低成本等优势,适用于车载定位与导航和手持或可穿藏设备,可以直接替换U-bloxMAX 系列模块。
LCD
矽创电子Sitronix TFT(Thin Film Transistor)即薄膜场效应晶体管属于有源矩阵液晶显示器中的一种。TFT 液晶显示屏的特点是亮度好、对比度高、层次感强、颜色鲜艳,但也存在着比较耗电和成本较高的不足SPI 接口。
地磁传感器
HMC5883L 是一款高集成的弱磁传感器芯片,带有能使罗盘精度控制在 1° ~ 2°的模数转换器。其灵敏度较高,开发难度不高。
喇叭
5 硬件资源占用及引脚分配
6 整体硬件连接图
7 软件模块开发
LCD模块
ST7735S LCD模块使用的是SPI驱动,主要通过选择命令引脚还是数据引脚,来进行控制电以后初始化进行屏幕相关的配置,显示字符数字就是在指定的位置进行填充来实现。
软件配置:
软件处理
最核心的就是画点,这里为什么写入是16 位的数据?涉及到颜色的编码,像素。RGB 565 16 bit/Pixel 。主要注意的地方:时序。可以通过逻辑分析仪查看发送的数据的时序。
LCD实测效果:
GPS模块
主要功能:
MCU主通过串口中断接收GPS 模块发过来的NMEA协议数据,进行解析,获取经纬度及速度数据,时间数据。波特率为9600。
NMEA协议简介
NMEA协议是为了在不同的GPS(全球定位系统)导航设备中建立统一的BTCM(海事无线电技术委员会)标准,由美国国家海洋电子协会(NMEA-The National Marine Electronics Associa-tion)制定的一套通讯协议。GPS接收机根据NMEA-0183 协议的标准规范,将位置、速度等信息通过串口传送到PC 机、PDA等设备。
NMEA-0183协议是GPS接收机应当遵守的标准协议,也是目前GPS 接收机上使用最广泛的协议,大多数常见的GPS接收机、GPS数据处理软件、导航软件都遵守或者至少兼容这个协议。
NMEA-0183协议定义的语句非常多,但是常用的或者说兼容性最广的语句只有$GPGGA、$GPGSA、$GPGSV、$GPRMC、$GPVTG、$GPGLL 等。
Global Positioning System Fix Data(GGA):GPS 定位信息
GPS DOP and Active Satellites(GSA):当前卫星信息
GPS Satellites in View(GSV):可见卫星信息
Recommended Minimum Specific GPS/TRANSITData(RMC):推荐定位信息
下面给出这些常用NMEA-0183 语句的字段定义解释。
数据格式如下:
$GPRMC,014600.00,A,2237.496474,N,11356.089515,
E,0.0,225.5,310518,2.3,W,A*23
field 0:$GPRMC,格式ID,表示该格式为建议的最低特定GPS/TRANSIT 数据(RMC)推荐最低定位信息
field 1:UTC 时间,格式hhmmss.ssss,代表时分秒. 毫秒
field 2:状态A:代表定位成功 V:代表定位失败
field 3:纬度ddmm.mmmmmm 度格式(如果前导位数不足,则用0填充)
field 4:纬度N(北纬) S(南纬)
field 5:经度dddmm.mmmmmm 度格式(如果前导位数不足,则用0填充)
field 6:经度E(东经) W(西经)
field 7:速度(也为1.852 km / h)
field 8:方位角,度(二维方向,等效于二维罗盘)
field 9:UTC 日期DDMMYY 天月年
field 10:磁偏角(000 -180)度,如果前导位数不足,则用0 填充)
field 11:磁偏角方向E = 东 W = 西
field 12: 模式,A = 自动,D = 差分,E = 估计,
AND = 无效数据(3.0 协议内容)
fi eld 13:校验和
UART软件配置
软件处理
主要是在中断中处理识别关键字符, 然后进行字符串,解析处理。
GPS实测效果
地磁模块
地磁传感器HMC5883L通过I2C接口访问,初始化通过配置寄存器,然后读取X Y Z,三个坐标轴,进行后续的换算显示。
I2C时序
软件配置:
注:配置速率100 KHz
软件处理:
注:主要是读6个寄存器数据,而提供的api非常简单易用
地磁传感器实测效果
语音模块
一般地,用蜂鸣器滴滴两声就达到效果,这里我们要实现自定义语音播放,所以用到DAC 模块。
原理是:将准备的wav 语音数据,使用GoldWave语音剪辑软件将数据尽量压缩成单声道采样率8 K,8 bit 数据,这样可以保证1 s 音频数据占用8 K 存储空间,以节省空间。
关于播放,直接使用DAC,按8 K 的频率读取数据放到DAC 输出就可以。
软件配置
注:使能DMA,设置分辨率为8 位,采样率为8 kSPS软件处理
这里其实首先需要将WAV 格式的音频数据,提取出来生成const 的数组,这样就会存储在fl ash,不占用ram 空间。这部分处理,采用python 做个小工具,方便后续可以直接方便使用。
直接使用DMA设置源数据地址,及目的地址DAC输出。非常简单实现自定义音频数据播放
8 总结
1.TI 芯片如何帮助我快速完成这个项目?
其实项目的功能总体并不复杂,遇到的第一个困难主要就是常用外设驱动的再熟悉,项目主要就是一些常用外设的使用,由于TI 的资料例子文档很丰富,上手非常的快,方便快速验证功能,而不是花费时间在熟悉芯片寄存器等芯片问题上。没有让芯片成为项目的一个卡点一个问题点,一句话,就是没有在芯片上踩坑,节省了时间。
尤其是syscfg 驱动配置工具的使用,就是一个神器,只要配置好相关功能,就再也不发愁驱动的编写和测试,极大方便应用程序的开发。
还有一个困难就是语音模块实现方案,原来只是有个思考,但具体实现一直不成功,喇叭一直没有声音,在这里,帮助最大的是TI 文档中心里面的一篇:《基于MSPM0 的医用警报设计》,参考这个然后实现了低成本语音模块。
2.对新手建议
新手入门TI M0 芯片最快的方式还是跑官方提供的例子,使用配套IDE,Code ComposerStudio 熟悉配置,申请使用官方的评估版来快速入门外设驱动。
还有就是加入官方的微信群有问题及时和网友交流,会有TI 的FAE 及热心网友出谋划策,方便问题的解决。
(本文来源于《EEPW》202503)
评论