RC_MACRO宏解析
typedef struct { _iq TargetValue; // Input: Target input (pu) Uint32 RampDelayMax; // Parameter: Maximum delay rate (Q0) - independently with global Q _iq RampLowLimit; // Parameter: Minimum limit (pu) _iq RampHighLimit; // Parameter: Maximum limit (pu) Uint32 RampDelayCount; // Variable: Incremental delay (Q0) - independently with global Q _iq SetpointValue; // Output: Target output (pu) Uint32 EqualFlag; // Output: Flag output (Q0) - independently with global Q _iq Tmp; // Variable: Temp variable } RMPCNTL;
RMPCNTL结构体:
输入变量:TargetValue(目标输入)
输出变量:SetpointValue(目标输出)
EqualFlag(标志输出)
/*----------------------------------------------------------------------------- Default initalizer for the RMPCNTL object. -----------------------------------------------------------------------------*/ #define RMPCNTL_DEFAULTS { 0, \ 5, \ _IQ(-1), \ _IQ(1), \ 0, \ 0, \ 0, \ 0, \ }
RMPCNTL对象的默认初始化
/*------------------------------------------------------------------------------ RAMP Controller Macro Definition ------------------------------------------------------------------------------*/ #define RC_MACRO(v) \ v.Tmp = v.TargetValue - v.SetpointValue; \ /* 0.0000305 is resolution of Q15 */ \ if (_IQabs(v.Tmp) >= _IQ(0.0000305)) \ { \ v.RampDelayCount++ ; \ if (v.RampDelayCount >= v.RampDelayMax) \ { \ if (v.TargetValue >= v.SetpointValue) \ v.SetpointValue += _IQ(0.0000305); \ else \ v.SetpointValue -= _IQ(0.0000305); \ \ v.SetpointValue=_IQsat(v.SetpointValue,v.RampHighLimit,v.RampLowLimit); \ v.RampDelayCount = 0; \ \ } \ } \
else v.EqualFlag = 0x7FFFFFFF;
RC_MACRO宏:1.Tmp存储目标输出与目标输入的差值;
2.判断Tmp是否在解析度之外(误差允许的范围);
3.RampDelayCount记录递增延迟的次数,用于表明多少次才产生一次递增或递减操作;
4.SetpointValue 递增或递减操作,增量为_IQ(0.0000305);
5.EqualFlag 用于记录Tmp在解析度之内。
斜坡宏:让输出信号SetpointValue 以斜坡方式增加或减少至目标值TargetValue。