简介这份 PDF 文档面向刚接触 STM32G4 系列、希望系统入门电机控制的嵌入式开发者和学生围绕 ST 电机控制生态、MC SDK 与 CubeMX 的配合使用展开重点解决从方案认知到 FOC 工程搭建、代码生成与移植的入门问题。压缩包内仅含 1 个 PDF 文件大小约 3.64MB便于在电脑或平板上直接查阅。内容以 STM32G4 为平台梳理交流电机、直流有刷电机、PMSM、BLDC、步进电机等对象与控制方式并借助 Motor Control Workbench 演示工程创建、Demo 板与功率板选择、电机参数配置以及定时器、控制脚、串口、编码器和 Hall 信号等数字端口电流、电压、温度等模拟端口的设置思路同时说明如何结合 CubeMX 将电机控制代码移植到 STM32G474RET6 等未直接收录的芯片上并给出串口控制、API 函数控制等运行调试入口。已有约 900 人学习适合作为电机控制基础培训资料和动手实践前的参考。1. 装 STM32G4 电机控制环境前先分清 Demo 板、功率板和 MC SDK 的版本账STM32 电机控制这件事最容易翻车的不是 FOC 算法而是装环境。我见过一块 NUCLEO-G474RET6 插着 X-NUCLEO-IHM16M1CubeMX 却装在带中文的目录里Workbench 里又选了 P-NUCLEO-IHM03 的默认工程最后编译能过、烧录也能跑电机一使能就报过流。对做 STM32G4 电机控制的人来说装错版本、选错板型、漏配采样通道比算法调参更耗时间。这套环境适合刚拿到 G4 控制板、准备跑第一套 FOC 的开发者也适合从 Demo 板迁到自己板子的熟手。下面按我实际装机的顺序把版本、安装、Workbench 生成、CubeMX 移植、排错和验证拆开写。2. 安装清单X-CUBE-MCSDK 5.x 与 STM32CubeMX v5.6 以上的版本搭配装这套环境第一步不是双击安装包而是把版本账对平。STM32G4 电机控制涉及 CubeMX、G4 固件库、X-CUBE-MCSDK 或 X-CUBE-MCSDK-FUL、IDE、ST-LINK 驱动五块任意一块版本偏了后面生成工程时不一定立刻报错往往拖到编译或烧录才暴露。我的习惯是先列一张表把输入资料里给定的版本写死再去装。组件输入给定版本/型号装机时干什么装错后的典型表现X-CUBE-MCSDK5.x或 X-CUBE-MCSDK-FUL生成 FOC 工程、提供 mc_api.c 与电机控制库Workbench 打不开工程或生成后缺电机参数文件STM32CubeMXv5.6 以上及 G4 固件库改芯片、补引脚、装固件包打开 .ioc 报版本不兼容或生成代码缺 HAL 头文件ST-LINKST-LINK/V2 或 ST-LINK/V3烧录与 SWD 调试能编译不能下载或下载后不运行IDEIAR Embedded Workbench for Arm v8.x、Keil MDK v5.x、Atollic TrueSTUDIO 9.0.0 三选一编译、下载、在线调试打开工程缺器件包链接阶段报错固件库与 CubeMX 配套的 G4 固件包提供 HAL 与底层驱动编译缺头文件HAL 版本冲突MCSDK 普通版和 FUL 版的取舍我一般先装普通版跑通 Demo等要改底层电流环或看库源码时再换 FUL。FUL 包更完整排查底层问题时不用猜黑匣子普通版装起来轻适合先把 Workbench 和 CubeMX 的链路走通。CubeMX 不要追最新v5.6 以上是底线装完先把 G4 固件库补上否则后面生成工程会提示找不到对应系列的支持包。2.1 PC 侧软件版本与安装顺序我装机按下面顺序走不跳步。先装 CubeMX再用 CubeMX 的包管理器装 G4 固件库然后装 MCSDK接着装 IDE最后插 ST-LINK 装驱动。这个顺序的好处是 CubeMX 先占住路径MCSDK 生成工程时能直接找到 CubeMX 和固件库如果先装 IDEKeil 或 IAR 的器件包有时会抢在 CubeMX 前面导致后面打开工程缺器件。安装 STM32CubeMX路径选英文目录例如D:\STM32\STM32CubeMX。打开 CubeMX进入 Manage embedded software packages安装 STM32G4 系列固件包。安装 X-CUBE-MCSDK 5.x路径同样不要带中文例如D:\STM32\X-CUBE-MCSDK。安装 Keil MDK v5.x、IAR v8.x 或 Atollic TrueSTUDIO 9.0.0三选一即可不要三个都用来开同一个工程。插上 ST-LINK/V2 或 V3装驱动在设备管理器里确认能看到调试器设备。装完后先做一次路径检查。CubeMX 和 MCSDK 对中文路径很敏感工程目录带中文时生成代码可能卡住或者生成到一半缺文件。下面这段 PowerShell 用来检查几个关键目录是否存在、是否含中文# CubeMX、固件库、MCSDK 的路径都不要带中文和空格 $roots ( D:\STM32\STM32CubeMX, D:\STM32\STM32Cube\Repository, D:\STM32\X-CUBE-MCSDK ) $roots | ForEach-Object { if ($_ -match [\u4e00-\u9fa5]) { Write-Host 含中文: $_ } elseif (Test-Path $_) { Write-Host 可用: $_ } else { Write-Host 未安装: $_ } }这段脚本里$roots换成你实际的安装目录正则[\u4e00-\u9fa5]用来匹配中文Test-Path判断目录是否存在。输出“含中文”的路径不要将就直接换到英文目录重装输出“未安装”的先确认是不是装到了别的盘。路径里空格也尽量少有些老版本工具对空格的处理不如中文路径稳。提示CubeMX 安装路径、固件库仓库路径、MCSDK 工程路径三处都不要带中文。只改安装路径不够工程目录也要英文。2.2 控制板、功率板、电机型号对照版本对平之后第二步是对板型。输入资料里给了两套典型组合一套是 P-NUCLEO-IHM03 电机控制套件另一套是 NUCLEO-G474RET6 控制板加 X-NUCLEO-IHM16M1 功率板再配 GBM2804H-100T 电机。前者在 Workbench 里有现成 Demo后者往往要走 Customer Board。场景控制板功率板电机Workbench 选择跑第一套 DemoP-NUCLEO-IHM03 套件套件自带功率板套件配套电机直接选 STM32G4 Demo 板迁自己板NUCLEO-G474RET6芯片 STM32G474RET6X-NUCLEO-IHM16M1GBM2804H-100TCustomer Board选类似芯片做参考P-NUCLEO-IHM03 是整套套件Workbench 里选 STM32G4 Demo 板后功率板和电机都能对应上生成工程最省事。NUCLEO-G474RET6 加 X-NUCLEO-IHM16M1 这套控制板和功率板是分开的Workbench 的芯片列表里不一定有 STM32G474RET6所以不能硬选一个不匹配的 Demo得走 Customer Board先选一个同系列、同档位的 G4 芯片做参考再用 CubeMX 把芯片改成 STM32G474RET6。这里最容易犯的错是“看着板子差不多就选”。P-NUCLEO-IHM03 的默认工程能跑不代表接到 NUCLEO-G474RET6 加 X-NUCLEO-IHM16M1 上也能跑。功率板的电流采样、预驱使能脚、母线电压检测位置都可能不同默认参数只能当起点不能当答案。2.3 安装路径、驱动和固件库的预检查装完软件后先别急着打开 Workbench 建工程。我一般做三件事确认 CubeMX 能新建 G4 工程、确认 MCSDK 能启动、确认 ST-LINK 能被 IDE 识别。这三件事任何一件没通后面生成 FOC 工程都会变成连环坑。CubeMX 新建工程时选 STM32G4 系列随便选一个 G4 芯片能进入引脚配置界面就说明固件库装上了。MCSDK 启动后能看到 Motor Control Workbench 界面说明安装路径和依赖没问题。ST-LINK 插上后在 Keil 的 Debug 设置里能看到 ST-LINK或者在 IAR 的下载选项里能识别说明驱动通了。固件库版本要和 CubeMX 配套。CubeMX 里装 G4 固件包时选与当前 CubeMX 兼容的版本不要手动往仓库里拷一个来路不明的包。MCSDK 生成工程时会调用 CubeMX 和固件库版本不配套时生成日志里可能只报一句“code generation failed”看起来像玄学实际是固件库路径或版本不对。注意ST-LINK/V2 和 V3 的驱动不要混装。设备管理器里看到黄色感叹号时先卸掉旧驱动再装当前调试器对应的驱动。3. 生成第一套 FOC 工程Motor Control Workbench 里选 P-NUCLEO-IHM03 的完整步骤环境装好之后最快建立信心的方法是先用 P-NUCLEO-IHM03 跑一套 Demo。Workbench 的价值在于把电机参数、功率板参数、电流采样、PWM 定时器这些底层配置打包成图形化选项生成一套能编译的 FOC 工程。先跑通这套再去迁 STM32G474RET6心里有底。3.1 新建工程与 P-NUCLEO-IHM03 选择打开 Motor Control Workbench新建工程选择 STM32G4 Demo 板功率板选 P-NUCLEO-IHM03 套件对应的功率板电机选套件配套电机。工程保存路径用英文例如D:\STM32\Work\IHM03_Demo。保存后 Workbench 会进入配置界面先不要改一堆参数按默认配置生成一次确认工具链是通的。Workbench 项本例选择检查点板型STM32G4 Demo 板选完能看到功率板和电机下拉框功率板P-NUCLEO-IHM03 套件功率板名称与手头套件一致电机套件配套电机极对数、额定电流先按默认工程路径英文目录不含中文和空格生成目标CubeMX 工程加 IDE 工程至少选一个你装好的 IDE生成后先检查三个关键文件mc_api.c是 API 控制入口mc_config.c存放电机和功率板参数.ioc是 CubeMX 配置。少一个都说明生成不完整。下面这段命令在 Git Bash 或 WSL 里跑用来快速确认# 生成后先看这三个文件是否齐全缺一个就回 Workbench 重新生成 find ./IHM03_Demo -maxdepth 3 \( -name mc_api.c -o -name mc_config.c -o -name *.ioc \) -print-maxdepth 3只扫三层目录避免全盘扫描-name分别匹配 API 文件、参数文件和 CubeMX 配置文件。三个文件都在再打开 IDE 编译。如果mc_api.c缺失后面想用 API 函数控制电机就没有入口如果.ioc缺失CubeMX 改引脚时只能重建工程。3.2 电机与功率板参数默认配置不是万能Demo 默认参数能跑套件电机但迁移到自己板子时必须逐项核对。我一般先看电机极对数、额定电流、母线电压范围再看功率板的电流采样电阻和运放增益。极对数填错Dashboard 显示的转速会差一倍电流采样增益填错电机一使能就报过流母线电压范围填窄稍微降压就触发欠压保护。参数项从哪里来填错的后果电机极对数电机铭牌或手册转速显示和实际差倍数额定电流电机铭牌限流点过高或过低母线电压范围功率板输入范围欠压/过压误报电流采样电阻与增益功率板原理图电流波形幅值不对过流误报编码器或 Hall电机与板子接口启动失败或方向反PWM 死区功率板预驱要求上下桥直通风险这里不要照抄 Demo。P-NUCLEO-IHM03 的参数只对那套套件有意义换成 X-NUCLEO-IHM16M1 加 GBM2804H-100T 后电流采样和预驱控制脚很可能不同。我的做法是先把电机铭牌和功率板原理图放桌上Workbench 里每改一项就在图纸上对应确认一次改完重新生成工程不在一份工程上反复覆盖。3.3 生成代码前的检查项时钟、串口、调试口生成代码前还有三个检查项时钟树、串口、调试口。时钟不对PWM 频率和 ADC 采样时序都会偏串口没配Workbench 的 Dashboard 连不上调试口没留后面烧录后不跑只能靠猜。检查项在 Workbench/CubeMX 看哪里通过标准系统时钟CubeMX 时钟树与板子晶振和 PLL 配置一致PWM 定时器Workbench 功率板配置三相互补通道已分配串口Workbench 通信配置TX/RX 与板子调试串口一致SWD 调试口CubeMX PinoutSWDIO、SWCLK 未被占用电流采样Workbench 电流采样页三路电流通道与原理图一致串口这块容易忽略。Dashboard 的通信链路状态是验证 FOC 是否跑起来的最快窗口串口 TX/RX 接反或者波特率不对Dashboard 会一直显示未连接。插上 ST-LINK 和串口线后可以先在系统里确认 COM 口# 插上 ST-LINK 和串口线后先确认系统认到了 COM 口 Get-WmiObject Win32_SerialPort | Select-Object DeviceID, DescriptionDeviceID是 COM 号Description是驱动名称。看不到 COM 口时先换线、换 USB 口、装驱动不要急着改 Workbench 里的串口配置。看到 COM 口但 Dashboard 连不上再回头核对波特率和 TX/RX 是否交叉。4. 移植到 STM32G474RET6用 CubeMX 补数字端口和模拟端口的配置顺序Workbench 里芯片型号选择有限实际项目常用 STM32G474RET6这时候不能硬等 Workbench 支持得用 Customer Board 加 CubeMX 移植。我的顺序是Workbench 先生成一套参考工程CubeMX 改芯片型号补数字端口补模拟端口最后把电机参数文件合回去。顺序反了引脚配置容易被覆盖。4.1 Customer Board 模式与参考芯片选择在 Workbench 里新建 Customer Board 工程功率板选 X-NUCLEO-IHM16M1电机选 GBM2804H-100T 或列表里最接近的型号芯片先选一个同系列、同档位的 G4 做参考。参考芯片不要选差太远的型号Flash、RAM、定时器数量差太多生成出来的工程改起来更费劲。步骤操作检查点1Workbench 新建 Customer Board不选现成 Demo 板2功率板选 X-NUCLEO-IHM16M1与手头功率板一致3电机选 GBM2804H-100T 或最接近型号极对数、额定电流可后改4芯片选类似 G4 型号同系列、同档位5生成工程先能编译通过6CubeMX 打开 .ioc 改芯片为 STM32G474RET6改完重新生成代码改芯片后先编译一次空工程。这一步只验证 CubeMX 生成的启动文件、时钟和 HAL 能过编译不验证电机。空工程都过不了先查固件库和 IDE 器件包不要往下配引脚。4.2 数字端口配置Timer、控制脚、串口、编码器与 Hall数字端口是移植里最费眼的部分。Timer 管脚要分配三相互补 PWM控制脚要接预驱使能或故障脚串口要留 TX/RX有传感的控制还要配编码器 A/B/Z 或 Hall U/V/W。每个脚都按功率板原理图来不要凭 Workbench 默认值照搬。功能Workbench 对应项CubeMX 检查点常见错三相互补 PWM功率板 Timer 配置TIM 通道设为 PWM Generation互补输出使能只配了单路没开互补预驱使能/故障控制脚配置GPIO 输出/输入模式与电平正确使能脚极性反电机不转串口通信配置AsynchronousTX/RX 与调试口一致TX/RX 接反Dashboard 不连编码器传感器配置TIM Encoder 模式或 GPIO 输入A/B 相接反方向反Hall传感器配置GPIO 输入或 TIM Hall 模式相序错启动抖动配置时先在 CubeMX Pinout 视图里把每个功能脚点出来能标标签的标上例如PWM_U、PWM_V、PWM_W、EN_GATE、UART_TX。标签不是给编译器看的是给你自己后面查原理图用的。PWM 频率和死区时间按功率板预驱要求填不要直接抄 Demo预驱型号不同死区不够会直通死区太大会影响低速性能。4.3 模拟端口配置电流、电压、温度采样模拟端口决定电机能不能安全跑。三路电流采样、母线电压采样、温度采样少一路保护就少一层。CubeMX 里要把 ADC 通道、采样时间、触发源配好电流采样通常要和 PWM 同步电压和温度可以用规则通道慢采。采样通道作用CubeMX 设置常见错三相电流FOC 电流环输入ADC 注入或规则通道触发源与 PWM 同步采样时刻不对电流波形畸变母线电压欠压/过压保护ADC 规则通道分压比按原理图分压比算错保护点偏温度过温保护ADC 规则通道NTC 分压NTC 参数填错误报过温电流采样是重点。采样电阻值和运放增益填错FOC 的电流环根本没法收敛表现是电机一使能就抖或者直接过流。我的做法是先不接电机只给控制板和功率板上电用 Dashboard 或调试变量看三相电流零点是不是在中间值附近零点偏太多先查运放和 ADC 参考电压不要急着调 PID。4.4 从 Workbench 导出到 CubeMX 的目录合并顺序移植时最容易翻车的动作是“整目录覆盖”。Workbench 生成的工程和 CubeMX 重新生成的工程各有各的时钟、引脚和启动文件直接覆盖会把 CubeMX 改好的芯片配置冲掉。我一般先备份再在 CubeMX 里改芯片和引脚重新生成代码最后只把电机参数相关的.c/.h合回去。# 改芯片型号前先留一份可回退的工程副本 Copy-Item -Recurse .\MotorProject .\MotorProject_backup_$(Get-Date -Format yyyyMMdd_HHmm)Copy-Item -Recurse递归复制整个工程$(Get-Date -Format yyyyMMdd_HHmm)在目录名里加时间戳出问题时能退回上一版。备份不是形式移植改芯片时一次覆盖就可能把能跑的工程弄丢这份副本就是后悔药。合并时先对比Core/Src和Core/Inc里哪些文件是 Workbench 电机参数、哪些是 CubeMX 生成的引脚初始化。引脚初始化以 CubeMX 为准电机参数以 Workbench 为准两边冲突时不要闭眼选一边打开文件看宏定义和注释。合并完先编译再烧录不要编译和烧录一起上。5. 常见问题排查MCSDK 工程编译不过、烧录不跑、电机不转的五条记录这几条是我在 G4 板子上反复翻车后记下来的血泪经验。现象看起来分散原因大多集中在路径、版本、引脚和采样四件事上。每条按现象、原因、解决写照着查比重新装一遍快。5.1 编译与工程导入中文路径、固件库、IDE 版本现象一CubeMX 生成代码卡住或者生成完缺文件。原因通常是安装路径或工程路径带中文、空格CubeMX 在写临时文件时失败。解决是把 CubeMX 安装目录、固件库仓库、工程目录全部换到英文路径例如D:\STM32\Work\G474_FOC工程名也用英文重开 CubeMX 再生成。不要只改工程名安装目录带中文一样会出问题。现象二Keil 打开工程提示找不到stm32g4xx.h或者器件列表里没有 G4。原因一般是 CubeMX 里 G4 固件库没装完整或者 Keil 没装 G4 器件包。解决是回 CubeMX 的 Manage embedded software packages 里确认 G4 固件包已安装再在 Keil 里装对应 Device Family Pack重新生成工程。IAR v8.x 打开高版本工程报不兼容时不要硬改工程文件回 CubeMX 选 IAR 重新生成版本对不上时重生成比手修快。5.2 烧录与运行ST-LINK 连不上、烧录成功不跑、串口无输出现象三ST-LINK/V2 或 V3 连不上IDE 报 no target connected。原因可能是驱动没装好、SWD 线序错、目标板没供电。解决是先换 USB 口确认设备管理器里调试器正常再查 SWDIO、SWCLK、GND 三根线目标板单独供电。NUCLEO 板用 ST-LINK 供电时注意跳帽功率板大电流场景最好单独给母线供电不要只靠调试器。现象四烧录成功复位后电机不转串口也没输出。原因常见是下载后没复位运行、BOOT 引脚状态不对或者串口 TX/RX 接反。解决是在 Keil 的 Flash Download 里勾 Reset and Run检查 BOOT0 电平按一次复位键串口用前面那段 PowerShell 确认 COM 口再核对 TX/RX 是否交叉。Dashboard 一直显示未连接时先怀疑串口不要先怀疑 FOC 算法。5.3 采样与保护电机一使能就过流、电流零漂、温度误报现象五电机一使能就报过流Dashboard 电流波形顶满。原因多半是电流采样极性或增益填错或者预驱使能脚配错。解决是先断开电机只给控制板和功率板上电看三相电流零点是否在中间值附近再查采样电阻、运放增益和 ADC 参考电压确认无误后用低母线电压、限流电源空载试启动。不要一上来就改电流环 PID采样不对时调 PID 只会把问题藏得更深。温度误报也按同样思路查。NTC 分压比、B 值、上拉电阻任一填错常温就会报过温。先看 ADC 原始值再对照原理图算温度算出来和室温差太多就回头查参数。电机控制里保护参数宁可比实际保守一点也不要为了跑得顺把过流和过温阈值放宽。6. 装完怎么验证用串口 Dashboard 和 mc_api.c 状态机确认 FOC 真的跑起来装完环境、生成工程、烧录成功不等于 FOC 跑通。我验证时按“先看通信、再看状态机、最后看电流”的顺序走避免电机一转就掩盖了底层问题。先用低母线电压、限流电源、空载电机Dashboard 通信链路状态能连上再发启动命令。验证项通过标准不过时先看哪串口 Dashboard通信链路状态正常能读到母线电压和温度COM 口、波特率、TX/RX状态机启动后从 IDLE 进入 RUN停止后回 IDLEmc_api.c 调用、使能脚三相电流空载电流小且三相平衡零点不偏采样电阻、运放增益、ADC 触发转速反馈给定转速与实际转向一致极对数、编码器/Hall 相序保护欠压、过流、过温阈值能触发分压比、采样增益、NTC 参数如果用 API 控制可以在 main.c本文还有配套的精品资源点击获取
阅读完成 · 觉得有帮助?