PIC18單片機的CANopen通信協議
在此例中,PDO報文是在對象字典中用通信參數和映射參數來描述的。通信參數決定哪個COB―ID將被PDO使用,此例中RPD0的COB―ID為286,TPDO的COB―ID為187。映射參數包含映射到PDO里的對象在對象字典中的索引和子索引,以及對象的數據長度。此例中映射到RPDO里的對象在對象字典中的索引為3200,子索引為OO,長度為2;映射到TPDO里的對象在對象字典中的索引為3100,子索引為00,長度為1。另外某些相關變量也由對象字典所描述,可以通過sD0對象傳輸方式進行下載修改或上傳觀察。此例中的上限溫度、下限溫度,就由對象字典主索引3000、子索引00和主索引3001、子索引00分別描述。
在節點上實現CANopen協議軟件,首先要實現節點接收報文和發送報文的功能。接收報文的過程是,一旦有接收中斷產生,就把CAN接收緩沖區接收到的數據和地址放到一內部陣列中,對接收到的報文進行分析,并送去執行相應的子函數(NMT報文接收處理子函數、SDO報文接收處理子函數、心跳報文接收處理子函數、SDO報文接收處理子函數),最后返回主程序。發送報文的過程是,把需要發送的變量放到對象字典里,再把它們映射封裝成相應的對象,最后將報文發送到總線上。
主程序按照通信流程編寫,模塊上電后先進行通信初始化。其首先初始化CANopen協議中的通信相關參數、對象字典、節點號,再初始化CAN控制器的硬件,包括單片機的內部寄存器、定時器、串行口、CAN控制器。通信初始化后自動進入節點初始化,并進行一些特定用戶的初始化。完成后,發送一個啟動報文自動進入預操作狀態。此時用戶的程序循環執行著,在每個循環里,調用接收報文1次。這個模塊用來檢查接收到的對象,并作相應的處理。在NMT報文到來之前一直持續在預操作狀態。在這個狀態里,節點可以通過SD0被配置和設置參數,但是不允許發送PDO。在相應的NMT報文到來后,即收到啟動遠程節點命令后,進入操作狀態,在這個狀態就可以進行正常的通信了。在收到NMT報文,即停止遠程節點命令,節點進入了停止狀態,從而停止PDO和SDO通信。
3 實驗結果
在軟件設計中編寫了與上位機的通信模塊程序,可以將每個節點接收和發送報文的ID號、數據長度、數據轉發到串口,便于上位機進行觀測。
圖3為系統傳輸數據的過程,溫度傳感節點發送報文過程為發送自啟動報文后以周期為1 s發送心跳報文,以周期為100 ms發送PDO1報文,發送數據為傳感溫度(分別為19°,20°,…,21°…)。上限溫度和下限高溫都為20°時,溫度調節節點接收報文過程為接收到NMT報文命令后進入操作狀態,不斷接收PDOl報文。溫度調節節點發送報文過程為發送自啟動報文后以周期為1 s發送心跳報文,以事件觸發方式發送PDOO報文(發送數據為工作狀態長度為1,當接收到的溫度低于20°時發送數據為02表示加熱,當接收到的溫度高于20°時發送數據為01表示降溫,當接收的溫度為20°時發送數據為OO表示保持),狀態顯示燈不斷閃爍紅色、黃色、藍色。如在命令節點中發送SDO報文改變對象字典中的上限溫度和下限溫度,再觀察各節點變化。情況1,當上限溫度低于20°(為15°)時,溫度調節節點一直在降溫狀態,狀態顯示燈為紅色。情況2,當下限溫度高于20°(為25°)時,溫度調節節點一直在加熱狀態,狀態顯示燈為黃色,情況3,當上限溫度高于20°(為25°),下限溫度低于20°(為15°)時,溫度調節節點一直在保持狀態,狀態顯示燈為藍色。命令節點在液晶顯示屏中顯示實時溫度,在狀態顯示燈中顯示實時狀態。
命令節點進行NMT對象操作時再觀察各節點狀態:當按下按鈕1時,節點進入欲操作狀態;當按下按鈕2時,節點重啟。
從以上兩個實驗可以看出,整個系統在運行過程中達到了滿意的控制效果,實現了基于CANopen協議的對象數據的交換,通信傳輸理想。
結 語
應用PIC18單片機自行開發的基于CANopen協議的節點,實現了對4種通信對象信息的通信處理,并通過測試驗證了系統信息傳遞的可靠性、準確性和實時性,很好地滿足了基于CANopen協議的溫度測控系統的要求;對于CANopen在國內的應用和普及,以及CAN網絡和驅動產品盡早和國際接軌,具有重要的意義。
評論