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