【FOC-MBD】(17)基于 ADC 同步采样的 PWM 闭环控制链路

张开发
2026/4/8 18:54:11 15 分钟阅读

分享文章

【FOC-MBD】(17)基于 ADC 同步采样的 PWM 闭环控制链路
【FOC-MBD】1Matlab2022/2023 安装 STM32 硬件支持包【FOC-MBD】15Simulink 模型开发之三相互补 PWM【FOC-MBD】16TIM 硬件触发 ADC 同步采样【FOC-MBD】17基于 ADC 同步采样的 PWM 闭环控制链路【FOC-MBD】18Clarke / Park 坐标变换链路【FOC-MBD】19反 Park 坐标变换链路【FOC-MBD】20矢量空间脉宽调制 SVPWM输出【FOC-MBD】21基于SVPWM 的开环旋转矢量输出【FOC-MBD】22V/F 控制与开环电压驱动【STM32-MBD】17基于 ADC 同步采样的 PWM 闭环控制链路1. 项目介绍1.1 项目内容1.2 实验方案1.3 软件需求与环境配置1.4 硬件需求与引脚分配2. CubeMX工程配置2.1 创建新项目2.2 TIM 配置2.3 ADC 配置同步采样与中断使能2.4 工程配置3. 实验 基于 ADC 同步采样的 PWM 闭环链路3.1 模型任务与结构3.2 创建仿真模型3.3 关联 Simulink 模型与 CubeMX 工程3.4 STM32 代码生成与运行3.5 实验结果分析5. 总结1. 项目介绍1.1 项目内容在电机控制系统中PWM 输出的更新时刻是否与 ADC 采样结果严格对应直接关系到控制系统的稳定性与可预测性。尤其在 FOC 等实时控制应用中通常要求 每一次 ADC 采样完成后立即进行计算并更新 PWM 输出以保证采样数据与控制动作之间具有明确、可重复的时序关系。在前一篇《【STM32-MBD】16TIM 硬件触发 ADC 同步采样》中已经完成了 TIM 硬件触发 ADC 注入组采样 以及 基于 ADC 采样完成事件的调度结构验证确认了“采样完成事件可以作为系统调度核心”的可行性。在此基础上本文进一步向控制闭环方向推进重点关注 ADC 采样结果如何在同一调度链路中驱动 PWM 输出更新。本文采用 基于 ADC 同步采样的 PWM 闭环控制 这一实验主题但暂不引入电流环或 FOC 算法也不依赖真实电机负载系统。实验通过电位器提供可调模拟电压利用 ADC 对该电压进行同步采样并在 ADC 采样完成事件驱动下将采样结果映射为 PWM 占空比实现“输入变化—采样—PWM 更新”的标量闭环验证。该闭环仅用于验证数据通路与调度结构的正确性不涉及控制性能评估。通过该实验本文旨在完成从“同步采样”到“闭环更新”的关键过渡为后续引入比例/PI 控制、电流环以及完整 FOC 控制算法提供一套已经过验证的、时序清晰的基础调度结构。1.2 实验方案本实验采用逐步推进、先验证结构再扩展功能的方式进行设计整体实验方案围绕“输入—采样—调度—输出”这一最小闭环通路展开。在实现方式上本文继续采用 STM32-MBD 开发流程由 CubeMX 完成 TIM、ADC 等外设的结构性与时序性配置包括 PWM 频率、触发方式以及中断使能等关键参数Simulink 不参与采样时序的控制而是在 ADC 采样完成事件驱动的 Function-call 子系统中完成数据读取与 PWM 更新。这种分工方式保证了采样与更新的时间一致性同时也使模型结构更加清晰、可验证。在硬件层面利用 TIM1 产生固定频率的 PWM 波形并通过定时器硬件事件触发 ADC 进行同步采样确保 ADC 采样时刻与 PWM 周期之间具有确定的对应关系。ADC 采样完成后通过中断事件驱动控制逻辑的执行为后续闭环调度提供明确的触发入口。通过示波器观测 PWM 输出可以直观验证 PWM 占空比随输入电压变化而同步更新从而确认“采样完成即更新输出”这一闭环调度语义在工程上的可实现性。1.3 软件需求与环境配置本文所涉及的 软件与开发环境配置与前文【STM32-MBD】系列保持一致。关于所需软硬件条件及详细安装过程请务必首先参考 【STM32-MBD】1安装 Simulink STM32 硬件支持包。强烈建议在安装相关软件时优先采用文中推荐版本并严格按照步骤完成安装与配置。在 Model-Based Design 开发流程中软件版本之间的兼容性对代码生成与工程部署具有重要影响随意更换版本可能导致难以定位的问题。必需的软件环境STM32 开发工具链建议首先使用推荐版本跑通本文项目STM32CubeMX推荐使用 V6.4.0用于 STM32 工程初始化与外设配置本文中主要用于 TIM1 三相互补 PWM 及死区参数的配置。STM32CubeProgrammer推荐使用 V2.6.0用于程序下载、调试及 Flash 管理。STM32CubeIDE或 Keil MDK-ARM 等 IDE 工具用于编译、链接及调试由 Simulink 自动生成的 STM32 工程代码。STM32Cube_FW_G4 固件包推荐使用 V1.5.0提供 STM32G4 系列的 HAL 驱动与底层支持文件。若使用其它 STM32 MCU应选择对应系列的固件包。例如STM32F4 系列需使用 STM32Cube_FW_F4_V1.26.0。MATLAB / Simulink 环境MATLAB / Simulink本文基于 MATLAB R2022b 进行开发与测试也可使用更新版本。Simulink Coder用于从 Simulink 模型、Stateflow 图及 MATLAB Function 中生成 C/C 代码支持快速原型、实时与非实时应用是 STM32-MBD 工作流的核心组件。Embedded Coder Support Package for STMicroelectronics STM32 ProcessorsSTM32 处理器嵌入式硬件支持包用于将 Simulink 模型直接部署到基于 STMicroelectronics STM32 处理器的硬件平台上实现自动代码生成、编译与下载。安装完成后的检查与验证为确保 Simulink-STM32 代码生成与部署环境配置正确应逐项进行基础验证测试。具体的检查流程与示例模型部署方法请参考【STM32-MBD】2Simulink 模型部署入门。通过该基础测试可确认以下关键环节均工作正常Simulink 模型可正确生成 STM32 目标代码工程可在 IDE 中顺利编译程序可成功下载并在硬件上运行基于上述原理本文以 TIM1 产生的 TRGO 事件触发 ADC1 注入组同步采样 为核心思路将 PWM 时序、触发机制与 ADC 采样过程全部固定在硬件层面实现。Simulink 不参与触发与时序控制仅用于对采样结果进行读取、处理与验证。1.4 硬件需求与引脚分配硬件平台本文实验基于 NUCLEO-G431RB 开发板进行。该开发板搭载 STM32G431 MCU内部集成高级定时器 TIM1原生支持三相互补 PWM 输出及硬件死区插入非常适合用于电机控制与功率驱动相关实验。为验证 PWM 波形及 ADC 同步采样时序的正确性实验过程中配合使用示波器对关键信号进行观测与调试。硬件外设资源分工本实验围绕 “TIM 硬件触发 ADC 同步采样” 的核心架构对片上外设资源进行如下分工配置外设工作模式功能说明TIM1中心对齐模式频率 10kHzCH1/CH1N、CH2/CH2N、CH3/CH3N输出三相互补 PWM定时器在 PWM 运行过程中产生TRGO 触发事件作为 ADC1 的硬件触发源ADC1注入组模式外部触发触发源TIM1 的 TRGO 事件采样通道3路I_U / I_V / I_W转换完成后自动触发DMA。ADC2规则组模式软件触发用于低速采集母线电压Vbus、温度Temp。其中TIM 输出通道与 ADC 采样通道需根据具体硬件平台的原理图进行配置。本文实验基于 NUCLEO-G431RB 开发板 搭配 NUCLEO-IHM16M1 电机驱动板支持三电阻或单电阻电流采样方案。引脚分配在上述硬件平台与外设分工基础上本文采用的典型引脚分配如下。TIM1: CH1:PA8 , CH1N:PB13 CH2:PA9 , CH2N:PB14 CH3:PA10 , CH3N:PB15 ADC1: IN2:PA1(I_U)IN12:PB1(I_V)IN15:PB0(I_W)ADC2: IN11:PC5(Vbus)IN5:PC4(Temp)youcansqq.com通过上述硬件资源分工与引脚配置本文构建了一条 “TIM1 → TRGO → ADC1 注入组 → DMA → 内存” 的全硬件驱动同步采样链路。该链路中采样触发完全由定时器硬件事件驱动不依赖 CPU 中断或软件调度为后续三相电流同步采样与电流环控制实验提供了稳定、可靠的硬件基础。2. CubeMX工程配置在 STM32-MBD 开发中CubeMX 主要负责对硬件外设进行结构性与时序性的配置包括定时器的计数模式、触发事件、ADC 的外部触发方式以及 DMA 等关键硬件链路的建立而 Simulink 则侧重于运行期数据的读取、处理与显示不直接参与底层时序控制。在 STM32-MBD 开发流程中CubeMX 负责所有与硬件结构及时序相关的配置包括定时器的运行模式、ADC 的触发方式以及中断资源的分配等而 Simulink 仅在运行期根据这些配置完成数据读取与控制输出更新。本实验采用的 PWM 频率、ADC 触发与中断调度结构均在 CubeMX 中一次性确定。本实验的核心目标是验证 “ADC 同步采样完成事件驱动 PWM 更新” 的闭环调度结构在 CubeMX 配置中需要重点关注TIM1 的 PWM 生成方式及其与 ADC 的触发关系ADC 的同步采样方式及采样完成事件配置中断资源的正确使能与冲突避免。以下将按照工程创建、TIM 配置和 ADC 配置的顺序进行说明。2.1 创建新项目新建工程。启动 STM32CubeMX点击 “Start New Project”或使用快捷键 Ctrl N新建工程进入 New Project 界面。选择 MCUSTM32G431RBT6根据开发板所使用的 MCU 型号进行选择选择开发板NUCLEO-G431RB点击右上角 “Start Project” 创建项目将工程保存为 STM32G431_ADC05.ioc配置系统时钟树。1点击顶部 “Clock Configuration” 选项卡进入时钟树配置界面。2设置输入频率 Input frequency 24 MHz系统主频 SysCLK frequency 160 MHz配置完成后系统时钟状态如下System Clock160 MHzHCLK160 MHzPCLK1160 MHzPCLK2160 MHz系统配置SYS / RCC在 Pinout Configuration 界面中完成系统级配置1选择 System Core – SYSDebug 模式设置为 Serial Wire将基础时钟源 Timebase Source 设为 “TIM2”。2选择 System Core – RCCHigh Speed Clock (HSE)Crystal/Ceramic ResonatorLow Speed Clock (LSE)Disable本实验不使用说明在基于 Simulink 的 STM32-MBD 开发中SysTick 通常由框架用于模型调度。若工程中仍需使用 HAL 的时间基准服务可将 CubeMX 的 Timebase Source 切换至其它定时器如 TIM2。GPIO 配置。1将 LD2PA5 配置为输出模式 GPIO_Output2将 用户按键PC13 配置为外部中断 GPIO_EXTI13配置虚拟串口LPUART本实验使用串口将 ADC / DAC 数据发送至 PC 端用于波形显示启用 LPUART1模式Asynchronous波特率115200引脚默认 PA2TX/ PA3RX连接至 NUCLEO 板载 ST-LINK 虚拟串口在需要高频数据传输或连续波形刷新时可为 LPUART1_TX 分配 DMA 通道以降低 CPU 负载。2.2 TIM 配置在本实验中TIM1 是整个系统的时间基准核心承担 PWM 生成和 ADC 同步采样触发两项任务。配置 TIM1 管脚。在右侧 Pinout View 中点击相应引脚并选择 TIM1 的 PWM 功能引脚分配如下CH1–CH3 用于输出三相 PWM 波形对应的 CH1N–CH3N 为互补输出由 TIM1 硬件自动完成互补关系与死区插入。TIM1_CH1 → PA8 TIM1_CH2 → PA9 TIM1_CH3 → PA10 TIM1_CH1N → PB13 TIM1_CH2N → PB14 TIM1_CH3N → PB15启用 TIM1工作模式设置为 PWM Generation。在 Pinout Configuration 中选择 “Timers – TIM1 – TIM1 Mode and Configuration”配置如下Clock Source: Internal Clock Channel-1: PWM Generation CH1 CH1N PWM 互补输出 Channel-2: PWM Generation CH2 CH2N PWM 互补输出 Channel-3: PWM Generation CH3 CH3N PWM 互补输出TIM1 计数器参数配置TIM1 在运行过程中在 PWM 周期内的预定关键时刻产生 TRGO 触发事件。该事件作为 ADC1 注入组的外部触发源用于启动同步采样。触发源选择 Update Event该 TRGO 事件将作为 ADC 同步采样的外部触发信号。当 ARR 7999 时对应的 PWM 频率为 10 kHz其计算关系如下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*(PSC1)*(ARR1)} \frac{160 MHz}{2*8000} 10 kHzfPWM​2∗(PSC1)∗(ARR1)fsys​​2∗8000160MHz​10kHzCounter Settings: Prescaler(PSC):0Counter Mode: Center Aligned mode1Counter Period(ARR):7999Internal Clock Division(CKD): No Division Repetition Counter(RCR):0Auto-reload preload: Enable Trigger Output(TRGO)Parameters: Trigger Event Selection TRGO: Update Event youcansqq.com死区时间参数配置死区时间用于防止上下桥臂直通对功率驱动的安全运行至关重要。在 Break And Dead Time management – Output Configuration 中进行如下设置Break And Dead Time management - Output Configuration: Automatic Output State: Disable DeadTime Preload: Enable Dead Time:50计数周期2.3 ADC 配置同步采样与中断使能ADC 的配置目标是在 TIM1 触发下完成同步采样并在采样完成后产生中断事件用于驱动 PWM 更新逻辑的执行。ADC 引脚配置与中断使能根据硬件原理图中的管脚定义在右侧 Pinout View 中配置 ADC 相关引脚。ADC1_IN2 → PA1I_U ADC1_IN12 → PB1I_V ADC1_IN15 → PB0I_W ADC2_IN11 → PC5Vbus ADC2_IN5 → PC4TempADC1 注入组配置TIM1_CH4 硬件触发同步采样ADC1 用于三相电流的同步采样采用 注入组Injected Conversion 外部硬件触发 的工作方式其参数配置如下ADCs_Common_Settings Mode: Independent mode ADC_Settings: Clock Prescaler: Synchronous clock mode divide by4Resolution: ADC12bits Resolution Data Alignment: Right alignment Gain Compensation:0Scan Conversion Mode: Enabled End Of Conversion Selection: End of single conversion Low Power Auto Wait: Disabled Continuous Conversion Mode: Disabled Discontinuous Conversion Mode: Disabled DMA Continuous Requests: Enabled ADC_Regular_Conversion Mode: External RegularConversions: Disabled ADC1 → Injected Conversion Mode: External Injected Conversions: Enabled External Trigger Source: Timer1Trigger Out event External Trigger Conversion Edge: Trigger detection on the rising edge Number Of Conversions:3Rank1: Channel: Channel2(PA1, I_U)Sampling Time:6.5cycles Offset Number: No offset Rank2: Channel: Channel12(PB1, I_V)Sampling Time:6.5cycles Offset Number: No offset Rank3: Channel: Channel15(PB0, I_W)Sampling Time:6.5cycles Offset Number: No offset youcansqq.com中断与工程生成设置在 NVIC 中确认 ADC1_2 global interrupt 已正确使能。2.4 工程配置点击 “Project Manager” 进入工程设置界面在 Project 页面Project NameSTM32G431_ADC05选择工程保存路径勾选 “Do not generate the main()”Toolchain / IDE选择 STM32CubeIDE取消勾选 “Generate Under Root”在 MCU and Firmware Package 栏取消勾选 “Use latest available version”选择 STM32Cube FW_G4 V1.6.0若固件包未安装在默认路径取消 “Use Default Firmware Location” 并手动指定路径。在 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 工程文件。注意在 STM32CubeMX 中完成配置后不要点击 “GENERATE CODE” 生成代码而是仅保存 .ioc 工程文件后续代码将由 Simulink 自动生成并集成。3. 实验 基于 ADC 同步采样的 PWM 闭环链路本实验的 Simulink 模型以“采样完成事件驱动一次 PWM 更新”为核心设计原则ADC 的采样时刻由 TIM1 硬件触发决定Simulink 不参与任何触发时序控制模型仅在 ADC 转换完成事件到来时执行一次数据读取与占空比计算并立即更新 PWM 输出从而形成“ADC→计算→PWM 更新”的标量通路。3.1 模型任务与结构本实验的硬件侧链路为TIM1TRGO Update Event 硬件触发 ADC1 采样电位器电压ADC 完成一次采样后产生 ADC1_2 中断事件。Simulink 模型的任务是在该中断事件驱动下完成一次 PWM 更新。具体分工如下硬件负责时序PWM 周期、ADC 触发时刻、采样启动均由 TIM1/ADC 外设硬件完成模型负责运行期更新读取 ADC 结果 → 线性映射为 duty0~100%→ 限幅可选滤波→ 更新 TIM1 PWM 输出严格事件驱动PWM 占空比更新仅发生在 ADC 采样完成事件触发的 Function-call 子系统中不依赖模型基础步长或后台周期任务。从系统结构上看本文构建的硬件链路和调度关系如下TIM1 TRGOUpdate Event └─ 触发 ADC1 采样电位器 └─ ADC1 转换完成事件 └─ ADC1_2_IRQHandlerHardware Interrupt └─ Function-call Triggered Subsystem ├─ 读取 ADC 数据 ├─ 映射为 duty% └─ 更新 PWMTIM1_CH13.2 创建仿真模型创建 Simulink 模型在 CubeMX 工程文件所在目录下新建一个 Simulink 模型并保存为STM32G431_ADC05a.slx。注意确保 Simulink 模型文件.slx与 CubeMX 工程文件.ioc位于同一目录以便后续进行硬件资源关联和代码生成。Simulink 模型的结构Simulink 模型由两部分组成顶层模型Base-rate仅用于系统支撑与状态指示不参与采样或 PWM 更新调度。事件驱动子系统Function-call Triggered Subsystem由 ADC 中断触发完成 ADC 数据读取与 PWM 占空比更新是本实验的核心。顶层模型Base-rate模块主模型中仅放置以下模块Hardware Interrupt中断入口模块名称Hardware Interrupt该模块用于将 ADC 注入组采样完成事件引入 Simulink作为事件驱动子系统的触发源。Interrupt groupADCInterrupt nameADC1_2_IRQHandlerEvents to serve选择与 CubeMX 配置一致的 ADC 转换完成事件ADC1 Injected End of Conversion Sequence (ADC1 Inj EoCS)Events to serveADC2 Regular End of Conversion Sequence (ADC2 Reg EoCS)Function-call Triggered Subsystem事件驱动子系统该子系统模拟 ADC 中断服务逻辑是 PWM 更新的唯一执行入口。子系统类型Triggered SubsystemTrigger Port 类型Function-call事件驱动子系统内部结构在 Function-call Triggered Subsystem 内按如下顺序搭建模块与连接ADC 数据读取模块读取 ADC模块名称Analog to Digital Converter该模块在 ADC 中断触发后读取本周期 ADC 注入组采样结果I_U、I_V、I_W。ADC instanceADC1Conversion groupInjectedAccess modeRead onlyNumber of conversions3注意该模块不会触发 ADC 采样仅用于读取已经由 TIM 硬件触发完成的转换结果。Demux 模块信号拆分模块名称Demux用于将 ADC 模块输出的三路数据拆分便于后续连接与观察。Number of outputs3Gain 模块归一化100/4095将 12-bit ADC 码值0-4095归一化到 Duty 0~100。Saturation 模块限幅为避免极端占空比导致输出观测不稳定可对 duty 做限幅例如Lower limit5Upper limit95PWM Output 模块更新 PWM在模型中添加 PWM Output 模块用于输出三相 PWM 波形。按照 CubeMX 项目中的 TIM1 与 GPIO 引脚配置对模块参数进行设置Timer moduleTIM1Duty cycle unitPercentageEnable channel勾选 Enable CH1 / CH2 / CH3分别使能 TIM1 的 CH1、CH2、CH3Frequency input不启用PWM 频率由 CubeMX 固定为验证 PWM 更新动作是否发生将 Saturation 的输出直接连接到 PWM Output 的 duty 输入端即可实现每次 ADC 采样完成事件到来时更新一次 PWM 占空比。3.3 关联 Simulink 模型与 CubeMX 工程模型求解器与仿真参数设置在 Simulink 菜单中选择 “建模 → 模型设置”或使用快捷键 Ctrl E打开 配置参数 对话框在左侧选择 “求解器”按如下方式进行设置将 仿真时间 设为 inf在 求解器选择 中类型选择 定步长固定步长基础采样时间 设为 auto。可选在 任务和采样周期选项 中勾选“将每个离散速率视为单独任务”“自动处理数据传输的速率转换”。关联 CubeMX 工程文件在配置参数窗口中切换至 硬件实现Hardware board settings完成目标硬件与 CubeMX 工程的关联。1确认 PC 与 STM32G431 开发板已正常连接在 Hardware board 下拉列表中选择 STM32G4xx Based注意必须确保开发板已连接否则无法完成硬件相关配置2点击 Browse选择当前项目目录中的 CubeMX 工程文件 “STM32G431_ADC05.ioc”。3展开 Target hardware resources – Timers将 Timer group 设为 “Advanced Timers 1/8/20”勾选“Show TIM1 configurations”“Start timer during model initialization”“Enable Update Interrupt”。可选勾选 Enable Trigger interrupt本实验中非必须4展开 Target hardware resources – ADC1勾选“Enable Injected EoCS interrupt”“Run ADC calibration during model initialization”5可选展开 Target hardware resources – ADC2勾选“Enable Regular EoCS interrupt”“Run ADC calibration during model initialization”保存模型完成仿真模型与硬件配置后将模型保存为“STM32G431_ADC05a.slx”。再次强调Simulink 模型文件.slx与 CubeMX 项目文件.ioc必须位于同一目录下。3.4 STM32 代码生成与运行硬件连接使用 USB 线连接 PC 与 NUCLEO-G431RB 开发板确保 ST-LINK 能够被系统正确识别。生成并部署 STM32 代码打开仿真模型 STM32G431_ADC05.aslx在 “硬件Hardware” 选项卡中点击 “编译、部署和启动”快捷键 Ctrl B。Simulink 将自动完成以下过程为模型生成 STM32 目标代码调用 CubeMX 工程配置通过 IDE 完成编译与链接将程序下载至 NUCLEO-G431RB 开发板并启动运行。模型编译与部署过程中的关键信息将显示在 “诊断查看器” 中。编译摘要如下。### 正在启动 ADC05a 的编译过程 ### 正在为模型特定文件夹结构生成代码和工件 ### 正在将代码生成到编译文件夹中:D:\Matlab\MBD_STM32G431\ADC05\ADC05a_ert_rtw ### Invoking Target Language Compiler on ADC05a.rtw ### Using System Target File:D:\Matlab\R2023b\rtw\c\ert\ert.tlc...Download verified successfully ### Successful completion of build procedurefor:ADC05a ###ADC05a的 Simulink 缓存工件是在 D:\Matlab\MBD_STM32G431\ADC05\ADC05a.slxc 中创建的。 编译过程已成功完成 编译的顶层模型目标:模型 操作 重新编译原因ADC05a 代码已生成并完成编译。 生成的代码已过期。 编译了1个模型共1个模型(0个模型已经是最新的)编译持续时间:0h0m16.19s至此Simulink 模型已成功生成 STM32 代码并部署至硬件运行可通过示波器对输出波形进行验证。3.5 实验结果分析模型下载运行后通过旋转电位器改变输入电压并使用示波器对 TIM1_CH1 输出波形进行观测实验现象如下。PWM 占空比随输入电压连续变化在示波器上可以观察到PWM 频率保持恒定与 CubeMX 配置一致如 10 kHz随着电位器旋转PWM 波形的高电平宽度发生连续变化当电位器接近最低端时占空比接近最小值如限幅设定的 5%当电位器接近最高端时占空比接近最大值如 95% 或 100%。这表明 ADC 采样值已正确映射为 PWM 占空比并成功更新至定时器输出。更新节奏与采样事件一致在 ADC 采样完成事件驱动的结构下PWM 占空比更新仅发生在 ADC 转换完成时刻。通过在 Triggered Subsystem 中加入 GPIO 翻转信号LD2进行辅助观测可发现LED 翻转频率与 ADC 触发频率一致每次 LED 翻转都对应一次 PWM 占空比更新未发生“周期性后台更新”或额外无关触发。这说明 PWM 更新确实由 ADC 采样完成事件驱动而不是由模型基础步长或主循环触发。本实验验证了以下关键结论TIM1 硬件触发 ADC 采样能够稳定工作ADC 采样完成事件可以作为可靠的调度源在同一事件驱动子系统内读取 ADC 结果并更新 PWM 输出是可行且时序一致的“采样完成即更新输出”的结构在 Simulink MBD 框架下可以清晰实现。通过示波器观察到的 PWM 占空比连续变化现象证明了“电位器电压 → ADC 采样 → 事件驱动计算 → PWM 更新”这一标量闭环通路已经建立成功为后续引入控制算法比例/PI、电流环、FOC奠定了稳定的调度基础。5. 总结本实验基于 ADC 同步采样与事件驱动结构完成了电位器输入到 PWM 占空比更新的标量通路验证。示波器观测结果表明PWM 占空比随 ADC 采样结果连续变化且更新行为严格由采样完成事件驱动。该结果验证了“采样完成即更新输出”的调度语义在 STM32-MBD 框架下的可实现性为后续引入比例/PI 控制及完整 FOC 控制算法提供了稳定可靠的结构基础。版权声明youcansqq.com 原创作品转载必须标注原文链接【STM32-MBD】17基于 ADC 同步采样的 PWM 闭环控制链路(https://blog.csdn.net/youcans/article/details/157937834)Copyrightyoucans 2026Crated2026-02

更多文章