找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 7447|回復: 12
收起左側(cè)

PID溫度控制的STM32程序源碼

  [復制鏈接]
ID:394074 發(fā)表于 2018-9-5 15:38 | 顯示全部樓層 |閱讀模式
  1. #include "pid.h"
  2. #include "tm1640.h"
  3. #define K_percent  50
  4. #define T   0.1      //采樣周期為1s
  5. #define Ti  10000  //積分常數(shù)
  6. #define Td  0  //微分常數(shù)
  7. Struct_pid_def PID_Temp;        
  8. extern u16 Pump_Temp;
  9. void PID_init(void)
  10. {
  11. /*  
  12.         PID_Temp.Kp=20;//K_percent;
  13.   PID_Temp.Ki=0.2;//K_percent*(T/Ti);//積分系數(shù)
  14.   PID_Temp.Kd=1;//K_percent*(Td/T);//微分系數(shù)
  15. */
  16.         
  17.   PID_Temp.Kp=50;//K_percent;
  18.   PID_Temp.Ki=1.5;//K_percent*(T/Ti);//積分系數(shù)
  19.   PID_Temp.Kd=2.5;//K_percent*(Td/T);//
  20.         
  21.   PID_Temp.Set_value=50;//設定輸出值
  22.         
  23.         
  24.   PID_Temp.Now_value=Pump_Temp;        //當前輸出值
  25.   PID_Temp.Last_value=0;//上一次輸出值
  26.   PID_Temp.Pre_value=0;        //前一次輸出值
  27. }
  28. int Pid_calc(Struct_pid_def *PID)
  29. {
  30.         int Ek=0,Ek_Last=0,Ek_Pre=0;        
  31.         volatile float Pid_out=0;//定義當前誤差,上一次誤差,前一次誤差及pid的調(diào)整輸出值


  32.         PID->Now_value=Pump_Temp;        //當前輸出值
  33.         
  34.         Ek=(PID->Set_value)-(PID->Now_value);//計算當前誤差        
  35.         
  36.         
  37.         
  38.         Ek_Last=PID->Set_value-PID->Last_value;//計算當前誤差        
  39.         Ek_Pre=PID->Set_value-PID->Pre_value;//計算當前誤差
  40.         
  41.         

  42.   Pid_out=(Ek-Ek_Last)*PID->Kp + PID->Ki*Ek + (PID->Kd)*(Ek-2*Ek_Last+Ek_Pre);        
  43.         


  44.         
  45.   PID->Pre_value=        PID->Last_value;//存儲前次值        
  46.   PID->Last_value=PID->Now_value;//存儲上次值
  47.         
  48.         return (int)Pid_out;

  49. }

  50. u16 PID_Ctrl(void)
  51. {
  52.         int Hot_percent;


  53.         
  54.   Hot_percent+=Pid_calc(&PID_Temp);
  55. if(Hot_percent<0)
  56. {
  57. Hot_percent=0;
  58. }
  59. if(Hot_percent>100)
  60. {
  61. Hot_percent=100;
  62. }
  63.         
  64.         SEG_display(PID_Temp.Set_value,Hot_percent,Pump_Temp);

  65. return Hot_percent;



  66. }
復制代碼


全部資料51hei下載地址:
PID實驗.rar (374.52 KB, 下載次數(shù): 270)

回復

使用道具 舉報

ID:394074 發(fā)表于 2018-9-5 15:39 | 顯示全部樓層
這是PID.C文件內(nèi)的代碼,僅供參考
回復

使用道具 舉報

ID:394074 發(fā)表于 2018-9-5 15:39 | 顯示全部樓層
自己給自己頂帖
回復

使用道具 舉報

ID:346116 發(fā)表于 2018-9-30 23:54 | 顯示全部樓層
pid控制難點不編程而在整定

評分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

ID:113433 發(fā)表于 2019-1-17 12:10 | 顯示全部樓層
很值得參考 謝謝
回復

使用道具 舉報

ID:267330 發(fā)表于 2019-1-18 08:45 | 顯示全部樓層
溫度控制代碼啊
回復

使用道具 舉報

ID:473960 發(fā)表于 2019-1-31 22:50 | 顯示全部樓層
Firstime 發(fā)表于 2018-9-5 15:39
這是PID.C文件內(nèi)的代碼,僅供參考

為什么用不了啊
回復

使用道具 舉報

ID:473960 發(fā)表于 2019-1-31 22:50 | 顯示全部樓層

怎么用啊 好像沒有作用
回復

使用道具 舉報

ID:18591 發(fā)表于 2019-2-4 15:05 | 顯示全部樓層
感謝分享 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
回復

使用道具 舉報

ID:465064 發(fā)表于 2019-2-25 13:19 | 顯示全部樓層
好東西,學習了
回復

使用道具 舉報

ID:294005 發(fā)表于 2019-2-25 15:33 | 顯示全部樓層
樓主有沒有防過沖的PID算法。
回復

使用道具 舉報

ID:371270 發(fā)表于 2019-12-2 17:46 | 顯示全部樓層
樓主 NTC用的什么型號呀   真是謝謝樓主
回復

使用道具 舉報

ID:841387 發(fā)表于 2020-11-12 15:12 | 顯示全部樓層
我還想要圖
回復

使用道具 舉報

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

本版積分規(guī)則

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

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

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