[mw_shl_code=c,true]//(1) [/mw_shl_code]
[mw_shl_code=c,true]PID_Control.OUT+=PID_Speed.I*Position;
//(2)
void TIM4_IRQHandler(void) //TIM4中断
{
if (TIM_GetITStatus(TIM4, TIM_IT_Update) != RESET) //检查指定的TIM中断发生与否:TIM 中断源
{
static u8 ms1=0,ms2=0,ms3=0;
ms1++;
ms2++;
ms3++;
if(ms1==2)
{
ms1=0;
MPU6050_Pose();
}
if(ms2==4)
{
ms2=0;
Calculate_Pwm(Pitch);
}
if(ms3==20)
{
Lowpass_Filter();
}
TIM_ClearITPendingBit(TIM4, TIM_IT_Update ); //清除TIMx的中断待处理位:TIM 中断源
}
[/mw_shl_code]
[mw_shl_code=c,true]void Lowpass_Filter()//低通滤波器
{
Ablosute_Count=(TIM2->CNT - COUNTER_RESET)+(TIM3->CNT - COUNTER_RESET);
Speed_New=Ablosute_Count*0.5;
Speed=Speed_New*0.3+Speed_Old*0.7;
Speed_Old=Speed;
Position+=Speed;//对速度积分
Position+=Speed_Need;
if(Position>24000)
Position=24000;
if(Position<-24000)
Position=-24000;
TIM2->CNT= COUNTER_RESET;
TIM3->CNT= COUNTER_RESET;
}[/mw_shl_code]
目前我的小车已经能只用角度环站起来了(挺稳的 几乎不动) 还没加速度环。因为对速度环的理论还没完全搞清楚。所以想在论坛上讨教清楚。
看了很多的PID资料,里面都会提到KI(积分系数),Ti(积分时间),T(采样周期)。那么问题来了?
PS:代码附在上面 1我是每个20ms 采一次速度的积分值。许多人说这就是积分时间。我也是这么觉得的。那采样周期T在哪呢?(在代码(2)中)
[/mw_shl_code]
2代码中的I是指什么呢? 是积分时间Ti呢,还是积分系数KI呢?
(在代码(1)中)
[/mw_shl_code]
|