基于STM32F4的PID算法

PID 控制器由比例单元(P)、积分单元(I)和微分单元(D)组成。
其输入 e (t)与输出 u (t)的关系为:
u(t)=kp[e(t)+1/TI∫e(t)dt+TD*de(t)/dt] 式中积分的上下限分别是 0 和 t。
因此它的传递函数为:G(s)=U(s)/E(s)=kp[1+1/(TI*s)+TD*s]。
其中 kp 为比例系数;TI 为积分时间常数;TD 为微分时间常数
PID 常用口诀:
参数整定找最佳,从小到大顺序查
先是比例后积分,最后再把微分加
曲线振荡很频繁,比例度盘要放大
曲线漂浮绕大湾,比例度盘往小扳
曲线偏离回复慢,积分时间往下降
曲线波动周期长,积分时间再加长
曲线振荡频率快,先把微分降下来
动差大来波动慢。微分时间应加长
理想曲线两个波,前高后低 4 比 1
一看二调多分析,调节质量不会低
PID算法如下:
y[n] = y[n-1] + A0 * x[n] + A1 * x[n-1] + A2 * x[n-2]
A0 = Kp + Ki + Kd
A1 = (-Kp ) - (2 * Kd )
A2 = Kd

PID 控制器计算一个“误差”值作为测得的输出和参考输入之间的差值。PID 控制器通过调整输入参数来 使这个误差最小。比例值决定是误差的反应,积分值是决定误差之和的反应,微分值决定误差的改变频率。
下面以电压调控为例介绍其中的增量型PI调控:

/*
初始化结构体
v:设置目标稳压电压
an:设置PID系数P
bn:设置PID系数I
Limit:设置每次调控增量值
*/
PID PI_Init(u16 v,float an,float bn,u16 Limit)
{
      PID PI_Struct;
        PI_Struct.SetValue = v;
        PI_Struct.An = an;
        PI_Struct.Bn_1 = bn;
        PI_Struct.DeltaUn = 0;
        PI_Struct.Errorn_1 = 0;
      PI_Struct.Un_output = v;
        PI_Struct.Limit =Limit;
        PI_Struct.even_out=v;
    return PI_Struct;
}
/*
PID调控函数
NewInput:输入电压
PI_Struct:导入PI结构体
*/
u16 PI_Controller(u16 NewInput,PID* PI_Struct)
{
    s32 Errorn=0;
    Errorn = PI_Struct->SetValue - NewInput;//获取输入电压与设定电压的差值大小
    PI_Struct->DeltaUn = (PI_Struct->An)*Errorn-(PI_Struct->Bn_1)*(PI_Struct->Errorn_1);//进行PI调控
    PI_Struct->Errorn_1 = Errorn;//存储本次差值大小

    if(PI_Struct->DeltaUn > PI_Struct->Limit)//限制每次调控电压的变化值
        {PI_Struct->DeltaUn = PI_Struct->Limit;}
    else if(PI_Struct->DeltaUn < -PI_Struct->Limit)
        {PI_Struct->DeltaUn = -PI_Struct->Limit;}
        
    PI_Struct->Un_output = PI_Struct->DeltaUn + PI_Struct->even_out; //计算增量值
        PI_Struct->even_out=PI_Struct->Un_output;
    if(PI_Struct->Un_output > 220)//调控电压上限值
        {PI_Struct->Un_output = 220;}
    else if(PI_Struct->Un_output < 50)//调控电压下限值
        {PI_Struct->Un_output = 50;}
    return PI_Struct->Un_output;
}

 

相关文件可自行提取:

百度网盘 请输入提取码
  • 6
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小肥羊~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值