引言:
電動(dòng)汽車儀表盤是一種集LED、LCD顯示技術(shù)、步進(jìn)電機(jī)控制技術(shù)于一體,適應(yīng)電動(dòng)汽車電子化、數(shù)字化、信息化發(fā)展的高新技術(shù)產(chǎn)品,它是駕駛員與汽車進(jìn)行信息交流的窗口,是一個(gè)多信息顯示平臺(tái),顯示電機(jī)狀態(tài)、電池組狀態(tài)、行駛信息、底盤信息、指示報(bào)警等其它信息。Freescale的S12HY32是汽車儀表盤設(shè)計(jì)專用16位MCU,筆者以S12HY32為核心設(shè)計(jì)了一款電動(dòng)汽車儀表盤,它采用步進(jìn)電機(jī)進(jìn)行指針的指示,具有很好的數(shù)據(jù)控制特性,并能及時(shí)反映汽車加減速、電壓電流上升與下降等各種工況,提高了整個(gè)系統(tǒng)的平穩(wěn)性和定位精度,同時(shí)保留了機(jī)械指針指示的直觀、有動(dòng)感、符合駕駛員習(xí)慣等優(yōu)點(diǎn)。采用LED顯示轉(zhuǎn)向燈、遠(yuǎn)近光變換、車門狀態(tài)、安全帶未系提示、充電指示、報(bào)警等狀態(tài)【1】,采用LCD數(shù)字顯示里程表和故障狀態(tài)。本文介紹S12HY32的功能特性和應(yīng)用要點(diǎn),并剖析電動(dòng)汽車儀表盤的設(shè)計(jì)原理和軟硬件結(jié)構(gòu)。
1 硬件設(shè)計(jì)
1.1 MC9S12HY32簡(jiǎn)介
MC9S12HY32是一款可擴(kuò)展入門級(jí)的汽車儀表盤應(yīng)用16位微控制器,集16位性能和許多專用功能于一身【2】,如LCD驅(qū)動(dòng)和步進(jìn)電機(jī)驅(qū)動(dòng),同時(shí)服務(wù)于需要CAN/LIN的應(yīng)用,非常適合經(jīng)濟(jì)高效的汽車儀表盤應(yīng)用。其芯片資源及特性如下【3】:
1、32MHz總線頻率的HCS12 CPU內(nèi)核;
2、帶有ECC(錯(cuò)誤校正碼)的32KB程序閃存和4KB數(shù)據(jù)閃存,4KB片內(nèi)SRAM;
3、字段式LCD控制器,最多可配置為40x4段;
4、4個(gè)步進(jìn)電機(jī)控制器,可以進(jìn)行電機(jī)失速檢測(cè);
5、兩個(gè)16位定時(shí)器模塊,可提供16位輸入捕捉、輸出比較、計(jì)數(shù)和脈沖累加器功能;
6、8通道10位逐次逼近型ADC;
7、SPI/I2C模塊,一個(gè)SCI模塊,支持 LIN 2.0、2.1 和 SAE J2602 通信;
8、MSCAN模塊,支持 CAN 協(xié)議 2.0A/B。
1.2 系統(tǒng)結(jié)構(gòu)
儀表盤由
CAN總線接口、信號(hào)采集電路、步進(jìn)電機(jī)、
LCD、
LED、報(bào)警裝置組成,用于各種工況下汽車運(yùn)行信息的采集和顯示,圖
1給出了儀表盤硬件結(jié)構(gòu),下面結(jié)合
S12HY32的內(nèi)部資源介紹下儀表盤的硬件設(shè)計(jì)。
圖1 儀表盤硬件結(jié)構(gòu)圖
Picture 1:Dashboard hardware architecture
S12HY32內(nèi)部資源專為儀表應(yīng)用而設(shè)計(jì),4個(gè)步進(jìn)電機(jī)驅(qū)動(dòng)器可以進(jìn)行車速、電機(jī)轉(zhuǎn)速、電流和電池組電壓的指針指示,LCD控制器可以控制字段式LCD顯示總里程、小計(jì)里程和電機(jī)故障信息,內(nèi)部有MSCAN模塊支持CAN總線應(yīng)用,可以通過(guò)CAN總線獲取一些關(guān)鍵信息,同時(shí)保留直接進(jìn)行信息采集的能力:內(nèi)置定時(shí)捕捉模塊可以進(jìn)行車速/電機(jī)轉(zhuǎn)速脈沖的捕捉與統(tǒng)計(jì),內(nèi)置ADC進(jìn)行電機(jī)溫度等模擬量的采集。下面以車速信號(hào)檢測(cè)為例介紹下儀表盤電路設(shè)計(jì)。
1.3 車速信號(hào)檢測(cè)
車速是儀表盤需要顯示的關(guān)鍵信息,根據(jù)汽車原理和拓?fù)浣Y(jié)構(gòu),車速信號(hào)來(lái)源是
CAN總線或者車速傳感器。車速傳感器輸出
0-12V的脈沖信號(hào),其信號(hào)頻率大小與車速值大小成線性關(guān)系,隨車速增加而增加
【4】,通過(guò)圖
2所示的整形電路將車速傳感器信號(hào)轉(zhuǎn)換為
TTL電平,然后通過(guò)定時(shí)捕捉模塊捕捉脈沖信號(hào)的上升沿或下降沿,進(jìn)行統(tǒng)計(jì)分析即可得到車速大小。
圖2 車速信號(hào)檢測(cè)電路
Picture 1:Speed signal detection circuit
2 軟件設(shè)計(jì)
2.1 軟件流程設(shè)計(jì)
因?yàn)闆](méi)有采用操作系統(tǒng),軟件設(shè)計(jì)采用循環(huán)體+中斷的軟件結(jié)構(gòu)【5】,主循環(huán)體完成主體功能,中斷服務(wù)程序進(jìn)行底層協(xié)議設(shè)計(jì)和驅(qū)動(dòng)管理,軟件流程圖如圖3所示,下面簡(jiǎn)單介紹一下該流程。首先進(jìn)行全局變量和所用外設(shè)(包括IO、PWM、TIMER、SCI、CAN、LCD、MOTOR CONTROLLER)的初始化,初始化完成后,進(jìn)入主循環(huán),然后在循環(huán)體內(nèi)依次進(jìn)行定時(shí)器管理、開關(guān)信號(hào)檢測(cè)、車速檢測(cè)、CAN通訊管理、里程計(jì)算及存儲(chǔ)、報(bào)警控制、LCD控制和步進(jìn)電機(jī)控制。各軟件模塊次序如圖三所示。下面以車速檢測(cè)為例介紹下軟件的詳細(xì)設(shè)計(jì)。
Picture 3 Software Process
2.2車速信號(hào)檢測(cè)軟件設(shè)計(jì)
車速信號(hào)整形后得到TTL脈沖,S12HY32的定時(shí)捕捉模塊以中斷的方式捕捉脈沖的沿變化【6】,在中斷處理函數(shù)中進(jìn)行脈沖個(gè)數(shù)累加。設(shè)計(jì)脈沖統(tǒng)計(jì)結(jié)構(gòu)體和一200ms的周期定時(shí)器,采用“滑動(dòng)時(shí)間窗口脈沖統(tǒng)計(jì)法”進(jìn)行車速的計(jì)算,脈沖統(tǒng)計(jì)結(jié)構(gòu)體設(shè)計(jì)如下:
typedef struct{
uint8_t bank;
uint16_t cnt;
}s_PulseCnt;
在上述結(jié)構(gòu)體中,cnt表示脈沖個(gè)數(shù),bank表示數(shù)據(jù)是否有效?;瑒?dòng)時(shí)間窗口脈沖統(tǒng)計(jì)法設(shè)計(jì)如下:
定義成員個(gè)數(shù)為6的脈沖統(tǒng)計(jì)結(jié)構(gòu)體數(shù)組Speed_pulse[6],周期性存儲(chǔ)車速脈沖個(gè)數(shù),脈沖率等價(jià)于一秒內(nèi)的脈沖個(gè)數(shù),則有公式如下:
脈沖頻率=(Speed_pulse[5].cnt-Speed_pulse[0].cnt) (2-1)
車速=脈沖頻率*FACTOR (2-2)
FACTOR由變速比和輪胎直徑共同決定。
當(dāng)下計(jì)算的車速表示過(guò)去1秒內(nèi)的平均車速,在下一個(gè)200ms到達(dá)后,將下標(biāo)為1到5的結(jié)構(gòu)體變量依次“滑動(dòng)復(fù)制”到下標(biāo)為0到4的結(jié)構(gòu)體變量中,然后更新下標(biāo)為5的結(jié)構(gòu)體變量,此時(shí)根據(jù)公式2-1和公式2-2進(jìn)行計(jì)算得到的車速為0.2秒-1.2秒之間的平均速度。這種方式計(jì)算得到的車速實(shí)時(shí)性更強(qiáng),而且車速變化更加平滑,反映在指針的變化上也更加平穩(wěn)平滑,能得到更佳的視覺(jué)體驗(yàn),其代碼實(shí)現(xiàn)如下:
void SpeedDetect(void)
{
uint16_t i,j;
uint16_t Carspeed_pulse_frequency=0;
if(1==Speed_detect_enable){
if(1==Timer[SPEED_PULSE_ACCUMU_200MS].overflow_flag){
for(i=0;i<=5;i++){
if(0==Speed_pulse[i].bank){
Speed_pulse[i].cnt=Car_speed_pulses;
Speed_pulse[i].bank=1;
if(5==i){
Carspeed_pulse_frequency=Speed_pulse[5].cnt-Speed_pulse[0].cnt;
Ev_speed=(float32_t)Carspeed_pulse_frequency*CAR_PULSE_FACTOR;
EvSpeedRangeCheck();
for(j=0;j<5;j++){
Speed_pulse[j].cnt=Speed_pulse[j+1].cnt;
}
Speed_pulse[i].bank=0;
}
break;
}
}
}
}
}
結(jié)語(yǔ)
筆者采用MC9S12HY32設(shè)計(jì)實(shí)現(xiàn)了一款電動(dòng)汽車儀表盤,從處理器特性、硬件結(jié)構(gòu)、車速信號(hào)檢測(cè)等方面描述了儀表盤的硬件設(shè)計(jì),從軟件流程設(shè)計(jì),車速信號(hào)檢測(cè)的軟件實(shí)現(xiàn)上描述了儀表盤的軟件設(shè)計(jì)。該儀表盤經(jīng)裝車試驗(yàn),運(yùn)行穩(wěn)定,功能可靠,已經(jīng)進(jìn)入小批量預(yù)生產(chǎn)階段,具有很高的實(shí)用價(jià)值。