单片机论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 701|回复: 8
打印 上一主题 下一主题
收起左侧

PID温度控制的STM32程序源码

[复制链接]
跳转到指定楼层
楼主
Firstime 发表于 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  //积分常数
  6. #define Td  0  //微分常数
  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);//积分系数
  14.   PID_Temp.Kd=1;//K_percent*(Td/T);//微分系数
  15. */
  16.         
  17.   PID_Temp.Kp=50;//K_percent;
  18.   PID_Temp.Ki=1.5;//K_percent*(T/Ti);//积分系数
  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的调整输出值


  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, 下载次数: 43)

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 转播转播 分享分享 分享淘帖 顶 踩
回复

使用道具 举报

沙发
 楼主| Firstime 发表于 2018-9-5 15:39 | 只看该作者
这是PID.C文件内的代码,仅供参考
回复

使用道具 举报

板凳
 楼主| Firstime 发表于 2018-9-5 15:39 | 只看该作者
自己给自己顶帖
回复

使用道具 举报

地板
little4_su 发表于 2018-9-30 23:54 | 只看该作者
pid控制难点不编程而在整定

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

5#
maxsuntech 发表于 2019-1-17 12:10 | 只看该作者
很值得參考 謝謝
回复

使用道具 举报

6#
jiangkeqin_sy 发表于 2019-1-18 08:45 | 只看该作者
温度控制代码啊
回复

使用道具 举报

7#
qwetrq 发表于 2019-1-31 22:50 | 只看该作者
Firstime 发表于 2018-9-5 15:39
这是PID.C文件内的代码,仅供参考

为什么用不了啊
回复

使用道具 举报

8#
qwetrq 发表于 2019-1-31 22:50 | 只看该作者
Firstime 发表于 2018-9-5 15:39
自己给自己顶帖

怎么用啊 好像没有作用
回复

使用道具 举报

9#
jxchen 发表于 2019-2-4 15:05 | 只看该作者
感謝分享 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|单片机论坛 |51黑电子论坛单片机.

Powered by 单片机教程网

快速回复 返回顶部 返回列表