FOC之SVPWM学习笔记

一、参考资料

  • 【自制FOC驱动器】深入浅出讲解FOC算法与SVPWM技术 - 知乎
  • FOC入门教程_zheng是在下的博客-CSDN博客
  • DengFOC官方文档
  • 技术干货 |【自制】FOC驱动板
  • SVPWM_扇区判断_时间计算_哔哩哔哩_bilibili

二、FOC控制算法流程框图

  • 在FOC控制中主要用到三个PID环,从内到外依次是:电流环、速度环、位置环
  • 通过电流反馈来控制电机电流(扭矩)→通过控制扭矩来控制电机的转速→通过控制电机的转速控制电机位置

在这里插入图片描述

2.1 PI电流环(内层) 

2.2 电流环+速度环

  • w:电机的转速,可以通过电机编码器或者霍尔传感器计算得到 

2.3 位置环+速度环+电流环

  •  编码器无法返回电机的转速w,可以通过计算一定时间内的编码值变化量来表示电机的转速(用平均速度代表瞬时速度)
  • 电机转速比较高时,这样的方法是可以的。但是在位置控制模式时,电机的转速会很慢(因为需要转子固定在某个位置),此时用平均测速法会存在非常大的误差(转子不动或动的很慢,编码器就没有输出或者只输出1、2个脉冲)。
  • 所以为了避免速度环节带来的误差,在做位置控制时,可以只使用位置和电流组成的双环进行控制。此时位置环使用PID控制(位置的微分D就是速度),可以减小位置控制的震荡,加快收敛,积分项的作用是为了消除静态误差。

三、FOC控制算法重要公式

3.1 Clarke变换与反变换

  • Clarke变换:将三相正弦电流Ia、Ib、Ic,转换成Iα、Iβ

\begin{cases}I_\mathbf{\alpha}=I_a\\I_\mathbf{\beta}=\dfrac{2I_\mathbf{b}+I_a}{\sqrt{3}}\end{cases}

  •  Clarke逆变换:用不到,采用了SVPWM进行了替代。

\left\{\begin{aligned}I_{\alpha}&=I_{a}\\I_{b}&=\frac{\sqrt{3}I_{\beta}-I_{\alpha}}2\\I_{c}&=\frac{-I_{\alpha}-\sqrt{3}I_{\beta}}2\end{aligned}\right.

3.2 Park变换与反变换

  • Park变换:将两相正弦电流Iα、Iβ,转换为两个常量Iq、Id

   

α--β坐标系:电机定子

q-d坐标系:电机转子

θ:转子当前的角度

 \left\{\begin{aligned}Id&=I\alpha\times\cos\theta+I\beta\times\sin\theta\\Iq&=-I\alpha\times\sin\theta+I\beta\times\cos\theta\end{aligned}\right.

Iq:当三相绕组产生的磁场方向与转子磁铁相切时,电流产生的旋转力矩最大。

Id:当三相绕组产生的磁场方向与转子磁场方向反向平行时,这时电机会被吸在原地不动,电流都用来产生热量。

  • Iq=1,Id=0,转子逆时针旋转,且转速随着Iq的变大而变大。
  • Iq=0,Id=1,转子定在原地,且发热量随着Id的变大而变大。
  • Park逆变换:

\begin{cases}I\boldsymbol{\alpha}=Id\times\cos\theta-Iq\times\sin\theta\\I\boldsymbol{\beta}=Id\times\sin\theta+Iq\times\cos\theta\end{cases}  

3.3 扇区计算

序号A相桥臂B相桥臂C相桥臂二进制编码矢量编号
1000000U0
2100100U4
3110110U6
4111111U7
5011011U3
6001001U1
7010010U2
8101101U5

3.3.1 矢量编码

为了便于分析:采用二进制的方式对电压矢量进行编码,例如二进制100,十进制为U4

  • 3个半桥臂共可产生8种输出状态(2^3=8)
  • U7(111):3个半桥的上桥臂全部导通,无电流输出
  • U0(000):3个半桥的上桥臂全部关闭,无电流输出

3.3.2 七段式SVPWM调制

  •  在合理的位置插入两个零矢量,并且在时间上进行平均分配,以使产生的PWM对称,从而有效地降低PWM的谐波分量

3.3.3 扇区计算

  • 在每一个扇区,选择相邻的两个电压矢量以及零矢量按照伏秒平衡的原则可以合成每个扇区内的任意电压矢量

在Ⅰ扇区,由正弦定理可得:

  • 计算:Uα、Uβ

  •  计算:T4、T6

 由上面的两个公式,可得T4、T6:

SVPWM背景分析

通过三相矢量,合成一个旋转的矢量。

四、SVPWM算法分析

  • SVPWM:待补充!

4.1 MOS管的8种开关状态

在三相逆变电路中:

  • 1:上桥臂导通
  • 0:上桥臂关闭

 

序号A相桥臂B相桥臂C相桥臂二进制编码矢量编号
1000000U0
2100100U4
3110110U6
4111111U7
5011011U3
6001001U1
7010010U2
8101101U5

 在三相半桥的MOS管导通编码为100时,电机的简化电路模型如下所示:

序号三相半桥电路MOS导通状态编码UaUbUc合成矢量Ux
1000000U0
21002/3Udc-1/3Udc-1/3UdcU4
31101/3Udc1/3Udc-2/3UdcU6
4111000U7
5011-2/3Udc1/3Udc1/3UdcU3
6001-1/3Udc-1/3Udc2/3UdcU1
7010-1/3Udc2/3Udc-1/3UdcU2
81011/3Udc-2/3Udc1/3UdcU5

4.2 矢量合成

  • 目标:通过逆变器的控制,输出一个旋转的电压矢量。
  • 在三相逆变电路中,Ua、Ub、Uc可以合成幅值不变(2/3Udc),频率为三相正弦信号w的空间电压矢量U0~U7。
  • 在每一个扇区,选择相邻的两个电压矢量以及零矢量按照伏秒平衡的原则可以合成每个扇区内的任意电压矢量

 

在Ⅰ扇区,由正弦定理可得:

  •  计算:T4、T6

 由上面的两个公式,可得T4、T6:

  •  T0=T7,是将PWM波形设置为中央对齐模式对称配置零矢量的结果。
  • m为SVPWM的调制系数(调制比),在电流环控制过程中,m设置的越大,代表了期望力矩越大。0<m<1
  • Uref最大值等于:乘以2/3是因为等幅值变换,此时m=1

相比于PWM式:Uref最大 =1/2 Udc,能量利用率可以提高15% 

4.3 扇区判断

  • Uα、Uβ,可以通过park逆变换得到

在Ⅰ扇区:

0<θ<360,根据tanθ的值和正负号,可以做出如下判断:

去除绝对值后,进一步整理可得:

令U1、U2、U3等于:

符号规定:个人定义,也可以取相反的定义

  • U1>0时,A = 1
  • U2>0时,B = 1
  • U3>0时,C = 1
  • 中间变量N=4A+2B+C,可以通过对N值的判断确定扇区
扇区号ABCN
1015
1117
1106
0102
0000
0011

4.4 扇区作用时间计算

  • Ⅰ扇区: 

进一步展开可得:

参考这个方法(通过第Ⅰ扇区旋转)计算出其他扇区的作用时间:注意这个没有加调制系数

  • Ⅱ扇区: 

  • Ⅲ扇区: 

  • Ⅳ扇区: 

  • Ⅴ扇区: 

  • Ⅵ扇区: 

 结合上面六个扇区的公式特点进行提取:使用U1、U2、U3进行替换

 使用U1、U2、U3进行公式简化,可以得到下面的表:非零矢量作用时间

问题:前面这个常系数 需要吗?

4.5 七段式SVPWM时间分配

  • 目前已知任意一个合成矢量Uref的方向和大小,那么如何控制硬件电路实现那?
  • 把矢量作用时长换成MOS管的导通时间即可,然后通过这些组合方式生成SVPWM
  •  在合理的位置插入两个零矢量,并且在时间上进行平均分配,以使产生的PWM对称,从而有效地降低PWM的谐波分量

  •  把这些矢量信号进行排列组合,生成SVPWM信号,例如在I扇区使用到了矢量U4和U6,加入零矢量,可以形成中央对齐的PWM信号。

 应为0-1-5-7-7-5-1-0

 应为0-4-5-7-7-5-4-0

Uref所在的位置MOS开关切换顺序二进制编码电压矢量切换顺序
Ⅰ区(0<θ<60)000-100-110-111-111-110-100-0000-4-6-7-7-6-4-0
Ⅱ区(60<θ<120)000-010-110-111-111-110-010-0000-2-6-7-7-6-2-0
Ⅲ区(120<θ<180)000-010-011-111-111-011-010-0000-2-3-7-7-3-2-0
Ⅳ区(180<θ<240)000-001-011-111-111-011-001-0000-1-3-7-7-3-1-0
Ⅴ区(240<θ<300)000-001-101-111-111-101-001-0000-1-5-7-7-5-1-0
Ⅵ区(300<θ<360)000-100-101-111-111-101-100-0000-4-5-7-7-5-4-0

 

 如果T4和T6非零矢量作用时间的和大于Ts,则需要进行调制处理,其原理是等比例缩小两个非零矢量作用时间。

T7 = (T-T4-T6)/2

 三相半桥输出PWM的占空比:

4.6 五段式SVPWM时间分配

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

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

相关文章

picGo+gitee+typora设置图床

picGogiteetypora设置图床 picGogitee设置图床下载picGo软件安装picGo软件gitee操作在gitee中创建仓库在gitee中配置私人令牌 配置picGo在插件设置中搜索gitee插件并进行下载 TyporapicGo设置Typora 下载Typora进行图像设置 picGogitee设置图床 当我了解picGogitee可以设置图床…

基础论文学习(2)——DETR

目标检测 DETR&#xff1a;End-to-End Detection with Transformer detr是facebook提出的引入transformer到目标检测领域的算法&#xff0c;效果很好&#xff0c;做法也很简单&#xff0c;相较于RCNN和YOLO系列算法&#xff0c;避免了Proposal/AnchorNMS的复杂流程。 1. detr…

网络安全在医疗行业中的重要性

不可否认&#xff0c;现代世界见证了技术和医疗行业的交织&#xff0c;塑造了我们诊断、治疗和管理健康状况的新方式。随着电子健康记录取代纸质文件&#xff0c;远程医疗缩短了患者和医疗服务提供者之间的距离&#xff0c;数字化转型既是福音&#xff0c;也是挑战。最近的全球…

数据库三大范式是什么,又为什么要反范式?

&#x1f3c6;作者简介&#xff0c;黑夜开发者&#xff0c;CSDN领军人物&#xff0c;全栈领域优质创作者✌&#xff0c;CSDN博客专家&#xff0c;阿里云社区专家博主&#xff0c;2023年6月CSDN上海赛道top4。 &#x1f3c6;数年电商行业从业经验&#xff0c;历任核心研发工程师…

opencv/C++ 人脸检测

前言 本文使用的测试资源说明&#xff1a; opencv版本&#xff1a;opencv 4.6.0 人脸检测算法 Haar特征分类器 Haar特征分类器是一个XML文件&#xff0c;描述了人体各个部位的Haar特征值。包括&#xff1a;人脸、眼睛、鼻子、嘴等。 opencv 4.6.0自带的Haar特征分类器&…

vue3+uni——watch监听props中的数据(组件参数接收与传递defineProps、defineEmits)

案例说明 A页面引用的子组件B A页面 <template><view>//引用组件<serviceOrder change"change" :list"list" :current"type"></serviceOrder></view> </template><script setup>import serviceOrd…

SpringCloud超详细教程

1.认识微服务 随着互联网行业的发展&#xff0c;对服务的要求也越来越高&#xff0c;服务架构也从单体架构逐渐演变为现在流行的微服务架构。这些架构之间有怎样的差别呢&#xff1f; 1.0.学习目标 了解微服务架构的优缺点 1.1.单体架构 单体架构&#xff1a;将业务的所有…

vue中实现echarts三维散点图

需要安装 echarts 同时引入 echarts-gl 我安装的版本&#xff1a; "echarts": "^5.3.2", "echarts-gl": "^2.0.9", import Vue from "vue"; import * as echarts from "echarts"; Vue.prototype.$echarts echa…

Spring 学习源码的基础 核心原理与核心概念

文章目录 核心原理AnnotationConfigApplicationContextIoC 容器加载流程Spring 中如何创建一个对象Bean 的创建过程 (生命周期)单例 原型推断构造方法依赖注入AOP 动态代理判断是否需要 AOP 的大致流程CGLib 做 AOP 的大致流程事务事务代理对象执行方法的流程事务注解排至失效的…

使用yapi生成漂亮接口文档

YApi-教程 1. 进入yapi 的菜单 2. 从微服务中导出swagger的json 从浏览器页面访问http://localhost:端口/服务/swagger-ui.html&#xff0c;然后打开浏览器的控制台&#xff0c;查看network&#xff0c;刷新下页面&#xff0c;找到XHR中的api-docs&#xff0c;然后查看res…

基于Java+SpringBoot+Vue前后端分离公交线路查询系统设计和实现

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…

stm32读写片内flash项目总结(多字节读写tongxindu)

1.flash操作驱动程序 a头文件 #ifndef FLASH_H #define FLASH_H #include “stm32f4xx.h” #define BOARD_NUM_ADDR 0x0800C000 #define STM32_FLASH_BASE 0x08000000 //STM32 FLASH的起始地址 #define FLASH_WAITETIME 50000 //FLASH等待超时时间 //FLASH 扇区的起始地址…

openGauss学习笔记-51 openGauss 高级特性-列存储

文章目录 openGauss学习笔记-51 openGauss 高级特性-列存储51.1 语法格式51.2 参数说明51.3 示例 openGauss学习笔记-51 openGauss 高级特性-列存储 openGauss支持行列混合存储。行存储是指将表按行存储到硬盘分区上&#xff0c;列存储是指将表按列存储到硬盘分区上。 行、列…

el-backtop返回顶部的使用

2023.8.26今天我学习了如何使用el-backtop组件进行返回页面顶部的效果&#xff0c;效果如&#xff1a; <el-backtop class"el-backtop"style"right: 20px; bottom: 150px;"><i class"el-icon-caret-top"></i></el-backtop&…

Markdown初级使用指南

前言 大家好&#xff0c;我是艾老虎尤&#xff0c;我在一篇官方的文章中&#xff0c;我了解到了markdown&#xff0c;原本我写博客一直是使用的富文本编译器&#xff0c;之前我也有同学叫我使用MD&#xff0c;但是我嫌它复杂&#xff0c;就比如说一个标题&#xff0c;我在富文…

STM32 Cubemx配置串口收发

文章目录 前言注意事项Cubemx配置printf重定向修改工程属性修改源码 测试函数 前言 最近学到了串口收发&#xff0c;简单记录一下注意事项。 注意事项 Cubemx配置 以使用USART1为例。 USART1需配置成异步工作模式Asynchronous。 并且需要使能NVIC。 printf重定向 我偏向…

AURIX TriCore内核架构学习笔记

名词缩写 ISA - Instruction Set Architecture&#xff0c;指令集架构PC - Program Counter, holds the address of the instruction that is currently runningGPRs - 32 General Purpose RegistersPSW - Program Status WordPCXI - Previous Context InformationCSA - Conte…

改进YOLO系列:10.添加NAMAttention注意力机制

添加NAMAttention注意力机制 1. NAMAttention注意力机制论文2. NAMAttention注意力机制原理3. NAMAttention注意力机制的配置3.1common.py配置3.2yolo.py配置3.3yaml文件配置1. NAMAttention注意力机制论文 论文题目:NAM: Normalization-based Attention Module 论文…

Python——列表(list)推导式

本文基于python3。 目录 1、Python推导式2、列表(list)推导式2.1、定义2.2、实际操作2.2.1、一个表达式&#xff0c;后面为一个 for 子句2.2.2、一个表达式&#xff0c;后面为一个 for 子句&#xff0c;然后&#xff0c;跟着if 子句。2.2.3、一个表达式&#xff0c;后面为一个…

matlab使用教程(21)—求函数最值

1. 求函数最优值 1.1求一元函数的最小值 如果给定了一个一元数学函数&#xff0c;可以使用 fminbnd 函数求该函数在给定区间中的局部最小值。例如&#xff0c;请考虑 MATLAB 提供的 humps.m 函数。下图显示了 humps 的图。 x -1:.01:2; y humps(x); plot(x,y) xlabel(x)…