找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 82102|回復: 44
收起左側

基于PID的單片機溫度控制系統設計論文

  [復制鏈接]
ID:341661 發(fā)表于 2018-5-30 21:00 | 顯示全部樓層 |閱讀模式

畢業(yè)設計

題  目:   基于PID的溫度控制系統設計   

學  院:         ********      

�! I(yè):     電氣工程及其自動化    

班  級:          電氣***       

學  號:       **********      

姓  名:         某某某      

指導教師:           某某某       

教 務 處 制

                      年 月 日

1

基于PID的溫度控制系統設計

摘要

溫度是工業(yè)上最基本的參數,與人們的生活緊密相關,實時測量溫度在工業(yè)生產中越來越受到重視,離不開溫度測量所帶來的好處,因此研究控制和測量溫度具有及其重要的意義。

本設計介紹了以AT89C52單片機為主控器件,基于PID的溫度控制系統的設計方案和設計的基本原理。由DS18B20收集溫度信號,并以數字信號的方式送給單片機進行處理,從而達到溫度控制的目標。主要包括硬件電路的設計和系統程序的設計。硬件電路由主控器件、溫測電路、溫控電路和顯示電路等組成。軟件設計部分包括:顯示電路、溫度信號處理,超溫警報、繼電器控制、按鍵處理等程序。


目錄

摘  要

Abstract

1緒論

1.1課題的來源

1.2課題的意義

1.3課題研究的主要內容

2硬件設計

2.1單片機控制模塊的設計

2.1.1 AT89C52單片機簡介

2.1.2 單片機的引腳功能

2.1.3 單片機控制模塊的電路設計

2.1.4 電源設計

2.2溫度采集模塊的設計

2.2.1 DS18B20芯片的簡介

2.2.2 DS18B20的內部結構

2.2.3 DS18B20的供電方式

2.2.4 DS18B20的引腳功能

2.3溫度控制模塊的設計

2.4按鍵及顯示模塊的設計

2.4.1 LCD1602的參數和引腳功能

2.4.2 LCD1602的特點

2.4.3 按鍵電路的設計

2.5報警模塊的設計

3軟件設計

3.1主程序的設計

3.2DS18B20讀溫度程序的設計

3.3鍵盤掃描程序的設計

3.4報警處理程序的設計

3.5PID控制算法

4系統仿真

參考文獻

致謝

附錄

1



基于PID的溫度控制系統設計

1緒論1.1課題的來源
在食品加工、化工、冶煉等工業(yè)控制和生產中,在工業(yè)生產和日常生活中經常要用到溫度檢測和控制。以及各種各樣的加熱爐、熱處理器等,都對溫度有著嚴格的要求。傳統的測溫元件有熱電偶和熱電阻。而熱電偶和熱電阻測出的通常是電壓,再轉換成相應的溫度值,在硬件方面是個難點,而且從設計和調試的角度來講都是很復雜的,以及高昂的制作成本。但采用DS18B20作為溫測元件,然后用單片機對溫度進行控制,可以大幅度提高溫度控制的技術指標,而且還具有控制方便、簡單、靈活等特點。單片機已經滲透到我們生活的各領域,儀表儀器、家用電器、航空航天、計算機通訊網絡和數據的傳輸,包括工業(yè)自動化的實時控制和數據處理等,這些都離不開單片機。用單片機可構成豐富多樣的數據采集系統和控制系統。像工廠流水線智能化的管理、電梯智能化的控制、多種報警系統,都可以與計算機聯網構成二級控制系統等。
1.2課題的意義
溫度傳感器是測量溫度的關鍵,現在溫度傳感器正由模擬式向數字式、集成化向智能化、網絡化的方向發(fā)展。在測量溫度的電路中,使用熱敏電阻之類的器件利用其感溫效應,將隨被測溫度變化的電壓或電流采集過來,先進行A/D轉換,然后用單片機進行數據的處理,再在顯示電路上,將被測溫度顯示出來。這種設計需要用到A/D轉換電路,因此電路的設計比較復雜。
繼而想到可以采用智能溫度傳感器來設計數字溫度計。本數字溫度計的設計采用美國半導體公司DALLAS推出的一種改進型智能溫度傳感器DS18B20作為檢測元件,其溫度值可以直接被讀出來,通過單片機AT89C52的讀寫和顯示,然后用LCD1602來進行顯示。它的測溫范圍為-55℃~+125℃,最大分辨率可達0.0625℃。而且采用3線制與單片機相連,減少了外部的硬件電路,具有低成本和易使用的特點。
1.3課題研究的主要內容
1、總體設計的內容
總體設計的主要內容有:利用單片機作為系統的主控制器,利用DS18B20作為溫度傳感器,將信號送入單片機進行處理,經過PID算法后,單片機的輸出用來控制加熱棒的輸出功率,從而實現對溫度的控制。
2、總體設計的基本要求
總體布置的基本要求主要有:
(1)溫度控制系統的總體設計和思路;
(2)各部分原理說明;
(3)溫度控制系統硬件設計,有理論依據,有分析計算過程,主要元件有原理和說明,所有元件必須要有型號和參數;
(4)溫度控制系統軟件設計,可以使用匯編語言或C語言編程。主要軟件必須能在設計好的硬件電路上正確運行。

2硬件設計
硬件設計方框圖如圖2-1所示,它主要由五個模塊組成:
  • 單片機控制模塊;
  • 溫度采集模塊;
  • 溫度控制模塊;
  • 按鍵及顯示模塊;
  • 報警模塊。

圖2-1 硬件設計方框圖

2.1單片機控制模塊的設計
方案一:
采用8031芯片,其內部沒有程序存儲器,需要進行外部擴展,這給電路增加了復雜度。
方案二:
采用2051芯片,其內部有2KB單元的程序存儲器,不需外部擴展程序存儲器。但由于系統用到較多的I/O口,因此此芯片資源不夠用。
方案三:
采用AT89C52單片機,其內部有4KB單元的程序存儲器,不需外部擴展程序存儲器,而且它的I/O口也足夠本次設計的要求。
方案評價:
比較這三種方案,綜合考慮單片機的各部分資源,本次設計選用方案三。
2.1.1 AT89C52單片機簡介
AT89C52是ATMEL公司生產的51系列單片機。片內含8k bytes的可反復擦寫的Flash只讀程序存儲器和256 bytes的隨機存取數據存儲器(RAM),器件采用ATMEL公司的高密度,兼容51指令系統,Flash存儲單元和8位中央處理器置于片內,AT89C52單片機功能強大,在許多復雜的應用場合都可以用到。
單片機是微型機的一個分支,單片機的最大特點就是在超大規(guī)模的集成電路芯片上集成了定時器、存儲器、CPU、和多種輸入/輸出接口電路。由于單片機的這種結構,相應的它具有很多的特點。
它的特點包括:
  • 可靠性高;
  • 抗干擾能力強;
  • 控制能力強;
  • 性價比高;
  • 低電壓;
  • 能擴展了多種串行口。
2.1.2 單片機的引腳功能
AT89C52單片機的引腳圖如圖2-2所示。

圖2-2 AT89C52引腳圖

  • 電源引腳VCCVSS
VCC(40引腳):電源端,+5V。
VSS(20引腳):接地端。
  • 外接晶體引腳XTAL 2XTAL 1
XTAL 2(18引腳):接微調電容和外部晶體的端口。作為振蕩電路的輸出端。
XTAL 1(19引腳):接微調電容和外部晶體的端口。作為振蕩電路的輸入端。
  • 控制信號引腳RST、ALE、PSENEA
RST(9引腳):復位信號輸入端,高電平有效。完成復位操作,輸入端必須為兩機器周期(即為24個時鐘振蕩周期)的高電平。
ALE/PROG(30引腳):地址鎖存允許信號端。當單片機上電正常工作后,ALE引腳不斷向外輸出正脈沖信號,此頻率為振蕩器平率的1/6。輸出信號作為鎖存低8位地址的控制信號。如果想確認單片機芯片的好壞,可用示波器查看ALE端是否有脈沖信號輸出。若有脈沖信號輸出,則單片機基本上是好的。
PSEN(29引腳):程序存儲允許輸出信號端。
EA(31引腳):外部程序存儲器地址允許輸入端/固化編程電壓輸入端。
  • 輸入/輸出端口P0、P1P2P3
P0端口(P0.0~P0.7,39~32引腳)
P1端口(P1.0~P1.7)
P2端口(P2.0~P2.7)
P3端口(P3.0~P3.7)
P3端口還用于一些復用功能,如表2-1所示。

表2-1 P3各口線與第2功能表

口線

替代的第2功能

P3.0

RXD(串行口輸入)

P3.1

TXD(串行口輸出)

P3.2

INT0(外部中斷0輸入)

P3.3

INT1(外部中斷1輸入)

P3.4

T0(定時器0的外部輸入)

P3.5

T1(定時器1的外部輸入)

P3.6

WR(片外數據存儲器“寫選通控制”輸出)

P3.7

RD(片外數據存儲器“讀選通控制”輸出)



2.1.3 單片機控制模塊的電路設計
單片機的最小系統如圖2-3所示,由單片機芯片、電源、時鐘振蕩電路與復位電路組成。
時鐘振蕩電路的設計:
單片機XIAL1和XIAL2分別接30pF的電容,中間再并個12MHz的晶振,形成單片機的晶振電路。電容器C1和C2可穩(wěn)定頻率并對振蕩頻率有微調作用。
復位電路的設計:
復位操作有按鍵手動復位和上電自動復位兩種。本設計采用的是上電自動復位:RST引腳是復位信號的輸入端。復位信號是高電平有效,其有效時間應持續(xù)24個振蕩周期(即二個機器周期)以上。電容端瞬間通電,電容C通過電阻R充電,RST端為正脈沖,用以復位。只要電源VCC的上升時間不超過1ms,就可以實現自動上電復位,即接通電源就完成了系統的復位初始化。關于參數的選定,在振蕩穩(wěn)定后應保證復位高電平持續(xù)時間(即正脈沖寬度)大于2個機器周期。當采用的晶體頻率為6MHz時,可取C=22μF,R=1kΩ;當采用的晶體頻率為12MHz時,可取C=10μF,R=8.2kΩ。

圖2-3 單片機的最小系統圖

2.1.4 電源設計
220V交流電轉5V直流電的電源設計如圖2-4所示是由3個部分組成:變壓器、橋式整流電路和三端穩(wěn)壓器。

圖2-4 5V直流電電源設計圖

  • 變壓器:將220V交流電變成9V左右,由此可知變壓器變比為220/9=25/1
  • 橋式整流電路:經過濾波整流后,電壓有效值增大為10V。如圖2-5所示為橋式整流電路電壓波形圖;
  • 三端穩(wěn)壓器:一般用于直流電路的保護電路,起到降壓、穩(wěn)壓的作用。

圖2-5 橋式整流電路電壓波形圖

2.2溫度采集模塊的設計
方案一:
傳統的測溫元件有熱電偶和熱電阻。一般來說熱電偶和熱電阻測出的電壓,再轉換成相應的溫度,要比較多外部硬件的支持,其缺點有:硬件電路較復雜;軟件調試較復雜;制作成本較高。
方案二:
結合單片機電路的設計,決定使用溫度傳感器DS18B20,它是最新推出的一種智能型溫度傳感器,它的優(yōu)點是可以直接讀出被測的溫度。主要是對溫度信號進行采集和轉換工作,電路由DS18B20溫度傳感器和單片機部分組成。溫度傳感器DS18B20把收集到的溫度送到單片機的P2.6口,單片機接受溫度,然后存儲下來。因為電路部分只用到了溫度傳感器和單片機,所以硬件方面比較簡單。
方案評價:
方案一這種設計需要用到A/D轉換電路,感溫電路比較麻煩。但方案二電路比較簡單,軟件設計容易實現,故實際設計中擬采用方案二。
2.2.1 DS18B20芯片的簡介
DS18B20是美國著名半導體公司推出的一種可以直接讀出被測溫度值的溫度傳感器,而且采用寄生供電方式與單片機相連,具有成本低和易使用的特點。輸出信號為數字信號,方便單片機控制和處理,很多外圍電路因此可以減掉。且該芯片的線形較好,物理、化學性也相對穩(wěn)定,在工業(yè)生產中可以用來做測量溫度的元件。由于AT89C52能夠帶多個DSB1820,因此容易實現多點測量的目的。輕松的構建傳感器網絡,并且單片機可以同時進行數碼顯示與鍵盤控制,也可以通過RS232串口與上位機進行數據通訊,達到全方位立體監(jiān)控的效果。
采用溫度芯片DS18B20測量溫度,可以更方便的實現多點測溫,也體現了數據數字化的好處,便于測溫數據集成顯示,也方便了后期對數據的處理及其記錄。
2.2.2 DS18B20的內部結構
DS18B20芯片的內部結構如圖2-6所示。
DS18B20主要包括上下限觸發(fā)器、儲存器與控制邏輯、CRC發(fā)生器電源、溫度傳感器、64位ROM單線借口暫存器。

圖2-6 DS18B20芯片的內部結構圖

DS18B20溫度數字對應關系表如表2-2所示。

表2-2 DS18B20溫度數字對應關系表

溫度/℃
二進制表示
十六進制表示
+125
0000 0111 1101 0000
07D0H
+85
0000 0101 0101 0000
0550H
+25.0625
0000 0001 1001 0000
0191H
+10.125
0000 0000 1010 0001
00A2H
+0.5
0000 0000 0000 0010
0008H
0
0000 0000 0000 1000
0000H
-0.5
1111 1111 1111 0000
FFF8H


DS18B20溫度值格式表如表2-3所示。

表2-3 DS18B20溫度值格式表

高字節(jié)

15

14

13

12

11

10

9

8

S

S

S

S

S

2 6

2 5

2 4

1/0

1/0

1/0

1/0

1/0

64

32

16

低字節(jié)

7

6

5

4

3

2

1

0

2 3

2 2

2 1

2 0

2_1

2_2

2_3

2_4

8

4

2

1

0.5

0.25

0.125

0.0625



DS18B20的工作過程:
  • 發(fā)復位DS18B20的負脈沖;
  • DS18B20的回應脈沖;
  • 發(fā)ROM命令33H;
  • 發(fā)儲存和控制命令。
DS18B20儲存控制命令共有6種,如表2-4所示。

表2-4 DS18B20 存儲器控制指令

指令

約定代碼

復制

48H

讀數據

BEH

讀電源供電方式

B4H

溫度轉換

44H

讀EERAM

B8H

寫數據

4EH


主機操作ROM的命令有5種,如表2-5所示。

表2-5 DS18B20的ROM指令

指令

約定代碼

讀ROM

33H

匹配ROM

55H

跳過ROM

CCH

搜索ROM

0F0H

報警搜索

ECH


DS18B20的執(zhí)行序列:
  • 初始化;
  • 執(zhí)行ROM命令,用于定位;
  • 執(zhí)行DS18B20的儲存控制命令,用于轉換和讀數據;
  • DS18B20I/O信號有回應脈沖、復位脈沖、寫0,讀0,寫1,讀1等幾種。
2.2.3 DS18B20的供電方式
在硬件上,DS18B20與單片機的連接有兩種方法,一種是用寄生電源供電,此時,VCC、GND接地,I/O接單片機I/O;另外一種是VCC接外部電源,GND接地,I/O與單片機的I/O線相連。無論是內部寄生電源還是外部供電,I/O口線要接5kΩ左右的上拉電阻。如圖2-7所示,本設計采用的是外部電源供電的方式,且選用的上拉電阻為4.7kΩ。

圖2-7 DS18B20外部電源供電方式圖

2.2.4 DS18B20的引腳功能
引腳功能說明:
  • GND為地;
  • I/O是數據輸入/輸出腳(單線接口,可作寄生供電);
  • UDD為外接供電電源輸入端(在寄生電源接線方式時接地)。
DS28B20的引腳如圖2-8所示。

圖2-8 DS18B20引腳圖

DS18B20的特點說明:
  • 采用單總線技術,與單片機通信只需要一根I/O線,在一根線上可以掛接多個DS18B20
  • 每只DS18B20具有一個獨有的,不可修改的64位序列號,根據序列號訪問相應的器件。
  • 低壓供電,電源范圍從3.05.5V,可以本地供電,也可以直接從數據線竊取電源(寄生電源方式)。
  • 測溫范圍為-55℃~+125,在-10℃~+85范圍內誤差為±0.5。
  • 可編輯數據為912位,轉換12位溫度時間為750ms(最大)。
  • 用戶可自設定報警上下限溫度。
  • 報警搜索命令可識別和尋址超過程序限定溫度(溫度報警條件)的器件。
  • DS18B20的分辨率由用戶通過EEPROM設置為912位。
  • DS18B20可將檢測到溫度值直接轉化為數字量,并通過串行通信的方式與主控制器進行數據通信。
  • 負電壓特性,電源極性接反時,溫度計不會因為發(fā)熱而燒毀,只是不能正常工作。
2.3溫度控制模塊的設計
方案一:
繼電器由于是機械動作,響應速度慢,不能滿足本設計的需要。而用可控硅可以在電路中能夠實現以小電流控制大電流、交流電的無觸點控制的目的,而且它的壽命長、可靠性高、動作快。
方案二:
利用單片機控制雙向可控硅的導通角。在不同時刻利用單片機給雙向可控硅的控制端發(fā)出觸發(fā)信號,使其導通或關斷,實現負載電壓有效值的不同,以達到調壓控制的目的。具體如下:
(1)由硬件完成過零觸發(fā)環(huán)節(jié),即在工頻電壓下,每10ms進行一次過零觸發(fā)信號,由此信號來達到與單片機的同步。
(2)過零檢測信號接至單片機輸入口,由單片機對此口進行循環(huán)檢測,然后進行延時觸發(fā)。
通過單片機控制雙向可控硅的導通,從而可以控制加熱絲的加熱功率。雙向可控硅接通,則加熱絲加熱;雙向可控硅斷開,則加熱絲停止加熱。
方案評價:
綜合考慮,選擇方案二。
由于是弱電控制強電,因而弱電很容易被強電干擾,影響系統的實時性和效率。因此必須需要有抗干擾的措施,將強電與弱電隔離。光耦合器切斷了各部件之間的聯系,對強電和弱電實施隔離,有效地抑制了干擾信號對電路的干擾。光耦合器很容易得到觸發(fā)脈沖,且有可靠、體積小的特點。所以可以用帶過零檢測的光電隔離器MOC3061來驅動雙向可控硅并隔離控制回路和主回路。
MOC3061參數:
輸出端的額定電壓是400V。
最大重復浪涌電流為1.2A。
最大電壓上升率dv/dt為1000v/us。
輸入輸出隔離電壓為7500V。
輸入控制電流為15mA。
MOC3061引腳排列及內部電路圖如圖2-9所示。
圖2-9 MOC3061引腳排列及內部電路圖
當單片機的輸出口發(fā)出高電平,經過三極管放大后驅動光耦合器的放光二極管,MOC3061的輸入端導通,輸入電流約為15mA。當MOC306的輸出端6腳和4腳尖電壓稍稍過零時,光耦內部雙向可控硅即可導通,它可以給外部晶閘管一個觸發(fā)信號,并使其導通;當單片機輸出口發(fā)出低電平,MOC3061截止,雙向可控硅處于截止狀態(tài)。
MOC3061的優(yōu)點:
(1)控制簡單。
(2)MOC3061由于采用了過零觸發(fā)電路大大簡化了雙向可控硅的觸發(fā)電路。
(3)MOC3061與雙向可控硅實際組成了一個固態(tài)繼電器,實現了無觸電控制。
(4)輸出通道實現了光電隔離,防止了射電干擾。
(5)單片機輸出口直接控制雙向可控硅,省去了的D/A轉換電路,簡化了接口電路。
雙向可控硅介紹:
雙向可控硅具有雙向導通功能,在交流電的正負半周都可以導通。
雙向可控硅的通斷情況由柵極決定,當柵極無信號時MT1和MT2成高阻態(tài),管截止;當在MT1與MT2之間加一個閾值電壓時,就可以利用控制極柵極電壓來使可控硅導通。但需要注意的是,當雙向可控硅接感性負載時,電流和電壓之間有一定的相位差。在電流為零時,反向電壓可能不為零,且超過轉換電壓,使管子反向導通,故要管子能承受這種反向電壓,并在回路中加入RC網絡加以吸收。
雙向可控硅的觸發(fā)方式:
控制雙向可控硅從高阻態(tài)轉換到導通區(qū)可以用不同的方式實現,相應的分為四種方式。
MT1相對于MT2為正,控制脈沖電壓Ug相對于MT1為正。
MT1相對于MT2為負,控制脈沖電壓Ug相對于MT1為負。
MT1相對于MT2為正,控制脈沖電壓Ug相對于MT1為負。
MT1相對于MT2為負,控制脈沖電壓Ug相對于MT1為正。
雙向可控硅的控制極在觸發(fā)后便失去了作用。雙向可控硅長期維持低阻態(tài),直到低于維持電流I H,然后在轉換到高阻態(tài)。在控制交流電壓時,每次電源電壓過零雙向可控硅都會自動截止,所以雙向可控硅每半個周期都需要重新觸發(fā)。
如圖2-10所示為溫度控制模塊原理圖。
圖2-10 溫度控制模塊原理圖
2.4按鍵及顯示模塊的設計
方案一:
八段數碼管顯示,數碼管是由八個發(fā)光管組成一個八字形,這些段分別由a,b,c,d,e,f,g,dp來表示。
方案二:
LCD1602液晶顯示器顯示。
方案評價:
本設計采用LCD1602液晶顯示器顯示,因為它有功耗較低、顯示質量較高、重量輕、體積小的特點。
LCD1602的電路圖如圖2-11所示。

圖2-11 LCD1602電路圖

2.4.1 LCD1602的參數和引腳功能
LCD1602的參數:
字符尺寸:2.95×4.35(W×H)mm。
顯示總容量:16×2個字符。
最佳工作電壓:5.0V。
芯片工作電壓區(qū)間:4.5V—5.5V。
工作電流:2.0mA(5.0V)。
LCD1602的引腳功能如表2-6所示。

表2-6 LCD1602引腳功能表

編號

符號

引腳說明

編號

符號

引腳說明

1

VSS

電源地

9

D2

數據

2

VDD

電源正極

10

D3

數據

3

VL

顯示偏壓

11

D4

數據

4

RS

數據/命令選擇

12

D5

數據

5

R/W

讀/寫選擇

13

D6

數據

6

E

使能信號

14

D7

數據

7

D0

數據

15

BLA

正極背光源

8

D1

數據

16

BLK

負極背光源


2.4.2 LCD1602的特點
在單片機系統中應用晶液顯示器作為輸出器件有以下幾個特點。
(1)功耗較低
LCD1602的功耗主要在驅動IC和內部的電極上,因此功耗較低。
(2)顯示質量較高
LCD1602顯示器在收到信號后,不需要不斷刷新新的亮點,它的顯示器上的每一個點可以一直保持同樣的亮度和色彩,發(fā)光持續(xù)穩(wěn)定。因此,顯示器不會閃爍,且質量較高。
(3)重量輕、體積小
因為控制原理不同,LCD1602顯示器通過電極來控制液晶分子狀態(tài)來達到控制的目的,相較于其他的顯示器來說,同等面積的顯示器,LCD1602要輕許多。
(4)數字式接口
液晶顯示器都是數字式的,和單片機系統的接口更加簡單可靠,操作更加方便。
2.4.3 按鍵電路的設計
方案一:
獨立連接式。獨立式按鍵是指各按鍵相互獨立地接通一條輸入數據線。
方案二:
行列式(矩陣式)為了減少鍵盤與單片機借口時所占用I/O線的數目,在鍵數較多時,通常都將鍵盤排列成行列矩陣形式。判斷鍵盤中哪一個鍵被按下是通過將行線逐行置低電平后,檢查列輸入狀態(tài)實現的。
方案評價:
對比兩種方案可知,方案一雖然也能很好的實現電路的要求,但考慮到電路設計的成本和電路整體的性能,我們采用方案一。
如圖2-12所示為獨立式按鍵電路圖。

圖2-12 獨立式按鍵電路圖

獨立式按鍵是指各按鍵相互獨立地接通一條輸入數據線。
本設計采用2個獨立式按鍵分別連接單片機I/O來實現按鍵的功能。從而解決了單片機I/O口被占用的問題和減少了硬件的復雜程度,通過軟件來配合2個按鍵實現功能。系統程序中通過掃描P1.2、P1.3這2個端口是否為低電平0來判斷按鍵是否被按下。
2.5報警模塊的設計
方案一:
使用7406作驅動的單音頻報警電路。
方案二:
使用三極管作驅動的單音頻報警電路。
方案評價:
使用方案二。
蜂鳴器電路圖如圖2-13所示。

圖2-13 蜂鳴器電路圖

蜂鳴器以直流電壓作為電源,被廣泛地應用于電話機、電子玩具、報警器、定時器等電子產品中,被用來當作電子發(fā)聲器。蜂鳴器主要有壓電式和電磁式兩種。本設計的報警模塊主要采用蜂鳴器及發(fā)光二級管的蜂鳴和發(fā)光來實現超出溫度上限時的報警。
壓電式蜂鳴器約需10mA的驅動電流。單片機的P2.5接晶體管基極輸入端。當P2.5輸出高電平1時,三極管導通,壓電蜂鳴器兩端獲得約+5V電壓而鳴叫;當P2.5口輸出低電平0時,三極管截止,蜂鳴器停止發(fā)聲。
要使三極管有放大作用,必須保證發(fā)射結正偏、集電極反偏。
電流放大系數:β=IC/IB。
9013三極管介紹:
9013 結構:NPN。
集電極-發(fā)射極電壓:25V。
集電極-基電壓:45V。
射極-基極電壓:5V。
集電極電流:0.5A。
耗散功率:0.625W。
結溫:150℃。
特征頻率最小:150MHz。
放大倍數:91。

3軟件設計
按照系統設計功能的要求,來確定本系統程序包括DS18B20讀溫度程序、LCD1602的顯示程序、鍵盤掃描程序、報警處理程序以及繼電器加熱程序。
3.1主程序的設計
如圖3-1所示為主程序流程圖。

圖3-1 主程序流程圖

3.2DS18B20讀溫度程序的設計
(1)DS18B20讀時序:
  • 讀時序包括讀0和讀1的時序。
  • 讀時序是在拉低單總線之后,在15us之內釋放單總線,讓DS18B20把數據傳送到單總線上。讀時序的過程至少需要60us。
(2)DS18B20寫時序:
  • 寫時序包括寫0和寫1的時序。
  • 0和寫1時序略有不同。當寫0時序時,單總線至少要被拉低60us。保證DS18B20能夠采到數據線上的“0”電平,在15us45us之間;當寫1時序時,拉低單總線,并在15us之內釋放單總線。
如圖3-2所示為DS18B20讀溫度程序流程圖。

圖3-2 DS18B20讀溫度程序流程圖

3.3鍵盤掃描程序的設計
該電路為查詢方式電路,當任何一個鍵按下時,與之相連的輸入數據線即被清0,而平時該線為1。因此可以通過檢測各數據線的狀態(tài)(0或1)來判斷按鍵是否閉合,以及哪個按鍵已閉合。
如圖3-3所示為鍵盤掃描程序流程圖。

圖3-3 鍵盤掃描程序流程圖

3.4報警處理程序的設計
設定目標溫度上限,當實際溫度大于目標溫度上限的時候,執(zhí)行聲光報警程序。
如圖3-4所示為聲光報警程序流程圖。

圖3-4 聲光報警程序流程圖

3.5PID控制算法
    本設計采用了PID控制技術。在工程實際運用中,PID控制器以其穩(wěn)定性好、工作可靠、調整方便、結構簡單而成為主要的工業(yè)控制技術之一。當被控對象的參數和結構不能被很好的掌握,或得不到精確的數學模型時,控制理論的技術很難被采用,所以當系統控制器的結構和參數必須依靠經驗來確定時,PID控制技術最為實用和方便。

PID調節(jié)器是一種線性調節(jié)器,它將給定值r(t)與實際輸出值c(t)的偏差的比例(P)、積分(I)、微分(D)的組合組成控制量,從而達到對控制對象的控制目的。控制偏差

                                 (3-1)
(1)連續(xù)控制系統PID調節(jié)器的微分方程為:
                              (3-2)
式中
Kp——比例常數;
Ti——積分時間常數;
Td——微分時間常數;
e(t)——系統偏差信號;
u(t)——控制器的輸出信號。
(2)PID調節(jié)器的函數形式方程為:
                                    (3-3)
(3)數字PID控制器
如表3-1所示為模擬PID控制規(guī)律的離散化表。

表3-1 模擬PID控制規(guī)律的離散化

模擬形式

離散化形式


數字PID控制器的差分方程:

                            (3-4)

為積分系數。

為微分系數。

式中                稱為比例項。

               稱為積分項。

        稱為微分項。

常用的控制方式:

   1、P控制         

2、PI控制         

3、PD控制         

4、PID控制        


模擬PID控制系統原理如圖3-5所示。

圖3-5 模擬PID控制系統原理框圖

(4)PID調節(jié)器比例、積分、微分的環(huán)節(jié)
  • 比例環(huán)節(jié):把調節(jié)器的輸入偏差乘以一個系數,作為調節(jié)器的輸出,比例環(huán)節(jié)的作用是放大誤差的幅值。當僅有比例控制環(huán)節(jié)時系統輸出存在穩(wěn)態(tài)誤差。
  • 積分環(huán)節(jié):調節(jié)器加入積分環(huán)節(jié)后達到消除穩(wěn)態(tài)誤差的目的。積分項隨著時間的增加而增大,積分項對穩(wěn)態(tài)誤差的消除取決于時間的積分。PI調節(jié)器可以使系統在進入穩(wěn)態(tài)后無穩(wěn)態(tài)誤差。
  • 微分環(huán)節(jié):調節(jié)器的輸入、輸出誤差信號的微分成正比關系。微分環(huán)節(jié)能反應偏差信號的變化趨勢,從而可以實現超前調節(jié)。 控制器中僅有比例環(huán)節(jié)是不行的,還需要增加微分項,因為它能預測誤差變化的趨勢。
  • PID控制算法的兩種類型
  • 位置型控制
                            (3-5)
  • 增量型控制
                            (3-6)
PID參數整定方法:
  • 理論計算法――依賴被控對象準確的數學模型。
  • 工程整定法――不依賴被控對象準確的數學模型,直接在控制系統中進行現場整定。
    下面對PID運算加以說明:
    所有的數都變成定點純小數進行處理。
    算式中的各項有正有負,以最高位作為符號位,最高位為0表示為正數,為1表示負數。正負數都是補碼表示,最后的計算以原碼輸出。
節(jié)16位進行計算,最后將運算結果取成高8位有效值輸出。輸出控制量u(n)的限幅處理。為了便于實現對晶閘管的通斷處理,PID的輸出在0~250之間。大于250或小于0的控制量u(n)都是沒有意義的,因在算法上對u(n)進行限幅,即:

                       =         (3-7)

增量式PID控制算法如圖3-6所示。

圖3-6 增量式PID控制算法程序框圖


4系統仿真
單片機程序編寫可以有多種:匯編語言、C語言等。本設計采用C語言來編寫。
  • 匯編語言
用匯編語言助記符來表示的程序就是匯編語言。這種語言比機器語言更容易,使用方便,容易記憶。但是由于不同的機器對應著不同的匯編語言,這種語言具有一定限制。
  • C語言
  • 對微控制器的指令系統不需要了解,只是有一個初步的了解單片機的存儲結構。
  • 具有規(guī)范的程序,通過不同的函數,是程序變得結構化。
  • 寄存器分配,不同的內存地址和數據類型和其他細節(jié)可以由編譯器管理。
  • 大大縮短了編程和調試的時間,提高了編程的效率。
對于AT89C52的控制設計,編程用Keil軟件,仿真用proteus軟件。Keil支持C語言、匯編及二者的混合編程。
編程軟件Keil介紹:
KeiluVision2是美國軟件公司的C語言軟件開發(fā)系統,它兼容單片機系統。與匯編相比,C語言有易學易用的特點。不僅提高了工作效率,而且在關鍵的位置嵌入匯編,可以使程序的工作效率接近匯編。標準C編譯器在保留匯編代碼搞笑、快速特點的同時,還未控制器的軟件開發(fā)提供了C環(huán)境。uVision2的集成開發(fā)環(huán)境已經完全包括了C52。它包括:項目管理器、編譯器,匯編器,實時操作系統和調試器。Keil軟件界面如圖4-1所示。
仿真軟件Protues介紹:
Protues軟件是英國公司出版的工具軟件。它不僅具有仿真功能,還能仿真單片機及外圍器件。它是目前最好的仿真單片機及外圍器件的工具。在國內它已受到學單片機的愛好者和參加單片機開發(fā)應用工作者的好感。Proteus是世界上最著名的仿真軟件之一,從代碼調試到原理圖布圖等仿真,從概念到產品的整個流程都是它的功勞。目前它是世界上唯一可以將PCB設計軟件、電路仿真軟件和虛擬模型仿真軟件合為一的軟件之一,它的處理器模型支持MSP430、AVR、8051、HC11、ARM和8086PIC10/12/16/18/24/30/DsPIC33等,在編譯方面,它也支持Keil、IAR和MPLAB等多種編譯器。
Proteus ISIS的運行界面是標準的Windows界面,如圖4-3所示,Proteus ISIS軟件有:標題欄、主菜單、狀態(tài)欄、標準工具欄、繪圖工具欄、對象選擇按鈕、仿真進程控制按鈕、預覽窗口、圖形編輯窗口、對象選擇器等窗口。

圖4-1 Keil軟件界面

生成Hex文件,如圖4-2所示。

圖4-2 生成Hex文件圖

圖4-3 Proteus軟件界面

當溫度還未達到設置溫度上限默認的50℃時,如圖4-4所示單片機P2.5口輸出低電平,蜂鳴器不響。單片機P2.7口也輸出低電平,二極管不亮,繼電器繼續(xù)加熱。

圖4-4 溫度低于上限時仿真圖

  當溫度達到設置溫度上限默認的50℃時,如圖4-5所示單片機P2.5口輸出高電平,蜂鳴器響。單片機P2.7口也輸出高電平,二極管亮,繼電器停止加熱。

圖4-5 溫度低于上限時仿真圖
結論

通過本次設計,加深了我對單片機的認識,對溫度傳感器DS18B20也有了更深刻的了解。雖然DS18B20在測量溫度時,出現了靈敏度不高,無法跟隨溫度變化快速顯示溫度等問題,但是易于制作、價格低廉、硬件結構簡單、測量值精確和易于操作等許多優(yōu)點讓DS18B20在測溫方面有獨特的優(yōu)勢。

參考文獻
[1]陳煥生.溫度測試技術及儀表[M].北京:水利電力出版社,1987.9.
[2]秦沿海.數字PID控制原理及其應用[J].西南民族學院學報,1997:49-54.
[3]徐科軍.傳感器與檢測技術[M].北京:電子工業(yè)出版社,2004.9.
[4]張寶芬.自動檢測技術及儀表控制系統[M].北京:化學工業(yè)出版社,2000.
[5]先鋒工作室.單片機程序設計實例[M].北京:清華大學出版社,2003.
[6]王孝武.現代控制理論基礎[M].北京:機械工業(yè)出版社,1998.
[7]袁希光.傳感器技術手冊[M].北京:國防工業(yè)出版社,1986.
[8]劉劍.一種數字PID控制算法分析[J].承德石油高等專科學校學報,2007:11-22.
[9]歷風滿.數字PID控制算法的研究[J].遼寧大學學報,2005:367-370.
[10]丁元杰.單片微機原理及應用[M].北京:機械工業(yè)出版社,1996:256-276.
[11]趙鴻圖.基于單片機的溫度控制系統的設計與實現Ⅱ[J].微計算機信息,2008(26).
[12]楊萬超.S1單片機溫度控制系統設計Ⅱ[J].黑龍江科技信息,2009(29).
[13]賴壽宏.微型計算機控制技術[M].北京:機械工業(yè)出版社,2003:130-145.
[14]馬淑蘭.單片機技術及應用實例分析[M].西安:西安電子科技大學出版社,2009:20-40.
[15]Zhang et al.Digital PID controller design for multivariable analogue systems with computational[J].IMA J Math Control Info,2004:21-433.
[16]L Dubois.Temperature control by microwave radiometry with narrow band width [J].EurPhysJ.App.lPhys,2000:63-68.
[17]Shiqian wu,Meng Joo Er and Yang Gao,A Fast Appoach for Automatic Generation of Fuzzy Rules by Generalized DynamicFuzzy Neural Networks[J]. IEEE Transaction on Fuzzy Systems,2001(4):578-593.


致謝

本設計在***老師的嚴格要求和悉心指導下才完成,從課題選擇、總體方案設計、硬件軟件設計到系統仿真,無不凝聚著程老師的汗水和心血,導師無私的關懷和悉心的指導,令我受益匪淺。在此特向程老師表示深深的感謝和崇高的敬意。


附錄
附錄1
附錄2
程序代碼:
  1. #include <at89x51.h>
  2. #include <absacc.h>
  3. #include <ctype.h>
  4. #include <math.h>
  5. #include <stdio.h>
  6. #include <string.h>
  7. #include <DS18B20.h>
  8. #include "LCD1602.h"                                          ////液晶顯示頭文件
  9. #define uchar unsigned char
  10. #define uint unsigned int
  11. sbit Key1=P1^0;
  12. sbit Key2=P1^1;
  13. sbit Up  =P1^2;
  14. sbit Down=P1^3;
  15. uchar t[2],*pt;                                                        //這是用來存放溫度值的,測溫程序通過這個數組與主函數通信
  16. uchar  TempBuffer1[9]={0x2b,0x31,0x32,0x32,0x2e,0x30,0x30,0x43,'\0'};
  17.                                                                                                                 //顯示實時的溫度,上電時顯示+125.00C
  18. uchar  TempBuffer0[17]={0x54,0x48,0x3a,0x2b,0x31,0x32,0x35,0x20,
  19.                                                                                                                 0x54,0x4c,0x3a,0x2b,0x31,0x32,0x34,0x43,'\0'};
  20.                                                                                                                 //顯示溫度上下限,上電時顯示TH:+125 TL:+124C                                                                                                
  21. uchar code dotcode[4]={0,25,50,75};
  22. uchar set;//溫度初始值
  23. uchar count,high_time=0; //調節(jié)占空比的參數
  24. uint rout;// PID輸出
  25. /查表法*******
  26. 將表值分離出的十位和個位送到十分位和百分位********************/

  27. struct PID
  28. {
  29.               uint SetPoint;      // 設定目標 Desired Value
  30.               uint Proportion;    // 比例常數 Proportional Const
  31.               uint Integral;      // 積分常數 Integral Const
  32.               uint Derivative;    // 微分常數 Derivative Const
  33.               signed int LastError;     // 錯誤Error[-1]
  34.               signed int PrevError;     // 錯誤Error[-2]
  35.               signed int SumError;      // Sums of Errors
  36. };
  37. struct PID spid;                // PID控制結構體

  38. void init_pid()
  39. //PID初始化
  40. {
  41.               high_time=50;
  42.               spid.Proportion = 23;       // Set PID Coefficients
  43.               spid.Integral = 2;
  44.               spid.Derivative =6;
  45.               spid.SetPoint = set;      // Set PID Setpoint
  46. }

  47. unsigned int PIDCalc( struct PID *pp, unsigned int NextPoint )
  48. //PID算法
  49. {
  50.               signed int dError,Error;
  51.               Error = pp->SetPoint - NextPoint;           // 偏差
  52.               pp->SumError += Error;                      // 積分
  53.               dError = pp->LastError - pp->PrevError;     // 當前微分
  54.               pp->PrevError = pp->LastError;            
  55.               pp->LastError = Error;
  56.               return (pp->Proportion * Error+ pp->Integral * pp->SumError              + pp->Derivative * dError);
  57. }

  58. void duty_cycle(uint t)                              
  59. // 占空比
  60. {
  61.               uchar s;
  62.               t=t/10;
  63.               s=set;
  64.               if(s>t)
  65.               {
  66.                             if(s-t>2)
  67.                                           high_time=100;
  68.                             else
  69.                             {
  70.                                           rout = PIDCalc ( &spid,t );   // Perform PID Interation
  71.                                           if(high_time<=100)
  72.                                                         high_time=(uchar)(rout/600);
  73.                                           else
  74.                                                         high_time=100;            
  75.                             }
  76.               }
  77.               else
  78.                             high_time=0;
  79. }

  80. void covert0( unsigned char TH, unsigned char TL)              //將溫度上下限轉換為LCD顯示的數據
  81. {
  82.               if(TH>0x7F)                    //判斷正負,如果為負溫,將其轉化為其絕對值
  83.               {
  84.                             TempBuffer0[3]=0x2d;                   //0x2d為"-"的ASCII碼
  85.                             TH=~TH;
  86.                             TH++;
  87.               }
  88.               else TempBuffer0[3]=0x2b;              //0x2B為"+"的ASCII碼
  89.             
  90.               if(TL>0x7f)
  91.               {
  92.                             TempBuffer0[11]=0x2d;                   //0x2d為"-"的ASCII碼
  93.                             TL=~TL+1;
  94.               }
  95.               else
  96.                             TempBuffer0[11]=0x2b;              //0x2B為"+"的ASCII碼
  97.             
  98.               TempBuffer0[4]=TH/100+0x30;                                         //分離出TH的百十個位
  99.               if( TempBuffer0[4]==0x30)
  100.                             TempBuffer0[4]=0xfe; //百位數消隱
  101.               TempBuffer0[5]=(TH%100)/10+0x30;                                                        //分離出十位
  102.               TempBuffer0[6]=(TH%100)%10+0x30;                                                        //分離出個位
  103.               TempBuffer0[12]=TL/100+0x30;                                         //分離出TL的百十個位
  104.               if( TempBuffer0[12]==0x30)
  105.                             TempBuffer0[12]=0xfe; //百位數消隱
  106.               TempBuffer0[13]=(TL%100)/10+0x30;                                                        //分離出十位
  107.               TempBuffer0[14]=(TL%100)%10+0x30;                                                        //分離出個位
  108. }


  109. void covert1(void)              //將溫度轉換為LCD顯示的數據
  110. {
  111.               unsigned char x=0x00,y=0x00;
  112.                  t[0]=*pt;
  113.                  pt++;
  114.                  t[1]=*pt;
  115.                  if(t[1]>0x07)                    //判斷正負溫度
  116.                  {
  117.                   TempBuffer1[0]=0x2d;                   //0x2d為"-"的ASCII碼
  118.                             t[1]=~t[1];                                          /*下面幾句把負數的補碼*/
  119.                             t[0]=~t[0];                             /* 換算成絕對值*********/
  120.                             x=t[0]+1;                                                        /***********************/
  121.                             t[0]=x;                                                                      /***********************/
  122.                             if(x>255)                /**********************/
  123.                                           t[1]++;                                                        /*********************/
  124.                  }
  125.                  else
  126.                             TempBuffer1[0]=0x2b;              //0xfe為變"+"的ASCII碼
  127.                 t[1]<<=4;                            //將高字節(jié)左移4位
  128.                 t[1]=t[1]&0x70;                            //取出高字節(jié)的3個有效數字位
  129.                 x=t[0];                                                                      //將t[0]暫存到X,因為取小數部分還要用到它
  130.                 x>>=4;                                                                      //右移4位
  131.                 x=x&0x0f;                                                                      //和前面兩句就是取出t[0]的高四位            
  132.                 t[1]=t[1]|x;                                          //將高低字節(jié)的有效值的整數部分拼成一個字節(jié)
  133.                 TempBuffer1[1]=t[1]/100+0x30;                                         //+0x30 為變 0~9 ASCII碼
  134.                  if( TempBuffer1[1]==0x30)
  135.                             TempBuffer1[1]=0xfe; //百位數消隱
  136.                 TempBuffer1[2]=(t[1]%100)/10+0x30;                                                        //分離出十位
  137.                 TempBuffer1[3]=(t[1]%100)%10+0x30;                                                        //分離出個位
  138.                 t[0]=t[0]&0x0c;                                                                                                  //取有效的兩位小數
  139.                 t[0]>>=2;                                                                                                                              //左移兩位,以便查表
  140.                 x=t[0];                                                                                                                                          
  141.                 y=dotcode[x];                                                                                                                              //查表換算成實際的小數
  142.                 TempBuffer1[5]=y/10+0x30;                                                                                                  //分離出十分位
  143.                 TempBuffer1[6]=y%10+0x30;                                                                                                  //分離出百分位
  144. }                                         

  145. void delay(unsigned int i)
  146. {
  147.               while(i--);
  148. }

  149. void t0_int(void) interrupt 1                            //PWM波輸出
  150. {
  151.               if(++count<=(high_time))
  152.               Relay=0;
  153.               else if(count<=100)
  154.               Relay=1;
  155.               else
  156.               count=0;
  157.               TH0=0X20;
  158.               TL0=0X00;
  159. }

  160. main()
  161. {
  162.               unsigned char TH=50,TL=10,temp=0;                                                                          //下一步擴展時可能通過這兩個變量,調節(jié)上下限
  163.                                                                                                                        //測溫函數返回這個數組的頭地址
  164.               TMOD=0X01;
  165.               TH0=0X20;
  166.               TL0=0X00;
  167.               EA=1;
  168.               ET0=1;
  169.               TR0=1;
  170.               set=60;//目標溫度
  171.               Beep=0;Relay=0;
  172.               init_pid();
  173.               while(1)
  174.               {            
  175.                   if(Up==0)
  176.                             {
  177.                                while(!Up);
  178.                                TH++;
  179.                             }
  180.                             if(Down==0)
  181.                             {
  182.                                           while(!Down);
  183.                                           TL--;
  184.                             }
  185.                             pt=ReadTemperature(TH,TL,0x3f);                            //上限溫度-22,下限-24,分辨率10位,也就是0.25C
  186.                                                                                                                                                           //讀取溫度,溫度值存放在一個兩個字節(jié)的數組
  187.                
  188.                   if((t[1]>TH)|(t[1]<TL))
  189.                             {
  190.                                 Beep=1;
  191.               //                            Relay=1;
  192.                            
  193.                             }
  194.                             else
  195.                             {
  196.                                 Beep=0;
  197.               //                            Relay=0;
  198.                             }
  199.                             delay(10000);
  200.                             covert1();
  201.                             covert0(TH,TL);
  202.                             LCD_Initial();                                                                                                  //第一個參數列號,第二個為行號,為0表示第一行
  203.                                                                                                                                                                         //為1表示第二行,第三個參數為顯示數據的首地址
  204.                             LCD_Print(0,0,TempBuffer0);            
  205.                             LCD_Print(0,1,TempBuffer1);                                                        
  206.               }
  207. }
復制代碼

完整的Word格式文檔51黑下載地址:
基于PID的溫度控制系統設計.doc (729.5 KB, 下載次數: 1005)



評分

參與人數 3黑幣 +67 收起 理由
哇啊哇 + 12 很給力!
zqy181818 + 5 很給力!
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

ID:272828 發(fā)表于 2018-7-9 15:11 | 顯示全部樓層
請問這個設計的仿真的文件還在嗎?
回復

使用道具 舉報

ID:154686 發(fā)表于 2018-9-5 15:44 | 顯示全部樓層
看起來很不錯哦,收藏之~~~
謝謝LZ啦�。�!
回復

使用道具 舉報

ID:245429 發(fā)表于 2018-12-25 22:38 | 顯示全部樓層
感覺不錯,等幾天有時間再看
回復

使用道具 舉報

ID:471216 發(fā)表于 2019-1-21 12:58 | 顯示全部樓層
先留個評論,收藏了
回復

使用道具 舉報

ID:143203 發(fā)表于 2019-1-21 17:08 | 顯示全部樓層
MARK_____________________________________________
回復

使用道具 舉報

ID:472874 發(fā)表于 2019-1-25 16:02 | 顯示全部樓層
厲害,正好用得上
回復

使用道具 舉報

ID:472874 發(fā)表于 2019-1-25 16:11 | 顯示全部樓層
資源還在么?
回復

使用道具 舉報

ID:222388 發(fā)表于 2019-1-30 18:30 | 顯示全部樓層
很受用
回復

使用道具 舉報

ID:496761 發(fā)表于 2019-4-8 15:05 | 顯示全部樓層
很給力的
回復

使用道具 舉報

ID:508509 發(fā)表于 2019-4-19 17:14 | 顯示全部樓層
收藏一下
回復

使用道具 舉報

ID:513399 發(fā)表于 2019-4-27 11:44 | 顯示全部樓層
感覺不錯,收藏了
回復

使用道具 舉報

ID:487891 發(fā)表于 2019-4-27 15:16 | 顯示全部樓層
學習了
回復

使用道具 舉報

ID:525924 發(fā)表于 2019-5-3 15:01 | 顯示全部樓層
程序是不是沒有寫完呢
回復

使用道具 舉報

ID:526660 發(fā)表于 2019-5-3 21:21 | 顯示全部樓層
厲害,剛好有用
回復

使用道具 舉報

ID:468987 發(fā)表于 2019-5-18 21:35 | 顯示全部樓層
寫得很全面,先收藏,以后慢慢看,謝謝樓主的分享。。。
回復

使用道具 舉報

ID:468987 發(fā)表于 2019-5-18 21:38 | 顯示全部樓層
寫得很全面,很有用,先收藏。慢慢學習,謝謝樓主分享。。。
回復

使用道具 舉報

ID:357631 發(fā)表于 2019-11-1 14:04 | 顯示全部樓層
謝貼主,正在做相關實驗
回復

使用道具 舉報

ID:659716 發(fā)表于 2019-12-9 15:58 | 顯示全部樓層
請問仿真程序還在嗎?
回復

使用道具 舉報

ID:666183 發(fā)表于 2019-12-18 09:38 | 顯示全部樓層
很好,很有用
回復

使用道具 舉報

ID:680972 發(fā)表于 2020-1-5 14:51 | 顯示全部樓層
程序不全吧
回復

使用道具 舉報

ID:700941 發(fā)表于 2020-3-3 00:33 來自觸屏版 | 顯示全部樓層
怎么才能實現變溫控制呢?
回復

使用道具 舉報

ID:701351 發(fā)表于 2020-3-4 16:28 | 顯示全部樓層
666 收下了
回復

使用道具 舉報

ID:701351 發(fā)表于 2020-3-5 20:28 | 顯示全部樓層
等幾天有時間再看
回復

使用道具 舉報

ID:704833 發(fā)表于 2020-3-24 23:01 | 顯示全部樓層
程序不全,是沒有顯示出來。還是需要下載文件后,才能全部看到
回復

使用道具 舉報

ID:110278 發(fā)表于 2020-4-7 14:38 | 顯示全部樓層
說的很細致。
回復

使用道具 舉報

ID:221764 發(fā)表于 2020-4-8 13:28 | 顯示全部樓層
有仿真文件嗎
回復

使用道具 舉報

ID:221764 發(fā)表于 2020-4-9 23:14 | 顯示全部樓層
程序不太對啊
回復

使用道具 舉報

ID:770902 發(fā)表于 2020-6-11 17:34 | 顯示全部樓層
這個主程序是全的嗎?
回復

使用道具 舉報

ID:782863 發(fā)表于 2020-6-25 22:33 | 顯示全部樓層
求頭文件ds18b20,lcd1602,還有請教一下為什么那個beep和relay都是未定義,相關程序是什么樣子的
回復

使用道具 舉報

ID:782863 發(fā)表于 2020-6-25 22:43 | 顯示全部樓層
求助,程序運行通過了,但仿真顯示只亮不顯示數字
回復

使用道具 舉報

ID:28992 發(fā)表于 2021-3-8 08:32 | 顯示全部樓層
it's a remarkable achievement, thanks for your sharing.
回復

使用道具 舉報

ID:28992 發(fā)表于 2021-3-16 05:52 | 顯示全部樓層
very good, thank you sir.
回復

使用道具 舉報

ID:893505 發(fā)表于 2021-3-18 15:04 | 顯示全部樓層
可以,很全,收藏了
回復

使用道具 舉報

ID:919038 發(fā)表于 2021-5-16 20:19 | 顯示全部樓層
感謝大佬,很有參考價值
回復

使用道具 舉報

ID:922099 發(fā)表于 2021-5-17 03:24 來自觸屏版 | 顯示全部樓層
這程序是不是不全呀,怎么補全呀
回復

使用道具 舉報

ID:399799 發(fā)表于 2021-5-20 13:28 來自觸屏版 | 顯示全部樓層
好久不來了。只要來了就有收獲,感謝。
回復

使用道具 舉報

ID:936713 發(fā)表于 2021-6-12 10:41 | 顯示全部樓層
小白一枚 感覺很有意義 收藏了 實現中。。
回復

使用道具 舉報

ID:285514 發(fā)表于 2021-9-22 18:10 | 顯示全部樓層
這個帖子好,很全面,是很好的資料,樓主有心了.
回復

使用道具 舉報

ID:998643 發(fā)表于 2021-12-30 16:49 | 顯示全部樓層
這個帖子好,很全面,是很好的資料,感謝樓主。
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表