国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于CAN總線的開關(guān)控制電路設(shè)計與實現(xiàn)

2018-03-23 03:45徐志山
關(guān)鍵詞:發(fā)送數(shù)據(jù)收發(fā)器寄存器

徐志山

(宣城職業(yè)技術(shù)學院 機械與汽車工程系,安徽 宣城 242000)

1 CAN總線概述

CAN(Controller Area Network)為控制器局域網(wǎng)之意,是基于工業(yè)控制的現(xiàn)場總線(Field bus)的一種形式[1],稱為CAN總線.CAN總線最早由德國Bosch公司開發(fā)用于汽車上多個電子控制模塊間的通信,目的是提高通信可靠性,實現(xiàn)了汽車電控系統(tǒng)由分散控制向網(wǎng)絡(luò)控制的轉(zhuǎn)變,形成了車載網(wǎng)絡(luò)通信系統(tǒng)[2].早在1993年國際標準化組織(ISO)就通過了CAN總線通信協(xié)議.CAN總線通信協(xié)議包括兩部分,即CAN2.0A和CAN2.0B,它們的主要區(qū)別在于信息報文的格式不同,CAN2.0A提供11位的報文地址,而CAN2.0B提供29位的報文地址,所以,CAN2.0A被稱為BasicCAN,而CAN2.0B被稱為PeliCAN[3].

實際的CAN總線通信是發(fā)生在單片機之間的串行通信,但不是單片機之間的直接通信,而是發(fā)生在以單片機為核心的通信設(shè)備物理層和數(shù)據(jù)鏈路層之間的信息傳輸,其中,物理層是CAN總線的硬件層,主要實現(xiàn)物理信號傳輸、譯碼、位定時、位同步和位驅(qū)動,而數(shù)據(jù)鏈路層能夠?qū)崿F(xiàn)數(shù)據(jù)的總線仲裁、信息分段以及數(shù)據(jù)拆封、數(shù)據(jù)應(yīng)答、錯誤檢測、超載通知等功能[4].要實現(xiàn)CAN總線通信,關(guān)鍵是CAN總線通信的硬件設(shè)計和軟件設(shè)計,在硬件設(shè)備上有的采用8位單片機,如PIC16F877[5],有的采用16位單片機,如MC9S12X128[6],而SJA1000和TJA1050一直是作為CAN總線通信的控制器和收發(fā)器.江蘇啟東計算機廠生產(chǎn)的DVCC-51NET單片機開發(fā)板裝有SJA1000和TJA1050芯片,在開發(fā)板上插入STC89C52芯片作為主控芯片,將TJA1050的端子CAN-H(端子7)和CAN-L(端子6)用雙絞線與其他有同樣裝置的開發(fā)板連接起來,就可以進行CAN總線開關(guān)控制設(shè)計.

2 CAN總線開關(guān)控制電路硬件設(shè)計

按照CAN總線通信物理層協(xié)議要求,CAN總線通信就是通過專用的通信線(一般是屏蔽雙絞線)將若干個通信模塊并聯(lián)起來,每個通信模塊叫做CAN節(jié)點.對于非集成式CAN節(jié)點至少包括3部分,即:節(jié)點主控單元(單片機)、CAN控制器、CAN收發(fā)器.節(jié)點主控單元負責與CAN控制器聯(lián)絡(luò),并不斷地采集和處理外圍信息;CAN控制器類似于節(jié)點主控單元的外部RAM設(shè)備,它不僅具有存儲功能,而且還具有控制功能,主要負責信息成幀與解幀,再通過串行傳輸方式與CAN收發(fā)器聯(lián)系,將信息發(fā)送或接收;CAN收發(fā)器是CAN控制器的“端口”,負責轉(zhuǎn)換和傳輸信息.

圖1 CAN總線通信節(jié)點控制電路局部示意圖

3 CAN總線開關(guān)控制電路軟件設(shè)計

3.1 CAN總線通信軟件設(shè)計規(guī)則

3.1.1 數(shù)據(jù)信息規(guī)則

CAN總線通信信息在節(jié)點內(nèi)是0、1代碼組成的數(shù)據(jù),通過TJA1050向總線發(fā)送時轉(zhuǎn)變成電壓信號.TJA1050具有傳輸速度高(最高可達1兆波特)、電磁輻射低、電磁干擾小和輸入范圍寬的特性.在發(fā)送端,對于高速CAN(如500千波特),當節(jié)點向總線發(fā)送“0”位時,CAN-H線電壓為3.5 V,CAN-L線電壓為1.5 V,稱“顯性”狀態(tài);當發(fā)送“1”位時,CAN-H線與CAN-L線電壓近乎相等,約為2.5 V,稱“隱性”狀態(tài).對于低速CAN(如100千波特),當節(jié)點向總線發(fā)送顯性位“0”時,CAN-H線電壓為3.6 V左右,CAN-L線為1.4 V左右;發(fā)送隱性位“1”時,CAN-H線電壓為0 V,而CAN-L線為5 V.在接收端,TJA1050將CAN總線上的電壓信號還原成0、1數(shù)據(jù)位.

3.1.2 數(shù)據(jù)發(fā)送規(guī)則

CAN總線上的節(jié)點可主動向網(wǎng)絡(luò)上其他節(jié)點發(fā)送數(shù)據(jù),為了防止總線上多節(jié)點間發(fā)送數(shù)據(jù)產(chǎn)生沖突,CAN總線通信協(xié)議規(guī)定:數(shù)據(jù)成幀發(fā)送,稱為數(shù)據(jù)幀,每個數(shù)據(jù)幀包括7個域(起始域、仲裁域、控制域、數(shù)據(jù)域、校驗域、應(yīng)答域和結(jié)束域),節(jié)點發(fā)送數(shù)據(jù)幀時,先發(fā)送起始域,再發(fā)送仲裁域.當節(jié)點發(fā)送數(shù)據(jù)出現(xiàn)競爭時,只有獲得仲裁權(quán)的節(jié)點才可以發(fā)送控制域、數(shù)據(jù)域、校驗域,直至一幀數(shù)據(jù)發(fā)送完畢.仲裁權(quán)是根據(jù)仲裁域數(shù)值的大小來確定的,其數(shù)值越小優(yōu)先級越高.實際上,總線上的節(jié)點都有自己的仲裁域,根據(jù)需要可以將各個節(jié)點設(shè)定為不同的值,這樣避免了數(shù)據(jù)發(fā)送時出現(xiàn)的競爭現(xiàn)象.一幀數(shù)據(jù)被發(fā)送完畢,發(fā)送節(jié)點CAN控制器的狀態(tài)寄存器自動產(chǎn)生“發(fā)送中斷”信號,有利于節(jié)點主控單元的中斷或查詢處理.

3.1.3 數(shù)據(jù)接收規(guī)則

TJA1050采用“差分式”接收數(shù)據(jù),按“位”以串行的方式送到SJA1000,在SJA1000內(nèi)經(jīng)物理同步后被解除填充位,自動進行錯誤檢測,以“并行”方式通過驗收濾波器,驗收過的數(shù)據(jù)移入SJA1000的RXFIFO(接收緩沖區(qū))區(qū).這時,在STC89C52指令的作用下可將RXFIFO中有用數(shù)據(jù)讀出,同時執(zhí)行輸出指令,將接收到的有用數(shù)據(jù)對外輸出,并釋放SJA1000內(nèi)接收緩沖區(qū),為下一次接收新的數(shù)據(jù)做準備.

3.2 CAN總線通信軟件設(shè)計步驟

CAN總線通信系統(tǒng)軟件設(shè)計包括:SJA1000初始化、SJA1000中斷處理、數(shù)據(jù)發(fā)送、數(shù)據(jù)接收及輸出、數(shù)據(jù)輸入和主程序.

3.2.1 SJA1000初始化

SJA1000的初始化可按下列步驟進行.

第一步,復位.STC89C52對SJA1000片外尋址,賦予SJA1000控制寄存器(CR)的初值為01H,這時SJA1000控制寄存器“復位請求”位(CR.0)置1,即可使SJA1000進入復位狀態(tài).

第二步,CAN總線波特率的設(shè)置.波特率的大小反映了位傳輸速率,CAN總線波特率的設(shè)置要考慮CAN通信驅(qū)動設(shè)備的能力.SJA1000有兩個定時寄存器:BTR0和BTR1,BTR0用于確定位傳輸速率的預設(shè)值,而BTR1用于確定位定時,由BTR0和BTR1就可以確定位傳輸速率及其允許的變化范圍.

第三步,設(shè)置接收報文標識符.CAN通信協(xié)議沒有明確規(guī)定標識符的分配,任何一個節(jié)點發(fā)送的數(shù)據(jù)都是有用的,總有其他節(jié)點接收.為了明確表示數(shù)據(jù)的傳輸方向,對于采用11位標識符的通信節(jié)點來說,將接收數(shù)據(jù)節(jié)點的標識符數(shù)據(jù)高8位存放在發(fā)送節(jié)點驗收代碼寄存器(ACR)中,同時在發(fā)送數(shù)據(jù)緩沖區(qū)起始的兩個字節(jié)空間中存放接收節(jié)點的標識符和控制域,以確定接收節(jié)點及其應(yīng)該接收的數(shù)據(jù)字節(jié)的個數(shù).

第四步,輸出控制寄存器的設(shè)置.輸出控制寄存器的設(shè)置取決于SJA1000和TJA1050的連接情況,由于SJA1000的TX0、RX0分別通過一個定值電阻(390 Ω)連接到TJA1050的TXD和RXD端,為此采用正常輸出模式,推挽輸出,數(shù)據(jù)位為“0”時輸出極性為“高”,數(shù)據(jù)位為“1”時輸出極性為“低”.

第五步,時鐘分頻寄存器的設(shè)置.將時鐘分頻寄存器的最高位賦0值,在此采用CAN2.0A模式;將該寄存器的次高位置1,只需激活SJA1000的RX0端子,RX1端子接地;時鐘分頻寄存器BIT5位為0,無需用TX1端子中斷輸出;“關(guān)閉時鐘”位(BIT3)置位,禁用SJA1000的時鐘引腳CLKOUT,頻率選擇位CD2~CD0取值不受限制.

第六步,進入工作模式.回到SJA1000的控制寄存器(CR),將CR.0位賦0值,即可進入工作模式.由于采用單字節(jié)的輸入輸出信號,不會產(chǎn)生溢出和錯誤中斷,所以只需允許SJA1000的接收中斷和發(fā)送中斷,賦予控制寄存器的值為06H符合要求.

3.2.2 SJA1000中斷處理子程序

SJA1000中斷寄存器對于STC89C52來說是只讀寄存器,可產(chǎn)生中斷標志.STC89C52把SJA1000的中斷信號作為外部中斷來處理,當SJA1000有接收中斷或發(fā)送中斷發(fā)生時,中斷寄存器中相應(yīng)的位被置“1”,使STC89C52產(chǎn)生中斷,STC89C52隨即去執(zhí)行中斷服務(wù)——處理中斷子程序.若發(fā)生SJA1000接收中斷,STC89C52立即從SJA1000接收緩沖區(qū)接收數(shù)據(jù);若發(fā)生SJA1000發(fā)送中斷,STC89C52會從輸入設(shè)備接收新的數(shù)據(jù),為下一次發(fā)送做準備.接收中斷和發(fā)送中斷不會同時發(fā)生,但有先后順序.

3.2.3 數(shù)據(jù)發(fā)送子程序

數(shù)據(jù)采用定時發(fā)送,利用STC89C52定時器的定時功能,每隔一定時間向SJA1000啟動一次數(shù)據(jù)發(fā)送指令.若選擇LED燈做輸出設(shè)備,應(yīng)選擇不高于40 ms的時間間隔,可以避免LED燈的閃爍現(xiàn)象,但是發(fā)送數(shù)據(jù)的間隔時間應(yīng)高于發(fā)送數(shù)據(jù)的時間.發(fā)送數(shù)據(jù)時,應(yīng)將存放在STC89C52發(fā)送緩沖區(qū)的數(shù)據(jù)傳送到SJA1000的發(fā)送緩沖區(qū),先發(fā)送接收節(jié)點仲裁域的高8位,緊接著發(fā)送其低3位、控制域和數(shù)據(jù)域,直至數(shù)據(jù)發(fā)送完畢,再向SJA1000啟動數(shù)據(jù)發(fā)送指令,一旦SJA1000出現(xiàn)“發(fā)送中斷”信號,表示一幀數(shù)據(jù)發(fā)送完畢.

3.2.4 數(shù)據(jù)接收及輸出子程序

CAN節(jié)點接收數(shù)據(jù)有兩種方法:中斷接收和查詢接收,在此啟用中斷接收方式.由于CAN總線數(shù)據(jù)采用“廣播式”發(fā)送,按照仲裁規(guī)則,只有獲得仲裁權(quán)的節(jié)點方可接收數(shù)據(jù),獲得仲裁的節(jié)點將數(shù)據(jù)的仲裁域、控制域和數(shù)據(jù)域依次有序接收到SJA1000的接收緩沖區(qū),并向接收節(jié)點STC89C52產(chǎn)生接收中斷信號.接收節(jié)點STC89C52收到中斷信號后,就可以采用片外尋址的方式將接收節(jié)點SJA1000接收緩沖區(qū)中有用數(shù)據(jù)(對方8255A輸入數(shù)據(jù))存儲下來,并送到接收節(jié)點STC89C52的接收緩沖區(qū)保存,同時接收節(jié)點STC89C52向己方8255A輸出,在LED上顯示從總線接收的有用信號.

8255A輸出數(shù)據(jù)子程序如下.

8255A_OUT:

MOV DPTR, #9003H ;向8255A寫指令

MOV A, #90H

MOVX @DPTR, A

MOV R0, #RCV_BUFF3 ;有用數(shù)據(jù)存放位置

MOV A, @R0

MOV DPTR, #9001H ;指向8255A的PB口

MOVX @DPTR, A ;向8255A的PB口輸出

RET

3.2.5 數(shù)據(jù)輸入子程序

輸入數(shù)據(jù)來自于撥碼開關(guān)的位置信息,首先將接收方的狀態(tài)域和控制域存入STC89C52的發(fā)送緩沖區(qū),緊接著向8255A寫入命令字,設(shè)置8255A各個端口的狀態(tài),將PA口作為輸入端口,PB口作為輸出端口.讀入雙擲開關(guān)狀態(tài)(高電平、低電平)的位置信息,存入控制域之后的發(fā)送緩沖區(qū)內(nèi).

8255A數(shù)據(jù)輸入子程序如下.

8255A_IN:

MOV R0, #SEND_BUFF1 ;R0指向發(fā)送緩沖區(qū)

MOV @R0, #02H ;接收節(jié)點仲裁域高8位

INC R0

MOV A, #01H ;發(fā)送數(shù)據(jù)個數(shù)

MOV @R0, A ;將A的值送到SEND_BUFF2

MOV DPTR, #9003H ;指向8255A控制口

MOV A, #90H

MOVX @DPTR, A ;發(fā)送指令

MOV DPTR, #9000H ;指向8255A的PA口

MOVX A, @DPTR

MOV SEND_BUFF3, A ;輸入數(shù)據(jù)送到指定的存儲區(qū)

RET

3.2.6 主程序

主程序執(zhí)行時,節(jié)點向總線定時發(fā)送數(shù)據(jù).為了節(jié)省CPU資源,采用STC89C52的定時器T0,設(shè)置為工作方式1、定時40 ms,開放定時器T0中斷、外部中斷0中斷及總中斷,對SJA1000初始化,當SJA1000進入工作模式后,總線上節(jié)點靜聽CAN總線數(shù)據(jù)變化.如果某個節(jié)點符合接收條件,將總線數(shù)據(jù)立即保存到節(jié)點的SJA1000的RXFIFO,并產(chǎn)生“接收中斷”,隨后將接收到的對方雙擲開關(guān)信號通過8255A的PB口輸出到LED燈動態(tài)顯示;當定時器產(chǎn)生中斷信號時,STC89C52啟動向SJA1000傳輸數(shù)據(jù),并啟動發(fā)送命令,將數(shù)據(jù)發(fā)送到總線上.數(shù)據(jù)發(fā)送完畢,SJA1000發(fā)送緩沖區(qū)被釋放,STC89C52可以重新接收雙擲開關(guān)的輸入信號,等待下一次數(shù)據(jù)發(fā)送.

4 CAN總線通信開關(guān)控制實現(xiàn)

為了實現(xiàn)CAN總線通信,現(xiàn)以兩個DVCC-51NET開發(fā)板為例,分別稱為1號節(jié)點和2號節(jié)點,每個節(jié)點按照圖1所示的示意圖連接線路.雙擲開關(guān)K0,K1,…,K7作為輸入設(shè)備,LED燈L0,L1,…,L7作為輸出設(shè)備,STC89C52、SJA1000和TJA1050分別為節(jié)點主控單元、節(jié)點CAN控制器、節(jié)點CAN收發(fā)器.初始狀態(tài)1號節(jié)點和2號節(jié)點的雙擲開關(guān)全置于高電平(輸入值為FFH),程序運行時,兩個開發(fā)板的LED燈均點亮.當將1號節(jié)點的某一雙擲開關(guān)(如K0)撥到低電平狀態(tài)(輸入為0),此時1號節(jié)點接收到輸入數(shù)據(jù)為FEH,1號節(jié)點將數(shù)據(jù)發(fā)送到總線上,總線上的2號節(jié)點處于接收狀態(tài),將接收到的數(shù)據(jù)送到2號節(jié)點8255A的PB口輸出,輸出端口PB的數(shù)據(jù)為FEH,經(jīng)反向驅(qū)動器74LS240后,驅(qū)動器使L0的控制端為高電平,這時2號節(jié)點L0燈熄滅,這樣實現(xiàn)了1號節(jié)點的開關(guān)控制了2號節(jié)點相應(yīng)燈的亮滅,反過來也能實現(xiàn).

5 總結(jié)

由于STC89C52單片機具有通信速度快、可靠性強的特點,采用STC89C52單片機開發(fā)CAN總線通信,可實現(xiàn)總線式控制,并可實現(xiàn)多個節(jié)點實時控制.在CAN總線通信系統(tǒng)中,CAN控制器是至關(guān)重要的芯片,但不能脫離單片機而獨立工作,如果說單片機是通信的控制器,則CAN控制器是通信的執(zhí)行器.CAN總線通信的關(guān)鍵就是單片機對CAN控制器的訪問和信息傳輸,主要是CAN控制器寄存器的設(shè)置及其狀態(tài)查詢,只有把握各個寄存器的功能及對寄存器的編程方法,才能有效實現(xiàn)CAN總線通信.CAN收發(fā)器是總線的驅(qū)動設(shè)備,總線并聯(lián)的節(jié)點越多,對收發(fā)器的驅(qū)動能力要求也越高,收發(fā)器還決定了總線的電平狀態(tài).8255A在此用作單片機端口的擴展芯片,僅能接收和輸出數(shù)字信號,雙擲開關(guān)和LED燈只作為簡易的輸入和輸出設(shè)備,如果是模擬輸入和大功率輸出,還需增加其他電子設(shè)備(如模數(shù)轉(zhuǎn)換、功率放大電路),同時還要考慮電源的承載能力.

[1] 唐繼英.現(xiàn)場總線技術(shù)[M].天津:天津大學出版社,2008:161-188.

[2] 劉春暉,劉寶君.汽車車載網(wǎng)絡(luò)技術(shù)詳解[M].北京:機械工業(yè)出版社,2016:1-5.

[3] 牛躍聽,周立功,穆希輝,等.CAN總線應(yīng)用層協(xié)議實例解析[M].北京:北京航空航天大學出版社,2014:33-48.

[4] 李勇.汽車單片機及車載網(wǎng)絡(luò)技術(shù)[M].北京:電子工業(yè)出版社,2012:176-180.

[5] 孫鵬,沈顯慶,周杰.基于PIC單片機和SJA1000的CAN通信實現(xiàn)[J].機電一體化,2010(4):70-74.

[6] 宋春寧,童廣浙,林小峰.磷酸鐵鋰儲能電池管理系統(tǒng)設(shè)計[J].電源技術(shù),2015(10):2096-2098.

猜你喜歡
發(fā)送數(shù)據(jù)收發(fā)器寄存器
STM32和51單片機寄存器映射原理異同分析
Lite寄存器模型的設(shè)計與實現(xiàn)
光纖收發(fā)器故障排除經(jīng)驗談
一種車載自組織網(wǎng)絡(luò)的媒體接入控制協(xié)議
帶標記方式的CRDSA++協(xié)議性能分析*
移位寄存器及算術(shù)運算應(yīng)用
Virtex5 FPGA GTP_DUAL硬核兩個收發(fā)器獨立使用的實現(xiàn)
多優(yōu)先級無時隙CSMA/ CA算法研究
測試軟件簡介
Lx5280模擬器移植設(shè)計及實施