基于CAN總線(xiàn)的懸浮控制器監控終端的設計
在圖1所示的CAN網(wǎng)絡(luò )結構圖中,數據流向大致可以分為二類(lèi):各懸浮節點(diǎn)之間的通信和懸浮節點(diǎn)與監控節點(diǎn)之間的通信。由于懸浮節點(diǎn)之間的通信與監控終端沒(méi)有直接關(guān)系,可以不予考慮。需要考慮的是各懸浮節點(diǎn)與監控終端的通信,這就要求在組成CAN網(wǎng)絡(luò )時(shí)就必須制定一個(gè)懸浮節點(diǎn)和監控終端間的通信協(xié)議。在實(shí)現時(shí),具體協(xié)議如下:
(1)CAN監控終端的接收標識符為0,其他懸浮控制節點(diǎn)的標識符均不得與之沖突;全部節點(diǎn)使用統一的波特率(50Kbps或500Kbps);數據包的長(cháng)度統一為8B。
(2)CAN監控終端向懸浮節點(diǎn)的數據傳送由監控終端的撥碼開(kāi)關(guān)指定數據包的標識符,各懸浮節點(diǎn)通過(guò)數據包的標識符和自身的本地標識符比較以確定是否接收該數據包。
(3)CAN監控終端的監聽(tīng)是開(kāi)放的,并不需要接收的數據包的標識符與自身的標識符一致。但數據包內第1個(gè)字節指明了發(fā)送該數據包的懸浮控制器的標號。如果該標號與撥碼開(kāi)關(guān)指定的標號一致,則繼續處理其他字節的內容;否則,丟棄該包。數據包內第2字節表示參數的類(lèi)型,其余字節是浮點(diǎn)形式的參數數據。
(4)在系統開(kāi)始運行時(shí),各懸浮節點(diǎn)并不向CAN監控終端發(fā)送數據,只有在CAN監控終端向某個(gè)節點(diǎn)發(fā)出“發(fā)送允許”命令之后,該節點(diǎn)才定時(shí)地向CAN監控終端發(fā)送上傳數據。如果CAN監控終端要監聽(tīng)其他節點(diǎn)的數據,則需先禁止當前節點(diǎn)的數據發(fā)送,再向其他節點(diǎn)發(fā)出“發(fā)送允許”命令。這樣可以有效減小CAN總線(xiàn)上的數據流量。
上述協(xié)議可以有效地維持CAN網(wǎng)絡(luò )中的數據通信秩序。
從實(shí)際出發(fā),要求軟件盡量簡(jiǎn)單,界面盡量友好,便于操作。在實(shí)現時(shí),為充分利用LCD的顯示能力,這里采用菜單的方式提示用戶(hù)操作。完成后的軟件界面如圖3所示。本文引用地址:http://dyxdggzs.com/article/163293.htm
程序采用分層的程序結構。最底層是一些硬件驅動(dòng)程序,如鍵盤(pán)掃描、LCD狀態(tài)讀取和LCD數據寫(xiě)入等。在這些底層驅動(dòng)程序的基礎上再組織一些上層子程序供主程序調用。在編程語(yǔ)言的選擇上,考慮到程序的結構相對比較復雜,程序主體采用C語(yǔ)言編程,只有少部分涉及到DSP一些底層操作的部分才使用匯編語(yǔ)言。軟件的主體流程圖如圖4所示。
初始化包括對CAN控制寄存器的初始化以及屏幕初始化,并在這之后讀取撥碼開(kāi)關(guān)的狀態(tài),確定波特率及通信對象,向被監控節點(diǎn)發(fā)出“發(fā)送允許”命令等。
程序主體是一個(gè)大循環(huán)。在初始化之后便不斷掃描鍵盤(pán)。首先判斷是否有鍵按下,如果用戶(hù)沒(méi)有操作,則檢查CAN模塊是否接收到數據。如果沒(méi)有接收到數據,則繼續掃描鍵盤(pán)。如果接收到了數據(即相應的CAN接收中斷標志位置位),則將接收到的數據包按上述協(xié)議進(jìn)行分析、整合處理,然后在屏幕上顯示出接收到的數值;同時(shí),在曲線(xiàn)的對應位置上描點(diǎn),完成曲線(xiàn)的繪制。如果在鍵盤(pán)掃描過(guò)程中發(fā)現有按鍵按下,則分析按鍵的類(lèi)別,然后轉相應的子程序處理。處理完畢再返回主程序。
這里數據接收并不采用中斷驅動(dòng)方式,因為L(cháng)CD的響應速度較慢。當LCD的響應速度低于CAN接收數據的速度時(shí),會(huì )形成中斷嵌套,時(shí)間長(cháng)了就會(huì )出現堆棧溢出。此外,采用中斷方式在數據量大時(shí)會(huì )出現DSP無(wú)暇顧及用戶(hù)鍵盤(pán)輸入的現象。實(shí)踐表明,采用查詢(xún)的方式可以很好地發(fā)揮DSP和LCD的固有能力,而且整體響應速度也比中斷方式快。
LCD顯示涉及的子程序比較多,分層也很多。在編寫(xiě)程序時(shí)首先在DSP的Flash ROM里定義一個(gè)段,將LCD顯示過(guò)程中可能涉及的字符、漢字等點(diǎn)陣數據做成一個(gè)庫,放入段內,在使用時(shí)再通過(guò)ROM訪(fǎng)問(wèn)指令讀取。
曲線(xiàn)的繪制過(guò)程如下:首先確定坐標的原點(diǎn)位置、X方向和Y方向的最大坐標以及輸入數值的范圍,然后在內存中開(kāi)辟一個(gè)同X坐標點(diǎn)數一樣大小的緩沖區BUFF,用于記憶已經(jīng)繪制的各點(diǎn)的坐標;同時(shí)設定一個(gè)X指針,用于存儲當前的X坐標。當接收到新的數據,確定好Y方向的坐標后,首先查找BUFF,得到原來(lái)顯示在該X位置的點(diǎn)的Y坐標,將這個(gè)位置上的點(diǎn)清除,然后在新的Y坐標上描點(diǎn),最后在BUFF的相應X位置上記錄下新描點(diǎn)的Y坐標值,此時(shí)便完成了一個(gè)點(diǎn)的繪制。后面還要調整屏幕上的指針以標明當前顯示的X坐標。當繪制到X方向的最大位置時(shí),再返回X=0的位置繼續繪圖。
屏幕下方有關(guān)菜單的操作也是采用樹(shù)結構實(shí)現的,這里不再詳述。
CAN監控終端向懸浮節點(diǎn)發(fā)送數據的過(guò)程一般是伴隨在相應的菜單操作并按下ENTER鍵生效后進(jìn)行的。在每次數據發(fā)送之前,程序都需要讀入撥碼開(kāi)關(guān)的狀態(tài),以確定通信的波特率和通信對象的標識符。在實(shí)現上,撥碼開(kāi)關(guān)的最高位控制著(zhù)波特率,后面7位則決定了通信的發(fā)送標識符。
4 結束語(yǔ)
使用表明,這種基于TMS320LF2407A DSP的CAN總線(xiàn)監控終端在多懸浮控制器組成的網(wǎng)絡(luò )中可以發(fā)揮很好的監控和調試作用,其結構小巧、界面友好,使用相當方便。
評論