#define PID_GR_MACRO(v)
/* proportional term */
v.data.up = _IQmpy(v.param.Kr, v.term.Ref) - v.term.Fbk;
/* integral term */
v.data.ui = _IQmpy(v.param.Ki, _IQmpy(v.data.w1, (v.term.Ref - v.term.Fbk))) + v.data.i1;
v.data.i1 = v.data.ui;
/* derivative term */
v.data.d2 = _IQmpy(v.param.Kd, _IQmpy(v.term.c1, (_IQmpy(v.term.Ref, v.param.Km) - v.term.Fbk))) - v.data.d2;
v.data.ud = v.data.d2 + v.data.d1;
v.data.d1 = _IQmpy(v.data.ud, v.term.c2);
/* control output */
v.data.v1 = _IQmpy(v.param.Kp, (v.data.up + v.data.ui + v.data.ud));
v.term.Out= _IQsat(v.data.v1, v.param.Umax, v.param.Umin);
v.data.w1 = (v.term.Out == v.data.v1) ? _IQ(1.0) : _IQ(0.0);
#endif // __PID_GRANDO_H__
我想知道PID算法是对两个参数的差值进行计算,那么输出与输入的关系是什么那,在做速度闭环时候,PID输出为什么直接就决定了pwm占空比,输出是不是应该逐渐逼近PID设定的目标值
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
v.data.ui = _IQmpy(v.param.Ki, _IQmpy(v.data.w1, (v.term.Ref - v.term.Fbk))) + v.data.i1;
v.data.i1 = v.data.ui; 这段程序是位置式pid公式吧 相当于对差值的不断积累呀
一周热门 更多>