新聞中心

EEPW首頁 > 光電顯示 > 設計應用 > 利用LIN節(jié)點的溫度顯示

利用LIN節(jié)點的溫度顯示

作者: 時間:2012-02-09 來源:網絡 收藏

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

內容摩托羅拉公司8/16位應用工程師 Peter Toppin串行多路傳輸總線如CAN或可以解決車內因導線過多所帶來的許多問題。低成本的總線很適合應用于車門等這些對傳輸速率要求不高的場合,最高速率為20kbit/s的LIN總線完全可以滿足要求。車外就是這樣一個應用實例,外部傳感器通常布置在后視鏡中,數據產生于車門。但是實際位置是距此一定距離的車內,LIN總線可使布線簡單,因為LIN只有3根導線:LIN數據線、電源線和地線。

本應用介紹了溫度顯示從機的設計。本節(jié)點是車門模塊的一個從機節(jié)點,整個車門模塊還包括鍵盤節(jié)點。車門報文幀用后視鏡報文響應的一個字節(jié)來表示溫度(見表1)。作為主機節(jié)點的車身控制器一般每隔100ms發(fā)送一個含有后視鏡標識符的報文幀頭,報文響應有兩個字節(jié),其中一個字節(jié)用于表示溫度,變化范圍為-30 C~97.5 C,精度為0.5 C。此時,報文響應數據可以直接被溫度顯示節(jié)點讀?。◤臋C到從機通信),也可被主機節(jié)點讀取,再發(fā)給其他從機節(jié)點。

硬件

溫度顯示節(jié)點微控制器(MCU)選用MC68HC908EY16,在寫本文的時候,還沒有得到這種微控制器,所以選用了MC68HC908AZ60A。使用MC68HC908EY16能夠大幅度降低成本,這是因為MC68HC908EY16不僅管腳數目少,降低了成本,而且集成在片內的時鐘發(fā)生器模塊(ICG)不需要晶體或陶瓷振蕩器,可進一步降低成本。

圖1是溫度顯示應用節(jié)點的電路框圖。一個簡單的LIN節(jié)點除了微控制器MCU外,還需要兩個芯片,即LIN接口芯片(MC33399)和5V的電壓調節(jié)器。在未來,這兩個芯片將被一個芯片(SBC)所代替。電壓調節(jié)器選用8個管腳的LT1121芯片,在MCU的控制下,該芯片關閉進入低功耗睡眠模式。芯片LT1121可由總線活動通過MC33399來喚醒。因為MC33399已包含30kohm LIN總線上拉電阻,所以PCB板需要的元件就只有IRQ和Reset管腳的上拉電阻、去耦電容和晶振及其相關元件。除此之外,還需要2個PORTC口的上拉電阻和一個9V穩(wěn)壓管,以便使用串口進入監(jiān)控模式,實現片內flash存儲器在線編程。軟件開發(fā)是在裝有目標接口的MMDS開發(fā)板上進行的,沒有實際的MC68HC908AZ60A。

由于LED由MCU直接驅動,所以要注意避免端口管腳輸出太大的電流,防止超過5V電壓調節(jié)器規(guī)定的電流及功耗。但是要達到合適亮度的數字,所需電流對端口管腳來說太高,所以使用了FET緩沖。若選用220R的段電阻,每段電流為10mA,則整個數字電流就達到了80mA。但以25%占空比依次顯示4個數字,那么每段平均電流就為2.5mA,則顯示一個8段數字的電流只有20mA。例如顯示88.0(共21有效段)所需最大總電流為52.5mA(2.5mA 21)。

MCU的Idd是15mA,電壓調節(jié)器的壓降是9V(假設電池電壓為14V),則LT1121的最大功耗計算如下:

功耗=9V (52.5mA+15mA)~610mW設環(huán)境溫度為26 C,熱阻溫升為100C /W,則LT1121的最高溫度計算如下式:

TJ=TAmb+610mW 100C /W=26+61=87 C此值在最高溫度125 C范圍之內。如果需要更大的段電流,就要選用段驅動器和具有更好散熱效果的電壓調節(jié)器。

MC68HC908AZ60A手冊規(guī)定總的電源電流只有10mA,同時要間歇地檢測各種條件下Voh和Vol值是否滿足手冊規(guī)定。當然,這些電壓不是最重要的,本應用關心的是總電流不要太大以免造成硬件損壞。只要每個管腳的絕對最大電流能達到100mA就不會有危險。此時,最大的Idd會低于100mA。以后的手冊會將這些不必要的限制刪除。

若在2s內總線沒有活動,該節(jié)點就進入睡眠模式。當檢測到這種狀態(tài)時,MCU使MC33399的EN管腳變?yōu)榈碗娖?,同時INH管腳輸出低電平給LT1121調節(jié)器,使其進入等待模式并停止向MCU提供電源。恢復的總線活動會喚醒MC33399,使電壓調節(jié)器向MCU提供電源。為了降低睡眠模式的電流,采用一個穩(wěn)壓二極管提供進入監(jiān)控模式所要求的高電壓。在睡眠模式時所測電流消耗為40 A,是MC33399和LT1121靜態(tài)電流之和(兩者都約為20 A)。

軟件

溫度顯示模塊使用Motorola/Metrowerks LIN驅動程序,因此只要使用LIN_GetMsg()這樣簡單的代碼就能獲得位于后視鏡的傳感器產生的數據,進而處理所有的輸入/輸出動作。LIN驅動程序的使用使溫度節(jié)點的應用軟件變得相當簡單。為了響應主機的請求命令幀(ID 0 3C),用戶程序里必須包含函數void LIN_Command()。這就是說,比如,主機是如何要求所有的從節(jié)點進入低功耗等待或睡眠模式的。在這項應用中,當總線沒有活動時,這個函數就僅僅相當于一個空循環(huán),即進入睡眠模式。只要所有變量都已經被聲明了,就初始化CONFIG和I/O寄存器。CONFIG1寄存器設成0 71,禁用看門狗(COP),CONFIG2寄存器設成0 19,將MCU設置成MC68HC908AZ60A(相對于AS60A)。由于中斷被允許,因此只要通過LIN_init()進行了初始化,LIN驅動程序就能起作用。主循環(huán)使用了可編程中斷定時器(PIT),使重復頻率基于8MHz的晶振就能達到200Hz。每5ms PIT的溢出標志就被置位一次,主循環(huán)就將二進制輸入數據轉換成7段碼格式。這個200Hz的頻率還被用來產生一個50Hz的4位LED多通道顯示的循環(huán)刷新頻率。雖然每一次都讀LIN緩沖區(qū),也把溫度值轉換成4位7段碼格式,但實際上每5ms只有一位被刷新。

LIN驅動程序中的函數LIN_IdleClock能夠檢查是否有總線活動。如果沒有就將一個計數器的值加一,然后與LIN_IDLETIMEOUT(在slave.cfg中定義)比較。如果計數器的值超過了LIN_IDLETIMEOUT,那么函數LIN_DriverStatus()就停止返回a1(LIN_STATUS_RUN),表明總線已經空閑了2秒鐘。在這個例子中,如果檢測到這種情況,就將MC33399的enable管腳拉低,通過禁用LT1121使MCU掉電。程序也將顯示設置成....,但是這種掉電操作在開發(fā)環(huán)境下并不能作為檢測到總線處于空閑狀態(tài)的標志,因為在開發(fā)環(huán)境中MCU的電源不通過LT1121來控制。在這項應用中,如果模塊沒有接收到溫度數據,就能進行特別的顯示,如沒有這個附加功能,則仍將繼續(xù)顯示最近接收到的溫度值(或者如果最近一次上電后沒有接收到任何信息,就顯示 30 C)。使用LIN_MsgStatus(0 0A)并結合變量error_count就能將這些特點結合起來,在一秒鐘沒收到帶0A這個ID的LIN信息之后,將顯示變成----,見圖2。

為了完成換算,將溫度字節(jié)轉換成變量bits,如果溫度是正的,就減去偏移量60(30 C)。如果溫度是負的(60),就會造成變量bits的錯誤下溢,因此如果這種情況下完成了減法,那就用另外一種圓整方式(60bits)來得到符合實際的(正的)溫度值。如果事實上溫度值是負的話,就通過置negative標志位來記錄。

bits的值通過使用數組seg轉換成所需要的7段碼格式。首先根據bits的最低有效位將小數點后的那一位設置成0或者5。然后將bits除以2,得到二進制的攝氏溫度值。再除以10就得到十位的數字,同時余數就是個位的數字。然后將個位,十位和符號位(百位)的數字設置成相應的段碼,惟一復雜的地方就是個位數字要帶小數點。如果十位的數字是零,就應該不顯示出來,除非溫度值是負的。在這種情況下,將負號顯示在十位上要比顯示在百位上好看的多。

為了輸出LED顯示的信息變量dcount每次都自加一,然后通過dcount的最低兩個有效位來選中此次應該刷新的那一位。在存放段碼數據并輸出到portD的數組display和存放位刷新數據并輸出到portF的數組scan中,都將用來作為一個標志。



評論


相關推薦

技術專區(qū)

關閉