CAN總線在家庭智能化控制系統中的應用研究
用單片機AT89C52作為微處理器;用SJAl000作為CAN微控制器,SJAl000中集成了CAN協議的物理層和數據鏈路層功能,可被動局面對通信數據的幀處理;高速光電隔離用6N137實現,其作用是防止串入信號干擾;MAX232用來完成RS 232電平到微控制器接口芯片TTL電平的轉換。具體的硬件接口電路參見SJAl000的資料,但有以下幾點需要注意:
(1)CAN總線兩端接有一個120 Ω的電阻,其作用是匹配總線阻抗,提高數據通信的抗干擾性及可靠性。但實際上只需保證CAN網絡中“CAN_H”和“CAN_L”之間的跨接電阻為60 Ω即可。
(2)SJAl000的20引腳RXl在不使用時可接地,配合CDR.6的置位可使總線長度大大增加。
(3)引腳TX0,TXl的接法決定了串行輸出的電平。具體關系可參考輸出控制寄存器OCR的設置。
(4)AT82C250的RS引腳與地間接有1個斜率電阻。電阻大小可根據總線通信速度作適當調整,一般在16~140 kΩ之間。
(5)MAX232外圍需要4個電解電容C1,C2,C3,C4,這些電容也是內部電源轉換所需電容,其取值均為1μF/25 V,宜選用鉭電容并且位置應用量靠近芯片,電源Vcc和地之間要接1個0.1μF的去耦電容。
在微處理控制下,RS 232和CAN進行數據交換時,采用串口接收和CAN中斷方式可提高工作效率。SJAl000的初始化在復位模式下才可以進行,主要包括工作方式的設置、時鐘分頻和驗收濾波寄存器的設置、波特率參數的設置以及中斷允許寄存器的設置等。其主程序流程圖如圖3所示。
數據能否準確傳遞還取決于波特率和流量控制,這也是軟件設計時不可忽略的地方。因此接下來主要介紹CAN波特率的設置、串口波特率的自動檢測、串口數據流量控制。
CAN協議中的要素之一是波特率。可以設置位周期中的位采樣點位置和采樣次數,以使可以自由地優化應用網絡性能,但在優化過程中,要注意位定時參數基準參考振蕩器的容差和系統中不同信號傳播延遲之間的關系。
系統的位速率fbit表示每單位時間傳輸數據位的量,即波特率fbit=1/tbit。額定的位定時由3個互不重疊的段SYNC_SEG,TSEGl和TSEG2組成,這3個時間段分別是tSYNC_SEG,tTSEGl和tTSEG2。所以,額定位周期tbit是3個時間段的和:tbit=tSYNC_SEG+tTSEGl+tTSEG2。位周期中這些段都用整數個基本時間單位來表示。該時間單位叫時間份額TQ,時間份額的持續時間是CAN系統時鐘的一個周期tSCL,可從振蕩器時鐘周期tCLK取得。通過編程預分頻因數(波特率預設值BRP)可以調整CAN系統時鐘,即tSCL=BRP×2tCLK=2BPR/CLK。
對CAN位定時計算的另一個很重要的時間段是同步跳轉寬度(SJW),持續時間是tSJW。SJW段并不是位周期的一段,只是定義了在重同步事件中被增長或縮短的位周期的最大TQ數量。此外,CAN協議還允許用戶指定位采樣模式(SAM),分別是單次采樣和三次采樣模式(在3個采樣結果中選出1個)。在單次采樣模式中,采樣點在TESG1段的末端。而三次采樣模式比單次采樣多取兩個采樣點,它們在TSEGl段末端的前面,之間相差一個TQ。上面所提到的BPR,SJW,SAM,TESGl,TESG2都可由用戶通過CAN控制器的內裝中寄存器BTR0和BTRl來定義。設置好BTR0和BTRl后,實際傳輸的波特率范圍為:最大=1/(tbit-tSJW),最小=1/(tbit+tSJW)。
檢測轉換裝置的串口波特率,首先可對主機的接收波特率(以9600 b/s為例)進行設定,并在終端發送一個特定的字符(以回車符為例),這樣,主機根據接收到的字符信息就可以確定轉換裝置的通信波特率。回車符的ASCII值是0DH,在不同波特率下接收到的值如表1所列。
數據在兩個串口之間的傳輸時,常常會出現丟失數據的現象。由于單片機緩沖區有限,如接收數據時緩沖區已滿,那么此時繼續發送來的數據就會丟失。而流控制能有效地解決該問題,當接收端數據處理不過來時,流控制系統就會發出“不再接收”的信號,而使發送端停止發送,直到收到“可以繼續發送”的信號再發送數據。因此流控制可以控制數據傳輸的進程,防止數據丟失。常用的兩種流控制是硬件流控制(包括RTS/CTS,DTR/CTS等)和軟件流控制XON/XOFF(繼續/停止),下面僅就硬件流控制RTS/CTS加以說明。
評論