RG_MACRO(v)函數理解

在DSP控制電機中:

開環控制電機時通過以下代碼控制,輸出的Aout和Bout爲給定pwm兩相的佔空比。

            rg1.Freq = dnSpeedRef;
            RG_MACRO(rg1)
            st1.Angle = (Uint16)(rg1.Out >> (GLOBAL_Q - MICROSTEPS));//給定電角度
            SINCOSTBL_MACRO(st1)
            Aout = _IQmpy(dnIRef,st1.CosOut);
            Bout = _IQmpy(dnIRef,st1.SinOut);

這次先分析函數RG_MACRO(v)

電機速度主要由函數RG_MACRO(v)設定!

RG_MACRO(v)函數:

#define RG_MACRO(v) \

/* Compute the angle rate */ \

v.Angle += _IQmpy(v.StepAngleMax,v.Freq); \

/* Saturate the angle rate within (-1,1) */ \

if (v.Angle>_IQ(1.0)) \

v.Angle -= _IQ(1.0); \

else if (v.Angle<_IQ(-1.0)) \

v.Angle += _IQ(1.0); \

/* Compute the ramp output */ \

v.Out = _IQmpy(v.Angle,v.Gain) + v.Offset; \

/* Saturate the ramp output within (-1,1) */ \

if (v.Out>_IQ(1.0)) \

v.Out -= _IQ(1.0); \

else if (v.Out<_IQ(-1.0)) \

v.Out += _IQ(1.0);

 

RG_MACRO(v)函數波形如下圖所示:

 

 

RG_MACRO(v)函數中v.Angle 爲斜波函數每次增加的速率,一個週期的斜波函數爲一個電週期,v.Angle的增速越快,斜坡越快到達頂點,即斜波函數的週期越短;

v.Freq爲SpeedRef值,rg1.StepAngleMax = _IQ(BASE_FREQ*T);

在宏定義中:

#define BASE_FREQ       200// Base electrical frequency (Hz)

#define T ((float32)0.001/(float32)ISR_FREQUENCY)

程序中設置中斷週期爲20k,當SpeedRef爲1時,可以算出1S內有電週期爲200個電週期。已知一個電週期電機能走四步,200個電週期電機能走800步,而電機200步爲一圈;所以1秒電機運行了4圈,可知電機此時的轉速爲240RPM(240圈/min)。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章