关于PID的程序问题

2019-08-14 06:29发布

最近在网上找了一个 倒立摆 程序研究一下PID
程序中由几个不懂的点想请教论坛的大神们

在这个倒立摆中,用到了编码器和角速度传感器

//第一段程序
void PID_Init(u16 k_pa, u16 k_da, u16 k_pe, u16 k_de)
{
        PID.SetPoint = ADC_MID;
        PID.P_ANG = (float)k_pa / 1000;
        PID.I_ANG = 0;
        PID.D_ANG = (float)k_da / 1000;
        PID.P_ENCOD = (float)k_pe / 1000;
        PID.I_ENCOD = 0;
        PID.D_ENCOD = (float)k_de / 1000;
        PID.LastError = 0;
        PID.PrerError = 0;
}


//第二段程序
//摆杆PID计算
        pid_angle = PID.P_ANG * PID.PrerError;                            //比例
        pid_angle += PID.D_ANG * (PID.PrerError - PID.LastError);        //比例+微分
        angle_speed *= 0.97;                        //角速度
        angle_speed += (PID.PrerError - PID.LastError)*0.03;       
        PID.LastError = PID.PrerError;


在第一段程序中 为什么参数 k_pa,  k_da, k_pe, k_de都要除以1000呢?
在第二段程序中 为什么角速度又要乘与0.97呢?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。