breeze_one 发表于 2012-5-5 15:52:25

TI的controlSUITE套件问题;

本帖最后由 breeze_one 于 2012-5-5 15:53 编辑

TI的这个controlSUITE套件中的C:\TI\controlSUITE\development_kits\HVMotorCtrl+PfcKit_v1.6\HVACI_Scalar这个交流异步电机的spwm控制,关于这个步进角度StepAngle怎么算的,有人知道嘛?v.Freq假设是IQ24(0.3),v.FreqMax是IQ24(1.0),一下函数是PWM中断时调用;pwm频率为10k;

               StepAngle = _IQmpy(v.Freq,v.FreqMax);                                                                                                                \
        /* Calculate new angle alpha                        */                                                                                                                \
            EntryOld = v.NewEntry;        (这两个值的初始值都为0)                                                                                                                                        \
            v.Alpha = v.Alpha + StepAngle;                                                                                                                                \
        if (v.Alpha >= _IQ(1.0))                                                                                                                                                \
                v.Alpha = v.Alpha-_IQ(1.0);                                                                                                                                 \
        v.NewEntry = v.Alpha;                                                                                                                                                        \
      dy = _IQsin(_IQmpy(v.NewEntry,PI_THIRD));            /* dy = sin(NewEntry)PI_THIRD = 3.1415926/3        */                        \
            dx = _IQsin(PI_THIRD-_IQmpy(v.NewEntry,PI_THIRD));   /* dx = sin(60-NewEntry)        */                        \
        /* Determine which sector                        */                                                                                                                        \
            if (v.NewEntry-EntryOld<0)                                                                                                                                        \
            {                                                                                                                                                                                        \
                      if (v.SectorPointer==5)                                                                                                                                        \
                         v.SectorPointer = 0;                                                                                                                                \
                      else                                                                                                                                                                        \
                         v.SectorPointer = v.SectorPointer + 1;                                                                                                 \
            }                                                                                                                                                                                        \
        if (v.SectorPointer==0)/* Sector 1 calculations - a,b,c -. a,b,c*/                                                        \
            {                                                                                                                                                                                        \
                v.Ta = (TP-dx-dy)>>1;                                                                                                                                                \
                v.Tb = v.Ta + dx;                                                                                                                                                        \
                v.Tc = TP - v.Ta;                                                                                                                                                         \
            }                                                                                                                                                                                        \
            else if (v.SectorPointer==1)/* Sector 2 calculations - a,b,c -. b,a,c&dx <-. dy        */        \
            {                                                                                                                                                                                        \
                v.Tb = (TP-dx-dy)>>1;                                                                                                                                                \
                v.Ta = v.Tb + dy;                                                                                                                                                        \
                v.Tc = TP - v.Tb;                                                                                                                                                         \
            }                                                                                                                                                                                        \
            else if (v.SectorPointer==2)/* Sector 3 calculations - a,b,c -. b,c,a                */                                \
            {                                                                                                                                                                                        \
                v.Tb = (TP-dx-dy)>>1;                                                                                                                                                \
                v.Tc = v.Tb + dx;                                                                                                                                                        \
                  v.Ta = TP - v.Tb;                                                                                                                                                 \
            }                                                                                                                                                                                        \
            else if (v.SectorPointer==3)/* Sector 4 calculations - a,b,c -. c,b,a&dx <-. dy        */        \
            {                                                                                                                                                                                        \
                v.Tc = (TP-dx-dy)>>1;                                                                                                                                                \
                v.Tb = v.Tc + dy;                                                                                                                                                        \
                v.Ta = TP - v.Tc;                                                                                                                                                         \
            }                                                                                                                                                                                        \
            else if (v.SectorPointer==4)/* Sector 5 calculations - a,b,c -. c,a,b                */                                \
            {                                                                                                                                                                                        \
                v.Tc = (TP-dx-dy)>>1;                                                                                                                                                \
                v.Ta = v.Tc + dx;                                                                                                                                                        \
                v.Tb = TP - v.Tc;                                                                                                                                                         \
            }                                                                                                                                                                                        \
            else if (v.SectorPointer==5)/* Sector 6 calculations - a,b,c -. a,c,b&dx <-. dy        */        \
            {                                                                                                                                                                                        \
                v.Ta = (TP-dx-dy)>>1;                                                                                                                                                \
                v.Tc = v.Ta + dy;                                                                                                                                                        \
                v.Tb = TP - v.Ta;                                                                                                                                                         \
            }                                                                                                                                                                                        \
/* Convert the unsigned GLOBAL_Q format (ranged (0,1)) . signed GLOBAL_Q format (ranged (-1,1))        */        \
/* Then, multiply with a gain and add an offset.                                                */                                                        \
            v.Ta = (v.Ta-_IQ(0.5))<<1;                                                                                                                                        \
            v.Ta = _IQmpy(v.Gain,v.Ta) + v.Offset;        v.Gain是对应的最高电压U                                                                                                        \
                                                                                                                                                                                                        \
        v.Tb = (v.Tb-_IQ(0.5))<<1;                                                                                                                                                \
            v.Tb = _IQmpy(v.Gain,v.Tb) + v.Offset;                                                                                                                \
                                                                                                                                                                                                        \
            v.Tc = (v.Tc-_IQ(0.5))<<1;                                                                                                                                        \
            v.Tc = _IQmpy(v.Gain,v.Tc) + v.Offset;               

breeze_one 发表于 2012-5-7 08:38:54

难道没人在研究啊,不太可能吧??

breeze_one 发表于 2012-5-7 15:27:07

终于弄懂了一部分了v.Freq==_IQ(1)的时候;因为v.FreqMax=_IQ(6*BASE_FREQ*T);BASE_FREQ = 120;20hz时候的,采集5000个点,10k频率,所以一个周期一圈360°;360/5000=stepangle刚好_IQ(0.0719999671);但是后面又看不懂了,每走1°就得换个v.SectorPointer;按理说应该每走60°才换的,还需探索

breeze_one 发表于 2012-5-11 10:31:56

搞错搞错!应该是按照以下理解的:v.Freq=_IQ(1),v.FreqMax=_IQ(6*BASE_FREQ*T);(BASE_FREQ=120,T=0.001/10(10KPWM的周期);
StepAngle = _IQmpy(v.Freq,v.FreqMax)=_IQ(0.0719999671),IQ(1)=60°;360°对应的应该是IQ(6);所以360°内应该是6/0.0719999671=83.3333714个PWM中断;每个中断100us;360°总共耗时83.3333714*100us;对应的频率是120HZ;同理v.Freq=_IQ(0.3)的时候就是40HZ.120HZ的时候才采样80几个点够了嘛?为什么会是120HZ呢?一般不都是50hz最高的嘛???

breeze_one 发表于 2012-5-11 15:10:23

采样点不够的话只能增加PWM的频率,受IGBT开关频率的影响又不能太高,所以也就只能这样了;
The base frequency may be specified at 2 times of rated frequency (60 Hz) in order to run the motor at speed higher than rated speed (in the field weakening).为了使跑的比额定速度快,所以要设成120hz

tuohang2013 发表于 2015-8-4 18:22:34

来的太晚了。
页: [1]
查看完整版本: TI的controlSUITE套件问题;