细说SVPWM原理及软件实现原理,关联PWM实现

细说SVPWM原理及软件实现原理,关联PWM实现

文章目录

  • 细说SVPWM原理及软件实现原理,关联PWM实现
    • 1. 前言
    • 2. 基础控制原理回顾
      • 2.1 FOC 原理回顾
      • 2.2 细说 SVPWM
        • 2.2.1 矢量扇区计算
        • 2.2.2 矢量作用时间计算
      • 2.2.3 如何理解 U4 = U6 = 2/3Udc?
      • 2.2.4 如何理解 U4max = 2/3 Udc?
    • 3. 各矢量作用时间如何关联到PWM?软件如何实现?
    • 4. PWM输出占空比计算
      • 4.1 Ta Tb Tc 时间计算
      • 4.2 针对低端采样补充分析
    • 5. 总结

1. 前言

在本人之前的博客中,针对直流无刷电机的 FOC 控制算法进行了一个详细且完整的叙述,从理论推导到实际实现的全过程展示;但由于文章篇幅过长,有些小的细节可能没有得到详细叙述。

本文将针对FOC运算中最复杂的部分——SVPWM的理论原理以及具体的软件实现原理进行详细讲解,特别是SVPWM的实现如何与实际的PWM占空比连接起来。相信看过此篇文章对你一定有莫大帮助!

在这之前对于FOC控制不熟悉的同学,或者想要更深入了解的同学,均推荐可阅读本人精心编写的几篇博客内容,希望对你有所帮助:

  • 专栏:电机控制专栏(点击跳转)

  • 博文:直流无刷电机FOC控制算法 理论到实践 —— 理论(一)(点击跳转)

  • 博文:直流无刷电机FOC控制算法 理论到实践 —— 理论(二)(点击跳转)

  • 博文:直流无刷电机FOC控制算法 理论到实践 —— 实践(点击跳转)

  • 博文:直流无刷电机FOC控制原语

2. 基础控制原理回顾

在细说 SVPWM 之前,我们先对 FOC 矢量控制的整个原理进行一个简单的回顾,以便于我们在后续更好的理解后续的 SVPWM实现 以及对应的 PWM 输出的计算,同时检验下大家对于 FOC 矢量控制的理解。

2.1 FOC 原理回顾

关于FOC矢量控制步骤主要如下:

  1. 通过电流采样,获取 U V W 三相的实时电流 Ia Ib Ic
  2. 通过 Clack 变换 将 U V W 三相电流由 U-V-W 三相坐标系 转换到 α-β 直角坐标系 得到 Iα Iβ
  3. 之后通过 Park 变换α-β 直角坐标系 转换到旋转的 d-q 坐标系 得到 Iq_feedback Id_feedback,且经过 park 变换之后电流将由正弦变换状态变为直流状态;
  4. 之后在 d-q 坐标系 上进行 PID 计算,PID目标值为 Iq_targetId_target,反馈为 Iq_feedbackId_feedback,PID的输出结果为 Uq 以及 Ud
  5. 得到 Uq 以及 Ud 以后进行 反 Park 变换,由旋转的 d-q 坐标系 转换到 α-β 直角坐标系 得到 Uα Uβ
  6. 之后便是采用 SVPWM 去实现 Uα Uβ 咯 ~

这便是整个FOC的控制回顾,如果你不能快速理解上述过程,建议可以先阅读上文中介绍到的博文进行学习 ~

2.2 细说 SVPWM

接下来继续回归下 SVPWM 是如何实现 Uα Uβ 的吧。

2.2.1 矢量扇区计算

Uα 和 Uβ 是在 α-β 直角坐标系 上的两个坐标轴方向的矢量,将 Uα 和 Uβ 通过力矩合成可以得到 Uref ,这个其实是我们最终需要输出的 合成力矩(后文中也称之为合成磁力)。
在这里插入图片描述

根据由三个半桥组成的电机驱动电路,采用三三通电方式(也即同一时间必须有三个管子打开),一共可以由六种组合,这便是我们所能得到的六个基础矢量;这六个基础矢量将矢量输出切割出了六个扇区。
在这里插入图片描述
在这里插入图片描述

之后我们需要思考的便是 Uref 所在哪一个扇区;因为 Uref 落在哪一个扇区,决定了此矢量由哪两个基础矢量合成;

关于扇区的判断方式,我们有两种方式,简单叙述如下:

方式一: 通过假设等式计算得出:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

方式二: 通过正余弦角度推理计算:

  1. 根据 Uα 和 Uβ 的正负判断所处四象限中的哪一个象限
  2. 之后根据 sin(θ) = Uβ / Uα 计算值与 sin(60°) 大小做比对进一步确认所处的扇区位置即可

通过以上方法便可得到 Uref 所处的扇区位置,便可知 Uref 将由哪两个基础矢量去进行合成!,之后便是计算基础矢量的作用时间了!


2.2.2 矢量作用时间计算

知道基础矢量是由哪 “两个” 矢量组成之后,剩下的便是计算此两个基础矢量的作用时间以及零矢量的作用时间了。

根据 Uα 和 Uβ 我们可以计算出 T4 和 T6 所作用的时间,如下图所示:
在这里插入图片描述
在这里插入图片描述

2.2.3 如何理解 U4 = U6 = 2/3Udc?

在上述计算中,我们有使用到一个条件:

在这里插入图片描述

这个条件是如何产生的呢?

在这里插入图片描述
如上图所示,紫色的六边形区域是我们通过控制基础矢量的大小能够实现的合成矢量(合成磁力)所覆盖的区域,如果我们始终保持输出的磁力始终为最大值,则输出的磁力将按照下图中的六边形外边缘轨迹输出,此时我们会发现输出的磁力大小将会不均匀!

那么为了使我们输出的合成磁力的大小保持均匀,我们在绘制此六边形的内切圆,即上图中的粉色区域,内切圆的边缘轨迹即为:最大的能均匀输出的合成磁力输出轨迹,因为需要有保证我们矢量的大小均匀的条件,故我们应控制我们输出的合成磁力落在上图中的红色圆内区域!

那红色圆区域最大的输出磁力 Uref max 是多少,如何计算呢?
在这里插入图片描述
在这里插入图片描述
好家伙,这里又引入了一个条件了: U4max = 2/3 Udc, 这个又是怎么来的呢? 继续!

2.2.4 如何理解 U4max = 2/3 Udc?

起始这个很好理解,U4max 即为电机相电压的最大值,注意是相电压,而不是线电压!

什么是线电压?什么是相电压?直接看下图,一目了然!
在这里插入图片描述


综上分析,我们已经彻底弄明白了 Uref 的分解是如何计算的,采用同样的方式,可计算出 Uref 在其他扇区时对应的基础矢量作用时间,如何所示:

在这里插入图片描述
那么得到 V4 和 V6 矢量的作用时间 T4 和 T6 以及零矢量的作用时间 T0 和 T7 之后,我们又如何与PWM的值关联起来呢?这便是本文所重点讨论的内容了!

3. 各矢量作用时间如何关联到PWM?软件如何实现?

通过上述计算,我们已经可以得出各基础矢量的公式了,但是这个公式看上去似乎很不尽人意,还是一点也想不到如何将这与PWM的占空比联系起来,更别说使用上述公式实现代码了!

上面这些公式看上去很复杂,其实是因为还没经过化简,那么如何化简呢?

我们继续以第一扇区的 T4 和 T6 举例,根据2.2.3章节可知,如果控制矢量在内切圆,则 Uref_max 的最大值为 Udc/sqrt3,而Uref又是由 Uα 和 Uβ 组成,故可知 Uα 和 Uβ 的范围为: ±Udc/sqrt3 !!!

markdown 不好打公式,那我还是继续使用word编辑好贴图吧~

在这里插入图片描述

通过上述化简,最终我们拿到的 T4 = Ts x (sqrt(3)/2 x Uα` - 1/2 x Uβ`) ,Ts 的整个控制周期,取定时器的ARR更新寄存器值,Uα` 和 Uβ` 为 -1 ~ +1 的标量!

这个时候再来看看 Uα` 和 Uβ` 从何而来?

Uα` 和 Uβ` 是通过来自 Uq 和 Ud 经过反Park坐标变化而来,因此 Uq 和 Ud 的取值范围也将是 -1 ~ +1!

再来看看 Uq 和 Ud 又是从何而来?

Uq 和 Ud 来自电流环的PID计算结果,故在进行电流环PID计算的时候,我们需要将电流环的输出限幅设置在 ±1!

当然,有时为了方便PID调参,PID输出目标值太小了,会导致PID参数值通常需要设置的非常小,而这会关联到一些精度丢失,浮点运算等等麻烦的事情,因此我们还可以进行下优化!

我们可以把 Ts 缩小 ARR 倍,及 Ts 取1,对应的 Uα` 和 Uβ` 的范围将由 -1 ~ +1 变为 0 - ARR,注意不是 -ARR - ARR,因为我们输出的是互补PWM,当占空比 >50% 的时候 U相为正, <50% 的时候 U相为负!通过这样的方式,这样我们PID输出的限幅可以修改 0 - ARR,输出数值更大,更方便我们PID的调节,当然你也可以改变放大倍数,不是ARR倍,放心吧,PID参数会帮我们搞定这事的,所以放大其他倍数也不会有影响,关键看我们怎么方便了~

在这里插入图片描述

4. PWM输出占空比计算

首先涉及到的是SVPWM的发波方式,SVPWM的发波方式有两种:五段式七段式控制。不同的控制方式,其零矢量的组成不一样,会对计算产生一点点影响。下面我们也来简单回顾一下两种控制方案:

七段式:
在这里插入图片描述

五段式:
在这里插入图片描述

  • 七段式一个控制周期,存在7种不同状态的切换,优势是对电机控制引入的谐波干扰更小;

  • 五段式一个控制周期存在5种不同的状态切换,优势是MOS发热更小;

以上两种方案,任意一种都行,弄懂一个,另外一个也就弄明白了,这里继续以七段式作为举例进行讲解。

这里,我们以 Uref 在第Ⅰ扇区举例,采用 七段式 控制方式。

首先我们回想下我们之前的六个基础矢量的定义方式;我们是假定 U+ V- W- 时,合成矢量为V4;在这个基础之上,其他矢量对应的通电顺序如下
在这里插入图片描述

序号矢量名称通电顺序
1V4U+ V- W-
2V6U+ V+ W-
3V2U- V+ W-
4V3U- V+ W+
5V1U- V- W+
6V5U+ V- W+

那么如果某相需要通正电,对应的其所在半桥的上管应该打开,下管关闭;

我们再假定打开为高,关闭为低;针对三个半桥的上管,对应波形应该如下:
在这里插入图片描述

之后我们用上述的 V4V6 两个基础矢量以及零矢量(V0V7)去实现 Uref我们可以先不思考各矢量的时间是多少,先思考为了减小开关损耗,如何实现每次矢量变化的时候只开关一个 MOS?

大家此处可先做思考,之后再来看下述答案。

在这里插入图片描述

我们将 V4 和 V6 拆解成了两份,这样便能实现切换时只用动作一个mos管了!

大家再仔细观察下上图,如果我们需要控制PWM输出上述波形,有哪里需要注意的吗?那便是我们对于PWM有效电平的控制,按照上述发波定义(之前的那几个假定条件),我们对上管的PWM应该是低电平先发送,触发比较寄存器CCR之后,电平翻转为有效电平高电平!注意这一点细节!

接下来就是最重要的计算各路PWM的输出了!

首先需要给大家提醒一个点,我们的FOC运算是一个PWM更新中断触发一次,因此实际FOC控制是在针对每个pwm周期进行!

在第2章节,我们已经计算得出了 T0、T7、T4、T6的时间,如下图:
在这里插入图片描述
注意上图中,我们配置PWM为三角波输出模式,计数值CNT由0增加至ARR,再由ARR递减至0,此过程合成了两次Uref,而不是一次!因此上图中是两个T4、两个T6以及两个T0和两个T7!

4.1 Ta Tb Tc 时间计算

如图所示,那么如何计算 UVW(ABC)三相的作用时间 Ta、Tb、Tc 是不是就很清楚了呢!注意,我们这里的 Ta、Tb、Tc 所指代的是上桥臂P波输出为高,也即上桥臂打开的时间!

  • Tc = T7 = T0 = 0.5 * (Ts - T4 -T6)
  • Tb = Tc + T6
  • Ta = Tb + T4

同理,其他扇区的计算也是同样的方法,这下大家应该弄懂了 Ta、Tb、Tc 是如何计算出来的了吧!
在这里插入图片描述
笔记最后的假定 K=1 Ts=1,所描述的即为约去了 sqrt(3)/Udc 以及标幺化Ts为1的操作,在第三章节已进行详细阐述!

通过以上计算,我们便可以得到 Ta Tb Tc 的作用时间,也即 U V W 三相的正反向通电时间。

计算出 Ta Tb Tc 的作用时间,也即上桥臂 PWM 高电平所占用的时间之后,接下来就是配置PWM输出来实现此发波了。PWM配置也有两种方式:即你配置的PWM输出是先输出高电平还是低电平有关!如下是具体的两种方式:

  • 方式A:
    • CNT < CCR:输出低电平
    • CNT > CCR:输出高电平
  • 方式B:
    • CNT < CCR:输出高电平
    • CNT > CCR:输出低电平

注意,我们这里分析的输出P波均是面向上半桥,下板桥采用互补输出! 如果你要面向下半桥,会存在差异,需你自行再分析下,都掌握了之后对你应该也不难~

在这里插入图片描述

采用不同的方式,对应的通道 CCR 计算方式不一样;

  • 以通道A举例:
    • 采用方式A,通道CCR值应设置为:ARR - Ta
    • 采用方式B,通道CCR值应设置为:Ta

4.2 针对低端采样补充分析

以上有两种发波方式,各有其优缺点,那么具体到实际应用中,又有哪些注意事项呢?

我们以三电阻或者两电阻的低端采样分析下;

低端采样有一个注意点,那便是采样时机的控制,务必要求在下半桥mos管打开的时候才去进行采样,这个时候有意思的就来了。回到我们上一小节描述的两种发波方式:

  • 方式A:
    • CNT < CCR:输出低电平
    • CNT > CCR:输出高电平
  • 方式B:
    • CNT < CCR:输出高电平
    • CNT > CCR:输出低电平

再次提醒,注意此发波为面向上桥臂,下桥臂采用互补输出自动发波。

针对方式A,在三角波的起始位置,及CNT=0时,上桥臂PWM输出低,下桥臂输出高,此时下桥臂全部打开,可以进行采样;因此每次电流采样可由定时器的更新中断触发,或者在更新中断内调用函数对ADC进行软触发;进行电流采集后进行FOC运算;

针对方式B,在三角波的中央位置,及CNT=ARR时,上桥臂PWM输出低,下桥臂输出高,此时下桥臂全部打开,可以进行采样;因此此方式电流采样需要配置定时器通道4,通道4的比较值设置为 ARR,当通道4的发生比较事件时,触发ADC采样,或者在通道4的比较中断内调用函数对ADC进行软触发,并进行FOC运算!

方式A,采样点在更新中断发生后,FOC也在更新中断内;
方式B,采样点在通道4的比较中断发生后,FOC计算位于通道4的比较中断内;

所以说P波可不是乱发的,选对合适的很重要~

相信这才是实战的经验吧!希望帮助到看到这里的每一个人~

5. 总结

综上,便是对于SVPWM之PWM输出占空比计算的的补充,欢迎大家讨论留言!也欢迎大家点赞关注+收藏,大家的支持是我创作的动力~

  • 专栏:电机控制专栏(点击跳转)

  • 博文:直流无刷电机FOC控制算法 理论到实践 —— 理论(一)(点击跳转)

  • 博文:直流无刷电机FOC控制算法 理论到实践 —— 理论(二)(点击跳转)

  • 博文:直流无刷电机FOC控制算法 理论到实践 —— 实践(点击跳转)

  • 博文:直流无刷电机FOC控制原语

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/589834.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux系统编程--信号与管道

1、信号与管道是什么&#xff1f; 首先了解信号与管道的意义&#xff0c;我们需要了解Linux系统中进程之间是如何通信的。Linux操作系统下&#xff0c;以进程为单位来分配或者管理资源&#xff0c;进程之间不能直接访问资源&#xff0c;因此&#xff0c;要求进程间的资源和信息…

上位机图像处理和嵌入式模块部署(树莓派4b与消息分发)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 和多线程相比较&#xff0c;多进程最大的好处就是安全。一个进程挂了&#xff0c;不影响其他进程的运行。但是多线程也有自己的优点&#xff0c;那…

Ex1-C6油气化工防爆轮式巡检机器人

Ex1系列防爆轮式巡检机器人整机采用防爆设计&#xff0c;防爆等级为Exd II CT4 Gb。机器人通过无轨3D形态导航技术&#xff0c;结合360度防爆云台和无线防爆充电桩&#xff0c;实现整套防爆标准&#xff0c;可广泛应用于石油、燃气、化工、冶金等II类爆炸环境中&#xff0c;代替…

程序员缓解工作压力——方法分享

前言 作为一名初级程序员&#xff0c;我承认自己在应对工作压力方面还有待提高。在日常工作中&#xff0c;我时常感到压力山大&#xff0c;尤其是在面对复杂问题或紧迫的项目期限时。然而&#xff0c;为了保持高效和持久的工作热情&#xff0c;我还是积极寻求并使用了一…

Python 贪吃蛇

文章目录 效果图&#xff1a;项目目录结构main.pygame/apple.pygame/base.pygame/snake.pyconstant.py 效果图&#xff1a; 项目目录结构 main.py from snake.game.apple import Apple # 导入苹果类 from snake.game.base import * # 导入游戏基类 from snake.game.snake im…

Linux之命令行参数与环境变量

命令行参数&环境变量 命令行参数 main函数也是一个函数&#xff0c;其实也可以携带参数的 int main( int argc, char *argv[ ], char *envp[ ] ) {program-statements } 那这里是有三个参数的: 第一个参数&#xff1a; argc 是个整型变量&#xff0c;表示命令行参数的个数…

WIFI/BT中蓝牙的硬件资源是如何调度的 UART和PCM接口传输的是什么信号

安卓或IOS手机中&#xff0c;wifi/bt中的蓝牙是如何调度硬件资源的&#xff0c;尤其是UART和PCM是如何分配的。M.2 wifi/bt模块或其他形式的模块中&#xff0c;蓝牙是如何调度硬件资源的&#xff0c;尤其是UART和PCM是如何分配的。今天我们就图文并茂的解决这个问题。 蓝牙文件…

SQL 基础 | AS 的用法介绍

SQL&#xff08;Structured Query Language&#xff09;是一种用于管理和操作数据库的标准编程语言。 在SQL中&#xff0c;AS关键字有几种不同的用法&#xff0c;主要用于重命名表、列或者查询结果。 以下是AS的一些常见用法&#xff1a; 重命名列&#xff1a;在SELECT语句中&a…

Vue生命周期都有哪些?

定义 Vue的生命周期就是实例从创建到销毁的一个过程&#xff0c;即从创建、初始化数据、编译模板、挂载Dom($el)->渲染、更新->渲染&#xff0c;卸载等一系列的过程。el是挂载点如<div id"app"></div>。 Vue的生命周期分为八个阶段 1.beforeCreate…

重看Spring聚焦BeanDefinition分析和构造

目录 一、对BeanDefinition的理解 &#xff08;一&#xff09;理解元信息 &#xff08;二&#xff09;BeanDefinition理解分析 二、BeanDefinition的结构设计分析 &#xff08;一&#xff09;整体结构体会 &#xff08;二&#xff09;重要接口和类分析 三、构造 BeanDef…

保姆级IDEA安装与配置教程(含视频+资料)

课程简介 本套课程主要针对 Java 基础开发相关的工具安装和使用&#xff0c;主要包含有 IDEA 的下载、安装、配置、使用、快捷键的使用等。 本套视频是作为新手最为实用的课程&#xff0c;IDEA 是 Java 企业级开发最为常用的继承开发环境。如果熟练使用 IDEA 的话&#xff0c…

【中断】【ARM64】学习总结

optee中的异常向量表解读–中断处理解读 https://mp.weixin.qq.com/s/gBsy4YDYTHGRsy2zcVr6Vg

c# winform快速建websocket服务器源码 wpf快速搭建websocket服务 c#简单建立websocket服务 websocket快速搭建

完整源码下载----->点击 随着互联网技术的飞速发展&#xff0c;实时交互和数据推送已成为众多应用的核心需求。传统的HTTP协议&#xff0c;基于请求-响应模型&#xff0c;无法满足现代Web应用对低延迟、双向通信的高标准要求。在此背景下&#xff0c;WebSocket协议应运而生…

Polardb集中式部署体验

前言说明 PolarDB是阿⾥云数据库团队⾃主开发的云原⽣数据库。据了解PolarDB是产品品牌统称&#xff0c;云上PolarDB提供了Polardb MySQL版&#xff08;集中式数据库&#xff09;&#xff0c;PolarDB PostgreSQL版&#xff08;集中式数据库&#xff09;和PolarDB分布式版&…

人工智能论文:BERT和GPT, GPT-2, GPT-3 的简明对比和主要区别

在BERT的论文里面&#xff1a; 2018.10 BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding&#xff0c;BERT已经解释了BERT&#xff0c;GPT&#xff0c;ELMo的区别。 *ELMo为双向RNN&#xff0c;请忽略。 主要区别&#xff1a; BERT使用的是…

机器学习:深入解析SVM的核心概念【四、软间隔与正则化】

软间隔与正则化 问题一&#xff1a;优化目标函数是如何得到的&#xff1f;得到的过程是怎样的&#xff1f;问题二&#xff1a;拉格朗日乘子法计算详细过程问题三&#xff1a;KKT条件求解过程问题四&#xff1a;结构风险最小化&#xff08;SRM&#xff09;的原理 在前面的讨论中…

批量视频剪辑新选择:一键式按照指定秒数分割视频并轻松提取视频中的音频,让视频处理更高效!

是否经常为大量的视频剪辑工作感到头疼&#xff1f;还在一个个手动分割、提取音频吗&#xff1f;现在&#xff0c;我们为你带来了一款全新的视频批量剪辑神器&#xff0c;让你轻松应对各种视频处理需求&#xff01; 首先&#xff0c;进入媒体梦工厂的主页面&#xff0c;并在板…

机器学习之基于Tensorflow(LSTM)进行多变量时间序列预测股价

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 项目简介&#xff1a;机器学习之基于TensorFlow&#xff08;LSTM&#xff09;进行多变量时间序列预测股价 一、项目…

【Java从入门到精通】Java 正则表达式

目录 正则表达式实例 &#x1f349;java.util.regex 包 &#x1f349;实例 &#x1f349;捕获组 &#x1f349;实例 &#x1f349;RegexMatches.java 文件代码&#xff1a; &#x1f349;正则表达式语法 &#x1f349;Matcher 类的方法 &#x1f349;索引方法 &#…

【Qt QML】QLibrary加载共享库中的类

QLibrary是一个用于加载动态链接库&#xff08;或称为共享库&#xff09;的类。它提供了一种独立于平台的方式来访问库中的功能。 在QLibrary中&#xff0c;可以通过构造函数或setFileName()方法设置要加载的库文件名。当加载库文件时&#xff0c;QLibrary会搜索所有平台特定的…