SVPWM算法
SVPWM算法概述
输入 (Input)
- 目标电压矢量 :FOC 算法算出来的“我们到底想要什么”,即目标电压的大小 和角度 (在代码里通常是经过坐标变换后的 和 )。
- 母线电压 :当前电源或电池的真实物理电压 (作为计算输出时间的参考基准)。
处理 (Process)
- 找扇区 :根据角度 ,判断目标矢量落在了六边形的哪一个切片(1~6 扇区)里,这就锁定了要用哪两个物理有效矢量来组合。
- 算时间 :根据电压大小 和母线电压的比值,利用简单的三角函数推导,算出这两个有效矢量分别需要开启多长时间( 和 ),剩下的时间全部用不发力的零矢量()填满。
- 排时序 :把算好的时间按“中心对齐”规则(七段式发波)分配给 A、B、C 三相。确保每次状态切换时,只有一个桥臂的 MOS 管动作,以把开关损耗降到最低。
输出 (Output)
- 3 个具体的 PWM 占空比数值 (对应单片机定时器里的比较寄存器值,如 CCR1、CCR2、CCR3)。 这 3 个数字将被定时器硬件直接转化为驱动 6 个 MOS 管的真实高频方波电平信号。
公式推导(推导出来的结果直接用在代码里)
已知,求:

矢量作用时间计算和扇区判断
上面是一个扇区的,以此类推,可以得出一个公式:
其中,, 为 PWM 周期。 是时间辅助量,按扇区选取对应的正负组合得到 。
怎么选呢,查表即可:


最终结果就是,把带入公式,算出XYZ查表,得出
第三步:七段式与五段式调制

7段式输出的电流波形最平滑(马鞍波),电机跑起来极其安静,谐波最小,但是功耗大
5段式逆变器的开关损耗降低1/3,但是会有噪音,也不丝滑
算出基准跳变点:
(剩下的 和 依然是 加上对应的有效时间 和 )
直接靠参数无缝切换:
- 你想用 7 段式?
代码里传参
K0 = 0.5。算出来的 ,直接变成完美的对称 7 段波。 - 你想用 5 段式?
代码里传参
K0 = 0(全用000)或K0 = 1(全用111)。算出来的某一相 CCR 直接贴底变 0,瞬间锁定成 5 段波。
第四步:合成磁场
定时器如何输出 PWM
| 寄存器 | 含义 | 图中说明 |
|---|---|---|
| CNT(计数器) | 当前数到哪里 | 每个计数时钟加 1 或减 1,曲线表示变化趋势 |
| ARR(自动重装载寄存器) | 计数上限/折返点 | 本例 ARR = 2000,计数时钟为 80 MHz |
| CCR(捕获/比较寄存器) | PWM 的比较阈值 | U、V、W 各有一个;CNT 到阈值时切换输出 |
中心对齐时,CNT 从 0 数到 ARR,再数回 0。本例 PWM 周期为:
采用 PWM mode 2、高电平有效,占空比为 时:
图中的三相比较值:、、。比较值取整显示,时间条按理想比例绘制。
例如:七段式状态时序
一个 PWM 周期内,开关状态按下面的顺序切换:
其中 、 为该扇区的有效矢量,、 为零矢量;通过各状态的作用时间,在一个 PWM 周期内合成目标平均电压矢量。
