理论分析

位置闭环控制就是根据编码器的脉冲累加测量电机的位置信息,并与目标值进行比较,得到控制偏差,然后通过对偏差的比例、积分、微分进行控制,使偏差趋向于零的过程。

理论分析

根据位置式离散 PID 公式:

PWM=Kpe(k)+Kie(k)+Kd[e(k)e(k1)] PWM = K_p * e(k) + K_i * \sum e(k) + K_d[e(k)-e(k-1)]

其中,

  • e(k)e(k) :本次偏差;
  • e(k1)e(k-1):上一次的偏差;
  • e(k)\sum e(k)e(k)e(k)以及之前的偏差的累积和,k 为 1、2、3...;
  • PWMPWM:输出

控制流程图

位置环控制原理图如下图所示。其中需要说明的是,我们这边是通过微机实现 PID 控制的,所以下面的 位置式 PID 控制器是一个软件实现的过程,比如在我们的代码里就是一个我们定义的函数。

C 语言实现

位置环 PID 控制 C 语言实现的代码如下:

int Position_PID(int Encoder,int Target)
{
    static float Bias,Pwm,Integral_bias,Last_Bias;
    Bias=Encoder-Target; //计算偏差
    Integral-bisa+=Bias; //求出偏差的积分
    Pwm=Position|_Kp*Bias+Position_Ki*Integral_bias+Position_Kd*(Bias-Last_Bias);
    Last_Bias=Bias; //保存上一次偏差
    return Pwm; //输出
}

第一行是相关内部变量的定义。 第二行是求出速度偏差,由测量值减去目标值。 第三行通过累加求出偏差的积分。 第四行使用位置式 PID 控制器求出电机 PWM。 第五行保存上一次偏差,便于下次调用。 最后一行是返回。 然后,在定时中断服务函数里面调用该函数实现我们的控制目标: Moto=Position_PID(Encoder,Target_Position); Set_Pwm(Moto); *//===赋值给 PWM 寄存器

参数整定

首先我们需要明确我们的控制目标,也就是满足控制系统的 3 个要求:

  • 稳定性
  • 快速性
  • 准确性

具体的评估指标有最大超调量、上升时间、静差等。

最大超调量是响应曲线的最大峰值与稳态值的差,是评估系统稳定性的一个重要指标;上升时间是指响应曲线从原始工作状态出发,第一次到达输出稳态值所需的时间,是评估系统快速性的一个重要指标;静差是被控量的稳定值与给定值之差,一般用于衡量系统的准确性,具体可以参考图 2 的解析。

results matching ""

    No results matching ""