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。

 

posted @ 2022-04-01 19:31  涧落水寒  阅读(320)  评论(0编辑  收藏  举报