天津安中通訊電子有限公司 劉宗鵬
?
汽車中控門鎖控制器及遙控器的研發(fā)設計
天津安中通訊電子有限公司劉宗鵬
導語:汽車門鎖是汽車車身的重要部件,其發(fā)展趨勢是由機械式向電子化演變。汽車中控門鎖(簡稱中控門鎖)是為了使汽車的使用更方便和安全,對4個車門的鎖閉和開啟實行集中控制。
汽車中控門鎖的基本結(jié)構(gòu):
1.基本結(jié)構(gòu)
中控門鎖的工作原理是將電能轉(zhuǎn)化為機械能,用電動機帶動齒輪轉(zhuǎn)動來開關車門?;窘M成主要由門鎖開關、門鎖執(zhí)行機構(gòu)、門鎖控制器。
2.遙控原理
中控門鎖的無線遙控功能是指不用把鑰匙鍵插入鎖孔中就可以遠距離開門和鎖門。
遙控的基本原理:從車主身邊發(fā)出微弱的電波,由汽車天線接收該電波的信號,經(jīng)電子控制器ECU識別信號代碼,再由該系統(tǒng)的執(zhí)行器(電動機或電磁線圈)執(zhí)行啟、閉鎖的動作。
本論文所闡述的汽車中控門鎖控制器結(jié)構(gòu)框圖如下:
從上圖來看原理非常簡單,但實現(xiàn)起來卻要經(jīng)過精心的設計和反復的實驗。既要考慮成本又要安全可靠穩(wěn)定,密碼無重復且不易破解,整機靜態(tài)耗電流要控制在10毫安以下。遙控距離要在20米且靈敏無卡殼現(xiàn)象。
下面就從硬件電路設計和軟件編程兩大方面詳細講解如何一步一步實現(xiàn)整機。
硬件電路方面:
1.印制電路板的設計
經(jīng)過實際測量可知 車門鎖在動作時電流大約在10A左右,由于汽車一共有4個車門再加上車燈,他們同時動作時電流非常大,大約在10A---30A左右,所以印制電路板基板要設計成1.6毫米厚的,銅箔厚度要35微米,這個很重要。這樣才能保證控制器有足夠的電流驅(qū)動能力使車門鎖塊動作而控制器整機安全可靠無發(fā)熱變形、銅箔線路爆裂、板子燃燒等現(xiàn)象發(fā)生。
2.電源供電電路的設計
基于整機靜態(tài)耗電流要控制在10毫安以下及汽車電源多為12伏,把鎖塊的動作直接由汽車電源來提供大電流,而整機需要提供給繼電器和MCU、接收解碼等電路的電流非常小,大約10mA—30mA,從而選用了78L05這個三端穩(wěn)壓管電路。78L05電路簡單,外圍元件很少。輸入端使用一個100uF的電解電容和一個濾波電容0.1uF即可。這個電路可提供的最大電流100—150毫安。輸入電壓17伏到7伏。輸出5伏穩(wěn)定可靠。電路雖然簡單,但因為它是整個電路板工作可靠的基礎,必須保證輸出穩(wěn)定耐用,所以購買元件時一定要防止買到假貨。同時它在電路板上的布局更是至關重要,因為要和接收解碼電路同處一個板子上,它會干擾解碼,且要分別給接收解碼電路、MCU、繼電器供電,所以這個電路必須放在遠離接收電路的位置,這樣才能最大限度的減少對接收解碼的干擾。擺放位置可以靠近繼電器,這樣還有利于電路板Layout。
3.MCU電路的設計
MCU的選擇主要由以下幾點來決定:(1)元器件的采購成本。(2)開發(fā)人員對它的熟悉程度,如果選用了不熟悉的MCU則勢必延長開發(fā)周期,耽誤市場。(3)它的內(nèi)部資源是否夠用且滿足功能設計要求。
鑒于以上幾點我選擇了ST公司的M8系列的單片機。20個管腳,內(nèi)部有定時器,ADC,中斷等資源。滿足了設計的所需資源。
4.接收解碼電路的設計
接收遙控器解碼電路是整個控制器的靈魂,它的設計至關重要。必須精心設計。最初我選用了SYN480R這個接收解碼芯片作為接收解碼。它集成度高,外圍電路設計簡單,所用元件很少。接收靈敏度高 -106dbm,接收距離理論上符合20米的要求??梢越邮展潭ùa和滾動碼。頻率在2500Hz。但是在實際作出第一版整機,安裝到汽車內(nèi)測試后發(fā)現(xiàn)接收距離約9—10米。與理想的距離相差太多。無法滿足設計需求。反復查找原因,改變電路元件參數(shù)都無功而返。實踐證明汽車的外殼對于這個芯片來說產(chǎn)生了阻礙,把遙控器的發(fā)射信號衰減的過于小,所以無發(fā)正確解碼執(zhí)行動作。經(jīng)過再次選件和反復測試,最終選用了SYN510,這個芯片與SYN480R屬于同一公司生產(chǎn)的同一系列的芯片。工作原理相同,電路設計方面很相近,但接收靈敏度增加到了-110dbm,對于汽車外殼可以穿透。實際接收距離比SYN480R高了很多,測試后符合最初的設計要求。
5.鎖塊控制和車燈控制等電路的設計
這部分的電路設計相對比較簡單,只需簡單的控制繼電器的供電引腳,通過打開和關閉汽車電源來控制繼電器通斷引腳的開和關進而控制鎖塊的動作,這里不做過多講解。需要注意的地方就是線路板設計時連接鎖塊的引腳的銅皮必須足夠?qū)?,以承受大電流的通過。線路板設計時在這些引腳的銅皮上增加鍍錫層,這樣可以增強電流的通過能力。
6.遙控器的設計
這部分也是至關重要的部分,它的設計好壞直接影響著接收距離和靈敏度。尤其是線路板天線的設計,它是遙控器的發(fā)射天線,接收的距離很大程度上與它有關。實踐證明經(jīng)歷了9次的畫電路板、投板測試,才達到了20米的距離要求。每一次電路板的問題都集中在天線的畫法上。不同的銅皮形狀、厚度、阻抗等對接收距離影響非常大。經(jīng)過與天線公司的工程師配合測試,最終發(fā)現(xiàn)阻抗接近50歐姆,發(fā)射功率集中,是最接近理想的方案。
軟件方面的設計:
主要分兩大部分,主MCU程序的編寫和遙控器的密碼燒寫,尤其以主MCU程序的編寫最為關鍵。下面主要講解主MCU程序的編寫,遙控器的密碼燒寫較為簡單,不做重點分析。
主MCU選取的是ST公司的M8系列單片機--STM8S103。它的端口配置及所用ADC、時鐘、定時器等資源的初始化可以參考STM8S103手冊,直接套用就可。重點講解接收遙、度和速度,我采用中斷加查詢方式來處理,每次中斷發(fā)生時做好標記,當標記符合編碼頭指令的位數(shù)時給解碼標記置位,在主程序大循環(huán)中進行接收滾碼和固定碼部分,并解碼、對比判斷、執(zhí)行動作。中斷采用上升和下降沿中斷,每接收到上升沿給解碼標記置位。在主程序中繼續(xù)處理。這樣一位數(shù)據(jù)一位數(shù)據(jù)的接收,直到66位數(shù)據(jù)接收結(jié)束再進行解碼、判讀、執(zhí)行動作處理。中斷程序如下:
if(GPIO_ReadInputPin(ReCtrl_PORT,ReCtrl_PIN) == 0){Low_Time=0;}else
{tmpLowTime0=Low_Time;Receive_Flag = 1;}
由于長江流域東西走向,同處于亞熱帶濕潤季風區(qū),生態(tài)要素配置大體相同,并又有能通航的長江干流聯(lián)系;但長江流域又有多個相對獨立的自然地理單元。因此,長江流域的文化又極具多樣性,如楚文化、荊楚文化、湖湘文化、吳文化、越文化、徽文化、贛文化、江淮文化、巴蜀文化和客家文化,各種文化既具同一性又有多樣性,最終融合成完整的長江流域文明。南宋以后,長江流域成為全國經(jīng)濟社會的重心。鴉片戰(zhàn)爭以后,工業(yè)文明傳播到中國,最早工業(yè)化的城市主要也分布在沿著長江而上的上海、武漢和重慶等地。進入新時代,我國長江流域經(jīng)濟帶和海岸帶經(jīng)濟帶將形成“T”字形的戰(zhàn)略構(gòu)架,起到引領中華民族強起來的歷史使命。
HCS301芯片發(fā)射的編碼格式如下:
數(shù)據(jù)“1”用兩個低電平一個高電平表示數(shù)據(jù)“0”用兩個高電平一個低電平表示。
整個編碼由(前導碼+數(shù)據(jù)頭+滾碼+固定碼+防護)組成。有效數(shù)據(jù)共66個數(shù)據(jù),其中滾碼32位,固定碼34位。固定碼由序列號和按鈕編碼和狀態(tài)碼組成。
程序的重點是解碼滾碼部分。程序如下:
函數(shù)名:解密函數(shù)
void Decrypt(void)
{ uint8_t i=12,k=48,tmpi=0,C=0,a=0,b=0,mask_c=0,mask_c_h=0, mask=0, table[4];
table[0]=0x2e;table[1]=0x74; table[2]=0x5c;table[3]=0x3a;
KEY0=0xEF; KEY1=0xC6;KEY2=0x5E;KEY3=0xB0;KEY4 =0xD4;KEY5=0xC9;
KEY6=0xA2;KEY7=0xC7;KEY_compress();
i=12; k=48;for(i=12;i>0;i--) { for(k=48;k>0;k--){tmpi=i^0x1; if(tmpi!=0)
{C=0;if((hop3&0x08)!=0){mask=0x10;}else{mask=0x1;}if((hop2 &0x01)!=0) {mask_c_h=mask&0x80;mask_c=C;if(mask_c!=0){mask=( mask<<1)+1;}else{mask=mask<<1;} mask_c=mask&0x80;if(mask_c_h ==0x80){mask=(mask<<1)+1;}else{mask=mask<<1;}mask_c_h=0;}
if((hop1&0x01)!=0){mask_c_h=mask&0x80;if(mask_c!=0){m ask=(mask<<1)+1;}
else{mask=mask<<1;}mask_c=mask&0x80;mask_c=mask_c_ h;mask_c_h=0;}
a=0;if((hop4&0x02)!=0){ a=a+1;}if((hop4&0x40)!=0){a=a+2;}
mask=table[a]&mask;if(mask!=0){b=0x80;sawed=hop2^b;sawed=hop4^sawed;
sawed=KEY1^sawed;}else{b=0x00;sawed=hop2^b;sawed=hop4^sawed;
sawed=KEY1^sawed;}mask=sawed;mask_c_h=mask&0x80;if(mask_c!=0){
mask=(mask<<1)+1;}else{mask=mask<<1;} mask_c=hop1&0x80;
if(mask_c_h!=0){hop1=(hop1<<1)+1;}else{hop1=hop1<<1;}mask_c_h=hop2&0x80;
if(mask_c!=0){ hop2=(hop2<<1)+1;}else{hop2=hop2<<1;}mask_c=hop3&0x80;
if(mask_c_h!=0){hop3=(hop3<<1)+1;}else{hop3=hop3<<1;}mask_c_h=hop4&0x80;
if(mask_c!=0){hop4=(hop4<<1)+1;}else{hop4=hop4<<1;}mask_c=mask_c_h;
mask_c_h=0;}C=0;tmpAddr_Code_MSB=Addr_Code_MSB&0x80000000;
if(tmpAddr_Code_MSB!=0){C=1;}tmpAddr_Code_LSB=Addr_Co de_LSB&0x80000000;if(C==0){Addr_Code_LSB=Addr_Code_LSB<< 1;}else{Addr_Code_LSB=(Addr_Code_LSB<<1)+1;} tmpAddr_Code_M SB=Addr_Code_MSB&0x80000000;if(tmpAddr_Code_LSB==0){
Addr_Code_MSB=Addr_Code_MSB<<1;}else{ Addr_Code_MSB= (Addr_Code_MSB<<1)+1;}
C=tmpAddr_Code_MSB;KEY1=(uint8_t)((Addr_Code_LSB&0x00 00ff00)>>8);}} }
程序的原理見下圖:
這部分解密后與主MCU的FLASH中儲存的密碼相比,如果一致則解密正確,否則錯誤。
解密正確后,按照按鈕指令執(zhí)行相應動作。具體按鈕的動作根據(jù)產(chǎn)品要求自己定義。
這樣整個流程就結(jié)束了,再重復執(zhí)行下次,如此反復便完成了整個程序。
整體程序流程如下:
遙控器HCS301芯片的密碼燒寫如下圖:
我使用的是專用燒寫器。由于操作比較簡單,只需設置好密鑰和格式,在這里不做過多講解。
參考文獻
[1]STM8S103參考手冊.
[2]HCS301芯片手冊.