久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 8235|回復: 13
收起左側

STC12C5A60S2單片機PID溫度調節程序

  [復制鏈接]
ID:379018 發表于 2018-12-6 19:27 | 顯示全部樓層 |閱讀模式
采用DS18B20采集溫度,電熱絲加熱。或者是專用模塊。

單片機源程序如下:
  1. #include "pid.h"

  2. PID pid; //存放PID算法所需要的數據


  3. void PID_Calc()  //pid計算
  4. {
  5.         float DelEk;
  6.         float ti,ki;
  7.         float td;
  8.         float kd;
  9.         float out;

  10. if(pid.C1ms<(pid.T/10))  //計算周期未到
  11. {
  12.     return ;
  13. }

  14. pid.Ek=pid.Sv-pid.Pv;   //得到當前的偏差值
  15. pid.Pout=pid.Kp*pid.Ek;      //比例輸出

  16. pid.SEk+=pid.Ek;        //歷史偏差總和

  17. DelEk=pid.Ek-pid.Ek_1;  //最近兩次偏差之差

  18. ti=pid.T/pid.Ti;
  19. ki=ti*pid.Kp;

  20.   pid.Iout=ki*pid.SEk;//*pid.Kp;  //積分輸出

  21. td=pid.Td/pid.T;
  22. kd=pid.Kp*td;

  23.   pid.Dout=kd*DelEk;    //微分輸出

  24. out= pid.Pout+ pid.Iout+ pid.Dout;

  25. //////////////////////////////////////////////////////////

  26. if(out>pid.pwmcycle)
  27. {
  28.   pid.OUT=pid.pwmcycle;
  29. }
  30. else if(out<0)
  31. {
  32.   pid.OUT=pid.OUT0;
  33. }
  34. else
  35. {
  36.   pid.OUT=out;
  37. }
  38. pid.Ek_1=pid.Ek;  //更新偏差

  39. pid.C1ms=0;

  40. }

  41. /*====================================
  42. 初始化  PID  函數
  43. =================================*/
  44. void PID_Init()
  45. {
  46.     pid.Sv=40;//用戶設定溫度
  47.         pid.Kp=30;
  48.         pid.T=1000;//PID計算周期
  49.     pid.Ti=500000;//積分時間
  50.         pid.Td=1000;//微分時間
  51.         pid.pwmcycle=200;//pwm周期1000
  52.         pid.OUT0=10;
  53. }
復制代碼

主程序:
  1. #include "DS18B20.h"
  2. #include "pid.h"
  3. #include "LCD.H"

  4. sbit pwmout=P1^5;          //PWM輸出口,此口可任意設定
  5. sbit wela=P2^7;
  6. sbit dula=P2^6;
  7. uchar count;           //占空比最小單位,也是以后的計數值
  8. void PID_out()  //輸出PID運算結果到負載---每1ms被調用1次
  9. {
  10.    static u16 pw;
  11.          pw++;
  12.          if(pw>=pid.pwmcycle)  //
  13.          {
  14.            pw=0;
  15.          }
  16.           //0  ~  pid.pwmcycle-1
  17.          
  18.          if(pw<pid.OUT)
  19.          {
  20.            pwmout=0;//加熱
  21.          }
  22.          else
  23.          {
  24.            pwmout=1;//停止加熱
  25.          }
  26.          
  27. }
  28. void init()
  29. {
  30.         TMOD=0x11;          
  31.         TH1=(65536-9174)/256;           //65526/256         這兩句記錄1個脈沖,即10毫秒產生一個中斷
  32.         TL1=(65536-9174)%256;           //65526%256         
  33.         TH0=(65536-9174)/256;           //65526/256         這兩句記錄500個脈沖,即10m秒產生一個中斷
  34.         TL0=(65536-9174)%256;           //65526%256         
  35.         EA=1;                   //開總中斷
  36.         ET0=1;                   //開定時器0中斷
  37.         ET1=1;                   //開定時器1中斷
  38.         pwmout=0;                   //先置輸出口為低電平
  39.         TR0=1;                        //以上設置完畢后,最后開啟定時器0
  40.         TR1=1;                        //以上設置完畢后,最后開啟定時器1
  41. }
  42. void tim0() interrupt 1                 //定時器0中斷函數
  43. {

  44.         TH0=(65536-9174)/256;
  45.         TL0=(65536-9174)%256;
  46.         pid.C1ms++;
  47.         PID_Calc();       
  48.        
  49. }
  50. /**/         
  51. void tim1() interrupt 3                 //定時器0中斷函數
  52. {
  53.         TH1=(65536-9174)/256;
  54.         TL1=(65536-9174)%256;                 
  55.         PID_out();
  56. }

  57. void main()
  58. {
  59.         uint i;
  60.         uchar datas1[]={0,0,0};
  61.         wela=0;
  62.         dula=0;
  63.         delay(2);
  64.         lcd_init();       
  65.         PID_Init();       
  66.         init();
  67. /*        ds_init( );//初始化DS18B20
  68.         write_byte(0xcc);//發送跳躍ROM指令
  69.         write_byte(0x4e);//寫暫存器指令
  70.         write_byte(0x7f);
  71.         write_byte(0xf7);
  72.         write_byte(0x1f);//配置工作在9位模式下
  73.         ds_init();//初始化DS18B20
  74.         write_byte(0xcc);//發送跳躍ROM指令
  75.         write_byte(0x48);         */       
  76.                 while(1)
  77.                 {                  
  78.                 datas1[2]=(int)pid.OUT%1000/100;
  79.                 datas1[3]=(int)pid.OUT%100/10;
  80.                 datas1[4]=(int)pid.OUT%10;
  81.                 lcd_pos(2,0);
  82.                 for(i=2;i<5;i++)
  83.                 write_dat(0x30+datas1[i]);       
  84.                 if(pid.C1ms>(pid.T/11))
  85.                 {
  86.                 Display_temp();
  87.                 }       
  88.                 }
  89. }
復制代碼


所有資料51hei提供下載:
PID溫度控制.zip (50.08 KB, 下載次數: 335)
回復

使用道具 舉報

ID:277550 發表于 2018-12-31 21:58 | 顯示全部樓層
不錯,不過少了lcd.c文件
回復

使用道具 舉報

ID:412814 發表于 2019-1-25 14:27 | 顯示全部樓層
這個真挺好,先研究下。謝謝樓主
回復

使用道具 舉報

ID:475247 發表于 2019-2-10 16:54 | 顯示全部樓層
devcang 發表于 2018-12-31 21:58
不錯,不過少了lcd.c文件

LCD就用不到吧,畢竟是很基礎的東西

評分

參與人數 2黑幣 +47 收起 理由
春風十里吹 + 12 很給力!
jinsheng7533967 + 35

查看全部評分

回復

使用道具 舉報

ID:71618 發表于 2019-4-25 11:09 | 顯示全部樓層
學習一下!
回復

使用道具 舉報

ID:524445 發表于 2019-4-29 15:11 | 顯示全部樓層
不錯!比較簡單,好理解!
回復

使用道具 舉報

ID:607640 發表于 2019-11-4 20:01 | 顯示全部樓層
你真是個好家伙,謝謝分享!
回復

使用道具 舉報

ID:607640 發表于 2019-11-4 20:02 | 顯示全部樓層
感謝分享!
回復

使用道具 舉報

ID:97678 發表于 2019-12-4 20:43 | 顯示全部樓層
初學者,最好還是文件完整,學習起來比較方便。希望補充完整
回復

使用道具 舉報

ID:676336 發表于 2020-2-20 20:27 | 顯示全部樓層
為什么if(pw<pid.out)就加熱,不然就停止加熱,這里不懂
回復

使用道具 舉報

ID:299193 發表于 2020-3-11 01:03 | 顯示全部樓層
真不錯,謝謝了!
回復

使用道具 舉報

ID:299193 發表于 2020-3-13 22:41 | 顯示全部樓層
不錯,好好學習一下
回復

使用道具 舉報

ID:364328 發表于 2020-3-19 21:10 | 顯示全部樓層
只有程序沒有電路圖嗎請問
回復

使用道具 舉報

ID:239055 發表于 2020-3-20 07:07 來自手機 | 顯示全部樓層
學習了,51黑的資源有點少,希望大家多參與
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲一区不卡在线 | 波多野结衣av中文字幕 | 精品免费在线 | 国产免费一区二区 | 一区二区三区精品在线 | 精品国产乱码久久久久久老虎 | 国产日韩一区二区 | 亚洲一区二区三区免费在线观看 | 精品久久久网站 | 精品日韩一区二区 | 99久久久久久久久 | 日韩一区二区在线视频 | 久久99精品久久久久久青青日本 | 精品国产网 | 中文字幕av亚洲精品一部二部 | 国产精品片aa在线观看 | www精品美女久久久tv | 亚洲国产一区二区在线 | 精品视频一区二区三区在线观看 | 欧美日韩专区 | 欧美一区二区三区在线视频 | 国产欧美一区二区三区久久手机版 | 久久久久久久一区二区三区 | 国产精品美女久久久 | 国产在线播 | 国产精品免费观看视频 | 在线一区二区国产 | 欧美视频区 | 欧美成年黄网站色视频 | 久久国产精品一区二区 | 日本小电影网站 | 精品乱人伦一区二区三区 | 日本不卡高清视频 | 欧美成年黄网站色视频 | 福利在线观看 | www.国产一区| 久久国产精品久久国产精品 | 久久精品国产a三级三级三级 | 一级毛片视频免费观看 | 久久精品免费 | 久久免费视频在线 |