位置PID
1.理论分析
位置闭环控制就是根据编码器的脉冲累加测量电机的位置信息,并与目标值进行比较,得到控制偏差,然后通过对偏差的比例、积分、微分进行控制,使偏差趋向于零的过程。
2.公式
Pwm=Kp*e(k)+Ki*∑e(k)+Kd*[e(k)-e(k-1)]
e(k):本次偏差
e(k-1):上一次的偏差
∑e(k):e(k)以及之前的偏差的累积和;其中k为1,2,,k;
Pwm代表输出
3.结构框图
4.C语言实现
int Position_PID (int Encoder , int Target)
{
static float Bias, Pwm, Integral_bias, Last_Bias;
Bias=Encoder-Target; //计算偏差
Integral_bias+=Bias; //求出偏差的积分
Pwm=Position_KP*Bias+Position_KI*Integral_bias+Position_KD*(Bias-Last_Bias); //位置式 PID控制器
Last_Bias=Bias; //保存上一次偏差
return Pwm; //输出
}
直立环
1.理论
小车往那边倒,车轮就往哪边开,既可以保持车子的平衡。
2.公式
a=b1*θ+b2*θ'; ——> 比例微分控制【PDout=Kp*Angle+Kd*( Angle-Angle_last)】
3.结构框图
直立环:让小车角度趋近0;
速度环:让电机速度趋近0;
速度环、串级PID
速度环输入:1.给定速度。2.速度反馈。
输出:角度值(直立环的期望速度输入)
直立环输入:1.给定角度(速度环输出)。2.角度反馈
输出:PWM(直接控制小车)
Vertical_out=Kp1*( real_Angle- expect_Angle)+Kd*D( real_Angle- expect_Angle)
//直立PD控制器
Velocity_out =Kp2*(Encoder_ real- Encoder_ expect)+Ki*S(Encoder_ real- Encoder_ expect)
//速度PI控制器
(NOTE:(1)Velocity_out = expect_Angle.(2)Kp1:Vertical_Kp.(3)Kp2:Velocity_Kp.)
【中文】
直立环输出=Kp1*(真实角度-期望角度+机械中值)+Kd*角度偏差的微分 //角度偏差=真实角度-期望角度
速度环输出=Kp2*(反馈编码器值-期望编码器值)+Ki*编码器偏差的积分 //编码器偏差=反馈编码器值-期望编码器值
(NOTE:(1)速度环输出=直立环的期望角度。(2)Kp1:直立环Kp。(3)Kp2:速度环Kp。)
合并推导:
直立环输出Vertical_out=Kp1*(θ_r-θ_e)+Kd* (θ_r-θ_e)'
速度环输出Velocity_out=Kp2*(E_r- E_e)+Ki*Σ(E_r- E_e)
因为:θ_e = Velocity_out
所以直立环输出Vertical_out =
= Kp1*{ θ_r-[ Kp2*(E_r- E_e)+Ki*Σ(E_r- E_e) ]}+Kd*(θ_r-θ_e)'
= Kp1* θ_r- Kp1* Kp2*(E_r- E_e)- Kp1*Ki *Σ(E_r- E_e) +Kd*(θ_r-θ_e)'
= Kp1* θ_r+ Kd*(θ_r-θ_e)'- Kp1* [Kp2*(E_r- E_e)+ Ki *Σ(E_r- E_e)]
【中文】
=Kp1*真实角度+ Kd*角度偏差的微分-Kp1* [Kp2*编码器偏差- Ki *编码器偏差的积分]