四川九洲電器集團公司 王維維 昌 暢 馮 碩
用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年畢業于電子科技大學,主要從事電子信息方面工作。