❶ 論文單片機溫度控制系統的(程序清單)!!!!急!!!!
本設計的溫度測量及加熱控制系統以 AT89S52 單片機為核心部件,外加溫度採集電
路、鍵盤及顯示電路、加熱控制電路和越限報警等電路。採用單匯流排型數字式的溫度傳
感器 DS18B20,及行列式鍵盤和動態顯示的方式,以容易控制的固態繼電器作加熱控制
的開關器件。本作品既可以對當前溫度進行實時顯示又可以對溫度進行控制,以使達到
用戶需要的溫度,並使其恆定在這一溫度。人性化的行列式鍵盤設計使設置溫度簡單快
速,兩位整數一位小數的顯示方式具有更高的顯示精度。建立在模糊控制理論上的控制
演算法,使控制精度完全能滿足一般社會生產的要求。通過對系統軟體和硬體設計的合理
規劃,發揮單片機自身集成眾多系統級功能單元的優勢,在不減少功能的前提下有效降
低了硬體成本,系統操控簡便。
實驗證明該溫控系統能達到 0.2℃的靜態誤差,0.45℃的控制精度,以及只有 0.83%
的超調量,因而本設計具有很高的可靠性和穩定性。
關鍵 詞: 單片機 恆溫控制 模糊控制
1
引 言
溫度是工業生產中主要的被控參數之一,與之相關的各種溫度控制系統廣泛應用於
冶金、化工、機械、食品等領域。溫度控制是工業生產過程中經常遇到的過程式控制制,有
些工藝過程對其溫度的控制效果直接影響著產品的質量,因而設計一種較為理想的溫度
控制系統是非常有價值的。
硬體 系統的設計
1、電路總體原理框圖
溫度測量及加熱系統控制的總體結構如圖 1 所示。系統主要包括現場溫度採集、實
時溫度顯示、加熱控制參數設置、加熱電路控制輸出、與報警裝置和系統核心 AT89S52
單片機作為微處理器。
圖 1:系統總體原理框圖
溫度採集電路以數字量形式將現場溫度傳至單片機。單片機結合現場溫度與用戶設
定的目標溫度,按照已經編程固化的模糊控制演算法計算出實時控制量。以此控制量控制
固態繼電器開通和關斷,決定加熱電路的工作狀態,使水溫逐步穩定於用戶設定的目標
值。在水溫到達設定的目標溫度後,由於自然冷卻而使其溫度下降時,單片機通過采樣
回的溫度與設置的目標溫度比較,作出相應的控制,開啟加熱器。當用戶需要比實時溫
度低的溫度時,此電路可以利用風扇降溫。系統運行過程中的各種狀態參量均可由數碼
管實時顯示。
2、溫度採集電路的設計
溫度採集電路模塊如圖 2 示。DS18B20 內部結構主要由四部分組成:64 位光刻 ROM、
溫度感測器、非揮發的溫度報警觸發器 TH 和 TL、配置寄存器。其中 DQ 為數字信號輸
入/輸出端;GND 為電源地;VDD 為外接供電電源輸入端。
2
圖 2:溫度採集電路
DS18B20 中的溫度感測器可完成對溫度的測量,以 12 位轉化為例:用 16 位符號擴展
的二進制補碼讀數形式提供,以 0.0625℃/LSB 形式表達,其中 S 為符號位。
這是 12 位轉化後得到的 12 位數據,存儲在 18B20 的兩個 8 比特的 RAM 中,二進
制中的前面 5 位是符號位,如果測得的溫度大於 0,這 5 位為 0,只要將測到的數值乘
於 0.0625 即可得到實際溫度;如果溫度小於 0,這 5 位為 1,測到的數值需要取反加 1
再乘於 0.0625 即可得到實際溫度。
3、鍵盤和顯示的設計
鍵盤採用行列式和外部中斷相結合的方法,圖 3 中各按鍵的功能定義如下表 1。其
中設置鍵與單片機的 INT 0 腳相連,S 0 −−S 9 、YES、NO 用四行三列接單片機 P0 口,REST
鍵為硬體復位鍵,與 R、C 構成復位電路。模塊電路如下圖 3:
表 1:按鍵功能
按鍵 鍵名 功能
REST 復位鍵 使系統復位
RET 設置鍵 使系統產生中斷,進入設置狀態
S 0 −−S 9 數字鍵 設置用戶需要的溫度
YES 確認鍵 用戶設定目標溫度後進行確認
NO 清除鍵 用戶設定溫度錯誤或誤按了 YES 鍵後使用
3
圖 3 鍵盤介面電路
顯示採用 3 位共陽 LED 動態顯示方式,顯示內容有溫度值的十位、個位及小數點後
一位。用 P2 口作為段控碼輸出,並用 74HC244 作驅動。P1.0—P1.2 作為位控碼輸出,
用 PNP 型三極體做驅動。模塊電路如下圖 4:
4、加熱控制電路的設計
圖 4 顯示介面電路
用於在閉環控制系統中對被控對象實施控制,被控對象為電熱杯,採用對加在電熱
杯兩端的電壓進行通斷的方法進行控制,以實現對水加熱功率的調整,從而達到對水溫
控制的目的。對電爐絲通斷的控制採用 SSR-40DA 固態繼電器。它的使用非常簡單,只
要在控制端 TTL 電平,即可實現對繼電器的開關,使用時完全可以用 NPN 型三極體接
成電壓跟隨器的形式驅動。當單片機的 P1.3 為高點平時,三極體驅動固態繼電器工作
接通加熱器工作,當單片機的 P1.3 為低電平時固態繼電器關斷,加熱器不工作。控制
電路圖如下圖 5:
4
圖 5 加熱控制電路
5、報警及指示燈電路的設計
當用戶設定的目標溫度達到時需用聲音的形式提醒用戶,此時蜂鳴器為三聲斷續的
滴答滴答的叫聲。在本系統中我們為用戶設計了越限報警,當溫度低於用戶設置的目標
溫度 10 度或高於 10 度時蜂鳴器為連續不斷的滴答滴答叫聲。當單片機 P1.7 輸出高電
平時,三極體導通,蜂鳴器工作發出報警聲。P1.7 為低電平時三極體關斷,蜂鳴器不
工作。
D1 為電熱杯加熱指示燈,P1.5 低電平有效;D0 為檢測到 DS18B20 的指示,高電平
有效;D10 為降溫指示燈,低電平有效。報警及指示燈電路如下圖 6 示:
圖 6 報警及指示燈電路
5
軟 件系統的設計
系統的軟體由三大模塊組成:主程序模塊、功能實現模塊和運算控制模塊。
1、主程序模塊
主程序主要完成加熱控制系統各部件的初始化和實現各功能子程序的調用,以及實
際測量中各個功能模塊的協調在無外部中斷申請時,單片機通過循環對外部溫度進行實
時顯示。把設置鍵作為外部中斷 0,以便能對數字按鍵進行相應處理。主程序流程圖如
下圖 7:
6
圖 7 主程序流程圖
7
2、功能實現模塊
以用來執行對固態繼電器及電熱杯的控制。功能實現模塊主要由中斷處理子程序、
溫度比較處理子程序、鍵盤處理子程序、顯示子程序、報警子程序等部分組成。鍵盤顯
示及中斷程序流程圖如下圖 8:
3、運算控制模塊
圖 8 鍵盤、顯示、中斷 子程序流程圖
該模塊由標度轉換、模糊控制演算法,及其中用到的乘法子程序。
3.1 標度轉換
16
式中 A 為二進制的溫度值, A0 為 DS18B20 的數字信號線送回來的溫度數據。
8
單片機在處理標度轉換時是通過把 DS18B20 的信號線送回的 16 位數據右移 4 位得
到二進制的溫度值。其小數部分通過查小數表的形式獲取。程序流程圖如下圖 9:
開始
將28H低4位與29H高4位組合成
一個位元組
將合成的位元組(整數部分)送29H
單元
將29H單元低4位送A
給DPTR賦常數表格2首地址
將查到的數值(即小數部分)送
30H單元
結束
3.2 模糊控制演算法子程序
圖 9 標度轉換子程序流程圖
該系統為一溫度控制系統,由於無法確切確定電爐的物理模型,因而無法建立其數
學模型和傳遞函數。加熱器為一慣性系統,我們採用模糊控制的方法,通過多次溫度測
量模糊計算當用戶設定目標溫度時需提前關斷加熱器的溫度,利用加熱器自身的熱慣性
使溫度上升到其設定溫度。每隔 5 攝氏度我們進行一次溫度測量,並當達到其溫度時關
斷加熱器記錄下因加熱器的熱慣性而上升的溫度值。從而可以建立熱慣性的溫度差值
表,在程序中利用查表法,查出相應設定溫度對應的關斷溫度。通過實驗數據我們可以
看出,當水溫從 0℃加熱到 50℃這段溫度區域,其溫度慣性曲線可近似成線性的直線,
水溫從 50℃加熱到 100℃這段溫度慣性曲線可近似成另一條線性的直線段。通過對設置
的目標溫度與溫控系統監測溫度進行差值處理就可近似的求出單片機的提前關斷溫度。
程序流程圖如圖 10:
9
4.源程序見附錄[2]
圖 10 模糊控制演算法子程序流程圖
設計 總結
我們的溫度控制系統是基於 AT89S52 單片機的設計方案,她能實時顯示當前溫度,
並能根據用戶的要求作出相應的控制。此系統為閉環系統,工作穩定穩定性高,控制精
度高,利用模糊控制演算法使超調量大大降低。軟體採用模塊化結構,提高了通用性。本設
計的目的不僅僅是溫度控制本身,主要提供了單片機外圍電路及軟體包括控制演算法設計
的思想,應該說,這種思想比控制系統本身更為重要。
1、設計所達到的性能指標
1.1 溫控系統的標度誤差
我們將標准溫度計和溫控系統探頭放人同一容器中,選定若干不同的溫度點,記
錄下標准溫度計顯示的溫度和溫控系統顯示的溫度進行比較。測量數據如下表 2 所示:
表 2 標准溫度計測量的溫度和溫控系統顯示的溫度
標准溫度計和溫控系統顯示的溫度(℃)
標准溫度計 16.9 47.7 57.8 63.0 72.8 85.1 90.9
溫控系統 16.5 48.0 58.3 62.9 73.0 85.5 90.5
差值比較 -0.4 0.3 0.5 0.1 0.2 0.4 -0.4
標度誤差 1.5%
10
1.2 溫控系統的靜態誤差
通過測量在不同的溫度點同標准溫度的溫度差來確定溫控系統的靜態誤差。其測量
數據如下表 3:
表 3 標准溫度和溫控系統顯示的溫度
標准溫度和溫控系統顯示的溫度(℃)
標准溫度 26.0 37.0 46.0 60.0 70.0 83.0
系統顯示值 25.7 36.4 46.1 59.6 70.0 83.3
差值 -0.3 -0.6 -0.1 -0.4 0 0.3
靜態誤差 0.18℃
1.3 溫控系統的控制精度
通過設定不同的溫度值,使加熱器加熱,待溫度穩定時記錄各溫度點的溫度計數據
和溫控系統的顯示值。其記錄數據如下表 4:
溫度計讀數和溫控系統顯示的溫度(℃)
設定溫度
值 20.0 28.0 35.0 45.0 55.0 75.0 87.0 91.0
系統顯示
值 20.5 27.7 34.4 45.1 54.1 74.9 86.1 91.2
差值 0.5 -0.3 -0.6 0.1 -0.9 -0.1 -0.9 0.2
控制精度 0.45℃
超調量 0.83%
2、結果分析論述
我們的系統完全滿足設計要求,靜態誤差方面可以達到 0.18℃的誤差,在讀數正確
方面與標准溫度計的讀數誤差為 1.5%,對一般的工業生產完全可以採用我們的設計。
該系統具有較小的超調值,超調值大約為 0.83%左右。雖然超調為不利結果,但另
一方面卻減小了系統的調節時間。從其數據表可以看出該系統為穩定系統。
3、設計方案評價
3.1 優點
在硬體方面:本設計方案採用了單匯流排型數字式的溫度感測器,提高了溫度的採集
精度,節約了單片機的口線資源。方案還使用僅一跟口線就可控制的美國生產的固態繼
電器 SSR—40DA 作加熱控制器件,使設計簡單化,且可靠性強。在控制精度方面,本設
計在不能確定執行機構的數學模型的情況下,大膽的假設小心的求證,利用模糊控制的
演算法來提高控制精度。
在軟體方面:我們採用模塊化編程,思路清晰,使程序簡潔、可移植性強。
3.2 缺點
本設計方案雖然採用了當前市場最先進的電子器件,使電路設計簡單,但設計方案
造價高。本系統雖然具有較小的超調量,但加大了調節時間。如果需要更高的控制精度,
則我們的模糊控制將不適應,需修改程序。
11
3.3 方案的改進
在不改變加熱器容量的情況下,為減小調節時間,可以實行在加熱快達到設定溫度
時開啟風扇來減小熱慣性對溫度的影響的措施。在控制精度上可採用先進的數字 PID
控制演算法,對加熱時間進行控制,提高控制精度。
可以改進控制系統使能同 PC 聯機通信,以利用 PC 的圖形處理功能列印顯示溫度曲
線。AT89S52 串列口為 TTL 電平,PC 串列口為 RS232 電平,使用一片 MAX232 作為電
平轉換驅動。
參考 文獻
[1] 李廣弟 單片機基礎 北京:北京航空航天大學出版社,2001
[2] 王福瑞 單片微機測控系統設計大全 北京:北京航空航天大學出版社,1997
[3] 趙茂泰 智能儀器原理及應用(第 2 版) 北京:電子工業出版社,2004
[4] 賴壽濤 微型計算機控制技術 北京:機械工業出版社,2000
[5] 沙占友 模擬與數字萬用表檢測及應用技術 北京:電子工業出版社 1999
12
附 錄
附錄[1]使用說明書
按 鍵功能說明
數字鍵:按 SET 鍵後,按相應的數字鍵(0~9)可對溫度進行設置,所設置的溫
度將實時顯示在 LED 顯示器上;
SET 鍵:按 SET 鍵可對溫度的十位、個位以及小數部分進行設置;
YES 鍵:設置好溫度後按 YES 鍵,系統將據你所設置的溫度(須大於當前實際
溫度)對水進行加熱;
NO 鍵:若誤按了 SET 鍵,或對輸入有誤,可按 NO 鍵進行取消;
RST 鍵:對系統進行復位。
指示 燈及報警器說明
紅 燈:加熱狀態標志;
綠 燈:溫度感測器正常工作標志;
藍 燈:保溫狀態標志;
報警器:功能①當水溫達到預設值時報警提醒;
功能②當水溫達到或超越上、下限時報警提示。
13
附錄[2]設計總電路
14
附錄[3]程序清單
TEMPER_L EQU 29H ;用於 保存讀出溫度的低 8 位
TEMPER_H EQU 28H ;用於 保存讀出溫度的高 8 位
FLAG EQU 38H ;是否 檢測到 DS 18B20 標志位
DAYU EQU 44H ;設溫 >實溫
XIYU EQU 45H ;設溫 <實溫
DEYU EQU 46H ;設溫 =實溫
GAOLE EQU 47H ;水溫 高於最高溫度
DILE EQU 48H ;水溫 低於最低溫度
A_bit EQU 79h ;數碼 管個位數存放內存位置
B_bit EQU 7Ah ;數碼 管十位數存放內存位置
C_BIT EQU 78H ;數碼 管小數存放內存位置
ORG 0000H
AJMP START
ORG 0003H
AJMP PITO
ORG 0030H
START: CLR P1.7
CLR P1.3
CLR P1.5
SETB P1.6
MOV R4, #00H
MOV SP, #60H ;確立堆棧區
MOV PSW, #00H ;
MOV R0, #20H ;RAM 區首地址
MOV R7, #60H ;RAM 區單元個數
ML: MOV @R0, #00H
INC R0
DJNZ R7, ML
CLR IT0
MAIN:LCALL GET_TEMPER ;調用讀溫度子程序 進行溫度顯示,這里我們考
;慮用網站提供的兩位數碼管來顯示溫度
;顯示範圍 00 到 99 度,顯示精度為 1 度
;因為 12 位轉化時每一位的精度為 0.0625 度,
;我們不要求顯示小數所以可以拋棄 29H 的低 4
;位將 28H 中的低 4 位移入 29H 中的高 4 位,這
;樣獲得一個新位元組,這個位元組就是實際測量獲
;得的溫度
LCALL DISPLAY ;調用數碼管顯示 子程序
JNB 00H, MAIN
CLR 00H
15
MOV A, 38H
CJNE A, #00H, SS
AJMP MAIN
SS: LCALL GET_TEMPER
LCALL DISPLAY;調用 數碼管顯示子程序
LCALL BIJIAO
LCALL XIAOYU
LCALL JIXIAN
JNB DEYU ,LOOP
CLR P1.3 ;關加熱器
SETB P1.6 ;關 藍燈
SETB P0.7 ;關風扇
CLR DEYU
LCALL GET_TEMPER
LCALL DISPLAY
AJMP TT2
LOOP:JNB DAYU ,TT
CLR DAYU
SETB P1.3
SETB P1.6
SETB P0.7
CLR P1.7
LCALL GET_TEMPER
LCALL DISPLAY
AJMP TT2
TT:JNB XIYU, TT2
CLR XIYU
CLR P0.7
CLR P1.6
CLR P1.3
CLR P1.7
LCALL GET_TEMPER
LCALL DISPLAY
TT2:MOV A, 29H
CLR C
CJNE A, 50H, JX
MOV A , 30H
CLR C
CJNE A, 51H, JIA1
AJMP YS2
JIA1:JC JX
MOV A, 51H
MOV 52H, A
ADD A, #2
16
MOV 52H, A
CLR C
MOV A, 30H
CJNE A, 52H, JIA2
JIA2:JNC JX
YS2:SETB P1.7
CLR P1.6
MOV R5, #20H
YS:LCALL GET_TEMPER
LCALL DISPLAY
DJNZ R5, YS
CLR P1.7
SETB P1.6
MOV R5, #20H
YS1:LCALL GET_TEMPER
LCALL DISPLAY
DJNZ R5, YS1
YS3:SETB P1.7
CLR P1.6
MOV R5, #20H
YS0:LCALL GET_TEMPER
LCALL DISPLAY
DJNZ R5, YS0
CLR P1.7
SETB P1.6
MOV R5, #20H
YS01:LCALL GET_TEMPER
LCALL DISPLAY
DJNZ R5, YS01
YS4:SETB P1.7
CLR P1.6
MOV R5, #20H
YS02:LCALL GET_TEMPER
LCALL DISPLAY
DJNZ R5, YS02
CLR P1.7
SETB P1.6
MOV R5, #20H
YS03:LCALL GET_TEMPER
LCALL DISPLAY
DJNZ R5, YS03
JX: MOV A, 29H
CJNE A, 31H, JX00
JX01:SETB P1.7
17
CLR C
AJMP LAST
JX00:JC JX01
CLR P1.7
CJNE A,
JX02:SETB P1.7
CLR C
AJMP LAST
JX03:JNC JX02
32H,
JX03
CLR P1.7
LAST:LCALL GET_TEMPER
LCALL DISPLAY
AJMP SS
;***************************常數表格區**** ******************************************
TAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8 H,80H ;0-8
DB 90H,88H,83H,0C6H,0A1H,86H,8EH,0FFH ,0CH ;9,A,B,C,D,E,F,滅,p.
TAB1:DB40H,79H,24H,30H,19H,12H,02H,78H,00H ,10H, ;0.--9.
TAB2:DB 0, 0, 1, 2, 3, 3, 4, 4, 5, 5, 6, 7, 8, 8, 9, 9, ;小數點
;*************************1ms 延時程序*************** *********************
;************************* ****中斷服務程序* *********************************
; 完成按鍵識別,鍵值求取,按鍵實時顯示 等功能;
;************************* **************** **********************************
PITO: PUSH ACC
PUSH PSW
SETB RS0
CLR RS1
SET B 00H
MAIN1: MOV R7 , #03H ;顯示位數為 2 位
MOV R0, #7AH
MOV 78H, #00H
MOV 79H, #00H
MOV 7AH, #00H
KK: LCALL DIR
LCALL KEY1
LOOP1:CJNE A, #11, LOOP2
AJMP LAST0
LOOP2:CJNE A, #12, LOOP3
LJMP LAST3
LOOP3: CJNE A, #10, L4
MOV A, #00H
L4: MOV @R0, A
LCALL DIR
DEC R0
DJNZ R7, KK
18
SETB 01H
LAST0:JNB 01H, KK
LOOP4:LCALL KEY1
CJNE A, #12, LOOP5
AJMP LAST3
LOOP5:CJNE A, #11, LOOP4
LAST1:LCALL DIR
LCALL MUN
LCALL JD
LCALL BIJIAO
LAST3:POP PSW
POP ACC
RETI
;******************精度控制 子程序********** ******
JD: PUSH ACC
PUSH PSW
CLR C
MOV A, 38H
MOV 50H, A
MOV A, 39H
MOV 51H, A
CJNE A, 29H, L001
L001:JC LAST02 ;設溫<實溫,則跳出
MOV A, 29H
MOV 41H, A
MOV A, 38H
CJNE A, #25, L002
L003:CLR C ;0 <T<25
SUBB A, 41H
CJNE A, #3, L004
L005:MOV A, 30H
ADD A, #5 ;0<T<25, 差值小於 3 度
DA A
JNB ACC.4, L0051
ANL A, #0FH
SETB C
L0051:MOV 39H, A
MOV A, 29H
ADDC A, #1
MOV 38H, A
AJMP LAST2
LAST02: AJMP LAST2
L004:JC L005
MOV A, 39H
19
SUBB A, #0
DA A
MOV 39H, A
JNC L0041
DEC 38H
L0041:MOV A, 38H
SUBB A, #2 ;0<T<25, 差值大 於 3 度
MOV 38H, A
AJMP LAST2
L002:JC L003
CJNE A, #50, L006
L007:CLR C ;25<T<5 0
SUBB A, 41H
CJNE A, #3, L008
L009:MOV A, 30H
ADD A, #1
DA A
JNB ACC.4, L0091
ANL A, #0FH
SETB C
L0091:MOV 39H, A
MOV A, 29H
ADDC A, #1
MOV 38H, A
AJMP LAST2
L008:JC L009
MOV A, 39H
SUBB A, #0
MOV 39H, A
MOV A, 38H
SUBB A, #2
MOV 38H, A
AJMP LAST2
L006:JC L007
CJNE A, #65, L010
L011:CLR C
SUBB A, 41H
CJNE A, #3, L012
L013:MOV A, 30H
ADD A, #2
JNB ACC.4, L00131
ANL A, #0FH
SETB C
L00131:MOV 39H, A
20
MOV A, 29H
ADDC A, #1
MOV 38H, A
AJMP LAST2
L012:JC L013
MOV A, 39H
SUBB A, #0
MOV 39H, A
MOV A, 38H
SUBB A, #2
MOV 38H, A
AJMP LAST2
L010:JC L011
CJNE A, #90, L016
L017:CLR C
SUBB A, 41H
CJNE A, #2, L014
L015:MOV A, 30H
ADD A, #0
JNB ACC.4, L00151
ANL A, #0FH
SETB C
L00151:MOV 39H, A
MOV A, 29H
ADDC A, #1
MOV 38H, A
AJMP LAST2
L014:JC L015
CLR C
MOV A, 38H
SUBB A, #1
MOV 38H, A
AJMP LAST2
L016:JC L017
LAST2:POP PSW
POP ACC
RET
;*******************************鍵掃描** ************************************
KEY1:LCALL KS1 ;鍵 掃描
JNZ LK1
LCALL DIR
AJMP KEY1
LK1:LCALL DIR
LCALL DIR
21
LCALL KS1
JNZ LK2
LCALL DIR
AJMP KEY1
LK2:MOV R2, #0FEH ;確定鍵值
MOV R4, #01H
MOV A, R2
LK4:MOV P0, A
NOP
MOV A, P0
JB ACC.3, LONE
MOV A, #00H
AJMP LKP
LONE:JB ACC.4 , LTWO
MOV A, #03H
AJMP LKP
LTWO:JB ACC.5, LTHR
MOV A, #06H
AJMP LKP
LTHR:JB ACC.6, NEXT5
MOV A, #09H
AJMP LKP
NEXT5:INC R4
MOV A, R2
JNB ACC.2 ,KND
RL A
MOV R2, A
AJMP LK4
KND:AJMP KEY1
LKP: ADD A, R4
PUSH ACC
LK3:LCALL DIR
LCALL KS1
JNZ LK3
POP ACC
RET
KS1: PUSH PSW
MOV P0, #78H
NOP
MOV A, P0 ;判斷有無鍵按下
CPL A
ANL A, #78H
POP PSW
22
RET
;*************求設置溫度的二 進制代碼,值保存在 38H 單元**************
MUN: PUSH PSW
MOV R0, #7AH ;求鍵值
MOV A, @R0
SWAP A
DEC R0
ADD A, @R0
MOV R1, A
ANL A, #0F0 H
SWAP A
MOV B, #10
MUL AB
MOV R2, A
MOV A, R1
ANL A, #0FH
ADD A, R2
MOV 38H, A
MOV R0, #78H
MOV 39H, @R0
POP PSW
RET
;*************比較實際溫度和設置溫度的大小 並設置相應的標志位***********
BIJIAO:MOV A, 29 H ;實際溫度
MOV 40H, A
❷ 單片機溫濕度感測器
ARN系統室外溫濕度感測器核心部分由一組高度集成的溫濕度感測器晶元組成,選用晶元均為全量程標定數字輸出的晶元。輕型百葉箱能防止太陽對儀器的直接輻射和地面對儀器的反射輻射,保護其內部儀器免受強風、雨、雪等的影響。並且其特殊的表面處理和結構設計,使儀器感應部分可適當的通風,能真正地感應外界空氣溫度和濕度、二氧化碳等環境因子的變化。本產品採用CMOSens專利技術,確保產品具有極高的可靠性與卓越的長期穩定性。感測器包括一個電容性聚合體濕度敏感元件和一個用能隙材料製成的溫度敏感元件,這兩個敏感元件與一個14位的A/D轉換器以及一個串列介面電路設計在同一個晶元上面。該感測器品質卓越、響應超快、抗干擾能力強、級高的性價比。每個感測器晶元都在極為精確的恆溫室中進行標定,以鏡面冷凝式露點儀為參照。通過標定得到的校準系數以程序形式儲存在晶元本身的OTP內存中。通過兩線制的串列介面與內部的電壓調整,使外圍系統集成變得快速而簡單。
二、適用范圍
本廣泛應用於農業、林業、氣象環境、倉儲、溫室、環境保護、
氣象站、船舶、碼頭等溫度、濕度的測量。
2
三、技術參數
�供電電壓:24V
�工作環境:-40~+75℃
�空氣溫度
�溫度范圍:-30℃-70℃
�溫度精度: ±0.3℃
�輸出范圍: 4-20mA
�負載能力: <=250歐
�空氣濕度
�濕度范圍:0-100%RH
�濕度精度:4%RH
�輸出范圍: 4-20mA
�負載能力: <=250歐
�防護等級:IP54
�規格尺寸:外總高290mm(絲桿總長度)、外高265mm(頂部至
百色柱端總長度)、內徑:Φ42mm、外徑Φ140mm
�材料:高科技優質抗紫外線材料製成
�顏色:白色
四、功能特點
該產品自投入市場以來,以其優異的質量,卓越的性能贏得廣大
用戶的好評,具備以下特點:
1.體積小、重量輕、安裝方便。
3
2.輕型百葉箱(防輻射罩)完全符合WMO標准,標准19層高
度、帶托架支板。
3.採用高科技優質抗紫外線材料製成,可有效阻擋自然條件下
的紫外線照射,防止儀器儀表在野外惡劣的條件下快速老化。
4.可減小因光線強烈造成的測量誤差。
5.測量精度高,性能可靠,確保正常工作。
6.響應速度快,數據傳輸效率高。
五、線色說明
紅線: 電源正極
白線:空氣溫度信號輸出
綠線:空氣濕度信號輸出
黑線:電源負極
六、測量方法
空氣溫度=(電流值-4mA)/(20-4)*100-30
空氣濕度=(電流值-4mA)/(20-4)*100
❸ 如何用單片機做一個自動加熱控制系統
單片機+溫度感測器+加熱裝置。
溫度感測器提供溫度值給單片機,然後單片機控制加熱裝置。
設定個溫度值,高了停止加熱,低了加熱。
如果真要做,還要考慮保溫,風扇,乾燥等功能。。
再或者直接使用溫控儀成品,更簡單。
❹ 用單片機做了一個溫度記錄儀,數據記錄的很奇怪,懸賞100解決
先別急,錯誤是有,但不離譜。
你發現沒?錯誤是有規律的,就是把溫度個位(Dec)+溫度十分位發到下一行了,就是說數據串位而且有丟失。我有點不明白你怎麼用VB讀的數據,串口通信嗎?你這樣,不去發送存儲的數據,就發固定數據,就大概能發現問題所在。
❺ 基於單片機的溫濕度記錄儀設計
建議你用一個
溫度感測器
和一個
濕度感測器
,最好是
數字輸出
的(模擬的還得
AD轉換
),至於報警部分那就很簡單的了!你可以說得更詳細些我可以幫你做一個(一切基於實物~~)
❻ 51單片機溫度記錄器程序求助
沒有貼出程序來,有求助別人也幫不了你的。
❼ 能用一個單片機設計一個程序控溫裝置嗎
1 系統的組成和工作原理
多功能溫度控制系統的結構如圖1所示,系統由六部分組成:控制核心部分、溫度數據採集部分、加熱裝置控制部分、液晶顯示部分、按鍵輸入部分和報警提示部 分。單片機啟動溫度採集電路完成溫度的一次轉換,然後讀出轉換後的數字量並轉化成當前的溫度呈現在顯示模塊中,並將當前的溫度與通過按鍵輸入電路設定的保 持恆溫度數進行比較,以實現溫度的控制。還可以通過按鍵設置溫度的上下限值以實現超溫或低溫報警提示功能。本系統的設計目標要對溫度的控制精度達到 0.1℃。
1.1 報警電路
報警電路採用蜂鳴器作為發聲裝置,當溫度高於設定的上限值或低於下限值,給蜂鳴器送周期為1s,占空比為50%的方波,報警的時間可以持續1分鍾或等待按 鍵解除報警,這由軟體控制實現。
1.2 按鍵電路
採用2×3的小鍵盤,鍵盤的識別可以採用兩種方法:行掃描法和行反轉法。兩種方法都要注意消除按鍵的抖動。文中採用行掃描法並做成子程序,出口參數為按鍵 的鍵值。定義鍵K1設置TH,K2設置TL,K3調高TH或TL,K4調低TH或TL,K5對TH或TL的數值進行確認。
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位符號位),由配置寄存器決定具體位數,配置寄存器的格式如表1所示。
其中RlR0是用來設定解析度的,解析度的定義如表2所示。
由表2可以看出,解析度設定得越高,溫度轉換所需要的時間就越長,因此應根據實際應用的需要來選擇合適的解析度。本文中選取12位解析度,每隔1秒檢測一 次溫度。12位解析度的溫度數據值格式如下:
當S=0表示測得的溫度為正值,當S=l表示測得的溫度為負值。
1.3.1 DSl8820的存儲器結構
DSl8820的存儲器有高速暫存RAM和非易失性電擦寫EEPROM。高速暫存RAM的內容從低位元組到高位元組9個位元組依次為:溫度LSB、溫度MSB、 高溫限值位元組TH、低溫限值位元組TL、配置寄存器、保留、保留、保留,最後一個位元組是前8個位元組的CRC碼。EEPROM用來存儲TH和TL。
1.3.2 溫度數據的處理方法
從DSl8820讀出的兩個位元組的二進制值溫度必須先轉換成十進制數值,然後才能將其ASCII碼送往LCDl602顯示。12位的解析度,溫度是以 0.0625步進的,由於兩個位元組的溫度採用補碼表示,所以先判斷讀出溫度的最高位是0還是1,即判斷是正溫還是負溫,然後對其求補碼轉化成正溫,之後將 高位元組的低4位和低位元組的高4位組成一個位元組,這個位元組的二進制值不斷除以10得出的余數即為溫度值的個、十、百位值。若讀出的溫度數值是負數,顯示處理 時,在溫度數的前面人為顯示負號即可。對小數部分的溫度只需將低位元組的低4位乘以0.0625,然後對乘積取其小數點後的一位數即可。
1.3.3 DSl8820的控制步驟
(1)首先對DSl8820進行復位。由單片機將數據線DQ拉至低電平480-960 μs,然後將DQ拉高15-60 μs,以便單片機檢測到DSl8820送來的低電平響應。然後檢測DQ,若DQ仍然為高電平,則復位操作失敗,可採用循環的方式再次對其進行復位;若DQ 為低電平,則復位操作成功。
(2)DSl8820的ROM操作命令。DSl8820復位後,主機可以發器件ROM的操作命令如讀ROM[33H]、匹配ROM[55H]、跳過 ROM[0CCH],報警搜索[4EH]等。在單點匯流排的情況下,可發跳過ROM[0CCH]操作命令,以節省時間。另外,文中有報警的功能,溫度轉換後 還需要發報警搜索命令,該命令會將最近一次測得的溫度值T與高速RAM中的TH或TL作比較,若T>TH或T<TL,則該器件內的報警標志位 置位,並對主機發出的報警搜索命令作出響應。
(3)DSl8820的存儲器操作命令。如啟動溫度轉換命令[44H],寫入命令[4EH](寫入該命令後,緊接著要寫入報警上限TH,報警下限TL及配 置寄存器位元組),讀暫存器RAM的內容命令[0BEH](讀取將從第一個位元組開始一直到第9個位元組結束,如僅需要部分位元組,主機可以在合適的時刻發復位命 令來終止讀取)及復制命令[48H](把暫存器RAM的第2、3、4位元組轉存到DSl8820的EEROM中)等。
(4)DSl8820的ROM或RAM操作的匯流排讀寫時序。對於讀時序,首先將DQ拉低並延時1-15μs以內(延時時間不能太長),然後將DQ拉高並延 時幾個μs後再讀取DQ的值,讀完一位後需要延時45 μs以上才能讀取下一位;對於寫時序,先將DQ拉低10-15μs,接著向匯流排寫入數據並延時50μs以上,最後將DQ拉高1μs以上再進行下一位的寫 入。
1.4 液晶顯示模塊
採用的是長沙太陽人電子有限公司生產的SMCl602A。
1.4.1 主要技術參數
晶元的工作電壓4.5~5.5V,能顯示兩行,每行顯示16個字元,字元的大小為2.95×4.35mm。
1.4.2 介面信號說明
除電壓、背光引腳及8個I/O引腳外,主要的控制引腳還有數據/命令選擇RS引腳,該引腳為高電平時表示I/O引腳出現的是數據,該引腳為低電平時表示 I/O引腳出現的是命令;讀/寫選擇引腳及使能引腳E(該引腳為高電平時對SMCl602A的操作才有效)。
1.4.3 指令說明
(1)初始化設置
a.顯示模式設置。指令碼:00111000b,用於設置16×2顯示,5×7點陣。
b.顯示開/關及游標設置。二進制指令碼:00000DCB中D位用來控制顯示開或關,C位用來控制顯示游標,B位控制游標是否閃爍。二進制指令 碼:000001NS中N位控制讀寫一個數據後地址指針和游標加或減1,S位控制字元的移動。
c.數據指針設置。指令碼:80H+地址碼(0-27H,40H-67H)用於設置數據指針。
(2)其他設置。如指令碼01H:顯示清屏且數據指針清零。
1.4.4 LCDl602的初始化步驟
(1)延時15ms,寫指令38H(不檢測忙信號);
(2)延時5ms,寫指令38H(不檢測忙信號),上述過程執行兩遍,後面的過程每次寫指令、讀/寫數據之前均需要檢測忙信號;
(3)寫指令38H:顯示模式設置;
(4)寫指令08H:關閉顯示;
(5)寫指令0lH:清屏且數據指針清零;
(6)寫指令06H:字元不移動,游標和指針加1;
(7)寫指令0FH:顯示開,游標閃爍。
1.5 恆溫保持控制模塊
選用6V固態繼電器作為開關器件,通過控制其斷與通的時序從而控制加熱器件的工作時長,以實現樣品的恆溫保持功能。
2 系統硬體電路的設計
該系統的主要電路原理圖如圖2所示。系統中使用USB口提供5V電源的電路;使用RS232串口通過P3.0和P3.1燒寫程序的電路;以及使用繼電器控 制的恆溫保持電路等在原理圖中並未畫出。
3 系統的軟體設計
系統總的流程圖如圖3所示。系統程序主要有主程序和LCDl602初始化子程序及讀寫時序子程序、DSl8820復位及讀寫時序子程序、鍵盤掃描子程序、 溫度數據處理子程序等構成。
4 程序的編輯及調試
編程語言可以採用匯編語言,也可以採用C51語言。本文採用匯編語言,使用Keil C軟體新建一個工程,然後新建一個文件輸入源程序並保存成.asm格式,並將該源文件添加到剛剛新建的工程,隨後編譯鏈接後生成十六進制文件 (.HEX),最後使用燒寫軟體stc-isp-v3.9l通過RS232串口將十六進制文件燒寫進單片機的Flash中運行程序即可。
5 結論
本文設計的多功能溫度控制器體積小、功耗低、可靠性高,實驗表明,對溫度的控制精度達到了0.1℃的設計目標。
❽ 單片機的無線溫度監控系統:1、本課題的目的及研究意義 2.本課題的國內外的研究現狀 這2條怎麼寫啊急急
一、論文選題的目的和意義
溫度控制器是對用冷部位(如空調室、冷凍水、庫溫等)的溫度及其波動范圍進行控制的電開關。根據製冷裝置的大小和供冷方式的不同,溫度繼電器電路的電控對象亦不同。例如,對小型製冷裝置(如空調器、冷飲水機、電冰箱)溫度控制器可以根據設定溫度直接控制壓縮機電機的停開
二、國內外關於該論題的研究現狀和發展趨勢
國外對溫度控制技術研究較早,始於20世紀70年代。先是採用模擬式的組合儀表,採集現場信息並進行指示、記錄和控制。80年代末出現了分布式控制系統。目前正開發和研製計算機數據採集控制系統的多因子綜合控制系統。現在世界各國的溫度測控技術發展很快,一些國家在實現自動化的基礎上正向著完全自動化、無人化的方向發展。
我國對於溫度測控技術的研究較晚,始於20世紀80年代。我國工程技術人員在吸收發達國家溫度測控技術的基礎上,才掌握了溫度室內微機控制技術,該技術僅限於對溫度的單項環境因子的控制。我國溫度測控設施計算機應用,在總體上正從消化吸收、簡單應用階段向實用化、綜合性應用階段過渡和發展。在技術上,以單片機控制的單參數單迴路系統居多,尚無真正意義上的多參數綜合控制系統,與發達國家相比,存在較大差距。我國溫度測量控制現狀還遠遠沒有達到工廠化的程度,生產實際中仍然有許多問題困擾著我們,存在著裝備配套能力差,產業化程度低,環境控制水平落後,軟硬體資源不能共享和可靠性差等缺點。
❾ 51單片機溫度報警器原理圖和程序有嗎
這個是自動控制溫度的一個例子,溫度降低到一定程度就啟動加熱。
//溫度感測器:DS18B20
//顯示方式:LED
#include <reg51.h>
#define uchar unsigned char
sbit keyup=P1^0;
sbit keydn=P1^1;
sbit keymd=P1^2;
sbit out=P3^7;//接控制繼電器
sbit DQ = P3^4;//接溫度感測器18B20
uchar t[2],number=0,*pt;//溫度值
uchar TempBuffer1[4]={0,0,0,0};
uchar Tmax=18,Tmin=8;
uchar distab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff,0xfe,0xf7};
uchar dismod=0,xiaodou1=0,xiaodou2=0,currtemp;
bit flag;
void t0isr() interrupt 1
{
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
switch(number)
{
case 0:
P2=0x08;
P0=distab[TempBuffer1[0]];
break;
case 1:
P2=0x04;
P0=distab[TempBuffer1[1]];
break;
case 2:
P2=0x02;
P0=distab[TempBuffer1[2]]&0x7f;
break;
case 3:
P2=0x01;
P0=distab[TempBuffer1[3]];
break;
default:
break;
}
number++;
if(number>3)number=0;
}
void delay_18B20(unsigned int i)
{
while(i--);
}
/**********ds18b20初始化函數**********************/
void Init_DS18B20(void)
{
bit x=0;
do{
DQ=1;
delay_18B20(8);
DQ = 0; //單片機將DQ拉低
delay_18B20(90); //精確延時 大於 480us
DQ = 1; //拉高匯流排
delay_18B20(14);
x=DQ; //稍做延時後 如果x=0則初始化成功 x=1則初始化失敗,繼續初始化
}while(x);
delay_18B20(20);
}
/***********ds18b20讀一個位元組**************/
unsigned char ReadOneChar(void)
{
unsigned char i=0;
unsigned char dat = 0;
for (i=8;i>0;i--)
{
DQ = 0; // 給脈沖信號
dat>>=1;
DQ = 1; // 給脈沖信號
if(DQ)
dat|=0x80;
delay_18B20(4);
}
return(dat);
}
/*************ds18b20寫一個位元組****************/
void WriteOneChar(unsigned char dat)
{
unsigned char i=0;
for (i=8; i>0; i--)
{
DQ = 0;
DQ = dat&0x01;
delay_18B20(5);
DQ = 1;
dat>>=1;
}
}
/**************讀取ds18b20當前溫度************/
unsigned char *ReadTemperature(unsigned char rs)
{
unsigned char tt[2];
delay_18B20(80);
Init_DS18B20();
WriteOneChar(0xCC); //跳過讀序號列號的操作
WriteOneChar(0x44); //啟動溫度轉換
delay_18B20(80);
Init_DS18B20();
WriteOneChar(0xCC); //跳過讀序號列號的操作
WriteOneChar(0xBE); //讀取溫度寄存器等(共可讀9個寄存器)前兩個就是溫度
tt[0]=ReadOneChar(); //讀取溫度值低位
tt[1]=ReadOneChar(); //讀取溫度值高位
return(tt);
}
void covert1(void)//將溫度轉換為LED顯示的數據
{
uchar x=0x00,y=0x00;
t[0]=*pt;
pt++;
t[1]=*pt;
if(t[1]&0x080) //判斷正負溫度
{
TempBuffer1[0]=0x0c; //c代表負
t[1]=~t[1]; /*下面幾句把負數的補碼*/
t[0]=~t[0]; /*換算成絕對值*********/
x=t[0]+1;
t[0]=x;
if(x==0x00)t[1]++;
}
else TempBuffer1[0]=0x0a;//A代表正
t[1]<<=4;//將高位元組左移4位
t[1]=t[1]&0xf0;
x=t[0];//將t[0]暫存到X,因為取小數部分還要用到它
x>>=4;//右移4位
x=x&0x0f;//和前面兩句就是取出t[0]的高四位
y=t[1]|x;//將高低位元組的有效值的整數部分拼成一個位元組
TempBuffer1[1]=(y%100)/10;
TempBuffer1[2]=(y%100)%10;
t[0]=t[0]&0x0f;//小數部分
TempBuffer1[3]=t[0]*10/16;
//以下程序段消去隨機誤檢查造成的誤判,只有連續12次檢測到溫度超出限制才切換加熱裝置
if(currtemp>Tmin)xiaodou1=0;
if(y<Tmin)
{
xiaodou1++;
currtemp=y;
xiaodou2=0;
}
if(xiaodou1>12)
{
out=0;
flag=1;
xiaodou1=0;
}
if(currtemp<Tmax)xiaodou2=0;
if(y>Tmax)
{
xiaodou2++;
currtemp=y;
xiaodou1=0;
}
if(xiaodou2>12)
{
out=1;
flag=0;
xiaodou2=0;
}
out=flag;
}
void convert(char tmp)
{
uchar a;
if(tmp<0)
{
TempBuffer1[0]=0x0c;
a=~tmp+1;
}
else
{
TempBuffer1[0]=0x0a;
a=tmp;
}
TempBuffer1[1]=(a%100)/10;
TempBuffer1[2]=(a%100)%10;
}
void keyscan( )
{
uchar keyin;
keyin=P1&0x07;
if(keyin==0x07)return;
else if(keymd==0)
{
dismod++;
dismod%=3;
while(keymd==0);
switch(dismod)
{
case 1:
convert(Tmax);
TempBuffer1[3]=0x11;
break;
case 2:
convert(Tmin);
TempBuffer1[3]=0x12;
break;
default:
break;
}
}
else if((keyup==0)&&(dismod==1))
{
Tmax++;
convert(Tmax);
while(keyup==0);
}
else if((keydn==0)&&(dismod==1))
{
Tmax--;
convert(Tmax);
while(keydn==0);
}
else if((keyup==0)&&(dismod==2))
{
Tmin++;
convert(Tmin);
while(keyup==0);
}
else if((keydn==0)&&(dismod==2))
{
Tmin--;
convert(Tmin);
while(keydn==0);
}
xiaodou1=0;
xiaodou2=0;
}
main()
{
TMOD=0x01;
TH0=(65536-5000)/256;
TL0=(65536-5000)%256;
TR0=1;
ET0=1;
EA=1;
out=1;
flag=0;
ReadTemperature(0x3f);
delay_18B20(50000);//延時等待18B20數據穩定
while(1)
{
pt=ReadTemperature(0x7f); //讀取溫度,溫度值存放在一個兩個位元組的數組中
if(dismod==0)covert1();
keyscan();
delay_18B20(30000);
}
}