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