摘要:給出基于μCOSⅡ操作系統(tǒng)的CAN控制器SJA1000智能節(jié)點(diǎn)在某品牌商務(wù)車車身控制系統(tǒng)中的應(yīng)用,簡(jiǎn)述其硬件電路和軟件的結(jié)構(gòu)框圖,并對(duì)設(shè)計(jì)中的難點(diǎn)及實(shí)現(xiàn)過程中應(yīng)注意的問題進(jìn)行介紹。
0 引言
  由于車身系統(tǒng)線路復(fù)雜,且很多動(dòng)作都存在相互的關(guān)聯(lián)性,必須對(duì)所有關(guān)聯(lián)性作出非常周密的考慮,才能真正實(shí)現(xiàn)汽車車身的全部安全控制功能。隨著汽車工業(yè)的">

      技術(shù)頻道

      基于μCOSⅡ的CAN總線車身控制系統(tǒng)

      摘要:給出基于μCOSⅡ操作系統(tǒng)的CAN控制器SJA1000智能節(jié)點(diǎn)在某品牌商務(wù)車車身控制系統(tǒng)中的應(yīng)用,簡(jiǎn)述其硬件電路和軟件的結(jié)構(gòu)框圖,并對(duì)設(shè)計(jì)中的難點(diǎn)及實(shí)現(xiàn)過程中應(yīng)注意的問題進(jìn)行介紹。
      0 引言
        由于車身系統(tǒng)線路復(fù)雜,且很多動(dòng)作都存在相互的關(guān)聯(lián)性,必須對(duì)所有關(guān)聯(lián)性作出非常周密的考慮,才能真正實(shí)現(xiàn)汽車車身的全部安全控制功能。隨著汽車工業(yè)的發(fā)展和汽車功能的增強(qiáng),這種情況將更突出,一方面給電路設(shè)計(jì)人員帶來困難,同時(shí)又增加成本和給生產(chǎn)、檢修帶來麻煩,反過來又限制汽車工業(yè)的發(fā)展。正是在這種情況下,德國(guó)Bosch公司為解決現(xiàn)代汽車中眾多的控制與檢測(cè)儀器之間的數(shù)據(jù)交換而開發(fā)了一種通訊協(xié)議即現(xiàn)場(chǎng)總線CAN。在國(guó)外,尤其在歐洲,CAN網(wǎng)絡(luò)已被廣泛地應(yīng)用在汽車上如BENZ,BMW,PORSCHE等車,而在國(guó)內(nèi)CAN在汽車上的研究才剛起步。
        μCOSⅡ操作系統(tǒng)平臺(tái)一方面具有足夠的安全性與穩(wěn)定性,已得到美國(guó)聯(lián)邦航空管理局對(duì)用于商用飛機(jī)的,符合RTCA DO—178部標(biāo)準(zhǔn)的認(rèn)證;另一方面它的多任務(wù)運(yùn)行使CPU的利用率達(dá)到最高,并使應(yīng)用程序模塊化,不僅使程序開發(fā)人員可以將很復(fù)雜的應(yīng)用程序?qū)哟位自O(shè)計(jì)和維護(hù),同時(shí)很容易實(shí)現(xiàn)汽車功能的擴(kuò)展和移植到其它型號(hào)的汽車上。
      1、汽車車身系統(tǒng)的介紹
        某品牌商務(wù)車車身系統(tǒng)的控制對(duì)象有:4個(gè)門鎖、兩個(gè)車窗玻璃升降器、行李箱鎖、除霜加熱器、電動(dòng)后視鏡,前后大燈、小燈、轉(zhuǎn)向燈、危險(xiǎn)燈、霧燈、牌照燈、車內(nèi)閱讀燈、車廂頂燈等。在具備遙控功能的情況下,還包括對(duì)遙控信號(hào)的接收處理和防盜系統(tǒng)的控制。
      1.1 節(jié)點(diǎn)分配
        車身系統(tǒng)控制單元按位置可分為左門節(jié)點(diǎn),右門節(jié)點(diǎn),車身前節(jié)點(diǎn),車身后節(jié)點(diǎn),儀表節(jié)點(diǎn),主節(jié)點(diǎn)。CAN總線拓?fù)浣Y(jié)構(gòu)如圖1所示:

      1.2 節(jié)點(diǎn)功能
        左/右門節(jié)點(diǎn)檢測(cè)與控制對(duì)象有:集控鎖的位置檢測(cè)與控制,電動(dòng)后視鏡上/下、左/右電機(jī)的正反向驅(qū)動(dòng)控制,電動(dòng)車窗玻璃上/下電機(jī)的正反向驅(qū)動(dòng)控制,側(cè)方向燈閃爍驅(qū)動(dòng)控制,各自門鎖控制開關(guān)及玻璃升降開關(guān)位置檢測(cè),除以上左右門均有的檢測(cè)與控制對(duì)象外,左門上還有右門車窗玻璃點(diǎn)動(dòng)/自動(dòng)控制開關(guān)、左右電動(dòng)后視鏡上/下、左/右控制開關(guān)位置檢測(cè)。各個(gè)控制對(duì)象的故障檢測(cè)和處理。
        前節(jié)點(diǎn)對(duì)前大燈、前小燈、前霧燈、前轉(zhuǎn)向燈、冷卻風(fēng)扇電機(jī)、前雨刮器電機(jī)等對(duì)象的控制、驅(qū)動(dòng)、故障檢測(cè)及對(duì)少量開關(guān)量的檢測(cè)和處理。
        后節(jié)點(diǎn)對(duì)后小燈,后霧燈,后轉(zhuǎn)向燈,制動(dòng)燈,倒車燈,牌照燈,車廂頂各燈以及除霜加熱器等對(duì)象的控制、驅(qū)動(dòng)、故障檢測(cè)及少量開關(guān)量的檢測(cè)和處理。
        主節(jié)點(diǎn)是整個(gè)車身控制系統(tǒng)的中樞,負(fù)責(zé)和其它各個(gè)節(jié)點(diǎn)進(jìn)行數(shù)據(jù)通訊并作消息處理。各子節(jié)點(diǎn)將檢測(cè)到的各種量(開關(guān)量和模擬量)處理后打包成含有各種所需信息的報(bào)文(即消息 )發(fā)送給主節(jié)點(diǎn) ,主節(jié)點(diǎn)根據(jù)報(bào)文所含的信息作相應(yīng)處理(包括邏輯關(guān)系處理)后再打包成消息發(fā)送給子節(jié)點(diǎn)執(zhí)行。CAN總線通訊采用廣播模式,即子節(jié)點(diǎn)的報(bào)文只有主節(jié)點(diǎn)接收(點(diǎn)對(duì)點(diǎn)模式),主節(jié)點(diǎn)的報(bào)文所有子節(jié)點(diǎn)均接收。主節(jié)點(diǎn)除了作為系統(tǒng)的中樞功能外,還和其他節(jié)點(diǎn)一樣負(fù)責(zé)對(duì)汽車駕駛臺(tái)前所有開關(guān)的狀態(tài)進(jìn)行檢測(cè),并對(duì)駕駛臺(tái)的所有背光燈(如開關(guān)、儀表等)進(jìn)行PWM調(diào)光驅(qū)動(dòng)。
        儀表節(jié)點(diǎn):該節(jié)點(diǎn)不參與汽車車身控制但它是人與車交流的界面。儀表指示各傳感器產(chǎn)生的脈沖量(發(fā)動(dòng)機(jī)轉(zhuǎn)速傳感器、車輪轉(zhuǎn)速傳感器)和模擬量(油量傳感器、水溫傳感器)所對(duì)應(yīng)的物理量。還有液晶顯示日期、大里程和小里程、轉(zhuǎn)速、油量、倒車?yán)走_(dá)的測(cè)距等,以及語(yǔ)音提示功能。
      2、節(jié)點(diǎn)電路設(shè)計(jì)
        在進(jìn)行硬件電路的設(shè)計(jì)時(shí),充分考慮了汽車安全、節(jié)能、可靠性的要求。根據(jù)當(dāng)前市場(chǎng)、開發(fā)工具和課題的實(shí)際需要,系統(tǒng)全部節(jié)點(diǎn)均以PHILIP P89C668HFA單片機(jī)為核心,它含有8K的RAM,足以保證運(yùn)行μCOSⅡ操作系統(tǒng)。
      2.1 硬件通訊可靠性的設(shè)計(jì)
        選用SJA1000作為CAN控制器,其內(nèi)部具有64位緩沖器,對(duì)總線具有一定的緩存能力。使用CAN控制器接口芯片82C250,它最初為汽車的高速通信應(yīng)用而設(shè)計(jì)的,該芯片提供CAN總線的差動(dòng)發(fā)送和接收能力,并具有抗汽車環(huán)境下的瞬間干擾,保護(hù)總線的能力,可以通過調(diào)整CAN總線上通信脈沖的斜率來降低射頻干擾。
      2.2 硬件節(jié)能的設(shè)計(jì)
        在汽車中電路設(shè)計(jì)首先要考慮各器件的耗電量。驅(qū)動(dòng)芯片選用MOTOROLA系列的汽車專用芯片,它除能夠滿足汽車上各個(gè)設(shè)備的需要并具有對(duì)短路,斷路,過流,過熱等故障進(jìn)行檢測(cè)、診斷和保護(hù)的功能外,而且其芯片靜態(tài)電流很小,如MC33288靜態(tài)電流小于10μA。另一方面要充分考慮控制電路板的電源消耗,除了主節(jié)點(diǎn)運(yùn)行外,其余各節(jié)點(diǎn)在汽車停放時(shí),通過主節(jié)點(diǎn)控制各節(jié)點(diǎn)的DC-DC的使能端切斷控制電源,在汽車啟動(dòng)時(shí),再通過主節(jié)點(diǎn)控制各節(jié)點(diǎn)的DC-DC的使能端使其正常運(yùn)行。
      2.3 CAN電源的設(shè)計(jì)
        汽車車身比較大,CAN電源和通訊的線路都比較長(zhǎng),為防止車身震動(dòng)和電源電壓波動(dòng),影響CAN通訊,車身前節(jié)點(diǎn)和車身后節(jié)點(diǎn)上各通過DC-DC芯片把12V直流電源整流成5V,并聯(lián)作為CAN電源使用。其節(jié)點(diǎn)的硬件設(shè)計(jì)很相似,圖2是前節(jié)點(diǎn)的硬件結(jié)構(gòu)圖。
      2.4 開關(guān)量檢測(cè)電路設(shè)計(jì)
        汽車所有開關(guān)量,通過I2C總線用8574芯片擴(kuò)展的I/O口進(jìn)行檢測(cè),同時(shí)把一個(gè)節(jié)點(diǎn)上的所有8574芯片的INT引腳和P89C668的INT1(中斷1)線相連, CAN總線的中斷是利用CPU的INT0(即外部中斷0)。


      3、系統(tǒng)軟件設(shè)計(jì)
        整個(gè)系統(tǒng)的軟件可分為編譯軟件、上位機(jī)的軟件和系統(tǒng)節(jié)點(diǎn)軟件三個(gè)部分。
      3.1 編譯軟件
        主要是把用漢字書寫的汽車上各個(gè)器件的邏輯關(guān)系(規(guī)則式),(例如: [<變光開關(guān):近光]&[<燈光開關(guān):大燈]==[>前照燈:遠(yuǎn)光] &[Delay:5s]&[>前照燈:滅]),根據(jù)具體的CAN協(xié)議和μCOSⅡ嵌入式操作系統(tǒng)所定義消息的要求編譯成單片機(jī)能認(rèn)識(shí)的代碼,從而保證了程序的兼容性和有利于汽車功能的擴(kuò)展,同時(shí)也可以移植到其它型號(hào)的汽車上。
      3.2 上位機(jī)的軟件
        主要是通過USBCAN適配卡對(duì)CAN總線傳遞的報(bào)文進(jìn)行監(jiān)聽,這樣對(duì)整個(gè)CAN上的設(shè)備和裝置可以起到較好的監(jiān)控作用,以便能方便地進(jìn)行系統(tǒng)調(diào)試。
      3.3 系統(tǒng)節(jié)點(diǎn)軟件軟件
        主程序基于μCOSⅡ嵌入式操作系統(tǒng)實(shí)現(xiàn)多任務(wù)實(shí)時(shí)控制。各節(jié)點(diǎn)采集,檢測(cè)各自的數(shù)字量,模擬量,脈沖量,以CAN協(xié)議的格式形成報(bào)文(即消息)發(fā)送到總線上,同時(shí)根據(jù)需要對(duì)多個(gè)設(shè)備對(duì)象進(jìn)行就地實(shí)時(shí)控制和監(jiān)視。通信軟件是系統(tǒng)節(jié)點(diǎn)軟件的關(guān)鍵部分,采用CAN2.0B通訊協(xié)議。通信軟件有3部分組成:主程序,初始化程序,發(fā)送程序和接收程序(即中斷0處理程序)。以下是基于μCOSⅡ嵌入式操作系統(tǒng)的簡(jiǎn)單框架和部分程序。

      3.3.1 主函數(shù)
        OSInit()和OSStart()是μCOSⅡ操作系統(tǒng)提供的源代碼,OSMboxCreate() 和OSTaskCreate()是μCOSⅡ操作系統(tǒng)分別用來產(chǎn)生郵箱和任務(wù)的函數(shù)[4]。
      void main(void)
      {
      INTInit (); // 開通CPU的中斷;
      CanInit(); //SJA1000的初始化;
      OSInit(); //μCOSⅡ操作系統(tǒng)的初始化;
      Timer0Init (); //定時(shí)器0的初始化;
      MBoxPro=OSMboxCreate((void *)0); //創(chuàng)建存放從CAN上接收到的數(shù)據(jù)(消息)的郵箱;
      MBoxSend=OSMboxCreate((void *)0); //創(chuàng)建存放所要發(fā)送數(shù)據(jù)(消息)的郵箱;
      OSTaskCreate(TaskCanSend, (void *)0, &TaskCanSendSTK[0],7);
      //創(chuàng)建發(fā)送CAN數(shù)據(jù)的任務(wù);
      OSTaskCreate(TaskMsgPro,(void*)0,&TaskProSTK[0],20);//創(chuàng)建處理消息的任務(wù);
      OSStart(); //啟動(dòng)μCOSⅡ操作系統(tǒng);
      }
      3.3.2 初始化程序
        初始化程序通過將CAN控制器的寄存器寫入控制字,確定CAN的工作方式。用P2.7作為選通信號(hào)與SJA1000的CS引腳相連,SJA1000的片內(nèi)寄存器和P89C668單片機(jī)寄存器是重疊編址的,因此SJA1000寄存器尋址時(shí)要定義成片外RAM尋址。
      CanInit(void)
      { MODE = 0x09; //進(jìn)入復(fù)位模式,對(duì)SJA1000進(jìn)行初始化;
      CDR =0x88; //選擇PeliCan;
      CMR = 0x0C; //清除數(shù)據(jù)溢出和釋放接收緩沖器;
      IER = 0x03; //開放接收中斷和發(fā)送中斷;
      ACR0 = 0x66; //根據(jù)具體的協(xié)議定義;
      ACR1 = 0x66; //根據(jù)具體的協(xié)議定義;
      ACR2 = 0x66; //根據(jù)具體的協(xié)議定義;
      ACR3 =0x66; //根據(jù)具體的協(xié)議定義;
      AMR0 = 0x00; //根據(jù)具體的協(xié)議定義;
      AMR1 = 0x00; //根據(jù)具體的協(xié)議定義;
      AMR2 = 0x00; //根據(jù)具體的協(xié)議定義;
      AMR3 = 0x07; //低三位SJA1000是保留位,設(shè)置為無關(guān);
      BTR0 = 0x02; //12MHz晶振下,設(shè)置波特率為100kbps;
      BTR1 =0x2F;
      OCR=0XAA;
      EWLR =0x60;
      RBSA = 0x00; //RX緩存器起始地址寄存器設(shè)置為0;
      TXERR= 0x00;
      ECC =0x00; 
      MODE= 0x08; //單向?yàn)V波方式,進(jìn)入正常模式;
      }
      3.3.3 發(fā)送任務(wù)程序
        要發(fā)送的報(bào)文的數(shù)據(jù)為兩個(gè)字節(jié)。
      void TaskCansend(void *scddata) reentrant
      { INT8U err;
      unsigned char xdata *ptbuf;//SJA1000的寄存器定義成片外RAM;
      unsigned char i,status;
      StrYz *MesNeedSend; //郵箱接收?qǐng)?bào)文的格式,為結(jié)構(gòu)體;
      scddata=scddata;
      for(;;){
      //不斷等待發(fā)送郵箱MboxCanSend是否有要發(fā)送的報(bào)文,若有報(bào)文則執(zhí)行發(fā)送任務(wù)。
      MesNeedSend=(StrYz *)OSMboxPend(MBoxSend,0,&err);
      ptbuf=0x7f10;
      status=SR;
      if ((status&0x10)==0x10) return ;
      if ((status&0x08)==0x0) return ;
      if ((status&0x04)==0x0) return ;
      for(i=0;i<=4;i++)
      {
      *ptbuf=SjaTran[i]; //發(fā)送1個(gè)字節(jié)的報(bào)文幀信息和4字節(jié)的報(bào)文ID碼;
      ptbuf++;
      }
      *ptbuf=Val ; //發(fā)送的消息即報(bào)文:第一個(gè)字節(jié);
      ptbuf++;
      *ptbuf= ID; //發(fā)送的消息即報(bào)文:第二個(gè)字節(jié);
      CMR=0x01;
      return ; } }
      3.3.4 接收中斷服務(wù)子程序
        SJA1000報(bào)文的接收有兩種方式:中斷接收方式和查詢接收方式。鑒于對(duì)汽車通訊的實(shí)時(shí)性要求很強(qiáng),因此采用中斷接收方式.當(dāng)SJA1000接收緩存器滿時(shí),其內(nèi)部接收中斷標(biāo)志位置位,并使得CPU的外部中斷INT0為高電平,產(chǎn)生中斷。因中斷比μCOSⅡ操作系統(tǒng)的其它任務(wù)優(yōu)先級(jí)高,則μCOSⅡ操作系統(tǒng)立即響應(yīng)并進(jìn)行保護(hù)現(xiàn)場(chǎng)和任務(wù)調(diào)度,進(jìn)入下面的CAN中斷接收程序,當(dāng)執(zhí)行完后,恢復(fù)現(xiàn)場(chǎng),進(jìn)行任務(wù)切換。鑒于每次發(fā)送一個(gè)幀數(shù)據(jù)(含有消息),為了防止一個(gè)開關(guān)動(dòng)作而發(fā)送幾個(gè)消息(非連續(xù)發(fā)送),根據(jù)SJA1000的機(jī)理,每接收一次釋放一次,如果當(dāng)前的消息沒有及時(shí)地發(fā)送到要處理消息的郵箱MsgPro,從而造成當(dāng)前的消息被后來的消息覆蓋,因此在CPU開辟一段RAM空間作為緩存區(qū)即StrYz StrCanRE[10],來保存要處理的消息,這也是實(shí)現(xiàn)可靠通訊的需要。
      StrYz StrCanRE[10];
      INT8U IStrCanRE=0;
      void TaskCanRec(void) reentrant
      { unsigned char status;
      unsigned char xdata * prbuf; //定義指向SJA1000寄存器的指針;
      status=SR; //讀狀態(tài)并去SJA1000的中斷標(biāo)志位;
      status=status&0xC3;
      if(status!=0)
      { if((status&0x80)==0x80) { MODE=0x00;return;}
      if((status&0x2)==0x02) {CMR=0x0C;return; }
      if((status&0x01)==0x01 )
      { if((*prbuf & 0x40)==0x40) CMR=0x04; //是否遠(yuǎn)程禎;
      else { ptbuf=0x7f15; //接收后兩個(gè)字節(jié)的數(shù)據(jù)(消息);
      StrCanRE[IStrCanRE].Val=*ptbuf; //接收第一個(gè)字節(jié)數(shù)據(jù);
      ptbuf++;
      StrCanRE[IStrCanRE].ID=*ptbuf; //接收第二個(gè)字節(jié)數(shù)據(jù);
      CMR=0x04;
      //把從CAN總線上接收到的消息發(fā)送到要處理消息的郵箱MsgPro;
      OSQPost(MBoxPro,(void * )&StrCanRE[IStrCanRE]);
      IStrCanRE++;
      if( IStrCanRE >= 10 ) IStrCanRE = 0;
      }} }
      return;
      }
      4、結(jié)束語(yǔ)
        總之,就像汽車電子技術(shù)在20世紀(jì)70年代引入集成電路、80年代引入微處理器一樣,90年代直到21世紀(jì)初總線技術(shù)在汽車電子技術(shù)中將是一個(gè)重要的里程碑。目前國(guó)內(nèi)還沒有自主產(chǎn)權(quán)的CAN總線技術(shù)在汽車工業(yè)中應(yīng)用,但是許多高校和科研單位都在加緊這方面的研究和開發(fā)。本文在這一領(lǐng)域做了有益的探索和大膽的嘗試,實(shí)踐證明,CAN技術(shù)是成功的。它必將以其低成本,高可靠性及靈活的通訊方式推動(dòng)我國(guó)汽車工業(yè)的發(fā)展。


      文章版權(quán)歸西部工控xbgk所有,未經(jīng)許可不得轉(zhuǎn)載。

      主站蜘蛛池模板: 天堂一区二区三区精品| 免费视频精品一区二区三区| 无码人妻精品一区二区三区东京热| 一区二区三区国模大胆| 97精品国产福利一区二区三区| 99久久精品国产高清一区二区| 亚洲国产成人一区二区三区 | 免费在线观看一区| 一区二区三区电影在线观看| 色婷婷AV一区二区三区浪潮| 中文字幕亚洲综合精品一区| 天堂不卡一区二区视频在线观看 | 午夜影院一区二区| 无码精品人妻一区二区三区免费看 | 2018高清国产一区二区三区| 亚洲一区二区三区香蕉| 久久精品综合一区二区三区| 亚洲午夜日韩高清一区| 亚洲AⅤ视频一区二区三区| 国产免费av一区二区三区| 亚洲国产欧美日韩精品一区二区三区| 国产AV午夜精品一区二区入口| 中文字幕一区二区人妻| 久久精品一区二区三区不卡| 日本一区二区不卡视频| 久久久老熟女一区二区三区| 91精品一区二区| 亚洲AV成人精品一区二区三区| 一区二区三区在线观看| 精品亚洲福利一区二区| 加勒比精品久久一区二区三区| 波多野结衣中文字幕一区二区三区| 日本中文字幕在线视频一区| 果冻传媒董小宛一区二区| 国产精品无码一区二区三级| 一区三区三区不卡| 美女一区二区三区| 亚洲综合一区国产精品| 大香伊蕉日本一区二区| 国产综合一区二区在线观看| 一区二区视频在线|