控制算法、基本定义及其实现
来源:互联网 发布:ubuntu还是deepin 编辑:程序博客网 时间:2024/04/27 22:24
控制系统基本环节
- 比例
- 积分
- 微分
- 惯性
- 二阶系统
- 延时
PID调节
基本公式
- 可以直接在网上搜
分类
位置式PID
- PID输出直接给输出
增量式PID
- PID得到的输出叠加在上一次PID的输出中作为系统输出
积分分离PID
- 当控制量与给定值相差较大时,取消积分作用, 避免积分累加和过大造成的系统不稳定因素增加
相关代码
float SeqIntPID(float Kp, float Ki, float Kd, float GiveValue, float ActualValue){ float result; float Err,KpWork, KiWork, KdWork; Err = GiveValue - ActualValue; KpWork = Kp*Err; KiWork = Ki*SeqIntPIDErrADD; KdWork = Kd*(Err-SeqIntErrBack); if(fabs(Err) > 100) { result = KpWork+KdWork; } else{ result = KpWork+KiWork+KdWork; } SeqIntPIDErrADD = SeqIntPIDErrADD + Err; SeqIntErrBack = Err; return result;}
抗积分饱和PID
- 2种方法
- 限制积分累加和
- 限制每次的控制量输出(可以防止长期停止在饱和区)
相关代码(限制每次控制量输出代码)
float OverIntPID(float Kp, float Ki, float Kd, float GiveValue, float ActualValue){ float result; float Err,KpWork, KiWork, KdWork; Err = GiveValue - ActualValue; if(OverIntResultBack > 120) { if(Err < 0) { OverIntPIDErrADD = OverIntPIDErrADD + Err; } } else if(OverIntResultBack < 120) { if(Err > 0) { OverIntPIDErrADD = OverIntPIDErrADD + Err; } } else { OverIntPIDErrADD = OverIntPIDErrADD + Err; } KpWork = Kp*Err; KiWork = Ki*OverIntPIDErrADD; KdWork = Kd*(Err-OverIntErrBack); result = KpWork+KiWork+KdWork; OverIntErrBack = Err; OverIntResultBack = result; return result;}
变积分PID实现
- 说明
- 偏差越大,积分越慢;偏差越小,积分越快。
- 给定累加的偏差一个权值,当系统偏差大于某一个值时,累积不完全的偏差值,甚至不进行偏差值的累加。
相关代码
float ChangeIntPID(float Kp, float Ki, float Kd, float GiveValue, float ActualValue){ float result; float Err,KpWork, KiWork, KdWork,ErrCont; Err = GiveValue - ActualValue; KpWork = Kp*Err; KiWork = Ki*ChangeIntPIDErrADD; KdWork = Kd*(Err-ChangeIntErrBack); result = KpWork+KiWork+KdWork; if(fabs(Err)<= GiveValue*0.1) { ErrCont = Err; } else if((fabs(Err)<= GiveValue*0.9)&&(fabs(Err)> GiveValue*0.1)) { ErrCont = ((0.9*GiveValue)-fabs(Err))*Err/(0.8*GiveValue); } else { ErrCont = 0; } ChangeIntPIDErrADD = ChangeIntPIDErrADD + ErrCont; ChangeIntErrBack = Err; return result;}
不完全微分 PID控制
- 说明
- 微分信号的可以改善系统的动态特性,但也容易引入高频干扰,在误差信号存在扰动时, 更是能够显示微分的不足之处。克服上述问题的方法之一就是在采用不完全微分 PID 控制,所谓不完全微分法就是在 PID 控制算法的微分项中加入一个一阶惯性环节。如此可是系统性能得到改善。
- 这样会在高频时起到滤波的作用。
参考代码
float NoComDPID(float Kp, float Ki, float Kd, float Aifa, float GiveValue, float ActualValue){ float result; float Err,KpWork, KiWork, KdWork; Err = GiveValue - ActualValue; KpWork = Kp*Err; KiWork = Ki*NoComIntPIDErrADD; if(Aifa > 1) { Aifa = 1; } if(Aifa < 0) { Aifa = 0; } KdWork = Kd*(1-Aifa)*(Err-ErrBbk)+ Aifa*KdWorkBbk; result = KpWork+KiWork+KdWork; NoComIntPIDErrADD = NoComIntPIDErrADD + Err; KdWorkBbk = KdWork; ErrBbk = Err; return result;}
工业控制及其C语言算法实现
专家系统及其C语言实现
- if else即可实现
- 针对不同的条件组合给出不同的决策
- 模糊逻辑及其C语言实现
- 神经网络及其C语言实现
- 遗传算法及其C语言实现
0 1
- 控制算法、基本定义及其实现
- 基本Kmeans算法介绍及其实现
- 基本Kmeans算法介绍及其实现
- 基本的内排序算法及其实现
- 基本Kmeans算法介绍及其实现
- 常用到的基本算法及其实现
- 基本Kmeans算法介绍及其实现
- 基本Kmeans算法介绍及其实现
- 基本Kmeans算法介绍及其实现
- 基本Kmeans算法介绍及其实现
- 基本Kmeans算法介绍及其实现
- 基本Kmeans算法介绍及其实现
- 基本Kmeans算法介绍及其实现
- 基本Kmeans算法介绍及其实现
- 基本Kmeans算法介绍及其实现
- 算法定义及其主要特征
- 基本Kmeans算法介绍及其实现(转载)
- 浅谈算法和数据结构: 六 符号表及其基本实现
- 滤波算法总结
- APP生产和开发环境的分离(手把手教你)
- 【2016.04.01】第六次模拟考试考试分析
- 吃吃饭
- HDU 4616 Game 【有限制的树型dp】
- 控制算法、基本定义及其实现
- JavaEE应用的分层模型和架构
- 吃吃饭
- 装饰器模式
- BZOJ3163: [Heoi2013]Eden的新背包问题
- 自己设计并制作了一个自动温度控制系统
- 吃吃饭
- 设计模式一览
- 吃吃饭