四川九洲電器集團(tuán)公司 王維維 昌 暢 馮 碩
用MSP430F149實(shí)現(xiàn)GPS時(shí)間數(shù)據(jù)處理及CAN總線通信系統(tǒng)
四川九洲電器集團(tuán)公司 王維維 昌 暢 馮 碩
本文介紹一種使用TI的16位超低功耗單片機(jī)MSP430F149來(lái)接收GPS OEM板的時(shí)間數(shù)據(jù),進(jìn)行守時(shí)處理,并把實(shí)時(shí)時(shí)間數(shù)據(jù)通過(guò)CAN總線來(lái)對(duì)外傳輸。其中,CAN總線是利用MSP430F149單片機(jī)和獨(dú)立CAN控制器MCP2515來(lái)實(shí)現(xiàn)的。
MSP430F149;GPS數(shù)據(jù);CAN總線;MCP2515
TI的MSP430系列單片機(jī)是一種16位單片機(jī)。由于它集成度高、外圍設(shè)備豐富、超低功耗等優(yōu)點(diǎn),因此在許多領(lǐng)域內(nèi)得到了廣泛的應(yīng)用。本設(shè)計(jì)中所涉及的MSP430F149功能模塊的利用:2個(gè)串行通信接口(USART0/1)、2個(gè)16位的定時(shí)器(TimerA/B)、I/O口的一般I/O功能和P1和P2口的I/O中斷功能。
CAN總線是一種串行數(shù)據(jù)通信協(xié)議,其通信接口集成了CAN協(xié)議的物理層和數(shù)據(jù)鏈路層功能,可完成對(duì)數(shù)據(jù)的成幀處理。CAN總線支持全雙工通信,采用對(duì)通信數(shù)據(jù)塊編碼的方式,可使網(wǎng)絡(luò)內(nèi)節(jié)點(diǎn)個(gè)數(shù)在理論上不受限制,還可使不同的節(jié)點(diǎn)同時(shí)接收到相同的數(shù)據(jù)。CAN總線以其可靠性高、通信速率快、穩(wěn)定性好、抗干擾能力強(qiáng)等特點(diǎn),成為工控領(lǐng)域中最佳的選擇。
該系統(tǒng)硬件主要由以下幾部分組成:GPS OEM板,MCU為T(mén)I的MSP430F149,CAN總線控制器為MicroChip公司的MCP2515,CAN收發(fā)器為PHILIPS的PCA82C250,以及電源輸入與電源切換電路。具體見(jiàn)圖1:
本文所采用GPS OEM板,其輸出串行數(shù)據(jù)格式為:波特率9600,無(wú)校驗(yàn)、8個(gè)數(shù)據(jù)位、1個(gè)停止位。輸出信息設(shè)置為符合NMEA0183 VER2.0協(xié)議的ASCII碼。輸出語(yǔ)句為GPRMC語(yǔ)句,其具體數(shù)據(jù)格式為:
$GPRMC,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,<10>,<11>,<12>*hh
其中,“$”表示串頭;GP為標(biāo)識(shí)符;RMC表示語(yǔ)句名;<1>,<2>,….,<12>為輸出語(yǔ)句的數(shù)據(jù)字段;“*”表示串尾;hh代表“$”和“*”之間所有字符代碼的校驗(yàn)和。所有的語(yǔ)句都必須以
該GPS OEM板的串行數(shù)據(jù)輸出管腳為標(biāo)準(zhǔn)CMOS邏輯電平,故可以直接與單片機(jī)的串行數(shù)據(jù)接收管腳連接,而不需另加RS-232電平轉(zhuǎn)換芯片進(jìn)行邏輯電平的轉(zhuǎn)換。
完全支持CAN V2.0B技術(shù)規(guī)范,能收、發(fā)標(biāo)準(zhǔn)數(shù)據(jù)幀以及擴(kuò)展數(shù)據(jù)幀,最高通信速率為1Mb/s;
兩個(gè)接收緩沖器,三個(gè)發(fā)送緩沖器,能對(duì)接收幀進(jìn)行屏蔽、過(guò)濾,且優(yōu)先級(jí)可編程設(shè)定。
具有高速SPI接口(10MHz)。
有靈活的中斷管理功能,方便數(shù)據(jù)的組織和信息的管理。
上述這些特性,使得MCU對(duì)于CAN總線的操作變得更方便、高效。
更多關(guān)于MCP2515芯片的描述,詳見(jiàn)其數(shù)據(jù)手冊(cè),在此不做詳談。
由于本系統(tǒng)要接收GPS數(shù)據(jù),并用MCU進(jìn)行守時(shí),守時(shí)階段由電池對(duì)MCU和晶體電路進(jìn)行供電,MCP2515、GPS OEM板和PCA82C250不工作。
非守時(shí)階段,即系統(tǒng)正常工作時(shí),所有功能模塊均由外部電源供電,電池不工作。
電源切換電路的具體實(shí)現(xiàn)如圖2:其中D1、D2為低壓降的二極管。1K阻值的R1,其作用是當(dāng)輸入電源中的一方斷電時(shí),確保另外一方不對(duì)斷電方提供漏電壓。輸入電壓經(jīng)過(guò)DC/DC芯片TPS76030變換后,產(chǎn)生3V電壓(com_3v),對(duì)MCU和晶體電路進(jìn)行供電。其余電路部分分別由外部輸入的3.3V和5V供電。
系統(tǒng)軟件的設(shè)計(jì)主要分三部分:MCU的UASRT1口配置為UART模塊,進(jìn)行GPS串行數(shù)據(jù)的接收和組織;MCU的TIMERA和TIMERB進(jìn)行有效時(shí)間數(shù)據(jù)的加載和守時(shí);MCU的UASRT0口配置為SPI模塊,采用三線SPI的主機(jī)模式,與MCP2515進(jìn)行數(shù)據(jù)交互,實(shí)現(xiàn)CAN總線系統(tǒng)的搭建。
本部分由一個(gè)狀態(tài)機(jī)控制,為了簡(jiǎn)化設(shè)計(jì),共分為3個(gè)狀態(tài){同步頭狀態(tài),命令頭狀態(tài),GPS數(shù)據(jù)保存、分析狀態(tài)},分別對(duì)應(yīng)于:
(1)缺省狀態(tài):同步頭“$”搜索、捕獲狀態(tài)。
(2)語(yǔ)句命令頭“GPRMC”搜索、捕獲狀態(tài)。
(3)GPS數(shù)據(jù)信息的保存和分析狀態(tài)。
(4)即回到狀態(tài)1,重新進(jìn)入同步頭“$”搜索、捕獲狀態(tài)。
詳細(xì)數(shù)據(jù)處理流程見(jiàn)圖3:
全局變量的使用如下:hour、minute、second、day、month、year,分別作為時(shí)、分、秒、日、月、年的計(jì)數(shù)單元。cnt3125為計(jì)320us的計(jì)數(shù)單元,計(jì)3125次即為1秒。數(shù)組gps_data[55],為接收GPS數(shù)據(jù)的緩存。data_to_timerA,數(shù)據(jù)是否已經(jīng)加載完畢的標(biāo)志。gps_flag,作為GPS數(shù)據(jù)是否有效的標(biāo)志。
主程序中,當(dāng)GPS數(shù)據(jù)有效標(biāo)志gps_flag=‘1’時(shí),把gps_data[55]對(duì)應(yīng)單元中的時(shí)間數(shù)據(jù)由ASCII碼轉(zhuǎn)換為二進(jìn)制數(shù)據(jù),并進(jìn)行“時(shí)”數(shù)據(jù)的“+8”處理后,分別加載到hour、minute、second、day、month、year中。令data_to_timerA=‘1’,通知TimerA,數(shù)據(jù)已成功加載到守時(shí)計(jì)數(shù)單元。同時(shí),打開(kāi)TimerB,進(jìn)行秒輸入間隔超過(guò)1秒的超時(shí)判斷。
使用了3個(gè)中斷:定時(shí)器TimerA和TimerB中斷,還有GPS秒輸入信號(hào)中斷。
TimerA中斷主要是完成模塊守時(shí),并實(shí)時(shí)產(chǎn)生秒輸出信號(hào)。
TimerB中斷是完成GPS秒輸入信號(hào)間隔大于1秒的處理。當(dāng)秒間隔超過(guò)1秒時(shí),令data_to_timerA=‘0’,清除GPS有效數(shù)據(jù)加載標(biāo)志。
GPS秒輸入信號(hào)中斷,當(dāng)data_to_timerA=‘1’時(shí),對(duì)cnt3125計(jì)數(shù)單元清零,清除timerA計(jì)數(shù)初值,然后啟動(dòng)timerA,進(jìn)行“增計(jì)數(shù)”,同時(shí)產(chǎn)生秒輸出信號(hào),最后令data_to_timerA=‘0’。
GPS數(shù)據(jù)與秒輸入信號(hào)共有4種可能的情形:
(1)GPS數(shù)據(jù)有效,GPS秒輸入有效,見(jiàn)圖4:
(2)GPS數(shù)據(jù)有效,GPS秒輸入無(wú)效,見(jiàn)圖5:
(3)GPS數(shù)據(jù)無(wú)效,GPS秒輸入無(wú)效,見(jiàn)圖6:
(4)GPS數(shù)據(jù)無(wú)效,GPS秒信號(hào)輸入有效:其具體處理同第3種情形,即TimerA持續(xù)“開(kāi)”,進(jìn)行基本秒單元的計(jì)時(shí)和時(shí)、分、日、月、年單元的計(jì)數(shù)守時(shí)。同時(shí)實(shí)時(shí)產(chǎn)生GPS秒輸出信號(hào)。TimerB一直關(guān)閉,不工作。
圖1 系統(tǒng)硬件設(shè)計(jì)框圖
圖2 系統(tǒng)電源輸入及電源切換電路
圖3 UART1接收中斷數(shù)據(jù)處理流程圖
MCU通過(guò)SPI總線與MCP2515進(jìn)行接口,其數(shù)據(jù)傳輸速率設(shè)為1.6Mbps。MCU通過(guò)SPI的“串口發(fā)送中斷”來(lái)對(duì)MCP2515進(jìn)行寫(xiě)操作,通過(guò)“查詢”的方式來(lái)獲得MCP2515的狀態(tài)信息以及數(shù)據(jù)信息。本系統(tǒng)中,CAN數(shù)據(jù)速率設(shè)置為1Mbps。
MCU對(duì)MCP2515的數(shù)據(jù)接收:當(dāng)MCP2515的接收緩沖器中接收滿CAN數(shù)據(jù)時(shí),在MCP2515的/INT管腳產(chǎn)生中斷信號(hào),通過(guò)MCU的I/O口中斷來(lái)得知CAN數(shù)據(jù)已接收好,即時(shí)把CAN數(shù)據(jù)接收到MCU。
MCU對(duì)MCP2515的數(shù)據(jù)發(fā)送:只需要被發(fā)送的信息幀傳送到CAN的發(fā)送緩沖器,然后傳送一條“請(qǐng)求發(fā)送”指令,啟動(dòng)數(shù)據(jù)的發(fā)送。
該模塊通信軟件由3部分組成:MCP2515初始化、CAN數(shù)據(jù)接收、CAN數(shù)據(jù)發(fā)送。
圖4 GPS數(shù)據(jù)有效,GPS秒輸入有效
圖5 GPS數(shù)據(jù)有效,GPS秒輸入無(wú)效
圖6 GPS數(shù)據(jù)無(wú)效,GPS秒輸入無(wú)效
圖7 CAN數(shù)據(jù)接收流程圖
圖8 CAN數(shù)據(jù)發(fā)送流程圖
(1)MCP2515的初始化:
主要完成CAN的通信速率設(shè)置、接收寄存器設(shè)置、ID屏蔽寄存器和ID過(guò)濾寄存器設(shè)置以及CAN收/發(fā)中斷功能的設(shè)置。MCU對(duì)MCP2515所有寄存器的操作,都必須通過(guò)SPI接口,用MCP2515內(nèi)置的讀寫(xiě)命令來(lái)完成。
因?yàn)镸CP2515初始化完成后,默認(rèn)處于“配置”模式,所以需要在初始化完成后,將其置為“正?!蹦J剑駝tMCP2515將一直停留于“配置”模式,而無(wú)法正常工作。
(2)CAN數(shù)據(jù)的接收:
MCU調(diào)用函數(shù)ReceiveMsg(),功能為:驗(yàn)收、濾波正確之后,收到的信息自動(dòng)存放在MCP2515的接收緩沖中,由MCP2515產(chǎn)生中斷,通知MCU進(jìn)行CAN數(shù)據(jù)的接收和后續(xù)處理。其詳細(xì)流程見(jiàn)圖7:
(3)CAN數(shù)據(jù)的發(fā)送:
MCU組織好要發(fā)送到CAN總線的數(shù)據(jù)后,發(fā)送一條“讀狀態(tài)”命令,來(lái)判斷MCP2515把前面一條報(bào)文是否已發(fā)送完畢。若前一條報(bào)文已發(fā)送完成,則調(diào)用發(fā)送函數(shù)SendMsg(),功能為:把待發(fā)送數(shù)據(jù)裝載到MCP2515的數(shù)據(jù)發(fā)送緩沖,把待發(fā)數(shù)據(jù)的長(zhǎng)度DLC、報(bào)文發(fā)送優(yōu)先級(jí)、相應(yīng)的節(jié)點(diǎn)ID信息依次裝載到MCP2515的對(duì)應(yīng)寄存器后,最后發(fā)送一條“數(shù)據(jù)發(fā)送請(qǐng)求”命令,來(lái)啟動(dòng)數(shù)據(jù)向CAN總線的發(fā)送。
具體的數(shù)據(jù)發(fā)送流程圖見(jiàn)圖8:
MCU的主程序中,檢測(cè)到can_flag=‘1’,就轉(zhuǎn)而進(jìn)行已接收CAN數(shù)據(jù)的分析。當(dāng)發(fā)現(xiàn)CAN總線傳來(lái)的命令是要求守時(shí)模塊進(jìn)行時(shí)間傳輸時(shí),立即組織相應(yīng)的時(shí)間數(shù)據(jù),并通過(guò)CAN總線發(fā)送出去。
經(jīng)實(shí)踐證明,該系統(tǒng)能很好的完成GPS OEM板數(shù)據(jù)的接收、超低功耗MCU的軟件守時(shí)以及與CAN總線的數(shù)據(jù)交互工作。軟件全部采用C語(yǔ)言進(jìn)行編寫(xiě),具有較強(qiáng)的通用性、擴(kuò)展性和可移植性。
[1]秦龍.MSP430單片機(jī)C語(yǔ)言應(yīng)用程序設(shè)計(jì)實(shí)例精講[M].電子工業(yè)出版社,2006.
[2]陳桂珍.利用MATLAB實(shí)現(xiàn)GPS OEM板與計(jì)算機(jī)的通訊及信息處理[J].鹽城工學(xué)院學(xué)報(bào),2006.
[3]鄔寬明.CAN總線原理和應(yīng)用系統(tǒng)設(shè)計(jì)[J].北京航空航天大學(xué)出版社,1996.
[4]王繼國(guó).CAN總線控制器MCP2515的原理及應(yīng)用[J].電測(cè)與儀表,2004.
王維維(1980—),男,陜西人,2002年畢業(yè)于武漢大學(xué),主要從事電子信息方面工作。
昌暢(1987—),男,重慶人,2009年畢業(yè)于四川大學(xué),主要從事電子信息方面工作。
馮碩(1984—),男,四川人,2007年畢業(yè)于電子科技大學(xué),主要從事電子信息方面工作。