最近在网上找了一个 倒立摆 程序研究一下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呢?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
第二个那个是比例参数 用来修正的
你自己想想 这两个 加起来 系数等于1
就是互补 滤波
那比例参数的值是怎么得来的呢?
哥,你最近不是刚搞四轴飞行器,这个你应该知道的啊。
一周热门 更多>