關(guān) 閉

新聞中心

EEPW首頁 > 工控自動化 > 設(shè)計(jì)應(yīng)用 > 基于CAN總線的懸浮控制器監(jiān)控終端的設(shè)計(jì)

基于CAN總線的懸浮控制器監(jiān)控終端的設(shè)計(jì)

作者: 時(shí)間:2010-01-25 來源:網(wǎng)絡(luò) 收藏
3 軟件
  在圖1所示的網(wǎng)絡(luò)結(jié)構(gòu)圖中,數(shù)據(jù)流向大致可以分為二類:各節(jié)點(diǎn)之間的通信和節(jié)點(diǎn)與節(jié)點(diǎn)之間的通信。由于節(jié)點(diǎn)之間的通信與沒有直接關(guān)系,可以不予考慮。需要考慮的是各懸浮節(jié)點(diǎn)與的通信,這就要求在組成網(wǎng)絡(luò)時(shí)就必須制定一個(gè)懸浮節(jié)點(diǎn)和監(jiān)控間的通信協(xié)議。在實(shí)現(xiàn)時(shí),具體協(xié)議如下:
  (1)監(jiān)控終端的接收標(biāo)識符為0,其他懸浮控制節(jié)點(diǎn)的標(biāo)識符均不得與之沖突;全部節(jié)點(diǎn)使用統(tǒng)一的波特率(50Kbps或500Kbps);數(shù)據(jù)包的長度統(tǒng)一為8B。
  (2)CAN監(jiān)控終端向懸浮節(jié)點(diǎn)的數(shù)據(jù)傳送由監(jiān)控終端的撥碼開關(guān)指定數(shù)據(jù)包的標(biāo)識符,各懸浮節(jié)點(diǎn)通過數(shù)據(jù)包的標(biāo)識符和自身的本地標(biāo)識符比較以確定是否接收該數(shù)據(jù)包。
  (3)CAN監(jiān)控終端的監(jiān)聽是開放的,并不需要接收的數(shù)據(jù)包的標(biāo)識符與自身的標(biāo)識符一致。但數(shù)據(jù)包內(nèi)第1個(gè)字節(jié)指明了發(fā)送該數(shù)據(jù)包的懸浮的標(biāo)號。如果該標(biāo)號與撥碼開關(guān)指定的標(biāo)號一致,則繼續(xù)處理其他字節(jié)的內(nèi)容;否則,丟棄該包。數(shù)據(jù)包內(nèi)第2字節(jié)表示參數(shù)的類型,其余字節(jié)是浮點(diǎn)形式的參數(shù)數(shù)據(jù)。
  (4)在系統(tǒng)開始運(yùn)行時(shí),各懸浮節(jié)點(diǎn)并不向CAN監(jiān)控終端發(fā)送數(shù)據(jù),只有在CAN監(jiān)控終端向某個(gè)節(jié)點(diǎn)發(fā)出“發(fā)送允許”命令之后,該節(jié)點(diǎn)才定時(shí)地向CAN監(jiān)控終端發(fā)送上傳數(shù)據(jù)。如果CAN監(jiān)控終端要監(jiān)聽其他節(jié)點(diǎn)的數(shù)據(jù),則需先禁止當(dāng)前節(jié)點(diǎn)的數(shù)據(jù)發(fā)送,再向其他節(jié)點(diǎn)發(fā)出“發(fā)送允許”命令。這樣可以有效減小CAN上的數(shù)據(jù)流量。
  上述協(xié)議可以有效地維持CAN網(wǎng)絡(luò)中的數(shù)據(jù)通信秩序。
  從實(shí)際出發(fā),要求軟件盡量簡單,界面盡量友好,便于操作。在實(shí)現(xiàn)時(shí),為充分利用LCD的顯示能力,這里采用菜單的方式提示用戶操作。完成后的軟件界面如圖3所示。

本文引用地址:http://m.butianyuan.cn/article/163293.htm

  程序采用分層的程序結(jié)構(gòu)。最底層是一些硬件驅(qū)動程序,如鍵盤掃描、LCD狀態(tài)讀取和LCD數(shù)據(jù)寫入等。在這些底層驅(qū)動程序的基礎(chǔ)上再組織一些上層子程序供主程序調(diào)用。在編程語言的選擇上,考慮到程序的結(jié)構(gòu)相對比較復(fù)雜,程序主體采用C語言編程,只有少部分涉及到DSP一些底層操作的部分才使用匯編語言。軟件的主體流程圖如圖4所示。

  初始化包括對CAN控制寄存器的初始化以及屏幕初始化,并在這之后讀取撥碼開關(guān)的狀態(tài),確定波特率及通信對象,向被監(jiān)控節(jié)點(diǎn)發(fā)出“發(fā)送允許”命令等。
  程序主體是一個(gè)大循環(huán)。在初始化之后便不斷掃描鍵盤。首先判斷是否有鍵按下,如果用戶沒有操作,則檢查CAN模塊是否接收到數(shù)據(jù)。如果沒有接收到數(shù)據(jù),則繼續(xù)掃描鍵盤。如果接收到了數(shù)據(jù)(即相應(yīng)的CAN接收中斷標(biāo)志位置位),則將接收到的數(shù)據(jù)包按上述協(xié)議進(jìn)行分析、整合處理,然后在屏幕上顯示出接收到的數(shù)值;同時(shí),在曲線的對應(yīng)位置上描點(diǎn),完成曲線的繪制。如果在鍵盤掃描過程中發(fā)現(xiàn)有按鍵按下,則分析按鍵的類別,然后轉(zhuǎn)相應(yīng)的子程序處理。處理完畢再返回主程序。
  這里數(shù)據(jù)接收并不采用中斷驅(qū)動方式,因?yàn)長CD的響應(yīng)速度較慢。當(dāng)LCD的響應(yīng)速度低于CAN接收數(shù)據(jù)的速度時(shí),會形成中斷嵌套,時(shí)間長了就會出現(xiàn)堆棧溢出。此外,采用中斷方式在數(shù)據(jù)量大時(shí)會出現(xiàn)DSP無暇顧及用戶鍵盤輸入的現(xiàn)象。實(shí)踐表明,采用查詢的方式可以很好地發(fā)揮DSP和LCD的固有能力,而且整體響應(yīng)速度也比中斷方式快。
  LCD顯示涉及的子程序比較多,分層也很多。在編寫程序時(shí)首先在DSP的Flash ROM里定義一個(gè)段,將LCD顯示過程中可能涉及的字符、漢字等點(diǎn)陣數(shù)據(jù)做成一個(gè)庫,放入段內(nèi),在使用時(shí)再通過ROM訪問指令讀取。
  曲線的繪制過程如下:首先確定坐標(biāo)的原點(diǎn)位置、X方向和Y方向的最大坐標(biāo)以及輸入數(shù)值的范圍,然后在內(nèi)存中開辟一個(gè)同X坐標(biāo)點(diǎn)數(shù)一樣大小的緩沖區(qū)BUFF,用于記憶已經(jīng)繪制的各點(diǎn)的坐標(biāo);同時(shí)設(shè)定一個(gè)X指針,用于存儲當(dāng)前的X坐標(biāo)。當(dāng)接收到新的數(shù)據(jù),確定好Y方向的坐標(biāo)后,首先查找BUFF,得到原來顯示在該X位置的點(diǎn)的Y坐標(biāo),將這個(gè)位置上的點(diǎn)清除,然后在新的Y坐標(biāo)上描點(diǎn),最后在BUFF的相應(yīng)X位置上記錄下新描點(diǎn)的Y坐標(biāo)值,此時(shí)便完成了一個(gè)點(diǎn)的繪制。后面還要調(diào)整屏幕上的指針以標(biāo)明當(dāng)前顯示的X坐標(biāo)。當(dāng)繪制到X方向的最大位置時(shí),再返回X=0的位置繼續(xù)繪圖。
  屏幕下方有關(guān)菜單的操作也是采用樹結(jié)構(gòu)實(shí)現(xiàn)的,這里不再詳述。
  CAN監(jiān)控終端向懸浮節(jié)點(diǎn)發(fā)送數(shù)據(jù)的過程一般是伴隨在相應(yīng)的菜單操作并按下ENTER鍵生效后進(jìn)行的。在每次數(shù)據(jù)發(fā)送之前,程序都需要讀入撥碼開關(guān)的狀態(tài),以確定通信的波特率和通信對象的標(biāo)識符。在實(shí)現(xiàn)上,撥碼開關(guān)的最高位控制著波特率,后面7位則決定了通信的發(fā)送標(biāo)識符。
4 結(jié)束語
  使用表明,這種TMS320LF2407A DSP的CAN監(jiān)控終端在多懸浮組成的網(wǎng)絡(luò)中可以發(fā)揮很好的監(jiān)控和調(diào)試作用,其結(jié)構(gòu)小巧、界面友好,使用相當(dāng)方便。


上一頁 1 2 下一頁

評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉