欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 5850|回復(fù): 2
收起左側(cè)

半導(dǎo)體制冷片溫度控制課程設(shè)計(jì)說明書(含單片機(jī)源碼 wrod格式文檔)

[復(fù)制鏈接]
ID:310129 發(fā)表于 2018-4-17 15:57 | 顯示全部樓層 |閱讀模式
課程設(shè)計(jì)說明書

題    目:半導(dǎo)體制冷片溫度控制

摘  要
溫度是工業(yè)中非常關(guān)鍵的一項(xiàng)物理量,在農(nóng)業(yè),現(xiàn)代科學(xué)研究和各種高新技術(shù)的開發(fā)和研究中也是一個(gè)非常普遍和常用的測(cè)量參數(shù)。溫度控制的原理主要是:將隨溫度變化而變化的物理參數(shù),通過溫度傳感器轉(zhuǎn)變成電信號(hào),傳給計(jì)算機(jī),與給定溫度相減后得到偏差,經(jīng)過控制器后輸出給控制對(duì)象達(dá)到控溫的目的。
半導(dǎo)體制冷片是利用半導(dǎo)體材料的Peltier效應(yīng),當(dāng)直流電通過兩種不同半導(dǎo)體材料串聯(lián)成的電偶時(shí),在電偶的兩端即可分別吸收熱量和放出熱量,可以實(shí)現(xiàn)制冷的目的。制冷速度與通過的電流大小成正比。
本設(shè)計(jì)針對(duì)用半導(dǎo)體對(duì)水箱的制冷模型設(shè)計(jì)了相應(yīng)模糊PI控制器對(duì)水箱進(jìn)行計(jì)算機(jī)恒溫控制。

引言
1  課程設(shè)計(jì)概述
1.1 課程設(shè)計(jì)題目
1.2 主要儀器設(shè)備
2  硬件設(shè)計(jì)
2.1 單片機(jī)部分
2.2 串行接口部分
2.3驅(qū)動(dòng)電路部分
3 軟件設(shè)計(jì)
3.1 流程圖設(shè)計(jì)
3.1.1 溫度控制主程序流程圖
3.2 控制算法設(shè)計(jì)
3.2.1 控制對(duì)象模型
3.2.2 PI控制器設(shè)計(jì)
3.2.3 控制器的設(shè)計(jì)
4  系統(tǒng)調(diào)試
4.1 單片機(jī)程序仿真
4.2 STC12C5A08S2單片機(jī)系統(tǒng)電路調(diào)試
4.3 驅(qū)動(dòng)電路調(diào)試
4.4 系統(tǒng)調(diào)試
5  總結(jié)與改進(jìn)展望
6  謝辭
引言  
   溫度作為一項(xiàng)熱工參數(shù),在工業(yè)現(xiàn)場(chǎng)和過程控制中具有至關(guān)重要的作用。半導(dǎo)體制冷相對(duì)于傳統(tǒng)制冷方式,有著體積小,重量輕,無制冷劑而不污染環(huán)境,作用速度快,使用壽命長(zhǎng),且易于控制。本文介紹了使用DS18B20作為溫度傳感器的PWM半導(dǎo)體制冷控制系統(tǒng)。
1  課程設(shè)計(jì)概述1.1 課程設(shè)計(jì)題目
設(shè)計(jì)半導(dǎo)體制冷片的線性驅(qū)動(dòng)電路和熱敏元件的測(cè)溫電路,再設(shè)計(jì)PI控制器來調(diào)節(jié)制冷電壓,實(shí)現(xiàn)溫度控制,控制范圍15~25度,控制精度±0.5度,通過鍵盤進(jìn)行溫度設(shè)置,實(shí)際溫度可以實(shí)時(shí)顯示。
*附加要求:通過RS232或RS485接口與PC機(jī)通信,在PC機(jī)上進(jìn)行參數(shù)顯示和設(shè)置。

1.2 主要儀器設(shè)備
半導(dǎo)體制冷片(連水箱)    1臺(tái)
示波器           1臺(tái)
直流穩(wěn)壓電源 1臺(tái)
數(shù)字萬用表     1塊
PC機(jī)         1臺(tái)

2  硬件設(shè)計(jì)
整個(gè)系統(tǒng)以單片機(jī)STC12C5A08S2為核心部件。在08S2最小系統(tǒng)外圍添加了按鍵,顯示,與PC機(jī)的通信接口,以及光電耦合PC817和MOS管IRF9540構(gòu)成的驅(qū)動(dòng)電路。
2.1 單片機(jī)部分
本設(shè)計(jì)選擇的單片機(jī)芯片是STC12C5A08S2,其原理圖如2-1所示。該芯片的P0.0-P0.3用作鍵盤數(shù)字量輸入,加入了上拉電阻按鍵未按下時(shí)始終處于高電平狀態(tài),讀按鍵值前先給P0口賦值為0;
P1.0作為DS18B20的數(shù)據(jù)輸入端口;
P2.0-P2.7作LCD1602的數(shù)據(jù)輸出端口;
P4.4-P4.6作LCD1602的控制信號(hào);
P1.3作為光耦合的控制信號(hào);
P3.0和P3.1是STC12C5A08S2的串口,實(shí)現(xiàn)上電復(fù)位程序下載。

圖 2-1 STC12C5A08S2最小系統(tǒng)原理圖

2.2 串行接口部分
MAX232通過內(nèi)部電壓倍增及電壓反向電路,把TTL電平與RS232電平互換,實(shí)現(xiàn)單片機(jī)與PC機(jī)的串口通信。
圖 2-2  MAX232及串行接口原理圖
2.3驅(qū)動(dòng)電路部分
JPWM為P1.3口的PWM信號(hào)輸入,作為光耦PC817的觸發(fā)導(dǎo)通信號(hào),從而產(chǎn)生MOS管IRP9540導(dǎo)通的觸發(fā)信號(hào),實(shí)現(xiàn)對(duì)右端負(fù)載的控制。如圖2-3所示,本電路中還加入了撥動(dòng)開關(guān)可對(duì)系統(tǒng)進(jìn)行開關(guān)控制。

圖 2-3  驅(qū)動(dòng)部分原理圖
3 軟件設(shè)計(jì)3.1 流程圖設(shè)計(jì)3.1.1 溫度控制主程序流程圖
溫度控制主程序流程圖設(shè)計(jì)如圖 3-1所示
STC12C5A08S2中的主程序需要完成下幾個(gè)工作:
  • 調(diào)用子函數(shù)對(duì)系統(tǒng)初始化,其中包括對(duì)自身的定時(shí)器T0,T1,I/O口,PWM口(P1.3),串口的初始化,以及對(duì)外部器件DS18B20和LCD1602的初始化;延時(shí)2S鐘顯示歡迎屏幕,等整個(gè)系統(tǒng)電壓穩(wěn)定后讀取開機(jī)時(shí)的溫度;
  • 調(diào)用子函數(shù)讀取當(dāng)前溫度值
  • 調(diào)用子函數(shù)把當(dāng)前讀取的溫度以及設(shè)定值通過串口送入PC機(jī)顯示;
  • 調(diào)用子函數(shù)判斷PC機(jī)是否有新的數(shù)據(jù)傳送到單片機(jī);
  • 調(diào)用子函數(shù),把設(shè)定值與當(dāng)前值相比較,對(duì)輸出PWM進(jìn)行控制;
  • 調(diào)用子函數(shù)刷新當(dāng)前頁(yè)面;
  • 調(diào)用子函數(shù)進(jìn)行按鍵判斷,依據(jù)按鍵值調(diào)用不同的子函數(shù)進(jìn)行翻頁(yè)或者設(shè)置;

圖 3-1溫度控制主程序流程圖

3.2 控制算法設(shè)計(jì)3.2.1 控制對(duì)象模型
制冷片的水箱模型可近似地認(rèn)為成一階慣性環(huán)節(jié),從而測(cè)量系統(tǒng)階躍響應(yīng)可模擬出系統(tǒng)的數(shù)學(xué)模型,G(s)=1/(T*s+1),其中T等于階躍響應(yīng)中調(diào)節(jié)時(shí)間Ts的四分之一。給電流I=0.5A時(shí)階躍響應(yīng)數(shù)據(jù)記錄如下,其中t=0時(shí),溫度約為27℃;t=100時(shí),溫度約為24℃。取終值11KΩ的98%,Ts約為54min=3240s,則G(s)=1/(810*s+1)。
              1.由此看出,制冷系統(tǒng)是大慣性系統(tǒng),制冷需要一段時(shí)間之后溫度才開始下降;
2.至停止制冷后,溫度還會(huì)有小幅度的下降,而設(shè)定溫度越低,下降的幅度越小;
3.由于與外界的熱交換,溫度越低時(shí),水箱的自然升溫速度越快。

圖 3-2 對(duì)象階躍響應(yīng)擬合曲線

3.2.2 PI控制器設(shè)計(jì)
PI調(diào)節(jié)器的微分方程為:y(t)=Kp[e(t)+1/Ti*∫e(t)dt]。控制器有兩種算法,位置型和增量型。位置型算法時(shí),計(jì)算每次實(shí)際值與設(shè)定值的偏差為e0,上次的偏差為e1,則控制量u=kp*e0+ki*(e0+e1)。增量型算法時(shí),u+=e0*ki+(e1-e0)*kp。本次系統(tǒng)中選用的是位置型算法。
3.2.3 控制器的設(shè)計(jì)
     根據(jù)制冷片的滯后特點(diǎn),為了使制冷片能迅速達(dá)到設(shè)定的溫度,應(yīng)該在離設(shè)定溫度較遠(yuǎn)時(shí)給負(fù)載加上最大功率;又為了防止制冷片的大慣性的特性使系統(tǒng)產(chǎn)生嚴(yán)重的超調(diào),需要提前在一定的范圍內(nèi)進(jìn)行PI控制以達(dá)到最佳效果;而最后階段,需要預(yù)先判斷系統(tǒng)的停止工作點(diǎn),讓制冷片的溫度擴(kuò)散的整個(gè)水箱,此時(shí)停止制冷。
              若設(shè)定溫度大于當(dāng)前溫度時(shí),系統(tǒng)也將停止制冷,等溫度慢慢回升。
現(xiàn)設(shè)定開始進(jìn)入PI控制的溫度上限為設(shè)定值T+1℃,而停止制冷的溫度,根據(jù)多次實(shí)驗(yàn)建立的數(shù)據(jù)庫(kù)如下:
設(shè)定值溫度范圍T℃
停止制冷溫度t℃
23<=T
T*0.006
19<=T<23
T+0.7
T<19
T
4  系統(tǒng)調(diào)試4.1 單片機(jī)程序仿真
              由于PROTEUS中沒有我們選用的STC12C5A08S2型號(hào)的單片機(jī),因此使用AT89S2的單片機(jī)代替。仿真電路如下圖所示,仿真時(shí)除初始化時(shí)當(dāng)前溫度顯示為85℃以外,一切工作正常。

圖 4-1 系統(tǒng)控制電路仿真電路圖

4.2 STC12C5A08S2單片機(jī)系統(tǒng)電路調(diào)試
    STC12C5A08S2最小系統(tǒng)包括晶振和復(fù)位電路,按鍵電路,LCD顯示,以及通信下載接口。
由于以前沒有使用過這個(gè)型號(hào)的單片機(jī),也沒有做過串口下載器,所以先把串口接口芯片MAX232及其外部電容和單片機(jī)的晶振電路接在面包板上,通過串口與單片機(jī)連接調(diào)試下載功能,由于一開始電源和地之間沒有接電容,因此系統(tǒng)不是很穩(wěn)定,有時(shí)可以下載,有時(shí)不可以,接入電容之后系統(tǒng)比較穩(wěn)定了。
依據(jù)插在面包板的電路圖畫原理圖以及PCB,板子做出來之后,用萬用表測(cè)試各點(diǎn)的連接特性,正常。上電,電源指示燈偏暗,把10K的限流電阻換為1K的之后指示燈工作正常。
由于STC12C5A08S2單片機(jī)運(yùn)算速度比89S52快,因此程序中延時(shí)子函數(shù)一律乘以12。修改管腳使其適應(yīng)實(shí)際的電路板,重新編譯后下載程序。液晶沒有顯示,調(diào)節(jié)液晶顯示偏壓信號(hào)端的電壓,使其接近地,液晶顯示正常。接上DS18B20,溫度顯示正常。用按鍵進(jìn)行翻頁(yè)及設(shè)置,按鍵功能正常。據(jù)此,單片機(jī)系統(tǒng)板及程序完全工作正常。
4.3 驅(qū)動(dòng)電路調(diào)試
驅(qū)動(dòng)電路板做好后進(jìn)行測(cè)試。用外用表測(cè)量,各點(diǎn)連接特性正常。分別把PWM輸入端接地和接VCC,用示波器觀察負(fù)載輸出電壓,輸出電壓對(duì)應(yīng)為零和為12伏,工作正常,接入PWM信號(hào)后,輸出變?yōu)榱悖徽!?/font>
用示波器觀察MOS管G極電壓,發(fā)現(xiàn)為鋸齒波,上升部分傾斜,下降部分豎直。分析原因?yàn)镸OS管的S極與電源之間的電阻太大,使通過MOS管的電流太小,MOS管的電容特性使其在一定充電時(shí)間內(nèi)電壓不能達(dá)到導(dǎo)通,因此輸出恒為零。把電阻調(diào)小,鋸齒波頂部逐漸變平,電阻繼續(xù)調(diào)小,輸出的最低電壓開始升高不為零。此時(shí)繼續(xù)調(diào)節(jié)電阻已沒有意義,在程序中把PWM輸出的波形頻率降低,降到最低14HZ。此時(shí)G極波形已為方波,繼續(xù)減小電阻,直到G極輸出的最低電壓恰好為零,使其能通過更高頻率的信號(hào)。最后稍微增大該電阻,使其電壓被允許在一定范圍內(nèi)波動(dòng)。
測(cè)量連接負(fù)載的D極,D極波形為與輸入的PWM反向的方波,驅(qū)動(dòng)電路工作正常。
4.4 系統(tǒng)調(diào)試
各個(gè)部分的調(diào)試完成以后,對(duì)整個(gè)系統(tǒng)進(jìn)行調(diào)試,從室溫約27.5℃開始,設(shè)置水箱的溫度分別為26℃,23℃,20℃。
具體記錄的數(shù)據(jù)如下所示。
表 6-5-1
設(shè)定值℃
最小值℃
最大值℃
超調(diào)量%
誤差范圍%
26
25.82
26.18
0.69
±0.69
23
22.88
23.18
0.52
±0.78
20
19.94
20.06
0.3
±0.3

加入算法后,超調(diào)量被控制在1%以下,溫度下降速度較快,較穩(wěn)定。
5          總結(jié)與改進(jìn)展望
本次設(shè)計(jì)中,我完成了包括資料收集,系統(tǒng)設(shè)計(jì)及仿真,程序編寫,電路圖與PCB板的繪制腐蝕焊接及調(diào)試的全過程,整個(gè)系統(tǒng)完成測(cè)試后,性能穩(wěn)定,基本達(dá)到了預(yù)期的目標(biāo)。
                 水箱溫度在29~10攝氏度范圍內(nèi)可控(設(shè)置值不大于當(dāng)前室溫),LCD液晶溫度顯示穩(wěn)定,與之前購(gòu)買的溫度計(jì)有大約恒定1℃的溫差。傳送到PC機(jī)的數(shù)據(jù)顯示正常,可以從PC機(jī)接收數(shù)據(jù)對(duì)各個(gè)參數(shù)進(jìn)行設(shè)置。
    溫度控制算法的設(shè)計(jì),在原模糊分段控制的基礎(chǔ)上,加上了PI控制,雖然最后由于時(shí)間關(guān)系,參數(shù)中只使用了P,但是可以證明,加入了PI控制的模糊算法比單純的模糊分段控制取得了更好的效果。
              在本次設(shè)計(jì)中,也存在著可以改進(jìn)的地方。例如程序中有部分程序段是幾乎重復(fù)使用的,但在各種情況下,只使用了switch函數(shù)分情況討論,沒有總結(jié)出特定的函數(shù)對(duì)所有的情況進(jìn)行處理,這導(dǎo)致了程序過長(zhǎng),應(yīng)該還有可以壓縮的空間。還有對(duì)于參數(shù)的調(diào)整,只使用了P,沒有用到I,而且對(duì)于停止控制的位置,也還應(yīng)該重新配合。這都是需要作出調(diào)整的,而且DS18B20檢測(cè)溫度只能精確到0.0625℃,若要再進(jìn)一步提升各種指標(biāo)的話,最好換一個(gè)精度更高的溫度檢測(cè)手段。
6  謝辭
本次設(shè)計(jì)能夠完成得到了許多幫助,首先感謝趙學(xué)軍老師,李平老師以及龍超老師的悉心指導(dǎo),為我們提供了設(shè)計(jì)的思路,為我們指出了設(shè)計(jì)的各種不足指出,并一次次為我們解決了調(diào)試過程中出現(xiàn)的各種問題。正是有了他們的指導(dǎo),我的設(shè)計(jì)才得以順利完成。
感謝一同進(jìn)行設(shè)計(jì)的同學(xué)們,是他們?cè)谖覍?duì)著板子一籌莫展地時(shí)候給我指出了可能的錯(cuò)誤,在調(diào)試過程中給予我各種意見,并且測(cè)量數(shù)據(jù)時(shí)給予我各種幫助,沒有他們的幫助,我的設(shè)計(jì)不能得以完善。  
感謝一直教導(dǎo)我的任課老師,是任課老師的諄諄教導(dǎo),使得我們可以學(xué)以致用,完成本次設(shè)計(jì)一定是基于扎實(shí)的理論課基礎(chǔ)的。
最后感謝在本次設(shè)計(jì)中所有幫助過我的老師同學(xué)們。


附  錄

主要電路PCB:

STC89C5A08S2最小系統(tǒng)
驅(qū)動(dòng)電路
STC12C5A08S2單片機(jī)源程序如下:
  1. #include<STC_NEW_8051.h>
  2. #include<DS18B20.h>
  3. #include<LCD1602.h>
  4. #define keys P0
  5. sbit PWM=P1^3;
  6. uchar settemp[12]={'S','e','t',':',' ','2','6','.','0',' ',0xdf,'C'};
  7. ucharnowtemp[12]={'N','o','w',':','0','2','6','.','5','0',0xdf,'C'};
  8. uchar welcome[16]="Welcome! O(^_^)O";
  9. uchar number[13]="0800320101 CC";
  10. uchar e[4]={0,0,0,0};            
  11. uchar us[4]={0,0,0,0};
  12. uchar shou[4];
  13. uchar TL,TH,page,num=0,whi=0;
  14. int  fub=100,ki=0,kp=50;
  15. uchar fus[8]="Fu: 100 ",kps[8]="Kp: 050 ",kis[8]="Ki: 000 ";
  16. int TN,TD,Ntemp100,Stemp100=2600,e1=0,e0=0,u=0;
  17. bit busy;

  18. /***************顯示設(shè)置**********************/
  19. void page0()//初始化歡迎頁(yè)
  20. {
  21.               int i;
  22.               _1602_init();
  23.               _1602_writecode(0x00+0x80);//設(shè)置顯示地址
  24.               for(i=0;i<16;i++)  //顯示歡迎
  25.                             _1602_writedata(welcome[i]);
  26.               _1602_writecode(0x40+0x80);//設(shè)置顯示地址
  27.               for(i=0;i<13;i++)  //顯示學(xué)號(hào)姓名
  28.                             _1602_writedata(number[i]);
  29.               for(i=0;i<40;i++)
  30.                             delay(5000);
  31. }

  32. void page1()                 //溫度顯示頁(yè)
  33. {
  34.               int i;
  35.               _1602_writecode(0x00+0x80);//設(shè)置顯示地址
  36.               for(i=0;i<12;i++)  //顯示設(shè)定溫度
  37.                             _1602_writedata(settemp[i]);
  38.               _1602_writecode(0x40+0x80);//設(shè)置顯示地址
  39.               for(i=0;i<12;i++)  //顯示現(xiàn)在溫度
  40.               if(Stemp100>2300)              stop=Stemp100*3/500;              //關(guān)斷值的模糊控制
  41.               else if(1900<Stemp100<=2300) stop=7;
  42.               else stop=0;
  43.               e1=e0;
  44.               e0=Ntemp100-Stemp100;
  45.               e[3]=e0%10;
  46.               e[2]=(e0/10)%10;
  47.               e[1]=(e0/100)%10;
  48.               e[0]=(e0/1000);            
  49.               _1602_writecode(0x0c+0x80);//設(shè)置顯示地址
  50.               for(i=0;i<4;i++)  //顯示誤差
  51.                             _1602_writedata(e[i]+0x30);
  52.               if(stop<e0<fub)//PI運(yùn)算
  53.               {            
  54.                             u=e0*kp/10;
  55.                             u+=(e1+e0)*ki/10;
  56.                             if(u>255) u=255;
  57.                             if(u<0) u=0;
  58.               }
  59.               if(e0>=fub) u=0xff; //全開
  60.               if(e0<=stop) u=0x00;//關(guān)斷
  61.               us[3]=u%10;
  62.               us[2]=(u/10)%10;
  63.               us[1]=(u/100)%10;
  64.               us[0]=(u/1000);
  65.               _1602_writecode(0x4c+0x80);//設(shè)置顯示地址
  66.               for(i=0;i<4;i++)  //顯示控制量
  67.                             _1602_writedata(us[i]+0x30);
  68.               CCAP0H=u;
  69. }
  70. /***********數(shù)據(jù)處理,控制********************/
  71. //改變占空比:CCAP0H=0xff-0xff*占空比/100=0xff-51/20*占空比              ;0x00,輸出100%,停止制冷;
  72. /************按鍵判斷處理********************/
  73. uchar keyin(void)              //單按鍵值判斷,1--setting,2--up,4--down,8--enter
  74. {
  75.               uchar key,come=0;
  76.               keys=0x00;
  77.               delay(2);
  78.               key=keys&0x0f;
  79.               if(key!=0)              //防抖
  80.               s=settemp[6]-0x30;
  81.               x=seting2(0x06,s);
  82.               settemp[6]=x+0x30;
  83.               Stemp100+=x*100;

  84.               s=settemp[8]-0x30;
  85.               x=seting2(0x08,s);
  86.               settemp[8]=x+0x30;
  87.               Stemp100+=x*10;
  88. }
  89. void setingc(uchar n) //按鍵的參數(shù)設(shè)置
  90. {
  91.               uchar s,i;
  92.               switch(n)
  93.               {
  94.                             case 0:{              fub=0;                                                        //模糊量
  95.                                                                       for(i=4;i<7;i++)
  96.                                                                       {
  97.                                                                                     s=fus[i]-0x30;
  98.                                                                                     s=seting2(i,s);
  99.                                                                                     fub=fub*10+s;
  100.                                                                                     fus[i]=s+0x30;
  101.                                                                       }
  102.                                                                                     break;
  103.                                                         }
  104.                             case 1:{              kp=0;                                                                        
  105.                                                                       for(i=4;i<7;i++)
  106.                                                                       {
  107.                                                                                     s=kps[i]-0x30;
  108.                                                                                     s=seting2(i+0x40,s);
  109.                                                                                     kp=kp*10+s;
  110.                                                                                     kps[i]=s+0x30;
  111.                                                                       }
  112.                                                                                     break;
  113.                                                         }
  114.                             case 2:{              ki=0;
  115.                                                                       for(i=4;i<7;i++)
  116.                                                                       {
  117.                                                                                     s=kis[i]-0x30;
  118.                                                                                     s=seting2(i+0x48,s);
  119.                                                                                     ki=ki*10+s;
  120.                                                                                     kis[i]=s+0x30;
  121.                                                                       }
  122.                                                                                     break;
  123. {
  124.                                                                                                   kps[i+3]=shou[i];
  125.                                                                                                   s=shou[i]-0x30;
  126.                                                                                                   kp=kp*10+s;
  127.                                                                                     }
  128.                                                                                     shou[0]=0;
  129.                                                                                     break;
  130.                                                                       }
  131.                             case 'I':              {                                                                                    //變量ki
  132.                                                                                     ki=0;
  133.                                                                                     for(i=1;i<4;i++)
  134.                                                                                     {
  135.                                                                                                   kis[i+3]=shou[i];
  136.                                                                                                   s=shou[i]-0x30;
  137.                                                                                                   ki=ki*10+s;
  138.                                                                                     }
  139.                                                                                     shou[0]=0;
  140.                                                                                     break;
  141.                                                                       }
  142.               }
  143. }
  144. /***********按鍵判斷處理**********************/
  145. /*************PWM初始化********************/
  146. void PWM_init()              //PWM初始化
  147. {
  148.               TMOD=0x22;//T0工作在方式2,8位重裝
  149.               TH0=0x00;
  150.               TR0=1; //開始計(jì)數(shù)
  151.               CCON=0x00;//關(guān)PCA
  152.               CH=0; CL=0;              //計(jì)數(shù)寄存器清零
  153.               CMOD=0x04;//始終工作;f=定時(shí)器0溢出頻率;PWM模式禁止中斷
  154.               CCAPM0=0X42; //PCA0工作在PWM模式
  155.               PCA_PWM0=0x00; //若此為為0x02,則輸出恒為0;若要調(diào)整占空比,需賦值為0;
  156.               CCAP0H=0x00;//輸出占空比100%
  157.               CR=1;  //開始計(jì)數(shù)
  158. }

  159. /**************PWM初始化*******************/
  160. /*************串口初始化********************/
  161. void Uart_init(void)
  162. {
  163.               IE=0x90;
  164.               void main()
  165. {
  166.               uchar key,i;
  167.               P4SW=0x70;//P4為IO口
  168.               page=1;                                                        //默認(rèn)頁(yè)為第一頁(yè)
  169.               PWM_init();
  170.               _1602_init();
  171.               Uart_init();                            //串口初始化
  172.               page0();                              //顯示初始化歡迎頁(yè)
  173.               _1602_writecode(0x01);//清屏
  174.               delay(50);//清屏后若無延時(shí)則第一個(gè)字符顯示不出
  175.               sent_pc(welcome,16);
  176.               sent_pc_byte('\r');  //13,10合起來為回車
  177.               sent_pc_byte('\n');
  178.               sent_pc(settemp,10);
  179.               sent_pc(nowtemp,10);
  180.               while(1)
  181.               {
  182. k1:                            gets();                                                        //讀取當(dāng)前溫度
  183.                             sent_pc_byte('\r');  //13,10合起來為回車
  184.                             sent_pc_byte('\n');
  185.                             sent_pc(settemp,10);   //給PC機(jī)送設(shè)定溫度以及當(dāng)前溫度
  186.                             sent_pc(nowtemp,10);
  187.                             control();                                          //進(jìn)行控制
  188.                             if(page==1)
  189.                             {
  190.                                           page1();              //顯示當(dāng)前溫度頁(yè)
  191.                                           key=keyin();//判斷鍵值
  192.                                           switch(key)
  193.                                           {
  194.                                                         case 1:              {CCAP0H=0x00;setingt(); goto k1;} //進(jìn)行設(shè)置
  195.                                                         case 2:                                          
  196.                                                         case 4: {              _1602_writecode(0x01);
  197.                                                                                     delay(50);//清屏
  198.                                                                                     page=2; }  //上下翻頁(yè)
  199.                                           }
  200.                             }
  201.                             if(page==2)
  202.                             {
  203.                                           page2();              //顯示參數(shù)設(shè)定頁(yè)
  204.                                           key=keyin();//判斷鍵值
  205.                                           switch(key)
  206. _1602_writedata(nowtemp[i]);
  207. }
  208. void page2()//參數(shù)顯示頁(yè)
  209. {
  210.                  int i;
  211.                  _1602_writecode(0x00+0x80);//設(shè)置顯示地址
  212.                  for(i=0;i<8;i++)  //顯示Fuzzy
  213.                             _1602_writedata(fus[i]);
  214.               _1602_writecode(0x40+0x80);//設(shè)置顯示地址
  215.                  for(i=0;i<8;i++)  //顯示kp
  216.                             _1602_writedata(kps[i]);
  217.               for(i=0;i<8;i++)  //顯示ki
  218.                             _1602_writedata(kis[i]);
  219.               _1602_writecode(0x0c+0x80);//設(shè)置顯示地址
  220.               _1602_writedata(whi+0x30);
  221.               _1602_writedata(' ');
  222.               _1602_writedata(' ');
  223.               _1602_writedata(' ');
  224. }
  225. /**************顯示設(shè)置*********************/
  226. ……………………

  227. …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼

完整的Word格式文檔51黑下載地址:
半導(dǎo)體制冷片溫度控制.doc (228.5 KB, 下載次數(shù): 98)




回復(fù)

使用道具 舉報(bào)

ID:142268 發(fā)表于 2020-5-4 22:21 | 顯示全部樓層
代碼可打包發(fā)下嗎

回復(fù)

使用道具 舉報(bào)

ID:791503 發(fā)表于 2020-7-15 11:29 | 顯示全部樓層
我看到驅(qū)動(dòng)部分還有H橋的,這幾種驅(qū)動(dòng)有啥區(qū)別呢?
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表