基于P87C591的CAN總線控制系統(tǒng)的設(shè)計(jì)研究
引言
現(xiàn)場總線技術(shù)是一種基于現(xiàn)場設(shè)備之間進(jìn)行數(shù)據(jù)通訊的新型總線系統(tǒng),它綜合了計(jì)算機(jī)技術(shù)、數(shù)字通訊技術(shù)、自動(dòng)控制技術(shù)、網(wǎng)絡(luò)技術(shù)和智能儀表等各種技術(shù)手段,從根本上突破了傳統(tǒng)的“點(diǎn)對(duì)點(diǎn)”式的模擬信號(hào)或數(shù)字—模擬信號(hào)控制的局限性,構(gòu)成了一種全分散、全數(shù)字化、智能化雙向、互連、多變量、多結(jié)點(diǎn)的通信控制系統(tǒng)。
CAN總線是德國BoSCH公司為解決現(xiàn)代汽車中眾多的控制與測(cè)試儀器之間的數(shù)據(jù)交換而開發(fā)的一種串行數(shù)據(jù)通訊協(xié)議。CAN總線以其高性能、高可靠性及其獨(dú)特的設(shè)計(jì)越來越受到人們的重視,并被公認(rèn)為是汽車電控系統(tǒng)中最有前途的總線之一。奔馳、寶馬、大眾等一些國際著名汽車生產(chǎn)廠家已經(jīng)在各自的產(chǎn)品中采用了CAN總線技術(shù)。目前,國內(nèi)的汽車生產(chǎn)廠家也已經(jīng)開始重視該項(xiàng)技術(shù)。毫無疑問,CAN總線技術(shù)將是今后車載網(wǎng)絡(luò)領(lǐng)域的主流協(xié)議標(biāo)準(zhǔn)。
P87C591芯片的特點(diǎn)
P87C591是一個(gè)單片8位高性能微控制器,除了80C51的標(biāo)準(zhǔn)特性之外,器件還為實(shí)際應(yīng)用提供許多專用的硬件功能。片中帶16K字節(jié)內(nèi)部程序存儲(chǔ)器,可外部擴(kuò)展到64K字節(jié);512字節(jié)片內(nèi)數(shù)據(jù)RAM,可外部擴(kuò)展到64K字節(jié);并且有3個(gè)16位定時(shí)/計(jì)數(shù)器T0, T1(標(biāo)準(zhǔn)80C51)和附加的T2(捕獲比較),2個(gè)8位分辨率的脈寬調(diào)制輸出(PWM),包含一個(gè)看門狗定時(shí)器T3。P87C591中包括4個(gè)中斷優(yōu)先級(jí),l5個(gè)中斷源,為編寫高效率的程序軟件提供了強(qiáng)大的硬件支持。
P87C591是NXP半導(dǎo)體公司推出的帶有在片CAN控制器SJA 1000的新型微控制器。它完全履行CAN 2.0規(guī)范并提供一個(gè)獨(dú)立CAN控制器的軟件移植路徑。其中包括增強(qiáng)型驗(yàn)收濾波器、支持系統(tǒng)維護(hù)、診斷、系統(tǒng)優(yōu)化以及接收FIFO特性。該嵌入式CAN控制器包括了具有CAN的擴(kuò)充特性。該嵌入式CAN控制器包括了下列功能模塊:
① CAN內(nèi)核模塊根據(jù)CAN 2. 0規(guī)范控制CAN幀的接收和發(fā)送。
② CAN接口包含5個(gè)實(shí)現(xiàn)CPU與CAN控制器連接的特殊功能寄存器。
③ CAN控制器的發(fā)送緩沖區(qū)能夠保存一個(gè)完整的CAN信息格式。只要通過CPU啟動(dòng)發(fā)送,信息字節(jié)就從發(fā)送緩沖區(qū)傳輸?shù)紺AN內(nèi)核模塊。
④ 所有驗(yàn)收濾波器驗(yàn)收的接收數(shù)據(jù)都保存在接收FIFO中。取決于操作模式和數(shù)據(jù)長度的不同,最多可存放21個(gè)CAN信息。
⑤ 當(dāng)接收一個(gè)信息時(shí),CAN內(nèi)核模塊將串行位流轉(zhuǎn)換成并行數(shù)據(jù)輸入到驗(yàn)收濾波器,通過該可編程濾波器,P87C591確定實(shí)際接收到的信息。
P87C591微控制器內(nèi)部總線通過80C51微處理器接口與PeIiCAN相連。通過CANADR(地址)、CANDAT(數(shù)據(jù))、CANMOD(模式)、CANSTA(狀態(tài))和CANCON(控制)5個(gè)特殊功能寄存器對(duì)PeIiCAN寄存器和RAM區(qū)進(jìn)行訪問。圖1為P87C591的功能框圖。
硬件電路設(shè)計(jì)
本文所設(shè)計(jì)的控制系統(tǒng)的CAN總線節(jié)點(diǎn)硬件電路由微處理器(P87C591)、CAN總線通信接口的收發(fā)器(NXP公司的82C250)和功能裝置(傳感器、執(zhí)行器等)組成。如 圖2所示為控制系統(tǒng)CAN總線節(jié)點(diǎn)通訊相關(guān)的硬件電路原理圖。由于P87C591本身含有CAN模塊,因此不需要外加CAN控制器,所需要的外部元件僅僅是一個(gè)晶振加兩個(gè)電容,一個(gè)連接到復(fù)位腳的電容(使用片內(nèi)復(fù)位電路)以及一個(gè)收發(fā)器用于將P87C591連接到CAN總線。
為了防止干擾,在CAN總線節(jié)點(diǎn)硬件設(shè)計(jì)上采取了以下措施:
①82C250與CAN總線的接口部分采取了抗干擾措施。82C250的CANH和CANL引腳各自通過一個(gè)5? 的電阻與CAN總線相連,電阻可起到一定的限流作用,保護(hù)82C250免受過流的沖擊。CANH和CANL與地之間并聯(lián)了兩個(gè)30pF的小電容,可以起到濾除總線上的高頻干擾和一定的防電磁輻射能力。另外在兩根CAN總線接入端與地之間分別反接了一個(gè)保護(hù)二極管,當(dāng)CAN總線有較高的負(fù)電壓時(shí),通過二極管的短路可起到一定的過壓保護(hù)作用。
② 總線兩端應(yīng)接有兩個(gè)120?電阻,對(duì)于匹配總線阻抗起著重要的作用,忽略掉它們會(huì)使數(shù)據(jù)通信的抗干擾性及可靠性大大降低甚至無法通信。
在CAN總線程序設(shè)計(jì)中,初始化程序是整個(gè)軟件設(shè)計(jì)中的重點(diǎn)和難點(diǎn),它直接關(guān)系到系統(tǒng)能否正常工作。對(duì)CAN 控制器進(jìn)行初始化,實(shí)際上就是對(duì)集成CAN控制器的P87C591芯片中的寄存器進(jìn)行初始化設(shè)置,并對(duì)報(bào)文接收緩沖區(qū)進(jìn)行設(shè)置。內(nèi)容包括:操作模式、TXDC輸出管腳的配置、總線定時(shí)、驗(yàn)收濾波器、中斷等。CAN控制器初始化流程圖如圖3所示。
CAN初始化子程序如下:
void init_can_controller(void)
{
/*進(jìn)入CAN控制器復(fù)位模式*/
CANMOD=0x01; /*將CAN控制器設(shè)置為復(fù)位模式以啟動(dòng)初始化*/
/*TXDC Port (P1.1)配置*/
P1M2=P1M2|0x02; /*管腳TXDC設(shè)置為推挽模式*/
/*配置與CAN有關(guān)的中斷*/
CANSTA=0x03; /*使能接收和發(fā)送中斷*/
/*CAN位定時(shí)的配置*/
CANADR=BTR0; /*BTR0和BTR1編程為100kbit/s,在16MHz條件下*/
CANDAT=0x00;
CANADR=BTR1;
CANDAT=0x14; /*用戶可根據(jù)具體的CAN網(wǎng)絡(luò)來調(diào)整BTR0、BTR1的參數(shù)*/
/*驗(yàn)收濾波器1配置為接收ID=10000000XXX*/
CANADR=ACR0; /*將地址設(shè)置到驗(yàn)收代碼寄存器0(BANK1)*/
CANDAT=0x80; /*驗(yàn)收代碼0用于濾波*/
CANADR=AMR0; /*將地址設(shè)置到驗(yàn)收屏蔽寄存器0(BANK1)*/
CANDAT=0x00; /*BANKl:與驗(yàn)收屏蔽0有關(guān)*/
CANDAT=0xFF; /*BANKl:與驗(yàn)收屏蔽1無關(guān),允許任何數(shù)據(jù)通過濾波器*/
CANDAT=0xFF; /*BANKl:與驗(yàn)收屏蔽2無關(guān),允許任何數(shù)據(jù)通過濾波器*/
CANDAT=0xFF; /*BANKl:與驗(yàn)收屏蔽3無關(guān),允許任何數(shù)據(jù)通過濾波器*/
CANADR=ACFMOD; /*將地址設(shè)置到ACF模式寄存器*/
CANDAT=0xFF; /*單驗(yàn)收濾波器使用29位ID(EFF)*/
CANADR=ACFPRIO; /*將地址設(shè)置到ACF優(yōu)先級(jí)寄存器*/
CANDAT=0xFF; /*所有濾波器都為高優(yōu)先級(jí)*/
CANADR=ACFEN; /*將地址設(shè)置到ACF使能寄存器*/
CANDAT=0x01; /*使能Bankl的驗(yàn)收濾波器*/
/*選擇操作模式退出CAN控制器復(fù)位模式*/
CANMOD=0x00; /*使CAN控制器進(jìn)入操作模式*/
}
結(jié)束語
本 文從硬件和軟件的角度對(duì)內(nèi)嵌CAN控制器(SJA1000)的P87C591進(jìn)行了詳細(xì)的介紹,不僅給出了P87C591的CAN總線硬件電路原理圖,還給出了CAN總線的初始化子程序。P87C591是個(gè)高性能的CAN微控制器,可用于汽車和通用的工業(yè)應(yīng)用。尤其在汽 車 車身控制系統(tǒng)中它可以發(fā)揮很好的作用,通過使用該系統(tǒng)進(jìn)行CAN總線的車身控制,可以簡化線路,減少車內(nèi)線束連接的復(fù)雜性,保證信號(hào)無干擾、實(shí)時(shí)的傳輸,并且實(shí)現(xiàn)系統(tǒng)實(shí)時(shí)診斷、測(cè)試和報(bào)警功能。隨著汽車電子技術(shù)的發(fā)展,其在汽車電控系統(tǒng)中必將得到更廣泛的應(yīng)用。
評(píng)論