发表于:2014/7/27 10:07:37
#0楼
第一次接触PID控制。
试着做了个上位机配置了一个下位机看具体的图形来理解PID.
控制的具体对象是直流电机,结果却和对PID的理解不同。
因为之前没用过PID可能会有错误,下面放上问题,请各位了解的帮忙解答下。谢谢啦~
首先是程序部分
/*******************电机PID算法函数*********************/
void MACH_PID1(void)
{
ERROR0 = Motor_Aim - Pulse_amount; //计算当前的偏差量
if ((i < Deviation) //在浮动范围内误差为0,
&& (Deviation < i)) //不需对电机进行调整
{
ERROR0 = 0;
}
else
{
i = Motor_Ki * ERROR0 + Motor_Kp*(ERROR0-ERROR1)
+ Motor_Kd*(ERROR0+ERROR2-2*ERROR1);
PWM_temp = PWM_temp + i;
if (PWM_temp > 20)
{
PWM_temp = 20;
}
if (PWM_temp < 0)
{
PWM_temp = 0; //防止PID超出
}
}
////////////////////对电机进行调整////////////////////
Motor_forward(PWM_temp);
////////////////////保存覆盖误差数据//////////////////////
ERROR2 = ERROR1;
ERROR1 = ERROR0;
}
这里我直接反馈到占空比了,然后用占空比控制电机转速。
之后实际图形,设置电机最终转速130/10ms..(这个终值都变进行对比)
不同的P的之后电机控制滞后程度不同,稳定性也不同。(有的参数最后就不稳定了)
最后选了个最接近的数值P=10,I=D=0,
然后换重点了,因为我之前的失误。不小心把P的值和I的值位置换错了。也就是直接用I进行参数的调整
没用到P.结果出来竟然比只用P调节效果好很多。囧rz
参数P = 0, I = 10,D = 0;
从图像中可以看出稳态误差比只用P小很多。特别是P在其他数值时。根本稳不太下来
并且到达稳态的时间也比只用P小很多。
不是大家都说用电机最好不用I这个参数么?因为电机有之后特性。但我实测结果为什么差这么多??????
只用一个I参数就可以直接稳定电机??并且加上PD参数的影响和这个也差不多,有的还没这个好。连电机的滞后特性也看不出来
能解释下以上问题吗?好困惑啊
试着做了个上位机配置了一个下位机看具体的图形来理解PID.
控制的具体对象是直流电机,结果却和对PID的理解不同。
因为之前没用过PID可能会有错误,下面放上问题,请各位了解的帮忙解答下。谢谢啦~
首先是程序部分
/*******************电机PID算法函数*********************/
void MACH_PID1(void)
{
ERROR0 = Motor_Aim - Pulse_amount; //计算当前的偏差量
if ((i < Deviation) //在浮动范围内误差为0,
&& (Deviation < i)) //不需对电机进行调整
{
ERROR0 = 0;
}
else
{
i = Motor_Ki * ERROR0 + Motor_Kp*(ERROR0-ERROR1)
+ Motor_Kd*(ERROR0+ERROR2-2*ERROR1);
PWM_temp = PWM_temp + i;
if (PWM_temp > 20)
{
PWM_temp = 20;
}
if (PWM_temp < 0)
{
PWM_temp = 0; //防止PID超出
}
}
////////////////////对电机进行调整////////////////////
Motor_forward(PWM_temp);
////////////////////保存覆盖误差数据//////////////////////
ERROR2 = ERROR1;
ERROR1 = ERROR0;
}
这里我直接反馈到占空比了,然后用占空比控制电机转速。
之后实际图形,设置电机最终转速130/10ms..(这个终值都变进行对比)
不同的P的之后电机控制滞后程度不同,稳定性也不同。(有的参数最后就不稳定了)
最后选了个最接近的数值P=10,I=D=0,
然后换重点了,因为我之前的失误。不小心把P的值和I的值位置换错了。也就是直接用I进行参数的调整
没用到P.结果出来竟然比只用P调节效果好很多。囧rz
参数P = 0, I = 10,D = 0;
从图像中可以看出稳态误差比只用P小很多。特别是P在其他数值时。根本稳不太下来
并且到达稳态的时间也比只用P小很多。
不是大家都说用电机最好不用I这个参数么?因为电机有之后特性。但我实测结果为什么差这么多??????
只用一个I参数就可以直接稳定电机??并且加上PD参数的影响和这个也差不多,有的还没这个好。连电机的滞后特性也看不出来
能解释下以上问题吗?好困惑啊

[此贴子已经被作者于2014/7/27 10:08:28编辑过]