时间:2024-09-03
四川九洲电器集团公司 王维维 昌 畅 冯 硕
用MSP430F149实现GPS时间数据处理及CAN总线通信系统
四川九洲电器集团公司 王维维 昌 畅 冯 硕
本文介绍一种使用TI的16位超低功耗单片机MSP430F149来接收GPS OEM板的时间数据,进行守时处理,并把实时时间数据通过CAN总线来对外传输。其中,CAN总线是利用MSP430F149单片机和独立CAN控制器MCP2515来实现的。
MSP430F149;GPS数据;CAN总线;MCP2515
TI的MSP430系列单片机是一种16位单片机。由于它集成度高、外围设备丰富、超低功耗等优点,因此在许多领域内得到了广泛的应用。本设计中所涉及的MSP430F149功能模块的利用:2个串行通信接口(USART0/1)、2个16位的定时器(TimerA/B)、I/O口的一般I/O功能和P1和P2口的I/O中断功能。
CAN总线是一种串行数据通信协议,其通信接口集成了CAN协议的物理层和数据链路层功能,可完成对数据的成帧处理。CAN总线支持全双工通信,采用对通信数据块编码的方式,可使网络内节点个数在理论上不受限制,还可使不同的节点同时接收到相同的数据。CAN总线以其可靠性高、通信速率快、稳定性好、抗干扰能力强等特点,成为工控领域中最佳的选择。
该系统硬件主要由以下几部分组成:GPS OEM板,MCU为TI的MSP430F149,CAN总线控制器为MicroChip公司的MCP2515,CAN收发器为PHILIPS的PCA82C250,以及电源输入与电源切换电路。具体见图1:
本文所采用GPS OEM板,其输出串行数据格式为:波特率9600,无校验、8个数据位、1个停止位。输出信息设置为符合NMEA0183 VER2.0协议的ASCII码。输出语句为GPRMC语句,其具体数据格式为:
$GPRMC,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,<10>,<11>,<12>*hh
其中,“$”表示串头;GP为标识符;RMC表示语句名;<1>,<2>,….,<12>为输出语句的数据字段;“*”表示串尾;hh代表“$”和“*”之间所有字符代码的校验和。所有的语句都必须以
该GPS OEM板的串行数据输出管脚为标准CMOS逻辑电平,故可以直接与单片机的串行数据接收管脚连接,而不需另加RS-232电平转换芯片进行逻辑电平的转换。
完全支持CAN V2.0B技术规范,能收、发标准数据帧以及扩展数据帧,最高通信速率为1Mb/s;
两个接收缓冲器,三个发送缓冲器,能对接收帧进行屏蔽、过滤,且优先级可编程设定。
具有高速SPI接口(10MHz)。
有灵活的中断管理功能,方便数据的组织和信息的管理。
上述这些特性,使得MCU对于CAN总线的操作变得更方便、高效。
更多关于MCP2515芯片的描述,详见其数据手册,在此不做详谈。
由于本系统要接收GPS数据,并用MCU进行守时,守时阶段由电池对MCU和晶体电路进行供电,MCP2515、GPS OEM板和PCA82C250不工作。
非守时阶段,即系统正常工作时,所有功能模块均由外部电源供电,电池不工作。
电源切换电路的具体实现如图2:其中D1、D2为低压降的二极管。1K阻值的R1,其作用是当输入电源中的一方断电时,确保另外一方不对断电方提供漏电压。输入电压经过DC/DC芯片TPS76030变换后,产生3V电压(com_3v),对MCU和晶体电路进行供电。其余电路部分分别由外部输入的3.3V和5V供电。
系统软件的设计主要分三部分:MCU的UASRT1口配置为UART模块,进行GPS串行数据的接收和组织;MCU的TIMERA和TIMERB进行有效时间数据的加载和守时;MCU的UASRT0口配置为SPI模块,采用三线SPI的主机模式,与MCP2515进行数据交互,实现CAN总线系统的搭建。
本部分由一个状态机控制,为了简化设计,共分为3个状态{同步头状态,命令头状态,GPS数据保存、分析状态},分别对应于:
(1)缺省状态:同步头“$”搜索、捕获状态。
(2)语句命令头“GPRMC”搜索、捕获状态。
(3)GPS数据信息的保存和分析状态。
(4)即回到状态1,重新进入同步头“$”搜索、捕获状态。
详细数据处理流程见图3:
全局变量的使用如下:hour、minute、second、day、month、year,分别作为时、分、秒、日、月、年的计数单元。cnt3125为计320us的计数单元,计3125次即为1秒。数组gps_data[55],为接收GPS数据的缓存。data_to_timerA,数据是否已经加载完毕的标志。gps_flag,作为GPS数据是否有效的标志。
主程序中,当GPS数据有效标志gps_flag=‘1’时,把gps_data[55]对应单元中的时间数据由ASCII码转换为二进制数据,并进行“时”数据的“+8”处理后,分别加载到hour、minute、second、day、month、year中。令data_to_timerA=‘1’,通知TimerA,数据已成功加载到守时计数单元。同时,打开TimerB,进行秒输入间隔超过1秒的超时判断。
使用了3个中断:定时器TimerA和TimerB中断,还有GPS秒输入信号中断。
TimerA中断主要是完成模块守时,并实时产生秒输出信号。
TimerB中断是完成GPS秒输入信号间隔大于1秒的处理。当秒间隔超过1秒时,令data_to_timerA=‘0’,清除GPS有效数据加载标志。
GPS秒输入信号中断,当data_to_timerA=‘1’时,对cnt3125计数单元清零,清除timerA计数初值,然后启动timerA,进行“增计数”,同时产生秒输出信号,最后令data_to_timerA=‘0’。
GPS数据与秒输入信号共有4种可能的情形:
(1)GPS数据有效,GPS秒输入有效,见图4:
(2)GPS数据有效,GPS秒输入无效,见图5:
(3)GPS数据无效,GPS秒输入无效,见图6:
(4)GPS数据无效,GPS秒信号输入有效:其具体处理同第3种情形,即TimerA持续“开”,进行基本秒单元的计时和时、分、日、月、年单元的计数守时。同时实时产生GPS秒输出信号。TimerB一直关闭,不工作。
图1 系统硬件设计框图
图2 系统电源输入及电源切换电路
图3 UART1接收中断数据处理流程图
MCU通过SPI总线与MCP2515进行接口,其数据传输速率设为1.6Mbps。MCU通过SPI的“串口发送中断”来对MCP2515进行写操作,通过“查询”的方式来获得MCP2515的状态信息以及数据信息。本系统中,CAN数据速率设置为1Mbps。
MCU对MCP2515的数据接收:当MCP2515的接收缓冲器中接收满CAN数据时,在MCP2515的/INT管脚产生中断信号,通过MCU的I/O口中断来得知CAN数据已接收好,即时把CAN数据接收到MCU。
MCU对MCP2515的数据发送:只需要被发送的信息帧传送到CAN的发送缓冲器,然后传送一条“请求发送”指令,启动数据的发送。
该模块通信软件由3部分组成:MCP2515初始化、CAN数据接收、CAN数据发送。
图4 GPS数据有效,GPS秒输入有效
图5 GPS数据有效,GPS秒输入无效
图6 GPS数据无效,GPS秒输入无效
图7 CAN数据接收流程图
图8 CAN数据发送流程图
(1)MCP2515的初始化:
主要完成CAN的通信速率设置、接收寄存器设置、ID屏蔽寄存器和ID过滤寄存器设置以及CAN收/发中断功能的设置。MCU对MCP2515所有寄存器的操作,都必须通过SPI接口,用MCP2515内置的读写命令来完成。
因为MCP2515初始化完成后,默认处于“配置”模式,所以需要在初始化完成后,将其置为“正常”模式,否则MCP2515将一直停留于“配置”模式,而无法正常工作。
(2)CAN数据的接收:
MCU调用函数ReceiveMsg(),功能为:验收、滤波正确之后,收到的信息自动存放在MCP2515的接收缓冲中,由MCP2515产生中断,通知MCU进行CAN数据的接收和后续处理。其详细流程见图7:
(3)CAN数据的发送:
MCU组织好要发送到CAN总线的数据后,发送一条“读状态”命令,来判断MCP2515把前面一条报文是否已发送完毕。若前一条报文已发送完成,则调用发送函数SendMsg(),功能为:把待发送数据装载到MCP2515的数据发送缓冲,把待发数据的长度DLC、报文发送优先级、相应的节点ID信息依次装载到MCP2515的对应寄存器后,最后发送一条“数据发送请求”命令,来启动数据向CAN总线的发送。
具体的数据发送流程图见图8:
MCU的主程序中,检测到can_flag=‘1’,就转而进行已接收CAN数据的分析。当发现CAN总线传来的命令是要求守时模块进行时间传输时,立即组织相应的时间数据,并通过CAN总线发送出去。
经实践证明,该系统能很好的完成GPS OEM板数据的接收、超低功耗MCU的软件守时以及与CAN总线的数据交互工作。软件全部采用C语言进行编写,具有较强的通用性、扩展性和可移植性。
[1]秦龙.MSP430单片机C语言应用程序设计实例精讲[M].电子工业出版社,2006.
[2]陈桂珍.利用MATLAB实现GPS OEM板与计算机的通讯及信息处理[J].盐城工学院学报,2006.
[3]邬宽明.CAN总线原理和应用系统设计[J].北京航空航天大学出版社,1996.
[4]王继国.CAN总线控制器MCP2515的原理及应用[J].电测与仪表,2004.
王维维(1980—),男,陕西人,2002年毕业于武汉大学,主要从事电子信息方面工作。
昌畅(1987—),男,重庆人,2009年毕业于四川大学,主要从事电子信息方面工作。
冯硕(1984—),男,四川人,2007年毕业于电子科技大学,主要从事电子信息方面工作。
我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!