PID代码解读

PID代码解读 (c语言版本)

PID的控制流程

在这里插入图片描述
根据流程一步步描述代码:

PID代码流程

创建变量

typedef struct 
{
    float Kp, Ki, Kd;
    float error,last_error;
    float integral,max_intergral;
    float output,max_output;
}PID;

初始化PID的各类参数

void PID_Init(PID *pid,float Kp,float Ki,float Kd,float max_output,float max_intergral)
{
    pid->Kp = Kp;
    pid->Ki = Ki;
    pid->Kd = Kd;
    pid->max_output = max_output;
    pid->max_intergral = max_intergral;

进行PID的简单运算

float PID_Calc(PID *pid,float setpoint,float feedback)
{
    pid->last_error = pid->error;
    pid->error = setpoint - feedback;
    pid->integral += pid->error;
    if(pid->integral > pid->max_intergral)
    {
        pid->integral = pid->max_intergral;
    }
    else if(pid->integral < -pid->max_intergral)
    {
        pid->integral = -pid->max_intergral;
    }
    pid->output = pid->Kp * pid->error + pid->Ki * pid->integral + pid->Kd * (pid->error - pid->last_error);
    if(pid->output > pid->max_output)
    {
        pid->output = pid->max_output;
    }
    else if(pid->output < -pid->max_output)
    {
        pid->output = -pid->max_output;
    }
    return pid->output;
}

主函数

PID my_pid={0};
int main()
{
    PID_Init(&my_pid,0.5,0.5,0.5,100,100);
    while(1)
    {
        float setpoint=scanf("%f",setpoint);
        float feedback=scanf("%f",feedback);
        float output=PID_Calc(&my_pid,setpoint,feedback);
        printf("%f\n",output);
    }
    return 0;
}

滤波算法

平滑输出:滤波器可以平滑控制信号,减少快速变化的控制输入,这对于需要平滑运动或减少机械磨损的应用非常重要。

减少超调:在某些情况下,未过滤的输入信号可能会导致PID控制器产生过大的控制动作,从而引起系统的超调。滤波器可以通过平滑输入信号来减少这种超调现象。

改善稳定性:滤波器可以帮助稳定控制系统的动态响应,特别是在面对快速变化的输入或外部干扰时。

提高响应速度:虽然滤波器通常会引入一些延迟,但适当设计的滤波器可以确保系统响应既快速又平滑,避免因响应过快而导致的振荡。

一阶滤波算法

//一阶滤波算法
float Filter(float input,float output,float alpha)
{
    return alpha * input + (1 - alpha) * output;
}

alpha的大小影响新数据的占比权重,通常来说,alpha越小,新数值占比权重越小,数据变化幅度越小,数据更加平缓,但是灵敏性差。

二阶滤波算法

等学了再写!

  • 6
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值