找回密码
 立即注册

QQ登录

只需一步,快速开始

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

求助模糊PID控制如何在stm32中实现

[复制链接]
跳转到指定楼层
楼主
ID:262876 发表于 2017-12-17 21:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
有哪位大神知道模糊PID控制如何在stm32中实现吗???求告知。。。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:155507 发表于 2017-12-18 17:35 | 只看该作者
  1. //======================================================================
  2. //Adjust these three factor ,to achieve the best control effect
  3. //P:1~10之间 I:0-5之间 D:0.1~1
  4. float P_Coefficient=4.75;
  5. float I_Coefficient=0.55;
  6. float D_Coefficient=0.2;
  7. #define Diff_Order 4 /* Differential order*/
  8. int Temp,DestTemp,HeatPower;
  9. int Set_Distant;
  10. long int Integral=5; // Points accumulated
  11. float Prev_Error[10]; // Record ten times before the error
  12. float P,I,D;
  13. float Ek,E;
  14. unsigned char FirstFlag=1;
  15. /*******************************************************************************
  16. * Funtion name:PID Control
  17. * Time:2013/3/5
  18. * Author:zhuhao
  19. *******************************************************************************/
  20. float PID_Control(float Error)
  21. {
  22.         int i;
  23.         float Output;
  24.         float Ture;
  25.         if(FirstFlag)//The first execution
  26.         {
  27.                 FirstFlag=0;
  28.                 for(i=0;i<10;i++)
  29.                 Prev_Error=Error;
  30.         }
  31.         for(i=0;i<10;i++)
  32.         Prev_Error[i+1]=Prev_Error;// Buffer queue
  33.         Prev_Error[0]=Error;//
  34.         Ek=Error-Prev_Error[Diff_Order];//
  35.         E=0.8+Ek*0.2;//IIR
  36.         P=P_Coefficient*Error;// Calculate the proportional component
  37.         I=I_Coefficient*Integral;// Calculate the integral component
  38.         D=D_Coefficient*E;//Calculate the derivative component
  39.         Output=(P+I+D);
  40.         if(Output>0)
  41.         {
  42.                 Ture=Output;
  43.         }
  44.         if(Output>=100||Output<=0||Error<-40||Error>40)//Saturated or large deviation integral
  45.         {
  46.                 if(Integral>0&&Error<0)
  47.                 Integral+=Error;
  48.                 if(Integral<0&&Error>0)
  49.                 Integral+=Error;
  50.         }
  51.         else
  52.         Integral+=Error;
  53.         if(Integral<-10) Integral=-10;
  54.         if(Integral>10) Integral=10;
  55.         if (Output>=100)
  56.         Output=99;
  57.         else if(Output<=0)
  58.         Output=Ture;
  59.         return Output;
  60. }

复制代码



初次调试速度PID全过程(分享PID函数)
http://www.51hei.com/bbs/dpj-42514-1.html
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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