当前位置:网站首页>FOC SVPWM函数PWMC_SetPhaseVoltage解析
FOC SVPWM函数PWMC_SetPhaseVoltage解析
2022-04-23 05:51:00 【tilblackout】
一、扇区判断
wUAlpha = Valfa_beta.qV_Component1 * ( int32_t )pHandle->hT_Sqrt3;//hT_Sqrt3为2/√3
wUBeta = -( Valfa_beta.qV_Component2 * ( int32_t )( pHandle->hPWMperiod ) ) * 2;
wX = wUBeta;
wY = ( wUBeta + wUAlpha ) / 2;
wZ = ( wUBeta - wUAlpha ) / 2;
ST官方扇区如下所示:

通过反Park变换得到矢量
和
,首先要知道二者合成的矢量处于哪个扇区。以待合成的矢量在第一扇区为例,当
且
时,矢量可能处于I或II扇区,只需求tan角度即可判断合成的矢量在那个扇区。

最终总结出的规律如下:

由上表可知,判断
、
、
与0的大小关系即可,后续还要根据该变量算三相占空比,所以这里乘以了周期T。



1、wY<0:即
,目标矢量在3、4、5扇区
(1)wZ<0,则在扇区5
(2)wZ≥0:①wX≤0时,在扇区4 ②wX>0时,则在扇区3
2、wY>0:即
,目标矢量在1、2、6扇区
(1)wZ≥0,则在扇区2
(2)wZ<0:①wX≤0时,在扇区6 ②wX>0时,则在扇区1
二、矢量时间计算
这里以第一扇区为例进行解释。
(1)首先需要确保相邻矢量合成的矢量在正六边形边界内,否则逆变器的电压输出波形将要失真。

基本空间向量的幅值,即相电压的值,大小为
,当非零矢量作用时间为0时,相邻基本空间向量合成矢量大小为
。二者相除,即为归一化处理后的基本空间向量的幅值:
。
(2)接下来就是计算矢量作用时间了


(ST官方以第四象限为基准,所以有负号)

最终可求出:
, 
发现
,
,而零矢量作用时间
。
接下来分析一下代码中占空比:
第一扇区的七段式SVPWM的发波顺序为:0-4-6-7-6-4-0

现在我们要求出A、B、C三相的CCR值 wTimePhA、 wTimePhB和wTimePhC,而TIM设置为中央对齐模式,最终可以得出:



- 同理可得其它扇区的七段式SVPWM的占空比和发波波形:
- 表中的tA、tB、tC表示整个高电平时间,和CCR值不同。

- 为何不同扇区A、B、C相的波形不同?
首先来看六个扇区的定义,这里不是按0~6顺序排列的,而是保证相邻两个扇区仅差一个位,这样可以减少MOSFET的开关次数。

最终可以总结出不同扇区具有如下切换顺序,用二进制画出来就对应前面不同扇区的SVPWM 7段图
| 扇区 | 七段SVPWM顺序 |
| I | 0-4-6-7-7-6-4-0 |
| II | 0-2-6-7-7-6-2-0 |
| III | 0-2-3-7-7-3-2-0 |
| IV | 0-1-3-7-7-3-1-0 |
| V | 0-1-5-7-7-5-1-0 |
| VI | 0-4-5-7-7-5-4-0 |
最后再以第一扇区为例,分析相关的配置代码:
static void MX_TIM1_Init(void)
TIM_InitStruct.CounterMode = LL_TIM_COUNTERMODE_CENTER_UP;
TIM_InitStruct.Autoreload = ((PWM_PERIOD_CYCLES) / 2);
uint16_t PWMC_SetPhaseVoltage( PWMC_Handle_t * pHandle, Volt_Components Valfa_beta )
pHandle->hSector = SECTOR_1;
wTimePhA = ( int32_t )( pHandle->PWMperiod ) / 4 + ( ( wX - wZ ) / ( int32_t )262144 );
wTimePhB = wTimePhA + wZ / 131072;
wTimePhC = wTimePhB - wX / 131072;
pHandle->hCntPhA = ( uint16_t )wTimePhA;
pHandle->hCntPhB = ( uint16_t )wTimePhB;
pHandle->hCntPhC = ( uint16_t )wTimePhC;
pSetADCSamplingPoint = pHandle->pFctSetADCSampPointSect1;
return ( pSetADCSamplingPoint( pHandle ) );
static uint16_t R3_1_F30X_WriteTIMRegisters( PWMC_Handle_t * pHdl )
TIMx->CCR1 = pHandle->_Super.hCntPhA;
TIMx->CCR2 = pHandle->_Super.hCntPhB;
TIMx->CCR3 = pHandle->_Super.hCntPhC;
(1)CCR直接等于hCntPhA、hCntPhB、hCntPhC
从上面七段SVPWM的图中可以看出,a、b、c三相的的PWM波形为中央对齐的:
在向上或向下计数模式中,PWM周期等于ARR;而在中央对齐模式中,PWM周期等于2ARR。
这里中央对齐模式的计数顺序为从ARR~0~ARR,而非0~ARR~0:
①从ARR减到CRR:低电平
②从CCR减到0:高电平
③从0增加到CCR:高电平
④从CCR增加到ARR:低电平
(2)hPWMperiod和T
hPWMperiod = T。在中央对齐模式中PWM周期为2倍ARR,所以TIM_ARR设置为了hPWMperiod/2。而且前面我们计算T4和T6的时候,公式中用到的T表示的就是一整个周期的T。
(3)131072和262144
前面我们计算出wTimephA、wTimephB、wTimephC,如下:



由于ADC采集的电流是左对齐的,所以是
格式的,计算PWM比较值时要转为
格式,所以这里计算需要先右移15位,即
。再加上wUAlpha和wUBeta定义时多乘了一个2,所以X、Z还要多除以一个2。
另外
、
,所以我会把代码里的除法改为右移17位和18位,从而加快运算速度。
版权声明
本文为[tilblackout]所创,转载请带上原文链接,感谢
https://blog.csdn.net/tilblackout/article/details/120768324
边栏推荐
猜你喜欢

for()循环参数调用顺序
![[UDS unified diagnostic service] IV. typical diagnostic service (5) - function / component test function unit (routine function unit 0x31)](/img/98/becd691d3d46f74f7666f5cb323eaf.png)
[UDS unified diagnostic service] IV. typical diagnostic service (5) - function / component test function unit (routine function unit 0x31)

【UDS统一诊断服务】四、诊断典型服务(3)— 读故障信息功能单元(存储数据传输功能单元)

Dynamic creation and release, assignment and replication of objects

Opencv uses genericindex for KNN search
![[UDS] unified diagnostic service (UDS)](/img/ed/8c16e4f1136fff95a829be410cab11.png)
[UDS] unified diagnostic service (UDS)

【UDS统一诊断服务】一、诊断概述(4)— 基本概念和术语

Robocode教程5——Enemy类
![[UDS unified diagnostic service] II. Network layer protocol (2) - data transmission rules (single frame and multi frame)](/img/4f/315a9b4cd85ebaad39cfa985dea45b.png)
[UDS unified diagnostic service] II. Network layer protocol (2) - data transmission rules (single frame and multi frame)

Detailed arrangement of knowledge points of University probability theory and mathematical statistics
随机推荐
undefined reference to `Nabo::NearestNeighbourSearch
[untitled]
LaTeX配置与使用
Wechat applet request encapsulation
【UDS统一诊断服务】二、网络层协议(1)— 网络层概述与功能
ROS包nmea_navsat_driver读取GPS、北斗定位信息笔记
搭建jpress个人博客
进程间通信-互斥锁
Matlab标定板角点检测原理
C [document operation] PDF files and pictures are converted to each other
[ThreadX] h743zi + lan8720 + ThreadX + netx duo transplantation
[UDS] unified diagnostic service (UDS)
C语言实现2048小游戏方向合并逻辑
卷积神经网络实现CIFAR100数据集分类
爬虫效率提升方法
修改注册表的值
[UDS unified diagnosis service] i. diagnosis overview (3) - ISO 15765 architecture
Initialization of classes and objects (constructors and destructors)
ArcGIS license错误-15解决方法
Opencv uses genericindex for KNN search