搜索
bottom↓
回复: 5

TI的controlSUITE套件问题;

[复制链接]

出0入0汤圆

发表于 2012-5-5 15:52:25 | 显示全部楼层 |阅读模式
本帖最后由 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;               

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

 楼主| 发表于 2012-5-7 08:38:54 | 显示全部楼层
难道没人在研究啊,不太可能吧??

出0入0汤圆

 楼主| 发表于 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°才换的,还需探索

出0入0汤圆

 楼主| 发表于 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最高的嘛???

出0入0汤圆

 楼主| 发表于 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

出0入0汤圆

发表于 2015-8-4 18:22:34 | 显示全部楼层
来的太晚了。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-26 08:57

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表