基于stm32的PID算法粗略讲解
一、PID算法的分类
增量式与位移式的区别
1.输出不同:位置PID控制的输出与整个过去状态有关,并且使用了误差的累加值;而增量PID的输出仅与当前拍和前两拍的误差有关,因此位置PID控制的累积误差相对较大。
2.是否有积分部分:增量PID控制输出为控制量增量,没有积分功能,因此该方法适用于带有积分部分的对象,例如步进电机等。 ,但位置PID适用于执行没有积分部件的对象,例如电动液压伺服阀。
3.是否具有记忆功能:由于增量PID输出是控制量增量,因此,如果计算机出现故障,则故障影响较小,执行器本身具有记忆功能,该功能仍可保留且不会严重影响系统的工作,而位置输出直接对应于对象的输出,因此对系统影响较大。
但通常情况下使用增量式
二、PID的三个参数
1. kP比例
成比例地反映控制系统的偏差信号e(t),偏差一旦产生,控制器立即产生控制作用,以减小偏差。当仅有比例控制时系统输出存在稳态误差(Steady-state error)。
P参数越小比例作用越强,动态响应越快,消除误差的能力越强。通常将P参数由大向小调,以能达到最快响应又无超调(或无大的超调)为最佳参数。
2. kI积分
为消除静差,提高系统的无差度。积分作用的强弱取决于积分时间常数T,T越大,积分作用越弱,反之则越强。
3. KD微分
反映偏差信号的变化趋势,并能在偏差信号变得太大之前,在系统中引入一个有效的早期修正信号,从而加快系统的动作速度,减少调节时间。在微分控制中,控制器的输出与输入误差信号的微分(即误差的变化率)成正比关系。
D越大,微分作用越强,D越小,微分作用越弱。系统调试时通常把D从小往大调,具体参数由试验决定。


三.增量式程序
/************************** .h文件******************************/
#ifndef _pid_H
#define _pid_H
#define MODEL_P 1
#define MODEL_PI 2
#define MODEL_PID 3
typedef struct
{
u8 choose_model; //使用哪个模式调节,以方便分布调试
float curr; //当前值
float set; //设定值
float En; //当前时刻误差值
float En_1; //前一时刻误差值
float En_2; //前二时刻误差值
float Kp; //比例系数
float T; //每隔T控制器输出一次PID运算结果
u16 Tdata; //判断PID周期到没到


1万+

被折叠的 条评论
为什么被折叠?



