前提和疑惑

前提:
三角形接法的矢量控制和星形不同的是,三角形接法的基本电压矢量的幅值是星形接法的根号2倍,相位滞后星形接法30度,这很关键。相差30度就意味着。星形的的扇区判断和合成矢量所需要的两个矢量作用时间也不一样了,需要重新推导。

后面有给出相关的文档。

疑惑1:
我不是很懂是怎么相差30度的,好像是三角形接法通过矢量的方式位移变成星形的形式后,其坐标系和星形比较相差了30度。
下面是参考文档的解释。

Ualpha和Ubeta对扇区判断的作用

不管是星形的还是三角形的,都需要用到Vq和Vd的反park变换,得到Ualpha和Ubeta。Vq和Vd是Iq电流环和Id电流环的输出值。
Ualpha和Ubeta是怎么判断扇区的:
看下图,用Uabc映射到Ualpha和Ubeta,经过计算,能得到
Ualpha = Um Cos(θ)
Ubeta = Um sin(θ)

用Ubeta除以Ualpha得到,tan(θ),artan(tan(θ))就等于角度了。

星形的扇区判断

在看下图,我们可以列出6个不等式,不等式怎么来:
我们知道,把一个电角度分成6个扇区,每个扇区60度。

那么
tan0< Ubeta/Ualpha<tan60

tan300< Ubeta/Ualpha<tan360
再经过化简,发现有2个式子经常出现,那就是(√3/2)Ualpha 和 (1/2)Ubeta。这在后面会用到。

这里有个小插曲。
有的文档是没有这个1/2的,其实有没有都不影响判断。因为,我们的不等式是和0比较的,左右同时乘1/2,不影响结果,只是因为后面的矢量作用时间也会用到这个1/2,在单片机那里的具体表现就是不用再计算一次,浪费运行时间。


再往下看,我们可以假设出3个式子,是假设。
u1= Ubeta
u2= (√3/2)Ualpha-(1/2)Ubeta
u3= -(√3/2)Ualpha-(1/2)Ubeta

若u1>0 则A=1,否则A=0.
若u2>0 则B=1,否则B=0.
若u3>0 则C=1,否则C=0.
再结合上图对扇区角度的判断,我们能得到
Ualpha和Ubeta和扇区的关系。
利用关系
N = 4C + 2B +A得到扇区的区号,这些都是网上能找到的解释,至于为啥是N = 4C + 2B +A,这只是一个简化的公式,方便单片机计算,你也可以直接按上面的不等式用if语句来判断。
这里有个小插曲:

Ubeta
(√3/2)Ualpha-(1/2)Ubeta
-(√3/2)Ualpha-(1/2)Ubeta

这三个式子是假设出来的,可以是不一样的,这里的不一样是指正负不一样,这就是为什么看到别人的推导和自己的推导有不一样的地方,有的假设甚至把矢量作用的计算也考虑进去了。参考TI的简化代码。

三角形接法的扇区判断

这里的扇区判断是我直接使用了,别人文献的判断条件。

用这个判断条件就就可以了。
图中我圈主的地方是文献有写错的,应该是B0。
这里有点小疑惑:

根据星形的判断格式来看,
应该是
tan(330)<Ubeta/Ualpha<tan30
tan(30)<Ubeta/Ualpha<tan90
。。。。
tan(270)<Ubeta/Ualpha<tan330
这里就有问题了。
因为tan90度。是不存在的。是正无穷。

星形和三角形接法的矢量作用时间计算

先通过星形的作用时间推导,知道怎么推之后,然后推导三角形的。
引用:

星形的计算:
扇区1 2 3:

扇区4 5 6:

可以看到扇区456的这张笔记的,最后的那三个表达式,和扇区判断的联系了起来。

左上角的那个假设的表达式,是可以变的,这些表达式是根据前面扇区的计算出来的表达式关联起来的。

然后右下角是假设了tabc是这三个表达式,这是扇区1的,
因为每个扇区都用这三个扇区,只是位置不一样。

那么每个扇区的Ta Tb Tc怎么来的,
这是因为下面这个图来的,计算的方式参考扇区1.
每个扇区,3个开关管的作用时长不一样。

为什么是TX/2。Y/2,
因为我们计算的TX是整个周期的,但是我们单片机赋值只是幅值一半。剩下一般周期的都是硬件自动完成(中心对齐模式)


然后每个扇区的tabc就可以有这样的规律

TI的代码就是不一样的,然后TI还给它优化了。

然后Ta Tb Tc的时长是这样的

先贴一个TI的代码

//0.8660254f等于 根号3/2
void  Svpwm_Tabc_Class::SVPWM_Cale(uint16_t period)
{tmp1=  Ubeta;   // 相当于二相静止坐标--到三相静止变换出Uabctmp2=  Ubeta*0.5f +  Ualpha*0.8660254f ;tmp3=  tmp2 -  tmp1;   // 三相逆变换和网上公式极性不同,// -Ubeta*0.5f +  Ualpha*0.8660254f ;//本方法的SVPWM的扇区判断不同1--6/对应0--360,均匀分布VecSector=3;   // 根据三相电压符号计算矢量扇区VecSector=( tmp2> 0)?(  VecSector-1): VecSector;VecSector=( tmp3> 0)?(  VecSector-1): VecSector;VecSector=( tmp1< 0)?(7- VecSector) : VecSector;if( VecSector==1 ||  VecSector==4)   // 根据矢量扇区计算矢量占空比Tabc{Ta=  tmp2;Tb=  tmp1- tmp3; //1.5ub -Ualpha*0.8660254f ;Tc=-tmp2;}else if( VecSector==2 ||  VecSector==5){Ta=tmp3+ tmp2;Tb=tmp1;Tc=-tmp1;}else if( VecSector==3 ||  VecSector==6){Ta=  tmp3;Tb=-tmp3;Tc=-(tmp1+ tmp2);}else     //异常状态下的判断出的扇区 0---7或者其他就执行0电压矢量{Ta=0;Tb=0;Tc=0;}// Tabc是在浮点数据正负  , 电压, Ta/Svpwm_Km是标幺值计算,将Tabc计算成-1---1// 将占空比调节为-1---1   ,再讲PWM的半周期占空比值提出    (-1---1)*50%+50%=0---100%//调制系数 m=Sqrt(3)*|Ts|/Udc  Svpwm_Km_Backw = 3/(Sqrt(3)*Udc)//Svpwm_Km_Backw*(period),按我的理解,这里就是根号3*Ts /Udc ,是各个扇区的两个矢量合成需要的一个系数。 除以2是因为不能有负数,后面再加了0.5.SVPTa=(int16_t)( Ta*Svpwm_Km_Backw*(period/2))+(period/2);  // 计算SVPTb=(int16_t)( Tb*Svpwm_Km_Backw*(period/2))+(period/2);SVPTc=(int16_t)( Tc*Svpwm_Km_Backw*(period/2))+(period/2);//启动时各砍一半,占空比,然后再慢慢往上加。}

三角形:
我是看了文档然后根据星形的推导,
然后自己推导了一遍,后面会给出文档的公式。

由于三角形的比星形是滞后了30度。
所以。6个扇区的分布如下。

计算方式和星形是一样的。只是角度不一样
由于是第一个扇区的计算。
下面贴几张扇区两个矢量的作用时长。

第一扇区,自己计算得很模糊,我贴一个文档的计算。
结果是一样的,我只是把T移到了右边。

第二扇区:

第三扇区

第四扇区

第五扇区和第六扇区

下图是每个扇区的两个作用矢量电压的作用时间

然后和星形一样,假设一个表达式
这是文档的表达式,文档的表达式和我的相差了一个((根号3)/2)
为什么?
。我也不清楚。。。,可能是这个图的原因


这是假设文档的3个表达式。

然后根据上面6张图推导出来的公式,去套XYZ
得到如下图:


然后根据每个扇区的3个开关管的作用时长,和星形的比较会发现是一样的规律。

这里的作用时长和星形的是一样的,因为扇区的切换方式是一样的。如下图

下面贴上三角形的代码。

void Svpwm_Tabc_Class::Triangle_Sector_Cal(float Ualpha,float Ubeta,uint32_t period)
{float  Vref1,Vref2,Vref3;float  X_Vef,Y_Vef,Z_Vef;float  T1,T2;Vref1 = Ualpha;Vref2 = 1.7320508f * Ubeta - Ualpha;Vref3 = -1.7320508f * Ubeta -  Ualpha;period = period * 2;VecSector=0;//扇区判断。if(Vref1>0)VecSector = 1;if(Vref2>0)VecSector = VecSector + 2;if(Vref3>0)VecSector = VecSector + 4;//扇区内两个矢量作用时长X_Vef = (0.5f * Ualpha/Standard_Work_Voltage_V  + 0.8660254f*Ubeta / Standard_Work_Voltage_V)*period;Y_Vef = (0.5f * Ualpha/Standard_Work_Voltage_V  - 0.8660254f*Ubeta / Standard_Work_Voltage_V)*period;Z_Vef = ( Ualpha/Standard_Work_Voltage_V  )*period;switch(VecSector){case 1:T1 = Y_Vef;T2 = X_Vef;break;case 3:T1 = -Y_Vef;T2 = Z_Vef;break;case 2:T1 = X_Vef;T2 = -Z_Vef;break;case 4:T1 = -Z_Vef;T2 = Y_Vef;break;case 5:T1 = Z_Vef;T2 = -X_Vef;break;case 6:T1 = -X_Vef;T2 = -Y_Vef;break;}if((T1 + T2)>period){T1 = (T1 / (T1 + T2)) * period;T2 = (T2 / (T1 + T2)) * period;}//作用时间Ta = (period - T1 - T2) / 4.0f;Tb = Ta + T1/2.0f;Tc = Tb + T2/2.0f;switch(VecSector){case 1:SVPTa = (uint16_t)Ta;SVPTb = (uint16_t)Tb;SVPTc = (uint16_t)Tc;break;case 3://2SVPTa = (uint16_t)Tb;SVPTb = (uint16_t)Ta;SVPTc = (uint16_t)Tc;break;case 2://3SVPTa = (uint16_t)Tc;SVPTb = (uint16_t)Ta;SVPTc = (uint16_t)Tb;break;case 5://6SVPTa = (uint16_t)Ta;SVPTb = (uint16_t)Tc;SVPTc = (uint16_t)Tb;break;case 6://4SVPTa = (uint16_t)Tc;SVPTb = (uint16_t)Tb;SVPTc = (uint16_t)Ta;break;case 4://5SVPTa = (uint16_t)Tb;SVPTb = (uint16_t)Tc;SVPTc = (uint16_t)Ta;break;default:SVPTa = 0;SVPTb = 0;SVPTc = 0;break;}
}

FOC控制所需要的相电流

因为我们用的是电流传感器,
星形接法的时候感应到的是线电流,因为星形接法的线电流和相电流是一样的,所以可以直接用来结算FOC的各种电流变换。

但是三角形的接法的线电流和相电流是不一样的。需要从线电流提取出相电流。
而且经过实验是不能直接除以根号3的,

那么我也直接运用了文档的方法。



这里提示一下,经过实验,发现三角形电流的线序的接法的不用,
公式11就会不同

我们根据上面的公式推导了自己实验的电机,发现是不一样的。
代码如下

     //三角形结构电机线电流Ia,Ib,Ic与相电流Iax,Iby,Icz的转换//1、如A相输出接B相输入//  Iax = (Ia - Ib) / 3//  Iby = (Ib - Ic) / 3//  Icz = (Ic - Ia) / 3//2、如A相输出接C相输入//    Iax = (Ia - Ic) / 3//  Iby = (Ib - Ia) / 3//  Icz = (Ic - Ib) / 3//使用第2种Large_iThreeCurrent[0] = (float)((fScrCurrent[2] - fScrCurrent[0])/3.0f);Large_iThreeCurrent[1] = (float)((fScrCurrent[0] - fScrCurrent[1])/3.0f);Large_iThreeCurrent[2] = (float)((fScrCurrent[1] - fScrCurrent[2])/3.0f);

到这里,电机就能转起来了。发现电流并不是很好。这里慢慢优化。
结束!

参考文档


三角形接法永磁同步电机的FOC+SVPWM控制相关推荐

  1. 永磁同步电机的FOC/ DTC控制比较

    一.什么是力矩控制 永磁同步电机在汽车上的应用越来越广泛,从动力驱动到转向刹车的执行机构,都可以见到其踪影.今天想谈谈永磁同步电机的控制. 做控制的人都知道,任何电机的控制,无非三种不同的控制目标: ...

  2. 永磁同步电机的直接转矩控制(一)一一一DTC仿真模型的搭建

    永磁同步电机的直接转矩控制(一)一一一DTC仿真模型的搭建 目录 永磁同步电机的直接转矩控制(一)一一一DTC仿真模型的搭建 0研究背景 1直接转矩控制的简单介绍 2控制系统仿真模型的搭建 2.1 被 ...

  3. matlab threshold算法_控制与应用技术|基于模糊滑模算法的永磁同步电机无位置传感器矢量控制...

    点击 电机与控制应用 可订阅哦~ A  bstract 针对传统超螺旋算法二阶滑模观测器(STASSMO)在进行永磁同步电机(PMSM)转子位置和转速估算时固定滑模增益导致鲁棒性差的问题,在已有的稳定 ...

  4. 永磁同步电机的直接转矩控制(四)一一一基于滑模转速控制器的DTC

    永磁同步电机的直接转矩控制(四)一一一基于滑模转速控制器的DTC 目录 永磁同步电机的直接转矩控制(四)一一一基于滑模转速控制器的DTC 0研究背景 1基于滑模的转速控制器设计 2基于滑模的转速控制器 ...

  5. 永磁同步电机(PMSM)控制中为什么要Id=0?还有其他的控制方法吗?

    相信在搞电机控制的小伙伴应该知道目前对永磁同步电机(PMSM)的控制技术主要有磁场定向矢量控制(FOC)和直接转矩控制技术(DTC). 今天主要是想说一说磁场定向矢量控制(FOC) 磁场定向矢量控制的 ...

  6. 【永磁同步电机滑膜无感控制】

    @TOC]电机控制) 永磁同步电机滑膜(eSMO)无传感器控制 先贴上TI eSMO控制算法 具体请看这个大哥写的文章 https://blog.csdn.net/lijialin_bit/artic ...

  7. 三相永磁同步电机的FOC--矢量控制(1)

    首先,先弄明白FOC也就是矢量控制究竟是什么 1.   要弄明白什么是矢量控制,先要看电机,了解为什么回转, 电机是由转子和定子组成的:为了方便理解,我们把电机比作一个表,转子相当于指针,定子相当于表 ...

  8. 手撕永磁同步电机:foc(clark、park、ipark)变换、电机数学模型解耦过程推导

    文章目录 前言 一.建立数学模型的作用? 二.数学模型 1.三相坐标系下数学模型 2.复平面的数学模型(两相坐标) 3.dq轴坐标数学模型(旋转坐标) 4.clark.park推导 总结 前言 此文是 ...

  9. 永磁同步电机的弱磁提速控制Simulink仿真

    控制原理 原因:转速升高->反电动势增大->反电势接近电源电压->压差降低->电流降低->驱动转矩降低->无法加速到给定转速 方法:削弱反电动势->削弱整体磁 ...

最新文章

  1. 快讯 | 首期“医工结合系列研讨会”汇聚清华力量,共促医工融合发展
  2. C#数据结构(一)----线性表
  3. java fast math,Java FastMath.signum方法代码示例
  4. 多个构造器参数使用构建器
  5. AngularJS自定义指令教程第2部分
  6. sybase相关的知识
  7. STM32F205转GD32F205晶振不能起振,什么原因?
  8. 【老生谈算法】matlab实现傅里叶变换算法源码——傅里叶变换
  9. 正则表达式 -文书网ktr
  10. Java HashMap底层实现和原理分析(一)
  11. Word2016写论文之——常用操作总结
  12. 软硬结合——写给硬件开发工程师的全栈入门实战
  13. Linux常用的远程工具
  14. 节能与环保杂志节能与环保杂志社节能与环保编辑部2023年第2期目录
  15. FFmpeg将mp4格式视频转为flv
  16. libpng warning: iCCP: known incorrect sRGB profile 警告,问题解决
  17. ORB-SLAM2跑TUM RGBD数据集时灰屏卡住
  18. 一个研究生学历到底值多少钱?为什么现在那么多人选择在职考研?
  19. Excel常用函数记录
  20. eclipse反编译离线安装

热门文章

  1. 交易系统订单存在的意义
  2. 从十亿光年到0.1飞米
  3. Keras神经网络实现泰坦尼克号旅客生存预测
  4. 20200428 线程安全(上)--彻底搞懂volatile关键字
  5. 畅享10S 鸿蒙,华为畅享10S正式发布 4800万超广角AI三摄1799元起
  6. Unity3D游戏开发初探
  7. 升级合作伙伴计划,实现全面赋能
  8. 从 JIT 编译看 Runtime 的过去与未来
  9. 1231: ykc买零食
  10. Velo项目评级:BB,展望稳定 | TokenInsight