在某些工業(yè)生產過程中,,如恒溫爐,、倉庫儲藏,、花卉種植,、小型溫室等領域都對溫度有著嚴格的要求,需要對其加以檢測和控制,。傳統(tǒng)的溫度測量方法是將溫度傳感器輸出的模擬信號放大后送至遠端A/D轉換器,,最后單片機對A/D轉換后的數(shù)據(jù)進行分析處理。這種方法的缺點是模擬信號在傳輸?shù)倪^程中存在損耗并且容易受到外界的干擾,,導致測量的溫度精度不高,。
文中以STC89C52RC單片機為控制核心,利用美國Dallas公司最新推出的單總線數(shù)字溫度傳感器DSl8820測量溫度,,單片機處理后對溫度進行控制,,并將溫度顯示在LCDl602上,還可通過按鍵設置溫度上下限值實現(xiàn)溫度超限報警等功能,。
1 系統(tǒng)的組成和工作原理
多功能溫度控制系統(tǒng)的結構如圖1所示,,系統(tǒng)由六部分組成:控制核心部分、溫度數(shù)據(jù)采集部分,、加熱裝置控制部分,、液晶顯示部分、按鍵輸入部分和報警提示部分,。單片機啟動溫度采集電路完成溫度的一次轉換,,然后讀出轉換后的數(shù)字量并轉化成當前的溫度呈現(xiàn)在顯示模塊中,并將當前的溫度與通過按鍵輸入電路設定的保持恒溫度數(shù)進行比較,,以實現(xiàn)溫度的控制,。還可以通過按鍵設置溫度的上下限值以實現(xiàn)超溫或低溫報警提示功能。本系統(tǒng)的設計目標要對溫度的控制精度達到0.1℃,。
1.1 報警電路
報警電路采用蜂鳴器作為發(fā)聲裝置,當溫度高于設定的上限值或低于下限值,,給蜂鳴器送周期為1s,,占空比為50%的方波,報警的時間可以持續(xù)1分鐘或等待按鍵解除報警,,這由軟件控制實現(xiàn),。
1.2 按鍵電路
采用2×3的小鍵盤,鍵盤的識別可以采用兩種方法:行掃描法和行反轉法,。兩種方法都要注意消除按鍵的抖動,。文中采用行掃描法并做成子程序,,出口參數(shù)為按鍵的鍵值。定義鍵K1設置TH,,K2設置TL,,K3調高TH或TL,K4調低TH或TL,,K5對TH或TL的數(shù)值進行確認,。
1.3 溫度檢測電路
溫度檢測電路采用智能溫度傳感器DSl8820,它與單片機相連只需要3線,,減少了外部的硬件電路,。DSl8820主要性能特點如下:
(1)測溫的范圍為-55~125℃,最大分辨率可以達到0.0625℃,;
(2)電源電壓范圍為3.0~5.5V,;
(3)供電模式:寄生供電和外部供電;
(4)封裝形式有兩種:3腳的TO-92封裝和8腳的SOIC封裝,;
(5)可編程的溫度轉換分辨率,,分辨率為9~12位(包括1位符號位),由配置寄存器決定具體位數(shù),,配置寄存器的格式如表1所示,。
其中RlR0是用來設定分辨率的,分辨率的定義如表2所示,。
由表2可以看出,,分辨率設定得越高,溫度轉換所需要的時間就越長,,因此應根據(jù)實際應用的需要來選擇合適的分辨率,。本文中選取12位分辨率,每隔1秒檢測一次溫度,。12位分辨率的溫度數(shù)據(jù)值格式如下:
當S=0表示測得的溫度為正值,,當S=l表示測得的溫度為負值。
1.3.1 DSl8820的存儲器結構
DSl8820的存儲器有高速暫存RAM和非易失性電擦寫EEPROM,。高速暫存RAM的內容從低字節(jié)到高字節(jié)9個字節(jié)依次為:溫度LSB,、溫度MSB、高溫限值字節(jié)TH,、低溫限值字節(jié)TL,、配置寄存器、保留,、保留,、保留,最后一個字節(jié)是前8個字節(jié)的CRC碼,。EEPROM用來存儲TH和TL,。
1.3.2 溫度數(shù)據(jù)的處理方法
從DSl8820讀出的兩個字節(jié)的二進制值溫度必須先轉換成十進制數(shù)值,,然后才能將其ASCII碼送往LCDl602顯示。12位的分辨率,,溫度是以0.0625步進的,,由于兩個字節(jié)的溫度采用補碼表示,所以先判斷讀出溫度的最高位是0還是1,,即判斷是正溫還是負溫,,然后對其求補碼轉化成正溫,之后將高字節(jié)的低4位和低字節(jié)的高4位組成一個字節(jié),,這個字節(jié)的二進制值不斷除以10得出的余數(shù)即為溫度值的個,、十、百位值,。若讀出的溫度數(shù)值是負數(shù),,顯示處理時,在溫度數(shù)的前面人為顯示負號即可,。對小數(shù)部分的溫度只需將低字節(jié)的低4位乘以0.0625,,然后對乘積取其小數(shù)點后的一位數(shù)即可。
1.3.3 DSl8820的控制步驟
(1)首先對DSl8820進行復位,。由單片機將數(shù)據(jù)線DQ拉至低電平480-960 μs,,然后將DQ拉高15-60 μs,以便單片機檢測到DSl8820送來的低電平響應,。然后檢測DQ,,若DQ仍然為高電平,則復位操作失敗,,可采用循環(huán)的方式再次對其進行復位,;若DQ為低電平,則復位操作成功,。
(2)DSl8820的ROM操作命令,。DSl8820復位后,主機可以發(fā)器件ROM的操作命令如讀ROM[33H],、匹配ROM[55H],、跳過ROM[0CCH],報警搜索[4EH]等,。在單點總線的情況下,,可發(fā)跳過ROM[0CCH]操作命令,以節(jié)省時間,。另外,文中有報警的功能,,溫度轉換后還需要發(fā)報警搜索命令,,該命令會將最近一次測得的溫度值T與高速RAM中的TH或TL作比較,,若T>TH或T
(3)DSl8820的存儲器操作命令。如啟動溫度轉換命令[44H],,寫入命令[4EH](寫入該命令后,,緊接著要寫入報警上限TH,報警下限TL及配置寄存器字節(jié)),,讀暫存器RAM的內容命令[0BEH](讀取將從第一個字節(jié)開始一直到第9個字節(jié)結束,,如僅需要部分字節(jié),主機可以在合適的時刻發(fā)復位命令來終止讀取)及復制命令[48H](把暫存器RAM的第2,、3,、4字節(jié)轉存到DSl8820的EEROM中)等。
(4)DSl8820的ROM或RAM操作的總線讀寫時序,。對于讀時序,,首先將DQ拉低并延時1-15μs以內(延時時間不能太長),然后將DQ拉高并延時幾個μs后再讀取DQ的值,,讀完一位后需要延時45 μs以上才能讀取下一位,;對于寫時序,先將DQ拉低10-15μs,,接著向總線寫入數(shù)據(jù)并延時50μs以上,,最后將DQ拉高1μs以上再進行下一位的寫入。
1.4 液晶顯示模塊
采用的是長沙太陽人電子有限公司生產的SMCl602A,。
1.4.1 主要技術參數(shù)
芯片的工作電壓4.5~5.5V,,能顯示兩行,每行顯示16個字符,,字符的大小為2.95×4.35mm,。
1.4.2 接口信號說明
除電壓、背光引腳及8個I/O引腳外,,主要的控制引腳還有數(shù)據(jù)/命令選擇RS引腳,,該引腳為高電平時表示I/O引腳出現(xiàn)的是數(shù)據(jù),該引腳為低電平時表示I/O引腳出現(xiàn)的是命令,;讀/寫選擇引腳及使能引腳E(該引腳為高電平時對SMCl602A的操作才有效),。
1.4.3 指令說明
(1)初始化設置
1.4.4 LCDl602的初始化步驟
(1)延時15ms,,寫指令38H(不檢測忙信號);
1.5 恒溫保持控制模塊
選用6V固態(tài)繼電器作為開關器件,,通過控制其斷與通的時序從而控制加熱器件的工作時長,,以實現(xiàn)樣品的恒溫保持功能。
2 系統(tǒng)硬件電路的設計
該系統(tǒng)的主要電路原理圖如圖2所示,。系統(tǒng)中使用USB口提供5V電源的電路,;使用RS232串口通過P3.0和P3.1燒寫程序的電路;以及使用繼電器控制的恒溫保持電路等在原理圖中并未畫出,。
3 系統(tǒng)的軟件設計
系統(tǒng)總的流程圖如圖3所示,。系統(tǒng)程序主要有主程序和LCDl602初始化子程序及讀寫時序子程序、DSl8820復位及讀寫時序子程序,、鍵盤掃描子程序,、溫度數(shù)據(jù)處理子程序等構成。
4 程序的編輯及調試
編程語言可以采用匯編語言,,也可以采用C51語言,。本文采用匯編語言,使用Keil C軟件新建一個工程,然后新建一個文件輸入源程序并保存成.asm格式,,并將該源文件添加到剛剛新建的工程,,隨后編譯鏈接后生成十六進制文件(.HEX),最后使用燒寫軟件stc-isp-v3.9l通過RS232串口將十六進制文件燒寫進單片機的Flash中運行程序即可,。
5 結論
本文設計的多功能溫度控制器體積小、功耗低,、可靠性高,,實驗表明,對溫度的控制精度達到了0.1℃的設計目標,。
a.顯示模式設置。指令碼:00111000b,,用于設置16×2顯示,,5×7點陣。
b.顯示開/關及光標設置,。二進制指令碼:00000DCB中D位用來控制顯示開或關,,C位用來控制顯示光標,,B位控制光標是否閃爍。二進制指令碼:000001NS中N位控制讀寫一個數(shù)據(jù)后地址指針和光標加或減1,,S位控制字符的移動,。
c.數(shù)據(jù)指針設置。指令碼:80H+地址碼(0-27H,,40H-67H)用于設置數(shù)據(jù)指針,。
(2)其他設置。如指令碼01H:顯示清屏且數(shù)據(jù)指針清零,。
(2)延時5ms,,寫指令38H(不檢測忙信號),,上述過程執(zhí)行兩遍,后面的過程每次寫指令,、讀/寫數(shù)據(jù)之前均需要檢測忙信號,;
(3)寫指令38H:顯示模式設置;
(4)寫指令08H:關閉顯示,;
(5)寫指令0lH:清屏且數(shù)據(jù)指針清零,;
(6)寫指令06H:字符不移動,光標和指針加1,;
(7)寫指令0FH:顯示開,,光標閃爍。