|
傻孩子师兄,你好!我是西科大08级的。
我想问一个问题,就是关于PID的,我现在调试了位置PID,速度PID,但是我就是不知道该怎么将两个结合到一起来,
也就是说,我现在实现了怎么让电机以固定的速度转,怎么让电机转固定的圈速(位移),但是我不知道该如何实现让电机以指定的速度转指定的圈速(位移)?
其中PID的核心算法是这样的:
float PID_calculate(struct PID *Control,float CurrentValue )//位置PID计算
{
float Value_Kp;//比例分量
float Value_Ki;//积分分量
float Value_Kd;//微分分量
Control->error_1 = Control->error_0;//保存一次谐波
Control->error_0 = Control->OwenValue-CurrentValue ;//基波分量
Value_Kp = Control->Kp * Control->error_0 ;
Control->Sum_error += Control->error_0;
Value_Ki = Control->Ki*Control->Sum_error;
Value_Kd = Control->Kd*(Control->error_0 - Control->error_1 );
Control->OutputValue += Value_Kp+ Value_Ki + Value_Kd;//输出值计算,注意加减
if(Control->OutputValue >= 0)
{
Turn_Forword();
if( Control->OutputValue>MaxValue)//限幅
Control->OutputValue=MaxValue;
return (Control->OutputValue) ;
}
else
{
Turn_Backword();
if (Control->OutputValue<MinValue)
Control->OutputValue= MinValue;
return (-Control->OutputValue);
}
}
期待师兄的解答……非常感谢。 |
阿莫论坛20周年了!感谢大家的支持与爱护!!
知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)
|