<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 基于CAN總線的并聯(lián)液壓混合動力車控制系統(tǒng)

          基于CAN總線的并聯(lián)液壓混合動力車控制系統(tǒng)

          作者: 時間:2016-12-01 來源:網(wǎng)絡(luò) 收藏

          節(jié)點報文接收器的接收濾波器由兩部分組成:接收碼寄存器(ACR)和接收屏蔽寄存器(AMR)。此兩個寄存器均為8位:驗收碼位(AC.7~AC.0),驗收屏蔽位(AM.7~AM.0)。當信息幀的報文標識符最高8位(ID.10~ID.3)滿足下列等式:

          〔(ID.10~ID.3)=(AC.7~AC.0)〕或(AM.7~AM.0)=11111111B

          則該信息幀將被報文接收器接收。

          對于本系統(tǒng)的5個網(wǎng)絡(luò)節(jié)點,定義各節(jié)點的驗收碼和驗收屏蔽碼如下:

          1#:ACR=81H,AMR=BEH;

          2#:ACR=82H,AMR=BDH;

          3#:ACR=84H,AMR=BBH;

          4#:ACR=88H,AMR=B7H;

          主機:ACR=A0H,AMR=9FH;

          根據(jù)上述節(jié)點地址分配,各節(jié)點均可實現(xiàn)對其它任意節(jié)點組合的信息發(fā)送。如主機對1#、2#、3#節(jié)點同時發(fā)送信息,則主機發(fā)送信息幀的標識符高8位可寫為:87H或07H。

          可見對報文接收器而言,ID.10=0或1沒有區(qū)別。但根據(jù)CAN總線協(xié)議,顯性位“0”將比隱性位“1”具有更高的總線優(yōu)先權(quán)。定義ID.10=0的信息幀為“快速幀”,ID.10=1的信息幀為“普通幀”。

          因此,上述地址分配方法具有以下優(yōu)點:

          (1)容易實現(xiàn)單點對其他點任意組合的信息發(fā)送;

          (2)各節(jié)點具有不同的優(yōu)先級,從1#到5#到主機優(yōu)先級依次降低,保證發(fā)往關(guān)鍵節(jié)點的信號不被阻塞;

          (3)每個節(jié)點都有兩種地址編碼,且優(yōu)先級不同,保證關(guān)鍵指令首先被接收。

          3.2通訊方式及信息幀分類

          由于分布式控制通訊量較大,對信息進行分類和規(guī)定相應(yīng)的協(xié)議將有利于軟件的標準化,提高編程效率和程序的可靠性。首先,依據(jù)CAN總線協(xié)議標準,定義以C語言描述的CAN信息幀格式:

          struct CAN_MSG

          unsignedcharCAN_FLAG;

          unsigned char CAN_DLC;

          unsigned char CAN_DATA[8];

          };

          其中CAN_FLAG是信息目標標識符,CAN_DLC含遠程幀信號位、幀定義描述和數(shù)據(jù)幀長度信息,CAN_DATA為8字節(jié)數(shù)據(jù)。

          依據(jù)信息的流向、總線優(yōu)先級和作用的不同,將通訊信息分為5類,其具體定義如下(按優(yōu)先級從低到高排列):

          (1)遠程幀:由主機以一定節(jié)拍發(fā)往各控制器,擊活相應(yīng)控制器的狀態(tài)幀發(fā)送。目的是使主機能在規(guī)定的時間內(nèi)獲得電動車的狀態(tài)信息,同時減少因各控制器自動發(fā)送狀態(tài)幀而引起總線阻塞。

          格式:CAN_FLAG采用“普通幀”點對點編碼;CAN_DLC=0xF0;CAN_DATA為空。

          (2)狀態(tài)幀:由控制器發(fā)往主機或其他控制器。狀態(tài)幀返回當前命令執(zhí)行狀態(tài)和采集量信息,作為上層控制器執(zhí)行下一步規(guī)劃的標志。

          格式:CAN_FLAG采用“普通幀”點對點、點對多編碼;CAN_DLC=0xE8;CAN_DATA[0]為狀態(tài)或信息數(shù)據(jù)標識,確定后續(xù)數(shù)據(jù)的含義;CAN_DATA[1]~ CAN_DATA[7]為數(shù)據(jù)。

          (3)間接命令幀:由主機發(fā)往控制器,或由某運行復(fù)合動作元的控制器發(fā)往其他控制器。間接命令幀含有復(fù)合動作元或動作元指令,接收方必須對命令進行分解才能產(chǎn)生驅(qū)動外設(shè)動作的控制元指令。

          格式:CAN_FLAG采用“普通幀”點對點、點對多編碼;CAN_DLC=0x60+DLC,DLC等于有效數(shù)據(jù)的字節(jié)數(shù);CAN_DATA[0]為狀態(tài)或信息數(shù)據(jù)標識,確定后續(xù)數(shù)據(jù)的含義;CAN_DATA含有具體指令信息。

          (4)直接命令幀:發(fā)送方向同間接命令幀。但該命令幀所含命令將被接收方直接執(zhí)行,驅(qū)動控制元動作,因此,應(yīng)具有比間接命令幀更高的優(yōu)先級。

          格式:CAN_FLAG采用“快速幀”點對點、點對多編碼;CAN_DLC=0x20+DLC,DLC等于有效數(shù)據(jù)的字節(jié)數(shù);CAN_DATA含有具體指令信息。

          (5)緊急命令幀:從檢測到緊急狀態(tài)的控制發(fā)往其他相關(guān)控制器。此命令具有最高優(yōu)先級,用以在檢測到緊急狀態(tài)時,快速執(zhí)行相應(yīng)動作、避免事故發(fā)生。該命令將被接收方直接運行。

          格式:CAN_FLAG采用“快速幀”點對點、點對多編碼;CAN_DLC=0x00+DLC,DLC等于有效數(shù)據(jù)的字節(jié)數(shù);CAN_DATA含有具體指令信息。

          3.3 軟件設(shè)計

          CAN總線為分布式控制提供了良好的硬件基礎(chǔ),使各節(jié)點的通訊不再是制約分布式控制實現(xiàn)的主要因素。整個系統(tǒng)從本質(zhì)上說已經(jīng)不存在主、從節(jié)點之分,整個系統(tǒng)的控制的控制已經(jīng)從傳統(tǒng)網(wǎng)絡(luò)中主節(jié)點的單一控制(這種體系結(jié)構(gòu)要求上位機具有大容量的程序存儲器和高運算速度,必然造成上位機的大型化),轉(zhuǎn)化為各節(jié)點的協(xié)調(diào)控制,整加了系統(tǒng)控制的靈活性,也同時降低了對主節(jié)點的要求。

          圖3 控制器1#,3#輸入輸出參數(shù)

          如上圖3所示,車輛信息采集模塊采集車速、發(fā)動機轉(zhuǎn)速、檔位信號(前進、空檔、倒車)、油門踏板及剎車踏板的狀態(tài)及幅度。液壓系統(tǒng)測控模塊采集蓄能器的壓力,控制離合器的吸合與斷開,通過油路控制(4個開關(guān)量)實現(xiàn)油路分配控制,最后通過液壓泵/馬達控制實現(xiàn)液壓系統(tǒng)回收/釋放功能及強度。

          各節(jié)點控制器均能獨立完成部分命令分解和調(diào)用底層指令的功能。這樣,對于某一動作元而言,節(jié)點控制器將充當“命令主機”。下面以“液壓系統(tǒng)運行調(diào)節(jié)”這一復(fù)合動作元執(zhí)行時,1#,3#控制器流程圖(如圖4,圖5所示)為例,說明各控制器在分布式控制系統(tǒng)中的作用。可以看出,在該指令執(zhí)行過程中,3#控制器充當了1#控制器的“命令主機”。



          評論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();