PID_GR_MACRO(v) pid算法求助

2019-07-23 13:42发布

#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设定的目标值
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
8条回答
wangrunpeng
2019-07-24 15:04
zhangmangui 发表于 2016-4-6 22:58
应该是增量吧   计算的结果加到当前值上

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公式吧  相当于对差值的不断积累呀

一周热门 更多>