基于CAN總線的懸浮控制器監控終端的設計與實現
本文介紹一種基于TMS320LF2407A DSP的便攜式CAN網絡監控終端。它具有使用簡單、界面友好、體積小的特點,適合于磁浮列車懸浮控制器的現場監督和調試。
1 系統簡介
對于多點懸浮控制來說,為了降低風險和提高控制靈活性,1個懸浮點一般由1個單獨的控制器控制,各個懸浮點和監控節點的關系如圖1所示。
CAN屬于現場總線范疇,是一種有效支持分布式控制或實時控制的串行通信網絡。CAN總線在工業控制領域廣泛應用得益于其自身的技術特點。
?。?)只需通過報文濾波即可實現點對點、一點對多點及全局廣播等幾種方式傳送接收數據,無須專門的“調度”。
?。?)通信方式靈活。CAN為多主方式工作,網絡上任一節點均可在任意時刻主動地向網絡上其他節點發送信息,而不分主從且無須站點地址等節點信息。
?。?)CAN采用非破壞性總線仲裁技術,當多個節點同時向總線發送信息時,優先級較低的節點會主動地退出發送,而最高優先級的節點可不受影響地繼續傳輸數據,從而大大節省了總線沖突仲裁時間,尤其在網絡負載很重的情況下也不會出現網絡癱瘓情況。
?。?)采用短幀格式通信,傳輸時間短,受干擾概率低,具有極好的檢錯效果。每幀字節數最多8個,可滿足通常工業領域中控制命令、工作狀態及測試數據的一般要求。同時,8B也不會占用過長的總線時間,從而保證了通信的實時性。
?。?)CAN的每幀信息都有CRC校驗及其他檢錯措施,保證了數據通信的可靠性。
在實現上,CAN監控終端的主控芯片選用TI公司的TMS320LF2407A型DSP。數據輸出用1塊240×128的LCD液晶屏來實現,可以把各個參數變化的趨勢用曲線描繪出來,靈活性好。用戶輸入采用行列掃描式鍵盤,使硬件實現和軟件編程均比較方便。
2 硬件設計
系統的硬件組成框圖如圖2所示。從圖中可以看出,TMS320LF2407A DSP是整個電路的核心部件。它是面向實時控制的高性能16位定點DSP,具有32K字的片內Flash程序存儲器和2.5K字的片內RAM,運算速度可以達到40MIPS,并帶有片上串行通信接口和CAN通信接口等。這些特點為CAN監控終端的設計和實現帶來了很大便利。在硬件實現上,考慮到系統對體積和功耗的要求,將所有的DSP程序和LCD的字庫均通過JTAG口直接燒寫在DSP的片內Flash中,通電后程序即可直接在片內Flash中運行。DSP的晶振頻率選擇6MHz,通過DSP片內的PLL鎖相環4倍頻后使DSP的工作主頻達到24MHz。
由于DSP片內備有CAN控制器模塊,因此,監控終端的CAN模塊設計很簡單,只需在DSP的CANTX和CANRX引腳上接1個CAN驅動芯片即可。這里選用的CAN驅動芯片是PCA82C250。
DSP的供電電壓為3.3V,而外圍芯片基本上都是5V,如果將它們直接相連必然會導致電平沖突。解決的辦法是:在DSP的數據總線和外圍接口總線之間用1片LVC4245作為雙向緩沖器。在進行數據交換時,DSP的R/W信號控制著LVC4245的數據流向。
LCD選用240×128點陣的SMG240128A單色液晶屏。它的顯示有效面積比較大,適合于顯示曲線等信息,底層驅動的編寫也比較容易。LCD與DSP的接口采用模擬口線方式,即用2片74HC573分別鎖存數據總線和控制總線的數據,模擬LCD的驅動時序。LCD的幾個狀態位直接由DSP的I/O引腳讀入。
LCD和鍵盤接口的74HC573以及74HC244芯片均由1片GAL通過對DSP的地址總線進行譯碼實現選通,其電路簡單,靈活性好。
出于便攜式的要求,系統采用電池供電方式。這里采用5節可充電5號電池作為電源,正常供電電壓為5~7V,正好符合電源芯片TPS7350的供電要求。由于系統內需要3.3V和5V二種供電電源,故這里選用1片低壓差芯片TPS7350作為5V電源的供電芯片,用另一片低壓差芯片TPS7333作為3.3V電源的供電芯片。為防止電池電量不足時導致意外停機事故,這里還采用1片LM311構建了一個電池電量報警電路,以便在電池電壓低于安全電壓時點亮LED報警提示。為了操作方便,所有的硬件電路以及電池等均安裝在一個便攜的塑料外殼中。
3 軟件設計
在圖1所示的CAN網絡結構圖中,數據流向大致可以分為二類:各懸浮節點之間的通信和懸浮節點與監控節點之間的通信。由于懸浮節點之間的通信與監控終端沒有直接關系,可以不予考慮。需要考慮的是各懸浮節點與監控終端的通信,這就要求在組成CAN網絡時就必須制定一個懸浮節點和監控終端間的通信協議。在實現時,具體協議如下:
?。?)CAN監控終端的接收標識符為0,其他懸浮控制節點的標識符均不得與之沖突;全部節點使用統一的波特率(50Kbps或500Kbps);數據包的長度統一為8B。
?。?)CAN監控終端向懸浮節點的數據傳送由監控終端的撥碼開關指定數據包的標識符,各懸浮節點通過數據包的標識符和自身的本地標識符比較以確定是否接收該數據包。
(3)CAN監控終端的監聽是開放的,并不需要接收的數據包的標識符與自身的標識符一致。但數據包內第1個字節指明了發送該數據包的懸浮控制器的標號。如果該標號與撥碼開關指定的標號一致,則繼續處理其他字節的內容;否則,丟棄該包。數據包內第2字節表示參數的類型,其余字節是浮點形式的參數數據。
(4)在系統開始運行時,各懸浮節點并不向CAN監控終端發送數據,只有在CAN監控終端向某個節點發出“發送允許”命令之后,該節點才定時地向CAN監控終端發送上傳數據。如果CAN監控終端要監聽其他節點的數據,則需先禁止當前節點的數據發送,再向其他節點發出“發送允許”命令。這樣可以有效減小CAN總線上的數據流量。
從實際出發,要求軟件盡量簡單,界面盡量友好,便于操作。在實現時,為充分利用LCD的顯示能力,這里采用菜單的方式提示用戶操作。完成后的軟件界面如圖3所示。
程序采用分層的程序結構。最底層是一些硬件驅動程序,如鍵盤掃描、LCD狀態讀取和LCD數據寫入等。在這些底層驅動程序的基礎上再組織一些上層子程序供主程序調用。在編程語言的選擇上,考慮到程序的結構相對比較復雜,程序主體采用C語言編程,只有少部分涉及到DSP一些底層操作的部分才使用匯編語言。軟件的主體流程圖如圖4所示。
初始化包括對CAN控制寄存器的初始化以及屏幕初始化,并在這之后讀取撥碼開關的狀態,確定波特率及通信對象,向被監控節點發出“發送允許”命令等。
程序主體是一個大循環。在初始化之后便不斷掃描鍵盤。首先判斷是否有鍵按下,如果用戶沒有操作,則檢查CAN模塊是否接收到數據。如果沒有接收到數據,則繼續掃描鍵盤。如果接收到了數據(即相應的CAN接收中斷標志位置位),則將接收到的數據包按上述協議進行分析、整合處理,然后在屏幕上顯示出接收到的數值;同時,在曲線的對應位置上描點,完成曲線的繪制。如果在鍵盤掃描過程中發現有按鍵按下,則分析按鍵的類別,然后轉相應的子程序處理。處理完畢再返回主程序。
LCD顯示涉及的子程序比較多,分層也很多。在編寫程序時首先在DSP的Flash ROM里定義一個段,將LCD顯示過程中可能涉及的字符、漢字等點陣數據做成一個庫,放入段內,在使用時再通過ROM訪問指令讀取。
曲線的繪制過程如下:首先確定坐標的原點位置、X方向和Y方向的最大坐標以及輸入數值的范圍,然后在內存中開辟一個同X坐標點數一樣大小的緩沖區BUFF,用于記憶已經繪制的各點的坐標;同時設定一個X指針,用于存儲當前的X坐標。當接收到新的數據,確定好Y方向的坐標后,首先查找BUFF,得到原來顯示在該X位置的點的Y坐標,將這個位置上的點清除,然后在新的Y坐標上描點,最后在BUFF的相應X位置上記錄下新描點的Y坐標值,此時便完成了一個點的繪制。后面還要調整屏幕上的指針以標明當前顯示的X坐標。當繪制到X方向的最大位置時,再返回X=0的位置繼續繪圖。
CAN監控終端向懸浮節點發送數據的過程一般是伴隨在相應的菜單操作并按下ENTER鍵生效后進行的。在每次數據發送之前,程序都需要讀入撥碼開關的狀態,以確定通信的波特率和通信對象的標識符。在實現上,撥碼開關的最高位控制著波特率,后面7位則決定了通信的發送標識符。
4 結束語
使用表明,這種基于TMS320LF2407A DSP的CAN總線監控終端在多懸浮控制器組成的網絡中可以發揮很好的監控和調試作用,其結構小巧、界面友好,使用相當方便。
評論