当前位置: 首页 > news >正文

PID控制算法(二)

(BIlibili借鉴)PID参数整定连接:Webpack App (rossning92.github.io)

C++的基本程序代码:

借鉴链接:PID超详细教程——PID原理+串级PID+C代码+在线仿真调参-CSDN博客

#include <iostream>using namespace std;struct _pid{float SetSpeed; //定义设定值float ActualSpeed; //定义实际值float err; //定义偏差值float err_last; //定义上一个偏差值float Kp,Ki,Kd; //定义比例、积分、微分系数float voltage; //定义电压值(控制执行器的变量)float integral; //定义积分值
}pid;void PID_init(){printf("PID_init begin \n");pid.SetSpeed=0.0;pid.ActualSpeed=0.0;pid.err=0.0;pid.err_last=0.0;pid.voltage=0.0;pid.integral=0.0;pid.Kp=0.2;pid.Ki=0.015;pid.Kd=0.2;printf("PID_init end \n");
}float PID_realize(float speed){pid.SetSpeed=speed;pid.err=pid.SetSpeed-pid.ActualSpeed;pid.integral+=pid.err;pid.voltage=pid.Kp*pid.err+pid.Ki*pid.integral+pid.Kd*(pid.err-pid.err_last);pid.err_last=pid.err;pid.ActualSpeed=pid.voltage*1.0;return pid.ActualSpeed;
}int run_pid(){printf("System begin \n");PID_init();int count=0;while(count<1000) {float actual_speed=PID_realize(280.0);printf("count is: %d, actual_speed is: %f\n", count, actual_speed);count++;}return 0;
}int main(int argc, char const *argv[])
{run_pid();return 0;
}

以上核心部分为PID_relalize函数,PID_out实际上也就是比例部分、积分部分和微分部分三个之和的输出叠加。

PID_out = Kp*pid.err + Ki*Σerr + Kd*(pid.err-pid.err_last);

另外上述代码是根据提前确定好的值通过PID算法使之不断靠近,如何实现在代码运行时通过设定不同值来实现PID算法的问题还在解决中……


http://www.mrgr.cn/news/22736.html

相关文章:

  • 【脊线图】:附Origin详细画图流程
  • 优化销售流程,领先市场趋势!企元数智赠送小程序合规分销系统!
  • 《语文新读写》是知网收录吗?语文新读写编辑部查询
  • How to handle the response OpenAI Text-To-Speech API in Node.js?
  • 基于单片机的盲人智能水杯系统(论文+源码)
  • 声音克隆工具CosyVoice
  • 极狐GiLab 17.3 重点功能解读 升级指南
  • 基于微信小程序+Java+SSM+Vue+MySQL的考研论坛
  • ESP32 UDP 05
  • SpringBoot集成MyBatis-Plus
  • 电商数据API接口|唯品会商品详情数据的接入说明【附测试实例】
  • 并网光伏发电对电网电能质量的影响和治理方案
  • 解决:web of science文献检索点不动,只能用作者检索的情况
  • 还不会数据恢复?试试这4款软件吧!
  • 一、java基础面试题
  • 变量与命名
  • 盘点10款顶级加密软件,让企业数据安全得到保障!
  • 1.Python解释器和Pycharm安装设定
  • 代码训练营 Day 27|455.分发饼干 | 376. 摆动序列 | 53. 最大子序和
  • Linux网络:网络协议栈协议