電動(dòng)汽車(chē)車(chē)載智能顯示系統(tǒng)設(shè)計(jì),包括源代碼、原理結(jié)構(gòu)圖
引言
電動(dòng)汽車(chē)作為新型的交通工具,具有節(jié)能、污染小的特點(diǎn),是目前最環(huán)保的新型交通工具,并被視為調(diào)整交通能源使用結(jié)構(gòu)和改善城市大氣環(huán)境質(zhì)量的有效途徑之一,是解決燃油車(chē)輛所帶來(lái)的能源和環(huán)境問(wèn)題的最有希望的方案之一。在世界范圍內(nèi)電動(dòng)汽車(chē)的研究正在如火如荼進(jìn)行;在國(guó)內(nèi),政府更是把電動(dòng)汽車(chē)的列為重點(diǎn)攻關(guān)的技術(shù)研究。因此電動(dòng)汽車(chē)智能顯示系統(tǒng)的研發(fā)就在這種大背景下應(yīng)運(yùn)而生。
電動(dòng)汽車(chē)智能顯示系統(tǒng)觸摸屏作為一種新穎的交互式設(shè)備越來(lái)越展現(xiàn)出巨大的應(yīng)用前景,電動(dòng)汽車(chē)的智能顯示屏應(yīng)該具有良好的實(shí)時(shí)性和穩(wěn)定性,以符合汽車(chē)級(jí)產(chǎn)品的要求。
1.總體方案設(shè)計(jì)
該儀表顯示電動(dòng)汽車(chē)特有的信息,主要包括電機(jī),電機(jī)控制器,電池管理(BMS)和充電機(jī)等各個(gè)模塊的信息和實(shí)時(shí)狀態(tài)。用戶(hù)可以通過(guò)儀表模塊獲取例如電機(jī)的轉(zhuǎn)速、電機(jī)母線電壓、電機(jī)母線電流、電機(jī)相電流、電機(jī)溫度和電機(jī)轉(zhuǎn)速等信息。電池管理系統(tǒng)(BMS)采用電池容量?jī)?yōu)化的估算方法,此方法能夠?qū)﹄姵氐氖S嗳萘孔龀霰容^準(zhǔn)確的估算,同時(shí)還能夠?qū)﹄姵亟M的總電壓進(jìn)行監(jiān)控,也可以對(duì)單節(jié)電池的電壓、溫度和電池容量等信息進(jìn)行監(jiān)控和實(shí)時(shí)報(bào)警。同時(shí)充電機(jī)的狀態(tài)和信息也都可以在BMS中顯示。
儀表顯示和各功能模塊之間的信息傳遞都是采用CAN總線的通訊方式,用戶(hù)可以通過(guò)觸摸屏方便快捷地實(shí)現(xiàn)與電動(dòng)汽車(chē)各模塊之間的信息共享和雙向溝通。其主要功能如下:
①車(chē)輛的速度、里程、溫度、電池核電狀態(tài)(SOC)等信息實(shí)時(shí)顯示:
車(chē)輛行駛速度顯示。
電機(jī)轉(zhuǎn)速實(shí)時(shí)顯示。
車(chē)輛行駛總里程表(掉電保存),最大里程數(shù):999,999Km。
單次行駛里程計(jì),最大記數(shù)里程999.9Km
檔位指示,顯示車(chē)輛當(dāng)前的檔位。
控制器溫度指示
電池剩余容量(SOC)實(shí)時(shí)顯示。
②電機(jī)控制器的信息和狀態(tài)實(shí)時(shí)顯示,參數(shù)設(shè)定:
電機(jī)轉(zhuǎn)速顯示
溫度顯示
檔位顯示
母線電壓,母線電流
過(guò)流報(bào)警
油門(mén),剎車(chē)開(kāi)關(guān)指示
油門(mén),剎車(chē)給定
③電池管理的信息和狀態(tài)實(shí)時(shí)顯示,參數(shù)設(shè)定:
實(shí)時(shí)核電狀態(tài)顯示
實(shí)時(shí)電池組總電壓顯示
單節(jié)電池電壓實(shí)時(shí)顯示,欠壓、過(guò)壓報(bào)警。
單節(jié)電池溫度實(shí)時(shí)顯示,過(guò)溫報(bào)警。
單節(jié)電池容量實(shí)時(shí)顯示,過(guò)放、過(guò)充報(bào)警。
電池充放電循環(huán)次數(shù)顯示。
④充電機(jī)狀態(tài)顯示:
外接充電指示
充電機(jī)輸出電壓、電流顯示。
充電機(jī)通訊狀態(tài)指示
⑤車(chē)輛故障的實(shí)時(shí)和歷史記錄:
車(chē)輛實(shí)時(shí)故障記錄顯示,最多可以記錄163條信息。
車(chē)輛歷史故障記錄顯示,最多可以記錄163條信息。
⑥參數(shù)設(shè)置
可以設(shè)置日歷、時(shí)鐘、語(yǔ)言、速比、輪徑、電機(jī)最大轉(zhuǎn)速。
可以設(shè)置充電機(jī)最高輸出電壓和最大輸出電流。
可以設(shè)置控制器參數(shù)
可以設(shè)置管理的電池種類(lèi),數(shù)量,電池的ID號(hào),可以設(shè)置電池SOC估算充放電數(shù)組數(shù)據(jù)和基準(zhǔn)電壓
⑦采樣外部信號(hào)
可以采樣8路外部模擬信號(hào)。
2.電路硬件原理
電動(dòng)汽車(chē)智能顯示儀表系統(tǒng)硬件框圖如圖1所示,其主要分為電源部分、通信部分、數(shù)據(jù)存儲(chǔ)部分、實(shí)時(shí)時(shí)鐘部分等。
圖1 電動(dòng)汽車(chē)智能顯示儀表系統(tǒng)硬件框圖
2.1 電源電路設(shè)計(jì)
本設(shè)計(jì)中電源由電動(dòng)汽車(chē)車(chē)載電池提供,給液晶屏、CAN隔離芯片、處理芯片PIC32MX、時(shí)鐘芯片PCF8563、轉(zhuǎn)換芯片MCP2515、存儲(chǔ)芯片AT24C256供電。
圖2 電源電路設(shè)計(jì)
車(chē)載電池電壓為48V,通過(guò)一個(gè)DC/DC電源模塊,輸出電壓為12V。液晶屏由TPS65150供電,其允許輸入電壓范圍為1.8V—6V;CAN供電電壓為5V,所以選用一個(gè)LM1117I-5將12V轉(zhuǎn)換為5V,給CAN與液晶屏供電芯片TPS65150供電。選用LM1117I-3.3將12V轉(zhuǎn)換為3.3V,給處理芯片PIC32MX、時(shí)鐘芯片PCF8563、轉(zhuǎn)換芯片MCP2515、存儲(chǔ)芯片AT24C256供電。本系統(tǒng)配備了電池,能防止掉電情況下,日歷時(shí)鐘數(shù)據(jù)丟失。時(shí)鐘芯片PCF8563在系統(tǒng)正常的工作狀態(tài)下由LM1117I-3.3供電,在系統(tǒng)掉電的工作狀態(tài)下由電池供電。
2.2 A/D采樣通道
PIC32MX A/D轉(zhuǎn)換模塊包含16個(gè)A/D轉(zhuǎn)換通道,模擬輸入通過(guò)兩個(gè)多路開(kāi)關(guān)(MUX)連接到一個(gè)SHA??稍贑PU 休眠和空閑模式下工作。本系統(tǒng)數(shù)據(jù)采樣電路將8路外部模擬信號(hào)ANx_input,經(jīng)過(guò)濾波分壓,輸入到PIC32MX的A/D轉(zhuǎn)換模塊采樣通道ANx(x=0-9,12-15)。如圖3所示
圖3 A/D采樣輸入電路設(shè)計(jì)
2.3 數(shù)據(jù)存儲(chǔ)
本系統(tǒng)使用存儲(chǔ)芯片AT24C256存儲(chǔ)電池狀態(tài)歷史數(shù)據(jù)及車(chē)輛運(yùn)行故障歷史數(shù)據(jù)。AT24C256是ATMEL公司推出的256kB串行電可擦可編程只讀存儲(chǔ)器,結(jié)構(gòu)緊湊,8引腳雙排直插式封裝;存儲(chǔ)容量大,內(nèi)部有512頁(yè),每一頁(yè)為64字節(jié),任一單元的地址為15位。能夠滿足本系統(tǒng)高容量數(shù)據(jù)儲(chǔ)存的要求。
圖4 數(shù)據(jù)存儲(chǔ)及傳輸電路設(shè)計(jì)
圖4為數(shù)據(jù)存儲(chǔ)及傳輸硬件接口電路圖。AT24C256存儲(chǔ)芯片AT24C256通過(guò)I2C數(shù)據(jù)線SDA、時(shí)鐘線SCL與PIC32MX相連接??商峁?56K存儲(chǔ)空間。在系統(tǒng)工作時(shí),可記錄電池狀態(tài)歷史數(shù)據(jù)及車(chē)輛運(yùn)行故障歷史數(shù)據(jù)。
2.4通信設(shè)計(jì)
本設(shè)計(jì)包含兩種通信方式,CAN通信方式與RS485通信方式,兩種通信方式為液晶屏的通信兼容提供了可能。
2.4.1 CAN通信設(shè)計(jì)
本液晶屏設(shè)計(jì)采用的主控芯片PIC32MX440F128L不帶有CAN功能,因此本設(shè)計(jì)中的CAN通信采用MCP2515+ PCA82C250T且外加一個(gè)磁偶隔離芯片來(lái)實(shí)現(xiàn)CAN通信功能,通信波特率125Kbps,采用11位標(biāo)準(zhǔn)標(biāo)志符,CAN通信網(wǎng)絡(luò)可連接節(jié)點(diǎn)最多112個(gè),可滿足對(duì)110節(jié)單體電池的監(jiān)控。CAN通信原理框圖如圖5所示:
圖5 CAN通信原理框圖
從電池和電機(jī)控制器發(fā)出的信息通過(guò)CAN總線送到CAN收發(fā)器,再經(jīng)過(guò)轉(zhuǎn)換和隔離送入CAN控制器芯片,CAN信息經(jīng)過(guò)CAN控制器處理信息數(shù)據(jù)最后以SPI通訊方式傳送給主控芯片PIC32MX440F128L進(jìn)行數(shù)據(jù)處理。電路原理如圖6所示:
圖6 CAN通行原理圖
其中MCP2515是一款CAN協(xié)議控制器,完全支持CAN V2.0B技術(shù)規(guī)范,通信速率為1Mb/s。該器件主要由三個(gè)部分組成:① CAN模塊,包括CAN協(xié)議引擎,驗(yàn)收濾波寄存器,發(fā)送和接受緩沖寄存器。②用于配置該器件及其運(yùn)行的控制邏輯和寄存器。③SPI協(xié)議模塊。MCP2515能發(fā)送和接收標(biāo)準(zhǔn)和擴(kuò)展數(shù)據(jù)幀和遠(yuǎn)程幀。PCA82C250T是CAN收發(fā)器,支持“ISO 11898”標(biāo)準(zhǔn),通信速率可達(dá)1Mb/s,具有很強(qiáng)的抗電磁干擾和抗無(wú)線干擾的能力,是雙通道數(shù)字隔離器,采用了高速CMOS工藝和芯片級(jí)的變壓器技術(shù),工作電壓為2.7V到5V,符合車(chē)用等級(jí),工作溫度可達(dá)到125°C。傳輸速率可達(dá)到25Mb/s。
2.4.2 RS485通信
液晶屏上配備有RS485通信接口,以方便液晶屏與外部進(jìn)行通信。RS485是一種共模通信方式,具有較強(qiáng)的抗干擾能力。PIC32MX440F128L自帶RS485通信接口,其輸出信號(hào)送給MAX2M3425芯片,該芯片能發(fā)送、接收RS485信號(hào),能進(jìn)行半工和全雙工的傳輸方式,具有最大1M/S的傳輸方式,RS485通信電路原理圖如圖7所示:
圖7 RS485通信接口電路原理圖
2.5 液晶屏實(shí)時(shí)時(shí)鐘顯示設(shè)計(jì)
本液晶屏設(shè)計(jì)時(shí)鐘顯示數(shù)據(jù)通過(guò)PCF8563實(shí)時(shí)時(shí)鐘/日歷芯片來(lái)產(chǎn)生。PCF8563是低功耗的CMOS實(shí)時(shí)時(shí)鐘日歷芯片,它提供一個(gè)可編程的實(shí)時(shí)時(shí)鐘輸出,一個(gè)中斷輸出和掉電檢測(cè)器。所有的地址和數(shù)據(jù)通過(guò)I2C總線接口串行傳遞,最大總線速度可達(dá)到400Kbit/S。PCF8563有16個(gè)8位寄存器,一個(gè)內(nèi)置32.768KHZ的振蕩器,一個(gè)分頻器,一個(gè)可編程的時(shí)鐘輸出,一個(gè)定時(shí)器,一個(gè)報(bào)警器,一個(gè)掉電檢測(cè)器和一個(gè)400KHZ的I2C總線接口。電路原理圖如圖8所示:
圖8 日歷時(shí)鐘電路原理圖
圖8中PCF8563芯片的5、6引腳為I2C總線用的兩個(gè)引腳,兩個(gè)引腳必須用一個(gè)上拉電阻與正電源連接,這兩個(gè)引腳與PIC32MX440F128L的I2C引腳相連實(shí)現(xiàn)PIC32MX440F128L與日歷時(shí)鐘芯片間傳遞數(shù)據(jù)。液晶屏工作時(shí),PIC32MX440F128L主控芯片先通過(guò)I2C對(duì)PCF8563芯片進(jìn)行初始化,設(shè)定好當(dāng)前顯示的年月日以及時(shí)間信息,設(shè)定完成確認(rèn)后,單片機(jī)將數(shù)據(jù)傳送給圖形處理器芯片,最后在液晶屏上顯示。如果在使用過(guò)程中想調(diào)整顯示的時(shí)間,可直接在液晶屏上通過(guò)按鈕修改。PIC32MX440F128L主控芯片會(huì)不斷地查詢(xún)液晶屏按鈕動(dòng)態(tài)信息,并發(fā)送相應(yīng)的指令信息到PCF8563芯片修改時(shí)間。
2.6 PIC32MX與SSD1926的接口電路
SSD1926是一款中小規(guī)模的顯示控制芯片。采用128引腳LQFP封裝,256 KB靜態(tài)存儲(chǔ)空間和2D圖像引擎,可以支持單色和彩色LCD;32位內(nèi)部數(shù)據(jù)通道,可以提供高帶寬的顯示內(nèi)存,以實(shí)現(xiàn)快速的屏幕刷新;采用單電源供電和單時(shí)鐘輸入,具有很短的CPU訪問(wèn)延遲時(shí)間,可以支持無(wú)READY/WAIT信號(hào)的微處理器。這些特點(diǎn)能夠極大地簡(jiǎn)化外圍電路的設(shè)計(jì)。同時(shí),SSD1926還具有強(qiáng)大的總線兼容性,可與多種類(lèi)型的MCU連接,除了支持SRAM接口與ARM系列連接、ISA接口與NEC系列連接外,還支持8/16位8080時(shí)序間接尋址方式,能夠方便地與各種具有并口的MCU連接。本設(shè)計(jì)采用PIC32MX460F512L的8位/16位并行控制接口模塊與SSD1926接口。硬件接口框圖如圖9所示:
圖9 PIC32MX440F128與SSD1926接口框圖
CS為片選信號(hào),RS為地址與數(shù)據(jù)選擇信號(hào),RESET為復(fù)位信號(hào),都可以由通用I/O口進(jìn)行控制,分別用RD10、RC2和RC1與其連接。數(shù)據(jù)總線DB[15:0]與并行控制接口模塊中的PMD[15:0]引腳分別對(duì)接。WR和RD為讀寫(xiě)信號(hào),由并行控制接口模塊中的PMWR和PMRD引腳分別控制。SSD1926對(duì)接收到的數(shù)據(jù)進(jìn)行處理之后,再通過(guò)與LCD的接口驅(qū)動(dòng)TFT彩色液晶屏進(jìn)行顯示。
2.7 觸摸功能的硬件設(shè)計(jì)
電阻式觸摸屏處于與外界完全隔離的工作環(huán)境,不怕灰塵和水汽,可以用任何物體來(lái)觸摸,可以寫(xiě)字畫(huà)圖,廣泛應(yīng)用于工業(yè)控制領(lǐng)域中。觸摸屏工作時(shí),上下導(dǎo)體層可以看作電阻網(wǎng)絡(luò)。當(dāng)某一層電極加上電壓時(shí),會(huì)在該電阻網(wǎng)絡(luò)上形成電壓梯度。若施加外力使得上下兩層電極在某一點(diǎn)相接觸,則在電極未施加電壓的另一層可以檢測(cè)出接觸點(diǎn)的電壓,從而換算出接觸點(diǎn)的坐標(biāo)值。本作品選用4線電阻式觸摸屏,其電阻網(wǎng)絡(luò)工作原理如圖10所示。
圖10 電阻網(wǎng)絡(luò)工作原理圖
系統(tǒng)工作時(shí),首先把AN11/RB11、AN4/RB4復(fù)用引腳設(shè)置為I/O引腳。RB11輸出高電平(+3.3 V),RB4引腳輸出低電平(0 V),在頂層的電極X+、X-上即產(chǎn)生了3.3 V的電壓。當(dāng)有外力使得上下兩層在某一點(diǎn)接觸時(shí),在底層Y+、Y-引腳上就會(huì)輸出接觸點(diǎn)處的電壓。此時(shí),AN10/RB10、AN5/RB5設(shè)置為A/D輸入通道。采樣此引腳上的電壓信號(hào),即可得到Y(jié)+、Y-引腳上的電壓值,根據(jù)式(1)可以計(jì)算出X坐標(biāo):
觸點(diǎn)X坐標(biāo)=X軸分辨率×X相電壓采樣值/1 024 (1)
本設(shè)計(jì)為10位的精度A/D采樣,3.3 V輸入時(shí)對(duì)應(yīng)的采樣值即為1 024。然后,改變4個(gè)引腳的輸出定義,將A/D輸入引腳RB10設(shè)置為I/O引腳輸出高電平,RB5設(shè)置為I/O引腳輸出低電平,將3.3 V電壓切換到底層電極Y+、Y-上,設(shè)置AN11和AN4為A/D輸入引腳。對(duì)X+、X-引腳進(jìn)行A/D采樣,測(cè)量得到接觸點(diǎn)處的Y相電壓,根據(jù)式(2)可以計(jì)算出Y坐標(biāo):
觸點(diǎn)Y坐標(biāo)=y軸分辨率×y相電壓采樣值/1 024 (2)
2.8 電氣連接
液晶屏共有6個(gè)接線引腳,如圖11所示。1,2腳是給儀表供電用DC48V輸入,接到電池組正極和負(fù)極。3,4腳是CAN+5V和CAN GND,這一組+5V電源由儀表電路產(chǎn)生,給CAN總線供電。5,6腳是CAN_H和CAN_L,與其它模塊的CAN通信線連接。電池檢測(cè)模塊如圖12所示。
圖11 CAN通信電氣連接圖
圖12 電池監(jiān)測(cè)模塊
2.9 LED背光控制接口
本設(shè)計(jì)提供了對(duì)LED背光電路的調(diào)節(jié)控制接口,其硬件接口電路如圖13所示??梢酝ㄟ^(guò)芯片PIC32MX輸出3路PWM(OCS2-OCS4)對(duì)LCD的背光電路進(jìn)行控制,可以進(jìn)行明暗調(diào)節(jié)。在某些工作狀態(tài),可關(guān)掉背光電源,降低電源損耗。
PIC32440F128L
圖13 LED背光控制硬件接口電路
3.軟件設(shè)計(jì)
本設(shè)計(jì)中的軟件主要包括兩方面的內(nèi)容:圖形顯示和數(shù)據(jù)通信。軟件部分包括設(shè)備驅(qū)動(dòng)程序?qū)?、圖形元素層、圖形對(duì)象層和應(yīng)用層,設(shè)備驅(qū)動(dòng)程序?qū)訛橛布峁┍匾尿?qū)動(dòng)程序,圖形元素層直接與設(shè)備驅(qū)動(dòng)程序?qū)υ?,圖形對(duì)象層提供控件驅(qū)動(dòng)函數(shù)庫(kù),應(yīng)用層通過(guò)控件繪制界面、開(kāi)發(fā)應(yīng)用程序。設(shè)備驅(qū)動(dòng)程序?qū)印D形原語(yǔ)層和圖形對(duì)象層都屬于系統(tǒng)層。
3.1圖形顯示原理
由于液晶屏在運(yùn)行時(shí)需要顯示電機(jī)控制器,電機(jī),電池模塊,以及充電機(jī)等的信息,這些信息量比較多,在一個(gè)界面里不能夠完全顯示。所以在本液晶屏中分別創(chuàng)建了電機(jī)控制器等顯示頁(yè)面用于檢測(cè)電機(jī)控制器及電機(jī)的相關(guān)信息,電池監(jiān)測(cè)頁(yè)面用于監(jiān)測(cè)電池的實(shí)時(shí)狀態(tài),充電機(jī)頁(yè)面和主界面以及一些利于人機(jī)交互的頁(yè)面,這些頁(yè)面的創(chuàng)建使電動(dòng)汽車(chē)用戶(hù)能方便快捷的獲得電動(dòng)汽車(chē)的信息。頁(yè)面創(chuàng)建的軟件框圖如圖14所示:
圖14 頁(yè)面創(chuàng)建軟件框圖
汽車(chē)各部分實(shí)時(shí)信息通過(guò)CAN總線送入PIC32MX440F128L芯片,并通過(guò)圖形處理芯片SSD1926芯片在液晶屏上生成圖像,顯示在液晶屏上。同時(shí),通過(guò)液晶屏也可以對(duì)各個(gè)模塊的參數(shù)進(jìn)行設(shè)置,具有良好的人機(jī)界面。
圖形顯示是本設(shè)計(jì)的重點(diǎn)。本設(shè)計(jì)全部是用C語(yǔ)言來(lái)開(kāi)發(fā)的,系統(tǒng)層使用微芯(Microchip)公司圖形對(duì)象層(Graphics Object Layer,GOL)圖形驅(qū)動(dòng)庫(kù)來(lái)實(shí)現(xiàn)。Microchip 的圖形庫(kù)針對(duì)范圍寬廣的顯示設(shè)備控制器,可與PIC 單片機(jī)配合使用;圖形庫(kù)提供應(yīng)用編程接口(API),完成基本圖形對(duì)象以及類(lèi)似控件對(duì)象的繪制。 圖形庫(kù)也使得通過(guò)消息接口集成輸入設(shè)備變得容易。圖形庫(kù)的分層結(jié)構(gòu)設(shè)計(jì)使得所有這一切成為可能。Microchip 圖形庫(kù)的層次結(jié)構(gòu)如圖15所示。
圖15 Microchip 圖形庫(kù)的層次結(jié)構(gòu)圖
應(yīng)用層是使用圖形庫(kù)的程序。圖形對(duì)象層(Graphics Object Layer, GOL)生成控件,例如按鈕、滑動(dòng)條和窗口等等??丶╳idget)指GOL 對(duì)象或其他對(duì)象。 為了控制這些對(duì)象,GOL 層具有一個(gè)消息接口,接收從應(yīng)用層來(lái)的消息。消息接口支持觸摸屏。圖形元素層實(shí)現(xiàn)基本繪圖功能。這些基本功能完成圖形對(duì)象的繪制,例如線、條和圓等。 液晶屏驅(qū)動(dòng)程序是圖形庫(kù)結(jié)構(gòu)的設(shè)備相關(guān)層。這一層直接與顯示設(shè)備控制器對(duì)話。大量的API 允許應(yīng)用程序訪問(wèn)圖形庫(kù)的任何一層。繪圖和消息處理在內(nèi)部進(jìn)行,對(duì)應(yīng)用程序保持透明。圖形庫(kù)提供了兩種配置(阻塞式和非阻塞式),在編譯時(shí)進(jìn)行設(shè)置。對(duì)于阻塞式配置,繪圖函數(shù)將延遲程序的執(zhí)行,直到繪圖完成。對(duì)于非阻塞式配置,繪圖函數(shù)不等待繪圖完成,就把控制權(quán)釋放給程序。因?yàn)槌绦蚰軋?zhí)行其他任務(wù),而不必等待繪圖任務(wù)完成繪制,從而使得單片機(jī)時(shí)間的使用更為高效。
對(duì)象狀態(tài)
GOL 對(duì)象有兩種類(lèi)型的狀態(tài):屬性狀態(tài)和繪圖狀態(tài) 。屬性狀態(tài)定義對(duì)象的行為和外觀。而繪圖狀態(tài)指出在顯示時(shí)對(duì)象是否需要被隱藏、部分重畫(huà)或完全重畫(huà),一些常用的屬性狀態(tài)和繪圖狀態(tài)如表1 所示。
表1 常用的對(duì)象狀態(tài)
狀態(tài) | 類(lèi)型 | 說(shuō)明 |
OBJ_FOCUSED | 屬性 | 對(duì)象處在聚焦?fàn)顟B(tài)。通常用于表示對(duì)象被選中。有的對(duì)象沒(méi)有此屬性。 |
OBJ_DISABLED | 屬性 | 對(duì)象被禁止,忽略全部的消息。 |
OBJ_DRAW_FOCUS | 繪圖 | 聚焦應(yīng)被重畫(huà)的對(duì)象。 |
OBJ_DRAW | 繪圖 | 對(duì)象應(yīng)被完全重畫(huà)。 |
OBJ_HIDE | 繪圖 | 使用共同的背景色填充對(duì)象所占有的區(qū)域,把對(duì)象隱藏起來(lái)。這種狀態(tài)在所有繪圖狀態(tài)中,優(yōu)先級(jí)最高。當(dāng)對(duì)象被設(shè)置成隱藏時(shí),所有其他繪圖狀態(tài)將不再產(chǎn)生作用。 |
式樣方案:
所有對(duì)象都使用式樣方案來(lái)定義所使用的字體和顏色。在創(chuàng)建對(duì)象時(shí),對(duì)象可以使用用戶(hù)定義的式樣方案。如果不存在用戶(hù)定義的方案,就將使用缺省的式樣方案。表2 概括了式樣方案的組成部分。
表2 式樣方案的組成
式樣的組成部分 | 說(shuō)明 |
EmbossDkColor | 暗浮雕顏色,用于對(duì)象的三維效果。 |
EmbossLtColor | 亮浮雕顏色,用于對(duì)象的三維效果。 |
TextColor0 TextColor1 | 對(duì)象使用的一般文本顏色。隨著對(duì)象的不同,在用法上可能有所變化。 |
TextColorDisabled | 已經(jīng)被禁止的對(duì)象所使用的文本顏色。 |
Color0 Color1 | 對(duì)象繪制時(shí)使用的一般顏色。隨著對(duì)象的不同,在用法上可能有所變化。 |
ColorDisabled | 已經(jīng)被禁止的對(duì)象繪制時(shí)使用的顏色。 |
CommonBkColor | 對(duì)象的共同背景色。通常用于從屏幕中隱藏對(duì)象。 |
pFont | 指向?qū)ο笏褂玫淖煮w的指針。有些對(duì)象不使用文本。 |
活動(dòng)對(duì)象鏈表:
圖形庫(kù)把當(dāng)前正在顯示和接收消息的對(duì)象放入一個(gè)鏈表中。任何時(shí)候,GOL 消息和繪圖函數(shù)針對(duì)的都是這張鏈表中的對(duì)象。
繪圖
為了繪制對(duì)象,應(yīng)用程序?qū)⒄{(diào)用繪圖管理器,GOLDraw()。這個(gè)函數(shù)將解析活動(dòng)鏈表,使用設(shè)置的繪圖狀態(tài)重畫(huà)對(duì)象。當(dāng)繪制完成后,對(duì)象的繪圖狀態(tài)自動(dòng)清除。最先創(chuàng)建的對(duì)象將首先繪出。當(dāng)前鏈表中的對(duì)象全部繪出后,GOLDraw() 調(diào)用GOLDrawCallback()函數(shù)。定制的繪圖可以在GOLDrawCallback() 函數(shù)中實(shí)現(xiàn)。
消息的接收和發(fā)送:
可移植性是圖形庫(kù)的關(guān)鍵特性。圖形庫(kù)支持大量的輸入設(shè)備。 圖形庫(kù)提供一個(gè)接口,用來(lái)接收來(lái)自輸入設(shè)備的消息。所有的輸入設(shè)備事件,都將采用GOL 消息結(jié)構(gòu)體的方式發(fā)送到庫(kù)里去。結(jié)構(gòu)體定義如下:
typedef struct {
BYTE type;
BYTE event;
int param1;
int param2;
} GOL_MSG;
字段 type 定義輸入設(shè)備的類(lèi)型ID。字段 event 表明行為的類(lèi)型。字段type 和event 一起決定如何解釋 param1 和param2。某些情況下,僅使用param1,而另一些情況下可能兩個(gè)參數(shù)字段都需要。
當(dāng)屏幕被觸摸時(shí),應(yīng)用程序必須先填充消息結(jié)構(gòu)體,然后把它傳送給庫(kù)中的消息處理函數(shù)GOLMsg(GOL_MSG*pMsg)。對(duì)象(包括它的x、y 位置),將根據(jù)目前的狀態(tài)和事件,改變其狀態(tài)。針對(duì)輸入事件而定制的行為,可以放在GOLMsgCallback() 函數(shù)中。一旦有對(duì)象收到有效的消息,這個(gè)函數(shù)就會(huì)被調(diào)用。
圖形庫(kù)用法:
圖形庫(kù)的設(shè)計(jì),旨在使圖形接口能夠無(wú)縫地集成到應(yīng)用程序中去。通常,對(duì)象行為是通過(guò)圖形庫(kù)來(lái)進(jìn)行管理的。把收到的消息進(jìn)行處理,根據(jù)消息的內(nèi)容,改變受影響的對(duì)象狀態(tài)。然后,圖形庫(kù)自動(dòng)地重畫(huà)對(duì)象,顯示狀態(tài)的改變。
在用戶(hù)接口模塊和顯示驅(qū)動(dòng)程序已被選擇和加載的前提下,調(diào)用InitGraph(),復(fù)位顯示設(shè)備控制器,把光標(biāo)位置移動(dòng)到(0,0) ,然后初始化顯示器成全黑狀態(tài)。然后,調(diào)用GOLCreateScheme(),定義用于對(duì)象的式樣方案。
項(xiàng)目文件
圖形庫(kù)安裝后,項(xiàng)目目錄結(jié)構(gòu)如圖16所示:
圖16 Microchip項(xiàng)目層次結(jié)構(gòu)圖
此目錄作為項(xiàng)目目錄,可以添加應(yīng)用程序代碼,也可以與圖形庫(kù)一道被編譯。Graghics Lib 子目錄下存放的是圖形庫(kù)。Source Files子目錄存放C 文件、文檔和實(shí)用程序。Headers子目錄包含子目錄Graphics Lib圖形庫(kù)的頭文件和其他頭文件。
3.2軟件設(shè)計(jì)程序流程框圖
本設(shè)計(jì)主程序流程圖如圖17所示:
圖17 主程序流程圖
當(dāng)液晶屏啟動(dòng)時(shí)開(kāi)始對(duì)系統(tǒng)進(jìn)行配置,對(duì)變量、EEPROM、定時(shí)計(jì)數(shù)器等進(jìn)行初始化,等待50ms后,系統(tǒng)進(jìn)入穩(wěn)定,并創(chuàng)建代替的樣式方案。隨后從EEPROM讀取單次行駛里程和總行駛里程,并在對(duì)語(yǔ)言和時(shí)鐘模式進(jìn)行選擇時(shí)初始化用戶(hù)定義的式樣方案(例如字體,顏色)。在此之后執(zhí)行創(chuàng)建液晶屏頁(yè)面,處理觸摸信息,CAN接受處理等操作。最后是CAN信息的接收,處理和發(fā)送。
在此要特別強(qiáng)調(diào)的是觸摸信息分為四種:①無(wú)觸摸信息②接觸觸摸屏③離開(kāi)觸摸屏 ④觸摸在液晶屏上移動(dòng)。當(dāng)無(wú)觸摸信息時(shí),液晶屏顯示原有界面。當(dāng)有物體接觸觸摸屏?xí)r,進(jìn)入中段,當(dāng)接觸物體離開(kāi)觸摸屏?xí)r進(jìn)入下一界面。本設(shè)計(jì)暫時(shí)還沒(méi)有考慮第四種情況。這也是需要改進(jìn)的地方。
液晶屏顯示面積有限,不可能將所有的信息顯示在同一界面下,因此采用界面分層的層次結(jié)構(gòu)來(lái)滿足不同信息的顯示。每層下面對(duì)應(yīng)相應(yīng)的軟件流程框圖。顯示的層次結(jié)構(gòu)如圖18所示:
圖18 層次結(jié)構(gòu)圖
本設(shè)計(jì)中主要通信方式為CAN通信,也是電動(dòng)汽車(chē)與液晶顯示屏對(duì)話的語(yǔ)言,其程序設(shè)計(jì)流程框圖如圖19所示。
圖19 CAN通信結(jié)構(gòu)圖
3.3 智能顯示儀表界面
開(kāi)機(jī)啟動(dòng)時(shí),屏幕進(jìn)入主界面,如圖20所示:
圖20 主界面
圖20中顯示了車(chē)速,車(chē)輛行駛的距離,時(shí)間,電池等信息,各模塊具體信息通過(guò)點(diǎn)擊功能建進(jìn)入圖21所示界面。
圖21 液晶屏目錄界面
這個(gè)界面包括:控制器矢量控制,控制器壓頻控制,控制器直接轉(zhuǎn)矩控制,小計(jì)里程清零,能量清零,電池,充電機(jī),系統(tǒng)設(shè)置,故障,鎖定界面和返回。點(diǎn)擊其中一個(gè)按鍵將進(jìn)入相應(yīng)的控制界面,進(jìn)行更為詳細(xì)的信息顯示和設(shè)置。
當(dāng)點(diǎn)擊控制器矢量控制按鈕,進(jìn)入控制器矢量控制界面,該界面可以監(jiān)視電機(jī)的相關(guān)信息,如圖22所示:
圖22 矢量控制界面
圖22中電機(jī)轉(zhuǎn)速,行駛速度,電機(jī)溫度,控制器溫度,電機(jī)電壓,電流,頻率等參數(shù)都由CAN總線傳送給Microchip-PIC32芯片,再由Microchip-PIC32信息處理后,將實(shí)時(shí)的數(shù)據(jù)在液晶顯示屏上進(jìn)行顯示。
當(dāng)電池在充電或者放電時(shí),電池電壓,溫度,SOC等信息都會(huì)發(fā)生變化。液晶屏程序?qū)Τ浞烹姸歼M(jìn)行管理。當(dāng)通信出現(xiàn)問(wèn)題時(shí),在液晶屏右上角將顯示通信故障。如果發(fā)生過(guò)充,或者過(guò)放,液晶屏上將對(duì)過(guò)充過(guò)放電池電壓顯示為紅色以引起司機(jī)注意。在必要的時(shí)候?qū)⒆詣?dòng)關(guān)斷充電機(jī)阻止充電機(jī)對(duì)電池進(jìn)行過(guò)充電,過(guò)放電也是如此。如圖23所示。
圖24 電池狀態(tài)監(jiān)控界面
本設(shè)計(jì)由于要滿足不同電池類(lèi)型的需求,所以對(duì)鉛酸電池,錳酸電池,磷酸鐵鋰電池以及不同節(jié)數(shù)電池組成的電池組都進(jìn)行了考慮。并進(jìn)行了程序設(shè)計(jì)。當(dāng)使用不同電池類(lèi)型時(shí),需要在系統(tǒng)設(shè)置中對(duì)電池類(lèi)型進(jìn)行選擇。在圖24中,1號(hào),4號(hào),6號(hào)電池由于沒(méi)接電池檢測(cè)芯片,所以顯示通訊故障。表3是不同電池類(lèi)型的編號(hào)。
表3不同電池類(lèi)型的編號(hào)
電池類(lèi)型 | 電池電壓(電池節(jié)數(shù)) | 電池編號(hào) |
鉛酸 | 6V | 0 |
8V | 1 | |
12V | 2 | |
磷酸鐵鋰 | 16節(jié) | 3 |
24節(jié) | 4 | |
錳酸 | 3.3V | 5 |
缺省 | ---- | 6 |
該選擇必須進(jìn)入系統(tǒng)設(shè)置,并輸入密碼才能進(jìn)行修改。密碼保護(hù)功能能阻止系統(tǒng)被隨意設(shè)置,從而保證系統(tǒng)設(shè)置的正確性。
評(píng)論