新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 基于單片機(jī)的某車型CAN總線系統(tǒng)設(shè)計

基于單片機(jī)的某車型CAN總線系統(tǒng)設(shè)計

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

現(xiàn)場總線技術(shù)[1]是目前自動化控制領(lǐng)域發(fā)展比較迅速的一門技術(shù),其中CAN(Controller Area Network)總線[2]是在國際上應(yīng)用最廣泛的現(xiàn)場總線之一。近幾年隨著汽車電子行業(yè)的發(fā)展,現(xiàn)代汽車中已經(jīng)成為必須采用的裝置之一。本文以ATMEL公司新近生產(chǎn)的一款內(nèi)置CAN控制器的——AT90CAN128為基礎(chǔ),設(shè)計了一款車載系統(tǒng),通過CAN智能測控儀表對車中部分單元參數(shù)量進(jìn)行實時監(jiān)控,使各單元之間協(xié)調(diào)運轉(zhuǎn)。另外,傳輸線束大大簡化,可靠性得到了極大的提高,有效節(jié)約了線束安裝空間和系統(tǒng)成本。

本文引用地址:http://m.butianyuan.cn/article/201609/303625.htm

1 AT90CAN128特性概述

1.1 基本特性

AT90CAN128[3]是基于AVR RISC結(jié)構(gòu)的8位低功耗CMOS微處理器,它采用了先進(jìn)的指令集以及單周期指令執(zhí)行時間,其數(shù)據(jù)吞吐率高達(dá)1 MIPS/MHz,其內(nèi)核具有豐富的指令集和32個通用工作寄存器。所有寄存器都直接與ALU相連接。通過將8位RISC CPU與系統(tǒng)內(nèi)可編程的Flash集成在一個芯片內(nèi),為許多嵌入式控制應(yīng)用提供了靈活而低成本的方案。

1.2 內(nèi)置CAN控制器概述

AT90CAN128內(nèi)置有完全符合CAN2.0A和2.0B標(biāo)準(zhǔn)協(xié)議的CAN控制器。采用MOb(消息對象)方式進(jìn)行數(shù)據(jù)的發(fā)送和接收,共有15個 MOb,它們具有相同的屬性:有11位標(biāo)識符(2.0A協(xié)議),也可擴(kuò)展至29位(2.0B議);8位數(shù)據(jù)緩沖(靜態(tài)分配);Tx,Rx幀

緩沖或自動響應(yīng)配置;時間標(biāo)識。

MOb是一個CAN消息幀的描述符。它包括處理一個CAN消息幀的所有信息。這意味著一個MOb可以看成一個對象,來描述一條CAN消息。MOb的數(shù)目是從0到14。它們相互獨立,但在多重比較的時候,低位的MOb會獲得優(yōu)先權(quán)。每個MOb都被安置在一個頁中來保存。頁的序號就是MOb的序號。

2 車載控制系統(tǒng)[4]的設(shè)計

由于對實時性要求比較高,所以采用高速CAN總線,信息傳輸速度為500kbps,連接的主要對象有:駕駛員計算機(jī)、發(fā)動機(jī)、自動變速器、安全氣囊、儀表信號采集系統(tǒng)、聯(lián)合制動系統(tǒng)等。由于各個節(jié)點作用不同,所以在硬件搭建和軟件設(shè)計以及通信協(xié)議的制定上都采用了相應(yīng)的方案。下面以聯(lián)合制動單元為例,做具體分析。

聯(lián)合制動單元接收由駕駛員計算機(jī)終端發(fā)送的CAN總線消息命令,根據(jù)對液力制動扭矩、機(jī)械制動扭矩、合成扭矩等參數(shù)進(jìn)行檢測的狀態(tài),經(jīng)過電液控制算法計算,實現(xiàn)前驅(qū)、后驅(qū)制動控制。對正常制動回路油位、緊急制動回路油位的報警等信息,通過CAN總線反饋給駕駛員計算機(jī)終端。

2.1 聯(lián)合制動單元硬件電路組成

以AT90CAN128作為控制系統(tǒng)核心,外圍設(shè)有8路光隔模擬量輸入、4路模擬量輸出、多路光隔開關(guān)量輸入、輸出、LED報警及CAN總線收發(fā)器,總線的接口芯片選用的是Philips公司的PCA82C250。

2.2 通信協(xié)議制定

2.2.1 各終端消息標(biāo)識符的定義

采用CAN擴(kuò)展幀的29位標(biāo)識符進(jìn)行定義,其中P為3位優(yōu)先級;R為保留擴(kuò)展位;8位的BW為報文類型代碼;8位的BD為目標(biāo)地址或報文類型擴(kuò)展碼;8位的BY為發(fā)送報文源地址。部分設(shè)備節(jié)點名稱和分配地址如下:主駕駛員終端地址10、副駕駛員終端地址20、聯(lián)合制動單元地址30。

2.2.2 各消息類型和命令值內(nèi)容的定義

駕駛員計算機(jī)終端對聯(lián)合制動單元的控制消息內(nèi)容為2個字節(jié)——命令類型和命令值。命令類型包括:狀態(tài)查詢命令(數(shù)據(jù)0x1,命令值0x0)、前/后驅(qū)制動命令(數(shù)據(jù)0x2/0x3,命令值0x0)、聯(lián)合制動單元前/后驅(qū)制動信息確認(rèn)(數(shù)據(jù)0x4/0x5,命令值0x0)等。

聯(lián)合制動單元提供給駕駛員計算機(jī)終端的消息內(nèi)容包括:聯(lián)合制動單元狀態(tài)信息(7字節(jié),分別為液力制動扭矩、機(jī)械制動扭矩、合成扭矩、速度以及緊急回路和正常油壓的數(shù)值,以及正常制動回路油位和緊急制動回路油位的報警狀態(tài))、聯(lián)合制動單元報警信息(2字節(jié),分別為正常制動回路油位報警和緊急制動回路油位的報警)、聯(lián)合制動單元制動返回消息(2字節(jié),分別為收到的前驅(qū)或后驅(qū)制動命令的命令數(shù)據(jù)和命令值)等。

2.3 軟件設(shè)計(CAN總線通訊部分)

2.3.1 初始化部分

初始化前將CAN通用控制寄存器的最高位置1(復(fù)位模式)。完成后,回到操作模式。

下面給出了CAN控制器的初始化程序:

void CAN_INIT ( void )

{

CANGCON = 0x80 ; /*進(jìn)入復(fù)位模式并且復(fù)位MOb*/

while ( ENFG == 1 ) ; /*測試CANGSTA中的ENFG位是否為0*/

CANGIE = 0xB0 ; /*使能所有中斷及接收、發(fā)送中斷*/

CANIE2 = 0xFF ; /*MOb 0~7中斷使能*/

CANIE1 = 0x00 ; /*MOb 8~14中斷禁止*/

CANBT1 = 0x02 ; /*設(shè)置波特率為500kbps*/

CANBT2 = 0x20 ;

CANBT3 = 0x01 ;

CANTCON = 0x8F ; /*設(shè)置定時器預(yù)定標(biāo)*/

/*以“聯(lián)合制動單元狀態(tài)查詢消息”為例*/

CANPAGE = TX_PAGE ; /*指定此消息的MOb頁(寄存器中的高4位)*/

CANCDMOB = 0x17 ; /*禁止?fàn)顟B(tài),IDE位為1表示擴(kuò)展幀,數(shù)據(jù)長度代碼為7*/

CANIDT1 = 0x84 ; /*標(biāo)識符設(shè)置*/

CANIDT2 = 0xB1 ;

CANIDT3 = 0x18 ;

CANIDT4 = 0xF2 ;

CANIDM1 = 0xFF ; /*標(biāo)識符屏蔽設(shè)置*/

CANIDM2 = 0xFF ;

CANIDM3 = 0xFF ;

CANIDM4 = 0xFF ;

CANGCON = 0x02 ; /*進(jìn)入操作模式*/

While ( ENFG == 0 ) ; /*測試CANGSTA中的ENFG位是否為1*/

}

2.3.2 消息的發(fā)送部分

消息的發(fā)送均采用中斷方式實現(xiàn)。首先通過設(shè)置CANPAGE寄存器來指定被發(fā)送的頁數(shù),將數(shù)據(jù)裝載到CANMSG寄存器中,然后由CANCDMOB寄存器來控制發(fā)送動作,將消息發(fā)送出去,同時將觸發(fā)CANSTMOB中的TXOK中斷。

下面以協(xié)議中的“聯(lián)合制動單元狀態(tài)查詢命令”為例,給出了發(fā)送程序:

void CAN_TX ( void )

{

CANPAGE = TX_PAGE ; /*指定此消息的MOb頁(寄存器中的高4位)*/

CANMSG = 0x01 ; /*裝載消息數(shù)據(jù)*/

CANMSG = 0x00 ; /*裝載消息命令值*/

CANCDMOB = 0x52 ; /*發(fā)送狀態(tài),IDE位為1表示擴(kuò)展幀,數(shù)據(jù)長度代碼為2*/

}

void CAN_TX_INTER ( void ) /*發(fā)送中斷子程序*/


上一頁 1 2 下一頁

關(guān)鍵詞: 單片機(jī) CAN總線

評論


相關(guān)推薦

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

關(guān)閉