STM32C5 采用 HAL2.0 新版库以及 STM32CubeMX2 工具链,但MC‑SDK V6.4 官方工具暂未原生支持 STM32C5 芯片,无法直接通过 Workbench 一键生成完整工程,必须采用半自动移植方式完成 FOC 马达控制工程搭建。参考样板硬件为 Nucleo‑C5A3ZG 搭配功率扩展板 X‑Nucleo‑IHM16M1 以及 Shinano LA052 三相电机。该移植思路同样可以复用到其它 STM32 系列 MCU。本文还原外设资源分配、三层工程搭建流程、代码修改点、工程选型、调试排错要点。
资料获取:实战经验 | LAT1693 创建STM32C5基于MC SDK V.6.4马达控制程序
1. 硬件与外设资源梳理
样板硬件使用 TIM1 生成三相互补 PWM,ADC2/ADC3 做电流采样,TIM2 接收霍尔 / 编码器信号。支持三种电流采样方案:三电阻 2 路 ADC、三电阻单路 ADC、单电阻采样。
样板硬件管脚分配表
| 功能 | 管脚 | 复用功能 |
|---|---|---|
| IU 电流采样 | PH5 | ADC2_IN13,ADC3_IN13 |
| IV 电流采样 | PB1 | ADC2_IN7,ADC3_IN1 |
| IW 电流采样 | PB0 | ADC2_IN6,ADC3_IN0 |
| VBUS 母线电压 | PH4 | ADC2_IN12,ADC3_IN12 |
| NTC 温度 | PE14 | ADC3_IN10 |
| PWM_U / PWM_UN | PA8 / PB15 | TIM1_CH1 / CH1N |
| PWM_V / PWM_VN | PA9 / PB14 | TIM1_CH2 / CH2N |
| PWM_W / PWM_WN | PA10 / PB13 | TIM1_CH3 / CH3N |
| BKIN 硬件刹车 | PB12 | TIM1_BKIN1 |
| 霍尔 H1/H2/H3 | PA15、PB3、PB10 | TIM2_CH1/CH2/CH3 |
PWM 频率 15kHz 示例,系统主频 144MHz,ARR 计数器周期计算:144MHz /15kHz /2 =4800。
2. 工程三层架构说明
整个马达控制工程分为MCU 底层、马达控制中间层、马达控制应用层。
- MCU 底层:CubeMX2 生成外设初始化代码,TIM、ADC、GPIO、Cordic 数学协处理器、串口 DMA;
- 马达控制中间层:复用 MC‑SDK V6.4 大部分源码,重写 PWM‑电流反馈底层适配文件,适配 HAL2.0;
- 马达控制应用层:FOC 任务、参数配置、中断映射,区分无传感器 STO‑PLL、霍尔、编码器三套任务文件。
3. MCU 底层配置(STM32CubeMX2)
3.1 TIM1 PWM 配置
- 开启 TIM1,中心向下计数模式;
- 开启 CH1~CH3 以及互补通道 CH1N~CH3N;
- 使能 BKIN 硬件刹车输入;
- TRGO 触发源选择 OC4REF,用于触发 ADC 采样;
- Counter period 设置 4800,预分频 Prescaler=0。
3.2 ADC 配置
- 电流采样使用注入组 Injected group,触发源选择
TIM1_TRGO上升沿; - 母线电压、NTC 温度放在规则组 Regular group;
- 根据采样拓扑选择 ADC 实例:
- 三电阻双 ADC:ADC2+ADC3;
- 三电阻单 ADC:ADC3;
- 单电阻采样:ADC3。
3.3 其它关键配置
- 开启 Cordic 协处理器,用于 FOC 三角函数运算;
- 调试串口开启 DMA,用于 Motor‑Pilot 上位机通信;
- 霍尔 / 编码器场景配置 TIM2;
- 时钟配置到芯片最大主频 144MHz。
3.4 必须手动修改的生成代码
MC‑SDK 接管中断服务函数,CubeMX 自动生成的中断处理需要屏蔽
mx_system.c屏蔽SysTick_Handler;mx_usart2.c屏蔽串口与 DMA 自动生成中断;stm32c5xx_hal_conf.h将USE_HAL_DBGMCU_MODULE宏设置为1。
完成配置后生成 HAL2 工程,得到 HAL 外设初始化框架。
4. 马达控制中间层移植
实操技巧:先用 MC‑SDK V6.4 生成 STM32G4(同 IHM16M1 硬件)工程,以 G4 工程的中间层作为修改蓝本。
- 将
MCSDK_v6.4.1‑Full完整拷贝至工程目录; - 新建 C5 适配底层文件,三套采样方案三选一加入工程:
r1_ps_pwm_curr_fdbk.c:单电阻采样;r3_1_c5xx_pwm_curr_fdbk.c:三电阻、单 ADC;r3_2_c5xx_pwm_curr_fdbk.c:三电阻、双 ADC;
- 少量修改
usart_aspep_driver.h、hall_speed_pos_fdbk.c、encoder_speed_pos_fdbk.c适配 HAL2.0 库差异; - 将全部中间层源码添加工程分组
Middlewares/MotorControl。
绝大部分 PID、观测器、限幅、坐标变换中间业务逻辑可以直接复用,只需要修改硬件外设对接层。
5. 马达控制应用层移植
- 根据传感器方案三选一 FOC 任务文件:
mc_tasks_foc.c:无传感器 STO‑PLL;mc_tasks_foc_hall.c:霍尔传感器;mc_tasks_foc_encoder.c:编码器;
- 创建
parameters_conversion_c5xx.h,完成时钟参数、ADC 参数、中断向量别名映射。- 关键宏:
SYSCLK_FREQ=144000000uL、TIMx_UP_M1_IRQHandler、CURRENT_M1_IRQHandler等;
- 关键宏:
- 添加中断文件
stm32c5xx_mc_it.c、stm32_mc_common_it.c,存放马达全部中断服务程序。
main 函数调用逻辑
MX_MotorControl_Init(); //马达底层、中间层初始化
MX_NVIC_Init(); //配置中断优先级、使能IRQ
MC_StartMotor(0); //启动电机
参考工程封装main_mc.c、example.c做业务层隔离。
6. 编译下载与上位机调试
- 样板硬件接线:Nucleo‑C5A3ZG + X‑Nucleo‑IHM16M1 + Shinano LA052 电机;单电阻采样需要修改扩展板跳线;
- STM32Cube‑Programmer 下载固件;
- 使用Motor‑Pilot 上位机连接调试串口,可以实现转速设置、启停、实时观测 α‑β 电压、母线电压、故障状态。
7. 更换硬件的适配修改规则
7.1 仅更换电机,硬件板不变
仅修改 3 个参数头文件,参数可以由 MC‑SDK 针对 G4 生成后直接复制:
pmsm_motor_parameters.h电机本体参数;drive_parameters.hPID 速度电流环参数;power_stage_parameters.h功率板硬件参数。
7.2 客户自制硬件板
除上面三个头文件外,需要修改:
parameters_conversion_c5xx.h:时钟、中断别名;mc_config_common.c、mc_parameters.c:ADC 采样配置;mc_init.h:管脚宏定义;mcp_config.h:Motor‑Pilot 串口配置。
8. 官方参考工程说明
文档提供 6 套预编译参考工程,区分编译器、采样拓扑:
| 工程名称 | 说明 |
|---|---|
| STM32C5A3_IHM16_Shinano_keil_3shunt_2ADC | Keil,三电阻双 ADC |
| STM32C5A3_IHM16_Shinano_keil_3shunt_1ADC | Keil,三电阻单 ADC |
| STM32C5A3_IHM16_Shinano_keil_1shunt | Keil,单电阻 |
| STM32C5A3_IHM16_Shinano_ewarm_3shunt_2ADC | IAR,三电阻双 ADC |
| STM32C5A3_IHM16_Shinano_ewarm_3shunt_1ADC | IAR,三电阻单 ADC |
| STM32C5A3_IHM16_Shinano_ewarm_1shunt | IAR,单电阻 |
编译前在 IDE 工程切换对应的配置:Motor_STO_PLL(无传感器) / Motor_HALL / Motor_ENCODER。
9. 故障排查清单
- PWM 无输出:核对 TIM1 ARR、预分频;确认 BKIN 刹车引脚电平;确认 CubeMX2 开启 Cordic 协处理器。
- ADC 采样数值异常:核对注入组触发源是否为
TIM1_TRGO;区分单 / 双 ADC 采样对应的底层 c 文件;硬件检查电流采样电阻。 - 中断频繁异常、程序跑飞:确认屏蔽 CubeMX 自动生成 SysTick、串口 DMA 中断;确认
parameters_conversion_c5xx.h中断别名映射正确;中断优先级配置。 - Motor‑Pilot 无法连接:确认串口 DMA 已开启;核对
mcp_config.h串口参数;硬件 TX/RX 接线。 - 电机抖动无法起转:核对采样拓扑是否和工程文件匹配;电机参数、PID 参数导入正确;传感器接线(霍尔 / 编码器相位)。
10. 小结
- MC‑SDK V6.4 暂不原生支持 STM32C5,无法 Workbench 一键生成工程,采用半自动移植方案,可复用 G4 的 SDK 工程作为蓝本。
- 工程分为 MCU 底层、马达中间层、应用层三层;绝大多数 FOC 算法中间层代码可以直接复用,仅需要重写 PWM‑电流反馈硬件适配层,适配 HAL2.0 差异。
- CubeMX2 生成代码必须屏蔽自动生成的 SysTick、串口 DMA 中断,马达控制中断全部交给 SDK 的 it 文件接管。
- 提供三套采样拓扑(单电阻、三电阻单 ADC、三电阻双 ADC),样板预编译工程可直接选用,编译前切换传感器配置。
- 该移植方法论具备通用性,可以迁移到其它 STM32MCU 的 MC‑SDK 移植开发。
11. FAQ
Q:为什么 MC‑SDK Workbench 不能直接选择 STM32C5 芯片?
A:V6.4 版本 SDK 还未加入 C5 器件支持,因此需要半自动移植,复用 G4 工程蓝本,适配 HAL2.0 外设接口。
Q:移植是否需要改写 FOC 坐标变换、PID、观测器算法?
A:不需要。业务算法逻辑完全复用,仅修改硬件对接层 PWM/ADC 适配文件。
Q:Cordic 协处理器不开启会发生什么?
A:Cordic 负责硬件加速 sin/cos 三角函数,关闭后软件运算速度下降,FOC 实时性变差,必须在 CubeMX2 开启。
免责声明:本文全部基于 ST 官方 LAT1693 文档,实际产品请以 MC‑SDK 手册、STM32C5 参考手册、样例工程源码为准。
189