速度环和电流环调了好几天了,老是有问题,要么稳态偏差大,要么就振荡,片子是33FJ64MC508A,目前外部晶振为7.3728M,经PLL后得到16588800Hz的系统时钟,弄这个频率,主要是为了方便和VB6.0做串口通信,观察PID数据曲线的波特率为115200,我是1.25MS算一次速度环,算5次后算一次电流环,速度环的PID结果不作任何处理,直接作为电流环的设定值,占空比更新是在电流环里进行,刚开始请教别人说是算若干次电流环然后算一次速度环,我照这个思路来发现电机速度启振荡没法控制,然后我就改为算5次速度环才算一次电流环,这样情况有所好转,但老是有较大的稳态偏差,能从几十转/分跳到100多转/分,有时又能将速度锁定在几转/分之内,压缩包里是我的程序,做过的大侠帮我看看有哪里没对,也希望对新手有所帮助,当然我自己也是新手,共同进步哈
//T2中断处理程序
//------------------------------------------------------------------
void __attribute__((interrupt,no_auto_psv)) _T2Interrupt( void )
{
IFS0bits.T2IF = 0; //清零标志
led1 = ~led1;
Pid_Count++;
if(Flags.RunMotor == 1)
{
if(Pid_Count ==1)
{
Speed_Pid(); //计算速度环
}
else
{
Current_Pid(); //计算电流环
if(Pid_Count ==10)
{
Pid_Count = 0;
}
}
}
}
这个是T2中断,每5ms算一次速度,每0.5ms算一次电流
一周热门 更多>