VHZ_PROF_MACRO宏解析


typedef struct{ _iq  Freq;               // Input: Input Frequency (pu)
                _iq  VoltOut;            // Output: Output voltage (pu)
                _iq  LowFreq;            // Parameter: Low Frequency (pu)            
                _iq  HighFreq;           // Parameter: High Frequency at rated voltage (pu)
                _iq  FreqMax;            // Parameter: Maximum Frequency (pu)
                _iq  VoltMax;            // Parameter: Rated voltage (pu)                      
                _iq  VoltMin;            // Parameter: Voltage at low Frequency range (pu)
                _iq  VfSlope;            // Variable
                _iq  AbsFreq;            // Variable
                      
              } VHZPROF;
VHZPROF结构体:

  输入变量:Freq(频率)

  输出变量:VoltOut(输出电压)

/*-----------------------------------------------------------------------------
Default initalizer for the VHZPROF object.
-----------------------------------------------------------------------------*/                     
#define VHZPROF_DEFAULTS { 0,0,           \
                           0,0,0,0,0,     \
                           }

VHZPROF对象的默认初始化

/*------------------------------------------------------------------------------
     VHZ_PROF Macro Definitions
------------------------------------------------------------------------------*/


#define VHZ_PROF_MACRO(v)                                                                \
/* Take absolute frequency to allow the operation of both rotational directions    */    \
    v.AbsFreq = labs(v.Freq);                                                            \
    if (v.AbsFreq <= v.LowFreq)                                                          \
            /* Compute output voltage in profile #1    */                                \
            v.VoltOut = v.VoltMin;                                                       \
    else if ((v.AbsFreq > v.LowFreq)&&(v.AbsFreq <= v.HighFreq))                         \
       {                                                                                 \
            /* Compute slope of V/f profile    */                                        \
            v.VfSlope = _IQdiv((v.VoltMax - v.VoltMin),(v.HighFreq - v.LowFreq));        \
            /* Compute output voltage in profile #2    */                                \
            v.VoltOut = v.VoltMin + _IQmpy(v.VfSlope,(v.AbsFreq-v.LowFreq));             \
       }                                                                                 \
    else if ((v.AbsFreq > v.HighFreq)&&(v.AbsFreq < v.FreqMax))                          \
            /* Compute output voltage in profile #3    */                                \
            v.VoltOut = v.VoltMax;