基于LPC2292的汽車智能組合儀
0 引言
本文引用地址:http://m.butianyuan.cn/article/197909.htm汽車儀表是司機與汽車之間進(jìn)行信息交流的窗口和界面,對于提高汽車儀表使用壽命,安全和經(jīng)濟行駛有著積極而重要的作用。本設(shè)計采用LPC2292嵌入式控制器[1]作為儀表的控制核心,汽車原有傳感器無需更換,傳感器的輸出信號通過信號調(diào)理電路后送入MCU,經(jīng)MCU處理后的信號通過LCD顯示器顯示出來。實時顯示車速、發(fā)動機轉(zhuǎn)速、水溫、油位、總里程、子里程等車況參數(shù),并對信息進(jìn)行復(fù)雜處理從而為司機提供平均車速、經(jīng)濟油耗、剩余油量能跑里程數(shù)等有用信息,同時,還能對瞬時行車信息進(jìn)行記錄存儲,實現(xiàn)“黑匣子”功能;對異常情況實現(xiàn)語音報警提示,且為今后功能擴展預(yù)留通訊接口。與傳統(tǒng)汽車儀表相比,該儀表具有功能豐富、可靠性高、精度高、可視性好、通用性強、且有存儲功能、無機械磨損、使用壽命長等優(yōu)點。
隨著汽車電子的網(wǎng)絡(luò)化,CAN總線技術(shù)在汽車領(lǐng)域得到了越來越廣泛的應(yīng)用,因此,CAN總線、嵌入式就成為汽車儀表未來發(fā)展的必然趨勢。
1 汽車儀表的基本結(jié)構(gòu)和功能
汽車智能儀表采集車輛的各種狀態(tài)信息,這些信息包括車速,總、分里程,發(fā)動機轉(zhuǎn)速,前后橋氣壓,水溫,油量,及油壓力,電瓶電壓,室內(nèi)、室外溫度等。其中一部分信息(車速、轉(zhuǎn)速、氣壓)經(jīng)過處理后送入步進(jìn)電機驅(qū)動模塊來驅(qū)動指針,這些信息的變化較其它信息要快且與車輛行使安全密切相關(guān),用指針顯示既直觀、醒目又符合人的視覺習(xí)慣。所以,汽車上較常用的有四種指示儀表,即車速里程表、發(fā)動機轉(zhuǎn)速表、氣壓表等。分別顯示汽車行駛速度、單里程和總里程數(shù)、汽車行駛時發(fā)動機旋轉(zhuǎn)速度及前后橋氣壓等。 另一些變化較慢的信息(電瓶電壓、油量等)通過數(shù)據(jù)處理及液晶控制模塊在液晶屏上顯示。
汽車智能儀表由傳感器、信號調(diào)理電路、微控制器、鍵盤輸入模塊、步進(jìn)電機驅(qū)動模塊、語音報警電路、LCD顯示器等部分構(gòu)成。其原理框圖如圖1所示:
圖1 汽車智能儀表原理框圖
系統(tǒng)采用的微控制器為PHILIPS公司的LPC2292芯片。LPC2292是基于一個支持實時仿真和跟蹤的16/32位ARM7TDMI-S CPU的微控制器。128KB片內(nèi)Flash程序存儲器;外部8、16或32位總線;4路10位A/D轉(zhuǎn)換器,轉(zhuǎn)換時間低至2.44us;2個互連的CAN總線接口;2個32位定時器(帶4路捕獲和4路比較通道)、PWM單元(6路輸出)、實時時鐘和看門狗;多個串口接口,包括2個16C550工業(yè)標(biāo)準(zhǔn)UART、高速I2C接口(400Hkz)和2個SPI接口;通過片內(nèi)PLL可實現(xiàn)最大為60MHz的CPU操作頻率。
其中:車速傳感器及調(diào)理電路模塊[3]包括光電式車速傳感器和車速測量通道的信號調(diào)理電阻。車速傳感器將對應(yīng)于0~200公里/小時的車速轉(zhuǎn)變?yōu)轭l率范圍為0~136.3Hz的脈沖信號;轉(zhuǎn)速傳感器及調(diào)理電路模塊包括脈沖信號式轉(zhuǎn)速傳感器和發(fā)動機轉(zhuǎn)速測量通道的信號調(diào)理電路,轉(zhuǎn)速傳感器將對應(yīng)于0~8000轉(zhuǎn)/分鐘的發(fā)動機轉(zhuǎn)速變換成0~260Hz的頻率信號;由于車速和發(fā)動機轉(zhuǎn)速傳感器輸出的脈沖頻率信號,所以與之相對應(yīng)的信號調(diào)理電路的作用是對傳感器的輸出信號進(jìn)行整形、嵌位/限幅,以滿足MCU對輸入信號的要求。溫度傳感器采用熱敏電阻式溫度傳感器,用于測量汽車?yán)鋮s水的溫度,該傳感器將水溫的變化變換成電阻、電壓的變化;液位傳感器采用浮子-可變電阻式液位傳感器,將油位的變化變換成電阻、電壓的變化;水溫和油量傳感器輸出的是模擬信號,其對應(yīng)的信號調(diào)理電路為電阻傳輸網(wǎng)絡(luò),將傳感器的輸出信號送到LPC2292自帶的A/D輸入端。E2PROM選用93LC46B三線串行電擦除可編程只讀存儲器,其容量為1K×16位,擦除周期為1M次,顯示速度為2ms,數(shù)據(jù)保持時間可達(dá)40年,在儀表中用于保存子里程、總里程數(shù)據(jù)以及當(dāng)前車況,并保證掉電時數(shù)據(jù)不會消失,起到汽車“黑匣子”作用。
步進(jìn)電機模塊驅(qū)動控制車速表、轉(zhuǎn)速表、前橋氣壓表及后橋氣壓表。
語音模塊主要用來存儲所有報警語言,驅(qū)動報警喇叭,當(dāng)車速、發(fā)動機轉(zhuǎn)速、水溫和油量等參數(shù)超限時,起語言提示報警作用。
鍵盤模塊用于人機交互,接收輸入來改變儀表的運行參數(shù)、儀表的日期時間設(shè)置、中英文語言切換、分里程清零及顯示屏的切換。
LCD顯示屏實時顯示車速、發(fā)動機轉(zhuǎn)速、水溫、油溫、總里程、子里程、日期及時間、電瓶電壓、各種報警指示、車內(nèi)溫度、車外溫度等車況參數(shù)。
CAN通信模塊采用LPC2292內(nèi)置的CAN控制器和獨立的CAN收發(fā)器PCA82C50構(gòu)成,PCA82C50是Philips公司生產(chǎn)的高速CAN收發(fā)器,能適應(yīng)不同的CAN總線傳輸速率。
2 CAN總線的優(yōu)點及其在汽車領(lǐng)域的應(yīng)用[2]
控制局域網(wǎng)CAN(Controller Area Network)是德國Bosh公司從20世紀(jì)80年代初為解決現(xiàn)代汽車中眾多的控制與測試儀器之間的數(shù)據(jù)交換而開發(fā)的一種串行數(shù)據(jù)通信協(xié)議。它是一種多主總線,通信介質(zhì)可以是雙絞線、同軸電纜或光導(dǎo)纖維。在自動化電子領(lǐng)域的汽車發(fā)動機控制部件、傳感器、抗滑系統(tǒng)等應(yīng)用中,總線的位速率最大可達(dá)1Mbit/s。CAN網(wǎng)絡(luò)正在不斷地應(yīng)用在汽車電子的各個方面。CAN總線具有下列主要特征:(1)多主站依據(jù)優(yōu)先權(quán)進(jìn)行總線訪問;(2)無破壞性的基于優(yōu)先權(quán)競爭的總線仲裁;(3)借助接收濾波的多地址幀傳送;(4)遠(yuǎn)程數(shù)據(jù)請求;(5)配置靈活性;(6)全系統(tǒng)數(shù)據(jù)相容性;(7)錯誤檢測和出錯指令;(8)發(fā)送期間若丟失仲裁或由于出錯而遭破壞的幀可自動重發(fā)送。
3 軟件設(shè)計
基于µC/OS-II的汽車組合儀表采用源代碼開放的µC/OS-II作為應(yīng)用程序的開發(fā)平臺。主要實現(xiàn)以下功能:通過電機指針顯示發(fā)動機轉(zhuǎn)速、車輛速度、前橋氣壓表、后橋氣壓表4種參數(shù);通過LCD屏顯示車速、發(fā)動機轉(zhuǎn)速、水溫、油位、總里程、子里程等車況參數(shù)。
µC/OS-II是一個完全免費的開放源碼的可移植、可裁剪的占先式多任務(wù)嵌入式實時操作系統(tǒng)內(nèi)核,其功能完備、性能可靠、短小精煉,具備多任務(wù)調(diào)度,信號量、郵箱、消息隊列等任務(wù)間通信與同步,時間管理,簡單內(nèi)存管理等RTOS內(nèi)核基本服務(wù)功能。它采用優(yōu)先級驅(qū)動的占先式多任務(wù)調(diào)度算法[4]。
根據(jù)前面對整個系統(tǒng)的功能描述,可以將應(yīng)用程序劃分為6個任務(wù)加上6個中斷(RTI節(jié)拍中斷屬于系統(tǒng)中斷,其他5個為用戶中斷)。這6個任務(wù)分別是:
(1)報警顯示任務(wù):前后燈光、剎車、電源、油量、油溫、水溫等LED報警;
(2)里程顯示、存儲任務(wù):LCD顯示車速、發(fā)動機轉(zhuǎn)速、水溫、油溫、總里程、子里程等車況參數(shù);
(3) 步進(jìn)電機1任務(wù):轉(zhuǎn)速指針表顯示;
(4) 步進(jìn)電機2任務(wù):車速指針表顯示;
(5) 步進(jìn)電機3任務(wù):前橋氣壓指針表顯示;
(6) 步進(jìn)電機4任務(wù):后橋氣壓指針表顯示。
每個任務(wù)在建立時均分配一個優(yōu)先級(范圍為0 ~63, 0為最高,63為最低)。這6個任務(wù)的優(yōu)先級依次分配為1, 2, 3, 4, 5, 6;報警任務(wù)需要及時響應(yīng),具有最高的優(yōu)先級;而里程顯示、存儲任務(wù)優(yōu)先級最低。較高優(yōu)先級的任務(wù)必須調(diào)用至少一項系統(tǒng)服務(wù)而暫時放棄CPU的使用權(quán),否則低優(yōu)先級任務(wù)無法得到運行。
任務(wù)的一般結(jié)構(gòu)如下:
void UserTask (void *pdata)
{ for(;;)
{調(diào)用µC /OS II的某種系統(tǒng)服務(wù):
OSMboxPend ( )/OSMboxPost ( ); (1)
OSQPend ( )/OSQPost ( ); (2)
OSSemPend ( )/OSSemPend ( ): (3)
OSTaskDel (OS PRIG SELF); (4)
OSTaskSuspend (OS_ PR工OSELF); (5)
OSTimeDly( )/OSTimeDlyHMSM(); (6)
}}
(1)-(6)是一些主要的系統(tǒng)服務(wù)函數(shù),這些函數(shù)里均進(jìn)行一次任務(wù)調(diào)度,或者可能會使當(dāng)前任務(wù)放棄CPU使用權(quán)而運行其他的任務(wù)。用戶任務(wù)必須至少調(diào)用一個服務(wù)函數(shù)。
另外程序還有5個用C語言編寫的用戶中斷服務(wù)程序:一個CAN接收中斷(用于接收總線信息)、4個定時器輸出比較中斷(用于產(chǎn)生驅(qū)動步進(jìn)電機的周期性脈沖)。
因此本例程序可以這樣規(guī)劃,首先調(diào)用OSInit(),對µC /OS-II做初始化,然后創(chuàng)建一個信號量,因為后面的任務(wù)都要用到Printp( )函數(shù),而Printp( )是一個不可重入函數(shù),調(diào)用前要防止多個任務(wù)同時調(diào)用,這個信號量用于保護Printp()函數(shù)。接著創(chuàng)建6個任務(wù),并對這6個任務(wù)分配優(yōu)先級,最后調(diào)用OSStart ( )以啟動內(nèi)核,于是任務(wù)在操作系統(tǒng)的管理和調(diào)度下運行和切換。圖2是程序的簡要流程圖。
圖2 程序流程圖
4 結(jié)束語
隨著汽車電氣系統(tǒng)的總線化,高集成、嵌入式、總線化是汽車儀表發(fā)展的必然趨勢?;贚PC2292的汽車智能組合儀表,實時顯示和保存車速、發(fā)動機轉(zhuǎn)速、水溫、油位、總里程、子里程等車況參數(shù),使汽車具有“黑匣子”功能。并且采用CAN總線建立通信網(wǎng)絡(luò),集車輛儀表、視頻監(jiān)控、語音輸出于一體,解決了分開安裝不便、可靠性差的缺陷,提高了系統(tǒng)的可靠性。
評論