当前位置: 首页 > news >正文

svpwm的原理及法则推导和控制算法详解_电机控制要点解疑:SPWM,SVPWM和矢量控制...

53949a2361642d03d84f1be723f8bb80.png

虽然现在做自动驾驶去了,还是有必要把之前一年做电机控制的心得分享一下,也能方便自己日后的参考。

(以下针对反向电动势为正弦的永磁同步电机而言)

目录:

1. SPWM和SVPWM

2. 矢量控制(Space Vector)

1. SPWM和SVPWM

e84ddbe5900598ead1ca492b250b8fa9.png

抛开各种控制算法等细节,从最朴素的角度出发。我们只需要在A,B,C三相提供120相位差的正弦电压,电机就会稳定的转动起来,调节正弦电压的幅值和频率,就能调节电机的转速和扭矩。这是我们所需要的输出。而我们所提供的输入是稳压直流电源,电机控制中的控制二字指的就是通过6路PWM,控制6个MOS管的开断,来达到直流电源变正弦交流的目的。

于是,这就引出了电机控制的核心手段:PWM。接下来介绍SPWM和SVPWM两种技术,这代表了电机控制建模的两种思路。

A. SPWM

先看图:

bf3da28d9b6249d565f0d298adf56f8e.png

02c2e53dc07173ec29fc89f397a87b6f.png

67155c145550a01b465cba319a095073.png


SPWM的思路简单粗暴,既然输出你想要正弦波,那还不简单,把正弦电压采个样,当前你要多大的电压,我调调PWM的占空比给你就是了。比如这一秒你要1.2V,我给个10%占空比的PWM,12V的电源输出不就成了你要的1.2V了吗?电机参数,当前状态什么的,我才懒得管。

B. SVPWM

相比之下,SVPWM考虑问题的视角就完全不一样了。表面上看我们要的输出是三相正弦波,本质上讲是正弦波产生的旋转磁场在带着转子在转动啊。既然要旋转,那还是先看图吧:

67ad3c2e03d4b3a2f9697f4c6caec52a.png

图中的(001),(101)什么的代表的是6个MOS管的开关状态,你只需要把6个MOS管调到对应的状态,就能得到该方向的电压,作用到电机的转子上带动其旋转,这里就不深究了,到时候自己查表对着做就行了。这里需要强调的是,SVPWM在控制时已经在考虑电机的状态了,比如电机的转子运动到了某个位置,这时需要一个落在扇区1方向的电压来拖动转子的运动,那我就在(100)和(110)之间切换,来合成我们想要的电压呗。相较于SPWM的简单粗暴,SVPWM就考虑的细致入微了。

当然SVPWM的好处也是不言而喻的,在所需电压转动,扇区切换的途中(比如电压从扇区1旋转达到了扇区2),我们只需要把之前的(100)换成(010),而(110)完全不用动,这样就避免的SPWM为达目的,不择手段段,在那疯狂瞎变换MOS开断的疯狂行径,能大大减少MOS开断的损耗。

这里提一句,为什么电机控制用的是中心对称PWM而不是边缘触发,因为按着SVPWM的思路走,每次状态变换只需要改变一个MOS管的开关状态,见下图:

67ad3c2e03d4b3a2f9697f4c6caec52a.png

2. 矢量控制(Space Vector)

不多bb:

0fbe2ff41615c1920fd9671e01544b3f.png

什么Park,Clark变换我就不多说了,之所以我们费尽心思在这搞什么矢量控制,坐标变换,把好好的三相变成旋转的两相X,Y坐标系里面去,是因为变过去了以后,你会发现 Ia, Ib 的幅值固定了,变量被分离到了旋转角θ里面去了。电流的期望值固定了,就可以用PID来控制啦!!! 对,折腾了这么久,我们就是想用PID,这就是电机控制的核心,现代控制虽然好,工业界只爱PID :)

啰嗦一句,clark还是Park变换里面有个2/3还是2/3 的系数变换,是在做相电压与线电压的变化,首先你要知道PMSM在控制时三相是一直在导通的,而不像BLDC只有两相同时导通。2/3具体推导见下图:

c9c9ea337b40d53fd88e43a0f4c94b92.png

Reference:

1. SVPWM是我们通常说的矢量控制么?

2. https://read01.com/KA66o6.html#.WuyBO6Qvypo

3. https://www.ti.com/lit/an/spra588/spra588.pdf

4. https://www.nxp.com/docs/en/supporting-information/DWF13_AMF_AUT_T0526.pdf

相关文章:

  • python删除文件指定字符串,从Python中的字符串中删除特定字符
  • python基础读后感_《python基础教程 》第一章 读书笔记
  • 二叉树的字符图形显示程序_(CSPJ)入门级C++语言试题A卷答案解析阅读程序
  • 服务器显示地址正在使用_用Windows Storage Server 2008做iSCSI存储服务器
  • 权限设计表结构超详细_超详细!!五金模具组件及工程结构设计
  • flex 下对齐_开启 flex 与 grid 布局方式之旅
  • python中的and or的区别_Python 中 (,|)和(and,or)之间的区别
  • python csv模块dictwrite_Pythoncsv.DictWriterwriterow()返回
  • dataset__getitem___PyTorch 之Dataset和DataLoader
  • java 读取txt内容_不用怀疑!这就是把Java.I/O流讲解的最清楚的一篇文章
  • 表单所有input框置灰_别再对 Angular 表单的 ControlValueAccessor 感到迷惑
  • 要求的函数不受支持_支持向量机:如何对不可分数据进行分类?
  • java 内存泄漏_Java应用程序中的内存泄漏及内存管理
  • python制作网页样式_HTML基础做出属于自己的完美网页
  • using在sql中是什么意思_知否 | “开到荼蘼”的“荼蘼”是什么东西?
  • Android 架构优化~MVP 架构改造
  • Java应用性能调优
  • Linux学习笔记6-使用fdisk进行磁盘管理
  • node学习系列之简单文件上传
  • Windows Containers 大冒险: 容器网络
  • 计算机常识 - 收藏集 - 掘金
  • 算法-图和图算法
  • 用element的upload组件实现多图片上传和压缩
  • 在Mac OS X上安装 Ruby运行环境
  • (4)事件处理——(6)给.ready()回调函数传递一个参数(Passing an argument to the .ready() callback)...
  • (ibm)Java 语言的 XPath API
  • (附源码)ssm高校志愿者服务系统 毕业设计 011648
  • (附源码)计算机毕业设计SSM基于java的云顶博客系统
  • (九)c52学习之旅-定时器
  • (七)MySQL是如何将LRU链表的使用性能优化到极致的?
  • (一)基于IDEA的JAVA基础12
  • (转)Android学习笔记 --- android任务栈和启动模式
  • (转)Groupon前传:从10个月的失败作品修改,1个月找到成功
  • (转)用.Net的File控件上传文件的解决方案
  • (转载)PyTorch代码规范最佳实践和样式指南
  • .NET / MSBuild 扩展编译时什么时候用 BeforeTargets / AfterTargets 什么时候用 DependsOnTargets?
  • .NET 使用 JustAssembly 比较两个不同版本程序集的 API 变化
  • .NET/C# 解压 Zip 文件时出现异常:System.IO.InvalidDataException: 找不到中央目录结尾记录。
  • .netcore如何运行环境安装到Linux服务器
  • .NET开源快速、强大、免费的电子表格组件
  • [].shift.call( arguments ) 和 [].slice.call( arguments )
  • [BZOJ] 2006: [NOI2010]超级钢琴
  • [Bzoj4722]由乃(线段树好题)(倍增处理模数小快速幂)
  • [C#C++]类CLASS
  • [CQOI 2010]扑克牌
  • [Django 0-1] Core.Email 模块
  • [Django 0-1] Core.Handlers 模块
  • [E单调栈] lc2487. 从链表中移除节点(单调栈+递归+反转链表+多思路)
  • [GXYCTF2019]BabySQli1
  • [JavaScript]_[初级]_[不使用JQuery原生Ajax提交表单文件并监听进度]
  • [LeetCode]-225. 用队列实现栈
  • [New Portal]Windows Azure Virtual Machine (3) 在VM上挂载磁盘
  • [NOIP2015] 运输计划
  • [SDOI2010]大陆争霸
  • [Share]商务web应用程序的界面设计