基于82527的CAN總線智能傳感器節(jié)點設(shè)計
關(guān)鍵詞:CAN總線 82527 單片機 數(shù)據(jù)采集 智能節(jié)點
引言
CAN(Controller Area Network,控制局域網(wǎng))屬于工業(yè)現(xiàn)場總線,是德國Bosch公司20世紀(jì)80年代初作為解決現(xiàn)代汽車中眾多的控制與測試儀器間的數(shù)據(jù)交換而開發(fā)的一種通信協(xié)議。1993年11月,ISO正式頒布了高速通信控制局域網(wǎng)(CAN)的國際標(biāo)準(zhǔn)(ISO11898)。CAN總線系統(tǒng)中現(xiàn)場數(shù)據(jù)的采集由傳感器完成,目前,帶有CAN總線接口的傳感器種類還不多,價格也較貴。本文給出一種由8051單片機和82527獨立CAN總線控制器為核心構(gòu)成的智能節(jié)點電路,在普通傳感器基礎(chǔ)上形成可接收8路模擬量輸入和智能傳感器節(jié)點。
1 獨立CAN總線控制器82527介紹
82527是Intel公司生產(chǎn)的獨立CAN總線控制器,可通過并行總線與Intel和Motrorola的控制器接口;支持CAN規(guī)程2.0B標(biāo)準(zhǔn),具有接收和發(fā)送功能并可完成報文濾波。82527采用CHMOS 5V工藝制造,44腳PLCC封裝,使用溫度為-44~+125℃,其引腳的排列和定義參見參考文獻[1]。
(1)82527的時鐘信號
82527的運行由2種時鐘控制:系統(tǒng)時鐘SCLK和寄存器時鐘MCLK。SCLK由外部晶振獲得,MCLK對SCLK分頻獲得。CAN總線的位定時依據(jù)SCLK的頻率,而MCLK為寄存器操作提供時鐘。SCLK頻率可以等于外部晶振XTAL,也可以是其頻率的1/2;MCLK的頻率可以等于SCLK或是其頻率的1/2。系統(tǒng)復(fù)位后的默認設(shè)置是SCLK=XTAL/2,MCLK=SCLK/2。
(2)82527的工作模式
82527有5種工作模式:Intel方式8位分時復(fù)用模式;Intel方式16位分時復(fù)用模式;串行接口模式;非Intel方式8位分時復(fù)用模式;8位非分時復(fù)用模式。本文應(yīng)用Intel方式8位分時復(fù)用模式,此時82527的30和44腳接地。
(3)82527的寄存器結(jié)構(gòu)[2]
82527的寄存器地址為00~FFH.下面根據(jù)需要對寄存器給予介紹。
①控制寄存器(00H):
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
0 | CCE | 0 | 0 | EIE | SIE | IE | INIT |
CCE——改變配置允許位,高電平有效。該位有效時允許CPU對配置寄存器1FH、2FH、3FH、4FH、9FH、AFH寫操作。
EIE——錯誤中斷允許位,高電平有效。該位一般置1,當(dāng)總線上產(chǎn)生異常數(shù)量的錯誤時中斷CPU。
SIE——狀態(tài)改變中斷允許位,高電平有效。該位一般置0。
IE——中斷允許位,高電平有效。
INIT——軟件初始化允許位,高電平有效。該位有效時,CAN停止收發(fā)報文,TX0和TX1為隱性電平1。在硬件復(fù)位和總線關(guān)閉時該位被置位。
②CPU接口寄存器(02H):
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
RSTST | DSC | DMC | PWD | SLEEP | MUX | 0 | CEN |
RSTST——硬件復(fù)位狀態(tài)位。該位由82527寫入,為1時硬件復(fù)位激活,不允許對82527訪問;為0時允許對82527訪問。
DSC——SCLK分頻位。該位為1,SCLK=XTAL/2;為0,SCLK=XTAL。
DMC——MCLK分頻位。該位為1,MCLK=SCLK/2;為0,MCLK=SCLK。
PWD——掉電模式使能位,高電平有效。
SLEEP——睡眠模式使能位,高電平有效。
MUX——低速物理層復(fù)用標(biāo)志位。該位為1,ISO低速物理層激活,PIN24=VCC/2,PIN11=INT#(#表示取反);該位為0,PIN24=INT#,PIN11=P2.6。
CEN——時鐘輸出允許位,高電平有效。
③標(biāo)準(zhǔn)全局屏蔽寄存器(06~07H)。該寄存器用于具有標(biāo)準(zhǔn)標(biāo)識符的報文,或XTD置0的報文寄存器。該方式稱為報文接收濾波。當(dāng)某位為1時,報文標(biāo)識符的相應(yīng)位必須匹配;為0時,不必匹配。
④擴展全局屏蔽寄存器(08~0BH)。該寄存器用于擴展報文格式,或XTD置1的報文寄存器,其作用與③相同。
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
0 | COBY | POL | 0 | DCT1 | 0 | DCR1 | DCR0 |
⑤總線配置寄存器(2FH):
COBY——旁路輸入比較器標(biāo)志位,高電平有效。
POL——極性標(biāo)志位。為1,如果旁路輸入比較器,RX0的輸入邏輯1為顯性,邏輯0為隱性;為0,則反之。
DCT1——TX1輸出切斷控制位。為1,TX1輸出不被驅(qū)動,該模式用于1根總線的情況,2根差分導(dǎo)線短路;為0,TX1輸出被驅(qū)動。
DCR1——RX1輸入切斷控制位。為1,RX1與輸入比較器的反相端斷開,接至VCC/2;為0,RX1接至輸入比較器反相端。
DCR0——RX0輸入切斷控制位。作用與DCR1相同,此時RX0接至比較器同相端。
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
SJW | BRP |
⑥位定時寄存器0(3FH);
SJW——同步跳轉(zhuǎn)寬度位場,編程值1~3。
BRP——波特率分頻位場,編程值0~63。
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
SPL | TSEG2 | TSEG1 |
⑦位定時寄存器1(4FH):
SPL——采樣模式標(biāo)志位。1表示每位采樣3次;0表示每位采樣1次。
TSEG1——時間段1位場,編程值2~15。
TSEG1——時間段2位場,編程值1~7。
波特率=XTAL/[(DSC+1)*(BRP+1)*(3+TSEG1+TSEG2)]
⑧報文寄存器(把每個寄存器的第1字節(jié)地址作為基址BASE)。
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
BASE+0 | MSGVAL | TXIE | RXIE | INTPND | ||||
BASE+1 | RMTPND | TXRQST | MSGLST/CPUUPD | NEWDAT |
◇控制寄存器0,1(BASE+0,BASET+1)
MSGVAL——報文寄存器有效標(biāo)志位,高電平有效。10置位,01復(fù)位。
TXIE——發(fā)送中斷允許標(biāo)志位,高電平有效。10置位,01復(fù)位。
RXIE——接收中斷允許標(biāo)志位,高電平有效,10置位,01復(fù)位。
INTPND——中斷申請標(biāo)志位,高電平有效。10置位,01復(fù)位。
RMTPND——遠程幀申請標(biāo)志位,高電平有效。10置位,01復(fù)位。
TXRQST——請求發(fā)送標(biāo)志位,高電平有效。10置位,01復(fù)位。
MSGLST——報文丟失標(biāo)志位,只用于接收報文寄存器。10表示未讀報文被新報文覆蓋,01表示未覆蓋。
CPUUPD——CPU更新標(biāo)志位,只用于發(fā)送報文寄存器。10報文不被發(fā)送,01報文可發(fā)送。
NEWDAT——新數(shù)據(jù)標(biāo)志位。10表示向寄存器寫入了新數(shù)據(jù),01表示無新數(shù)據(jù)寫入。
◇仲裁寄存器0,1,2,3(BASE+2-BASE+5)
存儲報文標(biāo)識符。
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
DLC | DIR | XTD | 保留 |
◇報文配置寄存器(BASE+6)
DLC——數(shù)據(jù)長度編碼,編程值0~8。
DIR——方向標(biāo)志位。1發(fā)送,0接收。
XTD——標(biāo)準(zhǔn)/擴展標(biāo)識符標(biāo)志位。1擴展標(biāo)識符,0標(biāo)準(zhǔn)標(biāo)識符。
◇數(shù)據(jù)寄存器(BASE+7-BASE+14)
82527存儲報文時,8個數(shù)據(jù)字節(jié)均被寫入,未用到的字節(jié)數(shù)據(jù)是隨機的。
2 硬件電路設(shè)計
智能節(jié)點的電路如圖1所示(圖中6264略去)。
在硬件設(shè)計中,由ADC0809完成對8路模擬置的轉(zhuǎn)換,與8051的信息交換采用查詢方式,地址BFF8~BFFFH,其時鐘可由ALE二分頻獲得;82527完成與CAN總線的信息交換。本設(shè)計中,旁路了輸入比較器,與8051的信息交換采用中斷方式,地址7F00~7FFFH,可以用82527的P1口和P2口對開關(guān)量采集或?qū)^電器進行控制。82C250提供82527和物理總線間的接口,提高接收和發(fā)送能力。可根據(jù)需要擴展程序存儲器。
3 軟件設(shè)計
本設(shè)計軟件采用MCS-51匯編語言編寫,程序框圖如圖2所示。
82527的初始化程序如下:
INT:MOV DPTR,#0FF02H
MOV A,#00H
MOVX @DPTR,A ;SCLK=XTAL
;MCLK=SCLK,CLKOUT無效
MOV DPTR,#0FF00H
MOV A,#41H
MOVX @DPTR,A ;置位CCE,INIT
MOV DPTR,#0FF2FH
MOV A,#48H
MOVX @DPTR,A ;旁路輸入比較器設(shè)置1位隱性,0為顯性,RX1無效
MOV DPTR,#0FF3FH;
MOV A,#43H;
MOVX @DPTR,A ;SJW=2,BRP=3
MOV DPTR,#0FF4FH
MOV A,#0EAH
MOVX @DPTR,A ;SPL=1,TSEG1=7,TSEG2=6此時波特率為100Kbps
MOV DPTR,#0FF00H;
MOV A,#01H
MOVX @DPTR,A ;禁止對配置寄存器的訪問
MOV DPTR,#0FF10H;
MOV A,#55H;
MOVX @DPTR,A;
INC DPTR;
MOVX @DPTR,A;
·
·
·
MOV DPTR,#0FFF0H;
MOV A,#55H;
MOVX @DPTR,A
INC DPTR;
MOVX @DPTR,A ;報文寄存器控制位初始化
MOV R0,#06H;
MOV DPTR,#0FF06H;
MOV A,#0FFH;
L1:MOVX @DPTR,A ;報文標(biāo)識符需全部匹配
INC DPTR
DJNZ R0,L1;
MOV DPTR,#0FF16H;
MOV A,#8CH ;報文寄存器1可發(fā)送8個字節(jié)擴展報文
MOVX @DPTR,A;
MOV DPTR,#0FF26H;
MOV A,#84H;
MOVX @DPTR,A ;報文寄存器2可接收8個字節(jié)擴展報文
MOV DPTR,#0FF00H;
MOV A,#00H;
MOVX @DPTR,A ;初始化結(jié)束
RET