FOC-MBD(1)Matlab2022/2023 安装 STM32 硬件支持包
FOC-MBD(15)Simulink 模型开发之三相互补 PWM
FOC-MBD(16)TIM 硬件触发 ADC 同步采样
FOC-MBD(17)基于 ADC 同步采样的 PWM 闭环控制链路
FOC-MBD(18)Clarke / Park 坐标变换链路
FOC-MBD(19)反Park 坐标变换链路
FOC-MBD(20)矢量空间脉宽调制 (SVPWM)输出
FOC-MBD(21)基于SVPWM 的开环旋转矢量输出
【FOC-MBD】(19)反 Park 坐标变换链路
-
- [1. 项目介绍](#1. 项目介绍)
-
- [1.1 项目内容](#1.1 项目内容)
- [1.2 实验方案](#1.2 实验方案)
- [1.3 技术原理](#1.3 技术原理)
- [1.4 软硬件需求与引脚分配](#1.4 软硬件需求与引脚分配)
- [2. CubeMX工程配置](#2. CubeMX工程配置)
-
- [2.1 创建新项目](#2.1 创建新项目)
- [2.2 TIM 配置](#2.2 TIM 配置)
- [2.3 ADC 配置(周期触发)](#2.3 ADC 配置(周期触发))
- [2.4 DAC 配置(双通道波形观测)](#2.4 DAC 配置(双通道波形观测))
- [2.5 工程配置](#2.5 工程配置)
- [3. 实验方法与实现流程](#3. 实验方法与实现流程)
-
- [3.1 模型任务与结构](#3.1 模型任务与结构)
- [3.2 创建仿真模型](#3.2 创建仿真模型)
- [3.3 关联 Simulink 模型与 CubeMX 工程](#3.3 关联 Simulink 模型与 CubeMX 工程)
- [3.4 STM32 代码生成与运行](#3.4 STM32 代码生成与运行)
- [4. 实验验证:Inv Park 输出坐标变换](#4. 实验验证:Inv Park 输出坐标变换)
-
- [4.1 实验1:dq 常值输入 → αβ 正弦输出](#4.1 实验1:dq 常值输入 → αβ 正弦输出)
- [4.2 实验2:q 轴分量对 αβ 输出的影响](#4.2 实验2:q 轴分量对 αβ 输出的影响)
- [4.3 实验3:d 轴分量对 αβ 输出的影响](#4.3 实验3:d 轴分量对 αβ 输出的影响)
- [4.4 实验4:id 与 iq 共同作用](#4.4 实验4:id 与 iq 共同作用)
- [5. 总结](#5. 总结)
1. 项目介绍
1.1 项目内容
在上一实验【STM32-MBD(18)Clarke / Park 坐标变换链路】中,已经完成了 FOC 数学变换中"输入链路"的验证,即从三相电流到 dq 同步旋转坐标系的映射过程(abc → αβ → dq)。实验表明,在坐标同步条件下,交流量在 dq 坐标系中可转化为直流量。
在此基础上,本文进一步验证 FOC 算法中的"输出坐标变换链路",即 Park 反变换(Inv Park),实现从 dq 坐标系回到 αβ 静止坐标系的映射过程。
本实验的目标是验证以下数学链路是否正确实现:
bash
dq 坐标系 (id, iq)
↓
Park 反变换(Inv Park)
↓
αβ 静止坐标系 (iα, iβ)
具体验证内容包括:
- 验证 Inv Park 变换是否能够将 dq 坐标系中的直流量映射为 αβ 坐标系中的正弦量;
- 验证 αβ 分量的频率、幅值及相位关系是否符合理论预期;
- 验证 dq 分量对 αβ 输出的控制关系。
本实验仍采用纯软件输入方式,不接电机、不驱动功率级。在 Simulink 中直接构造 dq 输入信号,在 ADC 转换完成事件触发的 Function-Call 子系统中执行 Inv Park 计算,并通过 DAC 输出 αβ 分量进行观测与验证。
本实验仅验证数学链路,不接电机、不驱动功率级。在 Simulink 中构建"纯软件三相输入源",在 ADC 转换完成事件触发的 Function-Call 子系统 中执行一次完整的 Clarke+Park 计算,并通过 DAC 输出 dq 结果进行验证。
1.2 实验方案
总体结构
本实验延续(18)中的事件驱动调度结构:
- 使用 TIM1 触发 ADC;
- 使用 ADC 转换完成事件触发子系统;
- 在事件子系统内部,不依赖实际 ADC 数据;
- 在事件子系统内部,由软件生成 dq 信号。
整体链路如下:
bash
ADC 完成事件
↓
软件生成 dq 信号(id / iq)
↓
Park 反变换(Inv Park)
↓
输出 iα / iβ(DAC)
该结构与(18)保持完全一致,仅将数学链路由"输入变换(abc→dq)"切换为"输出变换(dq→αβ)"。通过保持系统结构不变、仅替换算法模块,实现对坐标变换链路的分步验证。
1.3 技术原理
在 FOC 控制中,dq 同步旋转坐标系中的物理量通常表现为直流量,便于控制器进行调节。而实际作用于电机的电压或电流信号,则需要在静止坐标系或三相坐标系中表达。
Park 反变换用于将 dq 坐标系中的量映射回 αβ 静止坐标系,其标准形式为:
i α i β \] = \[ c o s ( θ e ) − s i n ( θ e ) s i n ( θ e ) c o s ( θ e ) \] \[ i d i q \] \\begin{bmatrix}i_\\alpha\\\\i_\\beta\\end{bmatrix} = \\begin{bmatrix} cos(\\theta_e)\&-sin(\\theta_e)\\\\ sin(\\theta_e)\&cos(\\theta_e)\\\\ \\end{bmatrix} \\begin{bmatrix}i_d\\\\i_q\\end{bmatrix} \[iαiβ\]=\[cos(θe)sin(θe)−sin(θe)cos(θe)\]\[idiq
其中:
- θ e \theta_e θe 为电角度;
- i d i_d id、 i q i_q iq 为 dq 坐标系下的分量。
当 i d i_d id、 i q i_q iq 为常值,且坐标系角度 θ e \theta_e θe 随时间变化时,变换结果 i α i_{\alpha} iα、 i β i_\beta iβ 将表现为正弦波,即:
直流量(dq) → 旋转矢量(αβ) → 正弦量
这一过程与(18)中的 Park 变换形成对偶关系:
- Park:交流 → 直流
- Inv Park:直流 → 交流
1.4 软硬件需求与引脚分配
- 软件环境
本文所涉及的软件环境与(18)保持一致,包括 MATLAB / Simulink、Embedded Coder 以及 STM32 硬件支持包等。具体安装与配置方法可参考:【STM32-MBD(1)安装 Simulink STM32 硬件支持包】。
为保证代码生成与部署过程的稳定性,建议使用与前文一致的软件版本。
-
硬件平台
本文实验基于 NUCLEO-G431RB 开发板进行。实验过程中配合示波器对 DAC 输出波形进行观测,用于验证坐标变换结果。 -
外设资源分工
本实验继续沿用(18)中的外设结构,主要用于构建事件驱动执行环境:
| 外设 | 工作模式 | 功能说明 |
|---|---|---|
| TIM1 | 中心对齐模式 | 产生 TRGO 触发事件 |
| ADC1 | 注入组触发 | 用于产生转换完成事件(触发计算) |
| DAC1 | 双通道输出 | 输出 iα / iβ 波形用于观测 |
其中,ADC 在本实验中不作为数据采样来源,仅作为系统调度触发源
- 引脚分配
在上述硬件平台与外设分工基础上,本文采用的典型引脚分配如下。
bash
TIM 1:
CH1 : PA8 , CH1N : PB13
CH2 : PA9 , CH2N : PB14
CH3 : PA10 , CH3N : PB15
ADC 1:
IN2 : PA1 (I_U)
IN12 : PB1 (I_V)
IN15 : PB0 (I_W)
ADC 2:
IN11 : PC5 (Vbus)
IN5 : PC4 (Temp)
DAC 1:
OUT1 : PA4 (iα)
OUT2 : PA5 (iβ)
youcans@qq.com
通过上述配置,构建"事件触发 → 坐标变换 → DAC 输出"的实验链路,实现对 Inv Park 变换结果的实时观测。其中采样触发完全由定时器硬件事件驱动,不依赖软件调度,而计算结果通过 DAC 实时输出,为坐标变换链路验证提供了直观的观测手段。
2. CubeMX工程配置
本章围绕 Park 反变换(Inv Park)输出坐标变换链路的验证展开,包含三个递进实验:实验1 为 dq 常值输入下的 αβ 正弦输出验证,实验2 为固定 id、改变 iq 的 αβ 响应验证,实验3 为 id、iq 组合变化下的 αβ 综合变化验证。各实验在算法内容上逐步展开,但在系统调度结构上保持完全一致,均采用"TIM1 触发 ADC → ADC 转换完成事件驱动一次计算"的事件驱动机制。
基于上述设计,本实验的 CubeMX 工程配置总体沿用(18)中的设置,仅根据本章的观测需求启用 DAC1 的 CH1、CH2 两个输出通道,用于示波器同时观测两路信号(iα / iβ)。
需要说明的是,在本章实验中,ADC 主要用于产生转换完成事件,作为系统调度的触发源;dq 输入信号由软件生成,不依赖实际模拟量采样。
这种"保持系统结构不变,仅替换数据路径与算法模块"的设计方法,有助于将调度问题、数学变换问题与输入来源问题进行解耦,从而降低系统调试复杂度并提高验证效率。
以下将按照工程创建、TIM 配置、ADC 配置、DAC 配置和工程设置的顺序进行说明。
2.1 创建新项目
-
新建工程。
启动 STM32CubeMX,新建工程,选择 MCU:STM32G431RBT6 或开发板 NUCLEO-G431RB,点击 "Start Project" 创建项目,保存为:
STM32G431_InvPark01.ioc。 -
配置系统时钟树。
(1)点击顶部 "Clock Configuration" 选项卡,进入时钟树配置界面。
(2)设置输入频率 24 MHz,系统主频 160 MHz:
-
系统配置(SYS / RCC)
在 Pinout & Configuration 界面中完成系统级配置:
Debug:Serial Wire
Timebase Source:TIM2
HSE:Crystal/Ceramic Resonator
2.2 TIM 配置
在本实验中,TIM1 仍作为系统的时间基准核心,用于:
- 产生 PWM(虽本实验不使用);
- 触发 ADC 同步采样(关键)。
本实验不涉及 PWM 输出控制验证,因此不对 PWM 输出行为进行分析;但 TIM1 及其 PWM 配置仍然完整保留,以保证系统调度结构的一致性,并为后续 SVPWM 实验提供基础。
在 "Pinout & Configuration" 页面中:
-
选择 TIM1:
- 模式:PWM Generation CH1 / CH2 / CH3(用于后续扩展)
- 计数模式:Center-Aligned Mode(中心对齐)
- PWM 频率:约 10 kHz
-
TIM1 计数器参数配置:
TIM1 的 TRGO(Update Event)作为 ADC 注入组的触发源,是本实验调度链路的核心。
f P W M = f s y s 2 ∗ ( P S C + 1 ) ∗ ( A R R + 1 ) = 160 M H z 2 ∗ 8000 = 10 k H z f_{PWM} =\frac{f_{sys}}{2*(PSC+1)*(ARR+1)} =\frac{160 MHz}{2*8000}= 10 kHz fPWM=2∗(PSC+1)∗(ARR+1)fsys=2∗8000160MHz=10kHz
bash
PSC = 0
ARR = 7999
Center-Aligned mode 1
TRGO = Update Event
youcans@qq.com
- 配置 TRGO:
在 "Parameter Settings" 中,设置 Trigger Event Selection 为 Update Event,用于触发 ADC 转换。
2.3 ADC 配置(周期触发)
ADC 的配置目标是:在 TIM1 触发下完成同步采样,并产生转换完成事件(JEOC),作为系统计算的触发信号。
- 启用 ADC1:
bash
ADC1_IN2 → PA1(I_U)
ADC1_IN12 → PB1(I_V)
ADC1_IN15 → PB0(I_W)
-
ADC1 注入组配置(TIM1_CH4 硬件触发同步采样)
ADC 注入组在 TIM1 触发下完成三通道同步采样,并在转换结束后产生 JEOC 中断,用于触发 Simulink Function-Call 子系统执行一次计算。
-
启用 ADC1:
External Trigger:TIM1 TRGO
Trigger Edge:Rising Edge
-
中断使能:
使能 ADC1_2 global interrupt。
2.4 DAC 配置(双通道波形观测)
为了便于使用示波器同时观测两路坐标变换结果,本实验启用 DAC1 的两个输出通道。
- 启用 DAC1:
bash
DAC1_OUT1 → PA4
DAC1_OUT2 → PA5
需要注意,PA5 同时是 NUCLEO 开发板上的 LD2 引脚,因此启用 DAC1_OUT2 后,不再保留 LD2 的 GPIO 输出功能。
- 输出模式:
在 Pinout & Configuration 中选择 DAC1,开启 OUT1、OUT2 输出通道,设置为 "Connected to external pin only" 模式。

2.5 工程配置
点击 "Project Manager" 进入工程设置界面:
-
在 Project 页面:
- Project Name:
InvPark01 - 选择工程保存路径
- 勾选 "Do not generate the main()"
- Toolchain / IDE:选择 STM32CubeIDE
- 取消勾选 "Generate Under Root"
- Project Name:
-
固件库:
- 取消勾选 "Use latest available version"
- 选择 STM32Cube FW_G4 对应版本
-
在 Code Generator 中:
- 勾选 "Generate peripheral initialization as a pair of '.c/.h' files per peripheral",让每个外设生成独立的'.c/.h'文件。
-
在 Advanced Settings 中:
- 将 "Driver Selector" 全部设置为 "LL"(默认为 HAL)------非常重要,否则后续编译会报错!
- 将 Generated Function Calls 中的 Visibility (Static) 选项全部取消。
-
保存工程
完成上述配置后,使用快捷键 Ctrl + S 或点击 File → Save Project 保存 CubeMX 工程文件。
通过上述配置,构建了如下硬件执行链路:
TIM1 → TRGO → ADC1 → 中断事件 → Simulink计算 → DAC输出
其中:
- TIM1 负责提供周期性触发
- ADC1 提供事件驱动
- DAC1 用于输出变换结果
该结构与(18)保持一致,实现了"调度结构固定、算法模块替换"的设计目标。
3. 实验方法与实现流程
本实验的 Simulink 模型以"采样完成事件驱动一次坐标变换计算"为核心设计原则:ADC 的触发时刻由 TIM1 硬件决定,Simulink 不参与任何触发时序控制;模型仅在 ADC 转换完成事件到来时执行一次 dq 信号生成与 Park 反变换(Inv Park)计算,并输出 αβ 坐标系分量,从而形成"触发 → 计算 → 输出"的矢量数学链路。该链路验证不依赖电机与功率驱动,仅针对输出坐标变换过程进行分析与验证。
本实验聚焦于 FOC 算法中的输出坐标变换过程,即"dq 同步旋转坐标系 → αβ 静止坐标系"的数学映射关系验证。在实现上,dq 信号由软件生成,电角度由模型内部给定。
本章按照由简到繁的思路设计为三个递进实验:
-
实验1:dq 常值输入 → αβ 正弦输出。用于验证 Inv Park 变换是否能够实现"直流 → 正弦"的基本映射关系;
-
实验2:固定 id,改变 iq → αβ 响应变化。用于验证 q 轴分量对 αβ 输出的影响;
-
实验3:id、iq 组合变化 → αβ 综合变化。用于验证 dq 两个分量对 αβ 输出的综合控制关系。
通过上述三个实验,逐步完成从基本变换验证到控制关系验证的构建,为后续引入 SVPWM(αβ → PWM)奠定基础。
3.1 模型任务与结构
本实验的硬件侧链路与(18)保持一致:
- TIM1(TRGO = Update Event)硬件触发 ADC1 周期性转换;
- ADC 完成一次转换后产生 ADC1_2 中断事件。
Simulink 模型的任务是:在该中断事件驱动下完成一次 dq 信号生成与 Inv Park 坐标变换计算。具体分工如下:
- 硬件负责时序:ADC 触发时刻与中断节拍均由 TIM1/ADC 外设硬件完成;
- 模型负责运行期计算:生成 dq 信号 → Inv Park 变换 → 输出 αβ 分量;
- 严格事件驱动:坐标变换计算仅发生在 ADC 转换完成事件触发的 Function-call 子系统中,不依赖模型基础步长或后台周期任务。
需要说明的是,在本实验中 ADC 仅作为系统调度的触发源使用,不参与实际数据采样。
此外,为便于使用示波器对输出结果进行观测,本实验采用 DAC1 的两个输出通道分别输出两路信号,实现双通道同步显示:
- 实验1:输出 iα、iβ;
- 实验2:输出 iα、iβ;
- 实验3:输出 iα、iβ。
从系统结构上看,本文构建的调度与计算链路如下:
bash
TIM1 TRGO(Update Event)
└─ 触发 ADC1 转换
└─ ADC1 转换完成事件
└─ ADC1_2_IRQHandler(Hardware Interrupt)
└─ Function-call Triggered Subsystem
├─ dq 信号生成(软件)
├─ Park 反变换(iα, iβ)
└─ DAC 输出(双通道观测)
3.2 创建仿真模型
创建 Simulink 模型
在 CubeMX 工程文件所在目录下,新建一个 Simulink 模型,并保存为:InvPark01.slx。
注意确保 Simulink 模型文件(.slx)与 CubeMX 工程文件(.ioc)位于同一目录,以便后续进行硬件资源关联和代码生成。
** Simulink 模型结构**
Simulink 模型由两部分组成:
-
顶层模型(Base-rate)
仅用于系统支撑与中断引入,不参与坐标变换计算。
-
事件驱动子系统(Function-call Triggered Subsystem)
由 ADC 中断触发,完成 dq 信号生成与 Inv Park 变换,是本实验的核心。
顶层模型(Base-rate)模块
主模型中放置以下模块:
-
Hardware Interrupt(中断入口)
模块名称:Hardware Interrupt
该模块用于将 ADC 转换完成事件引入 Simulink,作为事件驱动子系统的触发源。
配置如下:
- Interrupt group:ADC
- Interrupt name:ADC1_2_IRQHandler
- Events to serve:ADC Injected End of Conversion
-
Function-call Triggered Subsystem(事件驱动子系统)
该子系统作为计算入口,在每次 ADC 转换完成时执行一次坐标变换计算。
事件驱动子系统内部结构
在 Function-call Triggered Subsystem 内,按如下顺序搭建模块:
- dq 信号生成模块(软件)
通过常数或简单信号源生成 dq 分量:
bash
id = 常数(或设定值)
iq = 常数 / 变化量
电角度 θe 由模型内部生成(相位累加器或积分器):
bash
θe = ∫ ω dt
- Park 反变换模块(Inv Park)
实现 dq → αβ 坐标变换:
bash
iα = id · cosθe - iq · sinθe
iβ = id · sinθe + iq · cosθe
- Park 变换模块
在实验 2 和实验 3 中实现 αβ-dq 坐标的变换:输出 id、iq。
bash
id = iα cosθe + iβ sinθe
iq = -iα sinθe + iβ cosθe
- DAC 输出映射模块
为便于示波器观测,需要将双极性信号映射为 DAC 可输出的单极性数据(0~4095):
D A C = 2048 + ( 2047 / 3.3 ) ⋅ x DAC = 2048 + (2047 / 3.3) · x DAC=2048+(2047/3.3)⋅x
并在输出前进行:
- 限幅:0 ~ 4095
- 数据类型转换:uint16
输出通道分配如下:
-
DAC1_CH1(PA4):第一路信号
-
DAC1_CH2(PA5):第二路信号
3.3 关联 Simulink 模型与 CubeMX 工程
-
模型求解器与仿真参数设置
在 Simulink 菜单中选择 "建模 → 模型设置"(Ctrl + E),在"求解器"中进行如下设置:
- 仿真时间:inf
- 类型:定步长
- 固定步长:auto
- (可选)将每个离散速率视为单独任务
- (可选)自动处理数据传输的速率转换
-
关联 CubeMX 工程文件
在配置参数窗口中切换至 "硬件实现(Hardware board settings)",完成关联:
- Hardware board:STM32G4xx Based
- 选择 CubeMX 工程文件:InvPark01.ioc
-
定时器配置
展开 Target hardware resources -- Timers:
- Timer group:Advanced Timers 1/8/20
- 勾选:Show TIM1 configurations
- 勾选:Start timer during model initialization
- 勾选:Enable Update Interrupt
-
ADC 配置(可选)
展开 Target hardware resources -- ADC1:
- 勾选:Enable Injected EoCS interrupt
- 勾选:Run ADC calibration during model initialization
-
保存模型
将模型保存为:
InvPark01.slx。确保 .slx 与 .ioc 位于同一目录。
3.4 STM32 代码生成与运行
-
硬件连接
使用 USB 线连接 PC 与 NUCLEO-G431RB 开发板,确保 ST-LINK 正常识别。
-
生成并部署代码
打开仿真模型
InvPark01.slx,在 "硬件(Hardware)" 选项卡中点击 "编译、部署和启动"(快捷键 Ctrl + B)。Simulink 将自动完成以下过程:
- 为模型生成 STM32 目标代码;
- 调用 CubeMX 工程配置;
- 通过 IDE 完成编译与链接;
- 将程序下载至 NUCLEO-G431RB 开发板并启动运行。
模型编译与部署过程中的关键信息将显示在 "诊断查看器" 中。
- 运行与验证
代码下载完成后,模型即在 STM32 上运行:- 实验1:观察 iα、iβ(dq 常值输入 → αβ 正弦输出);
- 实验2:观察 iα、iβ(固定 id,改变 iq 时的波形变化);
- 实验3:观察 iα、iβ(id、iq 组合变化下的综合响应)。
程序运行后,可通过示波器连接 DAC1_CH1(PA4)与 DAC1_CH2(PA5),分别观测两路输出信号 iα / iβ。
通过对波形的频率、幅值及相位关系进行观察,可验证 Park 反变换(Inv Park)输出坐标变换链路的正确性。
4. 实验验证:Inv Park 输出坐标变换
在第3章中,我们完成了 Simulink-STM32 实验方法与工程流程的构建,包括模型搭建、硬件配置以及代码生成与运行。
在此基础上,本章按照"由简到繁"的思路,逐步开展输出坐标变换链路的实验验证。从 dq 坐标系的信号生成出发,依次分析不同 dq 分量对 αβ 输出的影响,最终完成 Park 反变换(Inv Park)链路的验证,构建 FOC 输出侧的基础数学变换模型。
4.1 实验1:dq 常值输入 → αβ 正弦输出
在完成输出坐标变换链路的模型搭建后,本实验首先对 Park 反变换(Inv Park)进行基础验证。通过在 dq 坐标系中输入常值信号,并观察 αβ 坐标系中的输出结果,验证"直流 → 正弦"的映射关系。
-
实验目的:
本实验的目标是:验证 Park 反变换(Inv Park)的正确性,完成 "dq → αβ" 坐标映射,并观察变换后信号的基本特性。
-
模型配置:
在本实验中,直接在模型中构造 dq 输入信号:
-
(1)输入:
- id = 常数(例如 1.0) ;
- iq = 0 ;
- 电角度 θe 由模型内部相位发生器生成(θe = ωt)。
-
(2)Park 反变换模块:
- 输入:id、iq、θe ;
- 输出:iα、iβ 。
-
(3)输出:
- 输出偏置与缩放映射:将双极性信号映射为 DAC 可输出的单极性数字量(0~4095);
- DAC1_CH1(PA4)→ iα ;
- DAC1_CH2(PA5)→ iβ 。
本节对应的 Simulink 模型结构如图所示。

- 实验结果:
使用示波器连接:
- PA4(CH1):iα
- PA5(CH2):iβ
观测波形如下图所示:
- iα 与 iβ 均为正弦波;
- 两路信号频率由 θe 决定(例如 100 Hz);
- iα 与 iβ 之间存在约 90° 相位差;
- 两路信号幅值相等。
该结果表明,Inv Park 变换已将 dq 坐标系中的常值信号成功映射为 αβ 平面上的旋转矢量。
通过示波器观察到的 iα / iβ 正交正弦波形,证明了 "dq 输入 → Inv Park 变换 → αβ 输出" 这一坐标变换链路已经建立成功,为后续分析 dq 分量对输出的控制关系奠定了基础。

4.2 实验2:q 轴分量对 αβ 输出的影响
在完成 Inv Park 基本变换验证的基础上,本实验进一步分析 dq 分量对 αβ 输出的影响。为克服连续运行条件下相位差难以直接观测的问题,本实验采用双通道对比的方法,同时输出不同 iq 条件下的变换结果,从而实现直观比较。
-
实验目的:
本实验的目标是:在保持 id 不变的条件下,通过对比不同 iq 取值对应的 αβ 输出波形,验证 q 轴分量对输出矢量幅值与相位的影响。
-
模型配置:
(1)在事件驱动子系统内部,构建两路结构完全相同的 Inv Park 模块,输入相同的电角度 θe 和相同的 d 轴分量 id:
-
InvPark1:
- id = 1.0
- iq = 0.0
-
InvPark2:
- id = 1.0
- iq = 1.0
两路模块均使用同一电角度 θe(由模型内部相位发生器生成),并采用相同的 DAC 映射方式。
(2)为便于对比观测,将两路 iα 输出分别连接至 DAC:
DAC1_CH1(PA4)→ InvPark1 的 iα(iq = 0)
DAC1_CH2(PA5)→ InvPark2 的 iα(iq = 1)
本节对应的 Simulink 模型结构如图所示。

- 实验结果:
使用示波器连接:
- CH1(PA4):iα(iq = 0);
- CH2(PA5):iα(iq = 1)。
观测波形如下图所示:
- 两路信号均为正弦波,频率相同;
- 两路信号存在明显的幅值差异;
- 两路信号之间存在稳定的相位差。
该结果表明,在 Inv Park 变换中,当保持 id 不变而改变 iq 时,输出 αβ 矢量的幅值与相位均会发生变化。通过双通道对比可以清晰观察到:iq 分量的引入不仅改变了输出矢量的大小,还改变了其在 αβ 平面中的方向。
通过示波器观察到的波形变化现象,说明 dq 坐标系中的 q 轴分量参与构成 αβ 输出,是实现输出矢量调节的重要分量。

4.3 实验3:d 轴分量对 αβ 输出的影响
在前述实验中,已经验证了 Inv Park 变换能够实现 dq → αβ 的基本映射关系。本实验在此基础上进一步分析 d 轴分量 id 对输出结果的影响。
-
实验目的:
本实验的目标是:在保持 iq 不变的条件下,通过改变 id 的取值,观察 αβ 输出波形的变化,验证 d 轴分量对输出矢量幅值的影响。
-
实验结果:
在实验中分别设置:
- 情况1:id = 1.0,iq = 0.0
- 情况2:id = 2.0,iq = 0.0
通过示波器对 iα 输出进行对比观测可以发现:
- 两路信号均为频率相同、相位一致的正弦波;
- 波形形态完全一致;
- 幅值存在明显差异,且 id 较大时输出幅值更大。
该结果表明,在 q = 0 的条件下,Inv Park 变换可简化为:
iα = d · cosθe
iβ = d · sinθe
此时 αβ 输出矢量的方向仅由电角度 θe 决定,而与 d 的取值无关。因此,在保持 q = 0 的条件下,改变 d 仅会改变输出矢量的幅值,而不会改变其方向(相位)。
从矢量角度看,d 轴分量对应 dq 坐标系中沿 d 轴的矢量长度,其变化直接反映为 αβ 平面中旋转矢量的幅值变化。

4.4 实验4:id 与 iq 共同作用
在实验 3 中,已经验证了 d 轴分量对 αβ 输出幅值的影响。本实验进一步分析在 dq 矢量模值保持不变的条件下,d/q 分量分配对 αβ 输出的影响。
-
实验目的:
本实验的目标是:在保持 dq 矢量幅值不变的条件下,通过改变 id 与 iq 的组合关系,观察 αβ 输出波形的变化,验证 dq 分量对输出矢量方向(相位)的影响。
-
实验结果:
在实验中分别设置:
- 情况1:id = 1.0,iq = 0.0
- 情况2:id = 0.0,iq = 1.0
两种情况下: ( i d 2 + i q 2 ) = 1 \sqrt{(i_d^2 + i_q^2)} = 1 (id2+iq2) =1,即 dq 矢量幅值相同。
通过示波器对 iα 输出进行对比观测可以发现:
- 两路信号均为频率相同、幅值相近的正弦波;
- 波形幅值基本一致;
- 两路信号之间存在明显的相位差异。
该结果表明,Inv Park 变换本质上是一个旋转变换,dq 坐标系中的矢量在变换到 αβ 坐标系后,其幅值保持不变: ∣ f α β ∣ = ( f d 2 + f q 2 ) |f_{αβ}| = \sqrt{(f_d^2 + f_q^2)} ∣fαβ∣=(fd2+fq2) 。因此,当 dq 矢量模长保持不变时,不同的 d/q 分量分配不会改变 αβ 输出矢量的幅值。
进一步分析可知,dq 向量在 dq 坐标系中的方向为: φ = a t a n 2 ( f q , f d ) φ = atan2(f_q, f_d) φ=atan2(fq,fd)。经过 Inv Park 变换后,αβ 平面中的输出矢量方向为: θ α β = θ e + φ θ_{αβ} = θ_e + φ θαβ=θe+φ。
因此,在 dq 模长不变的条件下,改变 d、q 的分配关系,本质上是改变 dq 向量在 dq 坐标系中的方向,从而引起 αβ 输出矢量方向的变化,表现为输出波形相位的变化。

通过实验3 与实验4 可以综合得到:
- 在 q = 0 条件下,d 轴分量决定 αβ 输出矢量的幅值;
- 在 dq 模长不变时,d/q 分量的分配决定 αβ 输出矢量的方向;
- Inv Park 变换本质上是对 dq 矢量进行旋转映射,将其转换为 αβ 平面中的旋转矢量。
该结果说明,dq 坐标系能够以"幅值 + 方向"的方式完整描述 αβ 平面中的空间矢量,为后续基于 αβ 分量的 SVPWM 调制提供了直接输入。
因此,dq 坐标系不仅能够表示输出矢量的大小,还能够表示其方向,是 FOC 控制中对空间矢量进行解耦与控制的核心表示方式。
在典型的 FOC 控制中,常通过将 d 轴分量设定为固定值(如 id = 0),并调节 q 轴分量来控制输出矢量的幅值与转矩,从而实现对电机的解耦控制。
5. 总结
本文围绕 FOC 控制中的输出坐标变换过程,基于 Simulink-STM32 的事件驱动模型,完成了 Park 反变换(Inv Park)链路的设计与实验验证。在保持"TIM1 触发 ADC → ADC 完成事件驱动计算"这一统一调度结构的前提下,通过逐步构建 dq 输入与 αβ 输出之间的映射关系,实现了输出坐标变换链路的独立验证。
本文设计并完成了三个递进实验:
- 实验1:在 dq 坐标系输入常值信号,验证 Inv Park 能够实现"直流 → 正弦"的基本映射关系;
- 实验2:通过双通道对比方法,验证 q 轴分量对 αβ 输出的影响;
- 实验3:通过控制变量法,分别分析 d 轴分量与 dq 分量分配对输出矢量幅值与方向的作用。
实验结果表明:
- Inv Park 变换本质上是一个旋转变换,可将 dq 坐标系中的向量映射为 αβ 平面中的旋转矢量;
- αβ 输出矢量的幅值由 dq 分量的模长决定;
- 在 q = 0 条件下,d 轴分量仅影响输出幅值,不改变方向;
- 在 dq 模长保持不变时,d/q 分量的分配决定输出矢量的方向(相位)。
通过上述实验,可以进一步理解 Park 变换的本质是实现了从旋转矢量与 dq 分量之间的映射,这是 FOC 控制中实现解耦控制与空间矢量调制的核心:将耦合的三相交流量转化为可独立调节的 d、q 分量。
至此,本系列已完成坐标变换链路的两部分验证:
- (18)Clarke / Park:实现 abc → dq 的输入变换;
- (19)Inv Park:实现 dq → αβ 的输出变换。
下一步,将在此基础上引入空间矢量 PWM(SVPWM),完成 αβ → PWM 的调制过程,从而构建完整的 FOC 控制信号链路。
版权声明:
youcans@qq.com 原创作品,转载必须标注原文链接:
【STM32-MBD】(19)反 Park 坐标变换链路(https://blog.csdn.net/youcans/article/details/144489134)
Copyright@youcans 2026
Crated:2026-04