亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 53|回復: 0
打印 上一主題 下一主題
收起左側(cè)

單片機+K型熱電偶MAX6675 電熱爐溫度控制器設(shè)計 程序仿真原理圖

[復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:1162724 發(fā)表于 2026-6-15 10:29 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
針對電阻加熱爐溫控需求,本文設(shè)計了一套以AT89C51 單片機為核心的溫度閉環(huán)控制系統(tǒng)。系統(tǒng)采K型熱電偶搭配MAX6675轉(zhuǎn)換芯片完成高溫信號采集,依托芯片內(nèi)置 12 位 ADC、冷端補償及 SPI 通信功能,實現(xiàn)溫度信號的數(shù)字化轉(zhuǎn)換與穩(wěn)定傳輸;使用 8 位共陽數(shù)碼管實時展示溫度數(shù)據(jù)與系統(tǒng)狀態(tài),通過獨立按鍵完成目標溫度、報警閾值、PID 參數(shù)的在線整定與工作模式切換。系統(tǒng)以數(shù)字 PID 算法作為核心控制策略,結(jié)合軟件方式生成 PWM 波形,通過調(diào)節(jié)雙向晶閘管導通占空比改變加熱功率,進而實現(xiàn)電阻加熱爐的恒溫控制。同時電路增設(shè)聲光報警模塊,具備超溫、傳感器故障提示功能。經(jīng)整體調(diào)試,該系統(tǒng)結(jié)構(gòu)簡單、成本低廉、抗干擾能力強、操作便捷,控溫效果穩(wěn)定,能夠滿足中小型電阻加熱爐的溫度控制要求,具備較強的實際應用價值。

仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


電路原理圖如下:

程序流程圖:

單片機K型熱電偶電熱爐源程序如下:
  1. #include "reg51.h"
  2. #include "max6675.h"
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. sbit smg1=P2^0;//數(shù)碼管
  6. sbit smg2=P2^1;
  7. sbit smg3=P2^2;
  8. sbit smg4=P2^3;
  9. sbit smg5=P2^4;
  10. sbit smg6=P2^5;
  11. sbit smg7=P2^6;
  12. sbit smg8=P2^7;
  13. sbit k1=P1^0;//按鈕
  14. sbit k2=P1^1;
  15. sbit k3=P1^2;
  16. sbit k4=P1^3;
  17. sbit k5=P1^4;
  18. sbit k6=P1^5;
  19. sbit k7=P1^6;
  20. sbit beep=P3^7;//蜂鳴器
  21. sbit out=P3^6;//輸出控制
  22. uchar time=0;//系統(tǒng)定時
  23. uint wendu=0;//溫度
  24. uchar pwm=0;//占空比
  25. uchar mode=0;//模式
  26. uint set=800;//設(shè)置溫度
  27. uint limit=1000;//報警溫度
  28. uchar ii=0;
  29. //數(shù)碼管編碼
  30. uchar code smgduan[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

  31. uchar P_dat=1,I_dat=1,D_dat=1;//PID參數(shù)
  32. uint pid_dat[]={0,0,0,0,0}; //臨時數(shù)據(jù)
  33. //PID計算,返回占空比
  34. uchar PID(uint mub,uint dat)//調(diào)整目標+測量數(shù)據(jù)
  35. {
  36.         uchar i=0;
  37.         uint j=0,sum=0,k=0;
  38.         //存儲數(shù)據(jù)
  39.         for(i=0;i<4;i++)
  40.                 pid_dat[i]=pid_dat[i+1];
  41.         pid_dat[4]=dat;

  42.         //P調(diào)節(jié)
  43.         j=0;
  44.         if(dat<mub)
  45.         {
  46.                 j=j+(mub-dat)*P_dat;
  47.                 if(j>100)
  48.                         j=100;
  49.         }
  50.         else
  51.         {
  52.                 k=(dat-mub)*P_dat;
  53.                 if(j>k)
  54.                         j=j-k;
  55.         }
  56.         //I調(diào)節(jié)
  57.         sum=0;
  58.         for(i=0;i<5;i++)
  59.                 sum+=pid_dat[i];
  60.         sum=sum/5;
  61.         if(sum>mub)//減小
  62.         {
  63.                 k=(sum-mub)*I_dat;
  64.                 if(j>k)
  65.                         j=j-k;
  66.         }
  67.         else  //增加
  68.         {
  69.                 k=(mub-sum)*I_dat;
  70.                 j+=k;
  71.                 if(j>100)
  72.                         j=100;
  73.         }
  74.         //D調(diào)節(jié)
  75.         if(dat>pid_dat[3])//減小
  76.         {
  77.                 k=(dat-pid_dat[3])*D_dat;
  78.                 if(j>k)
  79.                         j=j-k;
  80.         }
  81.         else  //增加
  82.         {
  83.                 k=(pid_dat[3]-dat)*D_dat;
  84.                 j+=k;
  85.                 if(j>100)
  86.                         j=100;
  87.         }
  88.         return j;
  89. }
  90. //延時
  91. void delay(uint i)
  92. {
  93.         while(i--)
  94.         {
  95.                 if(ii<99)//占空比計時
  96.                         ii++;
  97.                 else
  98.                         ii=0;
  99.                 if(ii<pwm)//輸出控制
  100.                         out=0;
  101.                 else
  102.                         out=1;
  103.         }
  104. }
  105. //主函數(shù)
  106. void main()
  107. {
  108.         uchar k=0;
  109.         TMOD|=0X01;//初始化定時器
  110.         TH0=0X3C;
  111.         TL0=0XB0;        
  112.         ET0=1;//打開定時器0中斷允許
  113.         EA=1;//打開總中斷
  114.         TR0=1;//打開定時器
  115.         while(1)
  116.         {               
  117.                 if(P1==0xff)
  118.                         k=0;
  119.                 //設(shè)置
  120.                 if(!k1 &&(k!=1))//設(shè)置切換
  121.                 {
  122.                         k=1;
  123.                         if(mode<5)
  124.                                 mode++;
  125.                         else
  126.                                 mode=0;
  127.                 }
  128.                 //設(shè)置調(diào)整溫度
  129.                 if(mode==1)
  130.                 {
  131.                         if(!k2 &&(k!=2))//+1
  132.                         {
  133.                                 k=2;
  134.                                 if(set<9999)
  135.                                         set++;
  136.                         }
  137.                         if(!k3 &&(k!=3))//-1
  138.                         {
  139.                                 k=3;
  140.                                 if(set>0)
  141.                                         set--;
  142.                         }
  143.                         if(!k4 &&(k!=4))//+10
  144.                         {
  145.                                 k=4;
  146.                                 if(set<9999)
  147.                                         set+=10;
  148.                         }
  149.                         if(!k5 &&(k!=5))//-10
  150.                         {
  151.                                 k=5;
  152.                                 if(set>10)
  153.                                         set-=10;
  154.                         }
  155.                         if(!k6 &&(k!=6))//+100
  156.                         {
  157.                                 k=6;
  158.                                 if(set<9999)
  159.                                         set+=100;
  160.                         }
  161.                         if(!k7 &&(k!=7))//-100
  162.                         {
  163.                                 k=7;
  164.                                 if(set>100)
  165.                                         set-=100;
  166.                         }
  167.                 }
  168.                 //設(shè)置報警溫度
  169.                 if(mode==2)
  170.                 {
  171.                         if(!k2 &&(k!=2))//+1
  172.                         {
  173.                                 k=2;
  174.                                 if(limit<9999)
  175.                                         limit++;
  176.                         }
  177.                         if(!k3 &&(k!=3))//-1
  178.                         {
  179.                                 k=3;
  180.                                 if(limit>0)
  181.                                         limit--;
  182.                         }
  183.                         if(!k4 &&(k!=4))//+10
  184.                         {
  185.                                 k=4;
  186.                                 if(limit<9999)
  187.                                         limit+=10;
  188.                         }
  189.                         if(!k5 &&(k!=5))//-10
  190.                         {
  191.                                 k=5;
  192.                                 if(limit>10)
  193.                                         limit-=10;
  194.                         }
  195.                         if(!k6 &&(k!=6))//+100
  196.                         {
  197.                                 k=6;
  198.                                 if(limit<9999)
  199.                                         limit+=100;
  200.                         }
  201.                         if(!k7 &&(k!=7))//-100
  202.                         {
  203.                                 k=7;
  204.                                 if(limit>100)
  205.                                         limit-=100;
  206.                         }
  207.                 }
  208.                 //設(shè)置P參數(shù)
  209.                 if(mode==3)
  210.                 {
  211.                         if(!k2 &&(k!=2))//+1
  212.                         {
  213.                                 k=2;
  214.                                 if(P_dat<99)
  215.                                         P_dat++;
  216.                         }
  217.                         if(!k3 &&(k!=3))//-1
  218.                         {
  219.                                 k=3;
  220.                                 if(P_dat>0)
  221.                                         P_dat--;
  222.                         }                        
  223.                 }
  224.                 //設(shè)置I參數(shù)
  225.                 if(mode==4)
  226.                 {
  227.                         if(!k2 &&(k!=2))//+1
  228.                         {
  229.                                 k=2;
  230.                                 if(I_dat<99)
  231.                                         I_dat++;
  232.                         }
  233.                         if(!k3 &&(k!=3))//-1
  234.                         {
  235.                                 k=3;
  236.                                 if(I_dat>0)
  237.                                         I_dat--;
  238.                         }                        
  239.                 }
  240.                 //設(shè)置D參數(shù)
  241.                 if(mode==5)
  242.                 {
  243.                         if(!k2 &&(k!=2))//+1
  244.                         {
  245.                                 k=2;
  246.                                 if(D_dat<99)
  247.                                         D_dat++;
  248.                         }
  249.                         if(!k3 &&(k!=3))//-1
  250.                         {
  251.                                 k=3;
  252.                                 if(D_dat>0)
  253.                                         D_dat--;
  254.                         }                        
  255.                 }
  256.                 //報警
  257.                 if(wendu>limit)
  258.                         beep=0;
  259.                 else
  260.                         beep=1;
  261.                 //顯示
  262.                 if(mode==0)
  263.                 {
  264.                         P0=smgduan[wendu/1000];                smg5=0;delay(50);smg5=1;
  265.                         P0=smgduan[wendu%1000/100];        smg6=0;delay(50);smg6=1;
  266.                         P0=smgduan[wendu%100/10];        smg7=0;delay(50);smg7=1;
  267.                         P0=smgduan[wendu%10];                smg8=0;delay(50);smg8=1;
  268.                 }
  269.                 if(mode==1)
  270.                 {
  271.                         P0=smgduan[1];                                smg1=0;delay(50);smg1=1;
  272.                         P0=smgduan[set/1000];                smg5=0;delay(50);smg5=1;
  273.                         P0=smgduan[set%1000/100];        smg6=0;delay(50);smg6=1;
  274.                         P0=smgduan[set%100/10];                smg7=0;delay(50);smg7=1;
  275.                         P0=smgduan[set%10];                        smg8=0;delay(50);smg8=1;
  276.                 }
  277.                 if(mode==2)
  278.                 {
  279.                         P0=smgduan[2];                                smg1=0;delay(50);smg1=1;
  280.                         P0=smgduan[limit/1000];                smg5=0;delay(50);smg5=1;
  281.                         P0=smgduan[limit%1000/100];        smg6=0;delay(50);smg6=1;
  282.                         P0=smgduan[limit%100/10];        smg7=0;delay(50);smg7=1;
  283.                         P0=smgduan[limit%10];                smg8=0;delay(50);smg8=1;
  284.                 }
  285.                 if(mode==3)
  286.                 {
  287.                         P0=smgduan[3];                                smg1=0;delay(50);smg1=1;
  288.                         P0=smgduan[P_dat/10];                smg7=0;delay(50);smg7=1;
  289.                         P0=smgduan[P_dat%10];                smg8=0;delay(50);smg8=1;
  290.                 }
  291.                 if(mode==4)
  292.                 {
  293.                         P0=smgduan[4];                                smg1=0;delay(50);smg1=1;
  294.                         P0=smgduan[I_dat/10];                smg7=0;delay(50);smg7=1;
  295.                         P0=smgduan[I_dat%10];                smg8=0;delay(50);smg8=1;
  296.                 }
  297.                 if(mode==5)
  298.                 {
  299.                         P0=smgduan[5];                                smg1=0;delay(50);smg1=1;
  300.                         P0=smgduan[D_dat/10];                smg7=0;delay(50);smg7=1;
  301.                         P0=smgduan[D_dat%10];                smg8=0;delay(50);smg8=1;
  302.                 }                                                                          
  303.         }
  304. }

  305. //定時器0中斷
  306. void Timer0() interrupt 1
  307. {
  308.         unsigned long j;
  309.         if(time<10)//0.5s
  310.                 time++;
  311.         else
  312.         {
  313.                 time=0;
  314.                 wendu=max_read();//測溫
  315.                 j=wendu;
  316.                 j=j*100/138;
  317.                 wendu=j;
  318.                 pwm=PID(set,wendu);//PID計算
  319.         }
  320.         TH0=0X3C;
  321.         TL0=0XB0;
  322. }
復制代碼

51hei.png (4.35 KB, 下載次數(shù): 0)

51hei.png

第2組電阻加熱爐溫度控制系統(tǒng)的數(shù)字控制器設(shè)計.docx

3.66 MB, 下載次數(shù): 0, 下載積分: 黑幣 -5

TP401-V1.1.1-電熱爐.zip

1.2 MB, 下載次數(shù): 0, 下載積分: 黑幣 -5

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

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

本版積分規(guī)則

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

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

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