BLDC的双闭环老调不好,求帮助

2020-02-06 09:59发布

速度环和电流环调了好几天了,老是有问题,要么稳态偏差大,要么就振荡,片子是33FJ64MC508A,目前外部晶振为7.3728M,经PLL后得到16588800Hz的系统时钟,弄这个频率,主要是为了方便和VB6.0做串口通信,观察PID数据曲线的波特率为115200,我是1.25MS算一次速度环,算5次后算一次电流环,速度环的PID结果不作任何处理,直接作为电流环的设定值,占空比更新是在电流环里进行,刚开始请教别人说是算若干次电流环然后算一次速度环,我照这个思路来发现电机速度启振荡没法控制,然后我就改为算5次速度环才算一次电流环,这样情况有所好转,但老是有较大的稳态偏差,能从几十转/分跳到100多转/分,有时又能将速度锁定在几转/分之内,压缩包里是我的程序,做过的大侠帮我看看有哪里没对,也希望对新手有所帮助,当然我自己也是新手,共同进步哈
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
43条回答
asdmaill
1楼-- · 2020-02-07 09:09
//------------------------------------------------------------------
//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算一次电流
asdmaill
2楼-- · 2020-02-07 11:57
 精彩回答 2  元偷偷看……
mtswz.213
3楼-- · 2020-02-07 17:26
你这个有问题嘛!电流环控制周期肯定要比速度环快了,最好是跟PWM周期一样,先把电流环调好再调速度环,电流环调不好都是白搭!
linguicheng
4楼-- · 2020-02-07 18:56
10楼的说的很对,先处理电流环,如果电流环不好其他的也难说;其次是速度环,在做速度环时稳速的范围要明确,不然会回来振荡;对于速度环的滤波可以考虑一下采用霍尔6次滤波方式(123456/6;234567/6;345678/6---),这样电机的霍尔跟随性好。
linguicheng
5楼-- · 2020-02-07 23:16
还有在做稳速时,特别是启动时电机会振荡(也就是惯性产生的),可以采用如设定3000转,PWM为80%,这时要设一个惯性值防止PWM减的太低(80%*0.6或0.7)这个效果要具体根据电机而定,这样有振荡也就只有一次,而且振荡幅度也小。你可以试试;
asdmaill
6楼-- · 2020-02-08 02:10
感谢两位的帮助,那就我的PID程序本身来说,有没有不对的地方呢

一周热门 更多>