pid算法源码
来源:互联网 发布:北师大网络不好 编辑:程序博客网 时间:2024/05/22 17:21
1. Kp参数:能迅速反映误差,从而减小误差,但他不能消除稳态误差,加大Kp还会引起系统的不稳定。
2. Ki参数:只要有足够的时间,积分作用将能完全消除误差。但其缺点积分控制是偏差累积控制,控制作业缓慢,但是如果积分作用太强会使系统的超调量加大,甚至出现振荡。
3. Kd参数:预测误差变化趋势,减小超调量,克服振荡,使系统的稳定性提高,还能加快系统的动态响应速度,减小调整时间,从而改善系统的动态性能。
参考代码如下:
1:
#include <stdio.h>
#include<stdlib.h>
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; //自己设定 0.2
pid.Ki=0.2; //自己设定 0.015
pid.Kd=0.2; //自己设定 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 main(){
printf("System begin \n");
PID_init();
int count=0;
while(count<100)
{
float speed=PID_realize(1000.0);
printf("%f\n",speed);
count++;
}
return 0;
}
2:
#include<stdio.h>
#include<stdlib.h>
struct _pid{
float SetSpeed; //定义设定值
float ActualSpeed; //定义实际值
float err; //定义偏差值
float err_next; //定义上一个偏差值
float err_last; //定义最上前的偏差值
float Kp,Ki,Kd; //定义比例、积分、微分系数
}pid;
void PID_init(){
pid.SetSpeed=0.0;
pid.ActualSpeed=0.0;
pid.err=0.0;
pid.err_last=0.0;
pid.err_next=0.0;
pid.Kp=0.2;
pid.Ki=0.015;
pid.Kd=0.2;
}
float PID_realize(float speed){
pid.SetSpeed=speed;
pid.err=pid.SetSpeed-pid.ActualSpeed;
float
incrementSpeed=pid.Kp*(pid.err-pid.err_next)+pid.Ki*pid.err+pid.Kd*(pid.err-2*pid.err_next+pid.err_last);
pid.ActualSpeed+=incrementSpeed;
pid.err_last=pid.err_next;
pid.err_next=pid.err;
return pid.ActualSpeed;
}
int main(){
PID_init();
int count=0;
while(count<1000)
{
float speed=PID_realize(200.0);
printf("%f\n",speed);
count++;
}
return 0;
}
- pid算法源码
- pid算法
- PID算法
- PID算法
- PID算法
- PID算法
- PID算法
- PID算法
- PID算法
- PID源码讲解
- 51单片机PID算法程序---PID算法
- 形象解释PID算法+PID算法源代码
- 形象解释PID算法+PID算法源代码
- PID算法(zt)
- PID算法的实现
- 数字PID算法
- PID算法理解
- 标准的PID算法
- 如何判断用户是否支持cookie
- 11:22 2017/8/8
- PHP 发送电子邮件
- ConcurrentHashMap的实现原理与使用
- 子集生成:增量构造法 位向量法 二进制法
- pid算法源码
- MTK Android Driver:UART
- zabbix通过orabbix和自定义脚本监控oracle数据库
- 服务一
- node中加载静态资源css,js等不显示问题
- 4937: [Ceoi2016]popeala
- android 保存bitmap到本地
- IO流(4)—字符流
- 把数组排成最小的数