摘要:給出基于μCOSⅡ操作系統的CAN控制器SJA1000智能節點在某品牌商務車車身控制系統中的應用,簡述其硬件電路和軟件的結構框圖,并對設計中的難點及實現過程中應注意的問題進行介紹。
0 引言
  由于車身系統線路復雜,且很多動作都存在相互的關聯性,必須對所有關聯性作出非常周密的考慮,才能真正實現汽車車身的全部安全控制功能。隨著汽車工業的">

      技術頻道

      基于μCOSⅡ的CAN總線車身控制系統

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

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


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

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


      文章版權歸西部工控xbgk所有,未經許可不得轉載。

      主站蜘蛛池模板: 精品乱码一区二区三区在线| 男人免费视频一区二区在线观看| 3d动漫精品一区视频在线观看 | 国产大秀视频在线一区二区| 水蜜桃av无码一区二区| 久久国产午夜一区二区福利| 末成年女A∨片一区二区| 亚洲一区二区三区高清不卡 | 久久久久国产一区二区三区| 天堂Aⅴ无码一区二区三区| 国产成人精品一区二区三区免费| 一区二区亚洲精品精华液| 欧美一区内射最近更新| 国产乱码精品一区二区三| 射精专区一区二区朝鲜| 免费精品一区二区三区在线观看| 一区二区免费电影| 在线视频一区二区| 国产激情一区二区三区四区| 成人区人妻精品一区二区不卡视频 | 国模无码视频一区二区三区| 日韩一区二区在线观看| 久久久久人妻一区精品性色av| 天堂va视频一区二区| 99久久精品国产免看国产一区| 91精品福利一区二区三区野战| 国产一区二区三区在线免费| 国产av熟女一区二区三区| 亚洲综合一区国产精品| 免费萌白酱国产一区二区三区| 精品国产一区二区三区久久久狼| 一区二区三区午夜| 亚洲一区二区三区在线观看网站| 亚洲日本一区二区三区在线不卡| 亚洲一区二区三区91| 在线观看国产一区| 国产成人av一区二区三区在线观看 | 日韩A无码AV一区二区三区| 亚洲国产日韩在线一区| 久久综合精品国产一区二区三区| 日韩免费一区二区三区|