找回密码
 立即注册

QQ登录

只需一步,快速开始

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

stm32 PID增量式算法控制温度源程序

[复制链接]
跳转到指定楼层
楼主
ID:506480 发表于 2019-4-7 21:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. #include "pid.h"

  2. PID pid;
  3. extern u16 pidcalcms;
  4. void PIDParament_Init()  //
  5. {
  6.   pid.set =100;
  7.         pid.currpwm=0;
  8.         pid.pwm_cycle=100;    //
  9. //  pid.pid_P=8;
  10. //        pid.pid_I=4;
  11. //        pid.pid_D=5;
  12.         pid.calc_cycle=100;  
  13.         
  14.         pid.Td=2000;
  15.         pid.Ti=4000;
  16.         pid.Kp=5;
  17.         pid.Tsam=500;
  18. }

  19. /*
  20. void pid_calc()  //pid??
  21. {
  22.   //int dk;

  23.         
  24.   short PID_out;
  25.         
  26.         if(pidcalcms<pid.calc_cycle) return ;

  27.   pid.Ek=pid.set-pid.curr;//????(????-????)
  28.   PID_out=((pid.pid_P)*((pid.Ek)-(pid.Ek_1)))+ \
  29.           ((pid.pid_I)*(pid.Ek))+ \
  30.           ((pid.pid_D)*((pid.Ek)-(2*(pid.Ek_1))+(pid.Ek_2)));   //??????
  31.   pid.currpwm+=PID_out;
  32.   pid.Ek_2=pid.Ek_1;  //???????
  33.   pid.Ek_1=pid.Ek;    //??????

  34.   if(pid.currpwm>pid.pwm_cycle)  //1000    //1s??PWM??
  35.   {
  36.      pid.currpwm=pid.pwm_cycle;   //????????1000???????
  37.   }
  38.   if(pid.currpwm<=0)  //??????0??0??(????)
  39.   {
  40.       pid.currpwm=0;//   
  41.   }  //PID????
  42. pidcalcms=0;
  43. }
  44. */
  45. void pid_calc()  //pid??
  46. {
  47.   float dk1;float dk2;
  48.   float t1,t2,t3;
  49.         
  50.   //short PID_out;
  51.         
  52.         if(pidcalcms<pid.Tsam) return ;  //
  53.         pid.En=pid.set-pid.curr;  //本次误差
  54.         dk1=pid.En-pid.En_1;   //本次偏差与上次偏差之差
  55.         dk2=pid.En-2*pid.En_1+pid.En_2;
  56.         
  57.   t1=pid.Kp*dk1;
  58.         
  59.         t2=(pid.Kp*pid.Tsam)/pid.Ti;
  60.         t2=t2*pid.En;
  61.         
  62.         t3=(pid.Kp*pid.Td)/pid.Tsam;
  63.         t3=t3*dk2;
  64.         
  65.   pid.Dout=t1+t2+t3;  //本次应该输出的增量
  66.         pid.currpwm+=pid.Dout;  //本次应该输出的PWM
  67.         if(pid.currpwm>pid.pwm_cycle)
  68.         {
  69.           pid.currpwm=pid.pwm_cycle;
  70.         }
  71.         if(pid.currpwm<0)
  72.         {
  73.          pid.currpwm=0;
  74.         }
  75.         pid.En_2=pid.En_1;
  76.         pid.En_1=pid.En;
  77.         
  78.   pidcalcms=0;
  79. }
  80. 注释掉的为位控制算法
复制代码

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

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

使用道具 举报

沙发
ID:405860 发表于 2020-3-29 15:40 | 只看该作者
你好,可以分享一下这段程序的头文件吗
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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