• 正文
  • 相关推荐
申请入驻 产业图谱

创建 STM32C5 基于 MC‑SDK V6.4 马达控制程序

09/30 11:32
388
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

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 底层、马达控制中间层、马达控制应用层。

  1. MCU 底层:CubeMX2 生成外设初始化代码,TIM、ADC、GPIO、Cordic 数学协处理器、串口 DMA;
  2. 马达控制中间层:复用 MC‑SDK V6.4 大部分源码,重写 PWM‑电流反馈底层适配文件,适配 HAL2.0;
  3. 马达控制应用层:FOC 任务、参数配置、中断映射,区分无传感器 STO‑PLL、霍尔、编码器三套任务文件。

3. MCU 底层配置(STM32CubeMX2)

3.1 TIM1 PWM 配置

  1. 开启 TIM1,中心向下计数模式;
  2. 开启 CH1~CH3 以及互补通道 CH1N~CH3N;
  3. 使能 BKIN 硬件刹车输入;
  4. TRGO 触发源选择 OC4REF,用于触发 ADC 采样;
  5. Counter period 设置 4800,预分频 Prescaler=0。

3.2 ADC 配置

  1. 电流采样使用注入组 Injected group,触发源选择TIM1_TRGO上升沿;
  2. 母线电压、NTC 温度放在规则组 Regular group;
  3. 根据采样拓扑选择 ADC 实例:
    • 三电阻双 ADC:ADC2+ADC3;
    • 三电阻单 ADC:ADC3;
    • 单电阻采样:ADC3。

3.3 其它关键配置

  1. 开启 Cordic 协处理器,用于 FOC 三角函数运算;
  2. 调试串口开启 DMA,用于 Motor‑Pilot 上位机通信;
  3. 霍尔 / 编码器场景配置 TIM2;
  4. 时钟配置到芯片最大主频 144MHz。

3.4 必须手动修改的生成代码

MC‑SDK 接管中断服务函数,CubeMX 自动生成的中断处理需要屏蔽

  1. mx_system.c屏蔽SysTick_Handler;
  2. mx_usart2.c屏蔽串口与 DMA 自动生成中断;
  3. stm32c5xx_hal_conf.h将USE_HAL_DBGMCU_MODULE宏设置为1。

完成配置后生成 HAL2 工程,得到 HAL 外设初始化框架。

4. 马达控制中间层移植

实操技巧:先用 MC‑SDK V6.4 生成 STM32G4(同 IHM16M1 硬件)工程,以 G4 工程的中间层作为修改蓝本。

  1. 将MCSDK_v6.4.1‑Full完整拷贝至工程目录;
  2. 新建 C5 适配底层文件,三套采样方案三选一加入工程:
    • r1_ps_pwm_curr_fdbk.c:单电阻采样;
    • r3_1_c5xx_pwm_curr_fdbk.c:三电阻、单 ADC;
    • r3_2_c5xx_pwm_curr_fdbk.c:三电阻、双 ADC;
  3. 少量修改usart_aspep_driver.h、hall_speed_pos_fdbk.c、encoder_speed_pos_fdbk.c适配 HAL2.0 库差异;
  4. 将全部中间层源码添加工程分组Middlewares/MotorControl。

绝大部分 PID、观测器、限幅、坐标变换中间业务逻辑可以直接复用,只需要修改硬件外设对接层。

5. 马达控制应用层移植

  1. 根据传感器方案三选一 FOC 任务文件:
    • mc_tasks_foc.c:无传感器 STO‑PLL;
    • mc_tasks_foc_hall.c:霍尔传感器;
    • mc_tasks_foc_encoder.c:编码器;
  2. 创建parameters_conversion_c5xx.h,完成时钟参数、ADC 参数、中断向量别名映射。
    • 关键宏:SYSCLK_FREQ=144000000uL、TIMx_UP_M1_IRQHandler、CURRENT_M1_IRQHandler等;
  3. 添加中断文件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. 编译下载与上位机调试

  1. 样板硬件接线:Nucleo‑C5A3ZG + X‑Nucleo‑IHM16M1 + Shinano LA052 电机;单电阻采样需要修改扩展板跳线;
  2. STM32Cube‑Programmer 下载固件;
  3. 使用Motor‑Pilot 上位机连接调试串口,可以实现转速设置、启停、实时观测 α‑β 电压、母线电压、故障状态。

7. 更换硬件的适配修改规则

7.1 仅更换电机,硬件板不变

仅修改 3 个参数头文件,参数可以由 MC‑SDK 针对 G4 生成后直接复制:

  1. pmsm_motor_parameters.h 电机本体参数;
  2. drive_parameters.h PID 速度电流环参数;
  3. power_stage_parameters.h功率板硬件参数。

7.2 客户自制硬件板

除上面三个头文件外,需要修改:

  1. parameters_conversion_c5xx.h:时钟、中断别名;
  2. mc_config_common.c、mc_parameters.c:ADC 采样配置;
  3. mc_init.h:管脚宏定义;
  4. 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. 故障排查清单

  1. PWM 无输出:核对 TIM1 ARR、预分频;确认 BKIN 刹车引脚电平;确认 CubeMX2 开启 Cordic 协处理器。
  2. ADC 采样数值异常:核对注入组触发源是否为TIM1_TRGO;区分单 / 双 ADC 采样对应的底层 c 文件;硬件检查电流采样电阻。
  3. 中断频繁异常、程序跑飞:确认屏蔽 CubeMX 自动生成 SysTick、串口 DMA 中断;确认parameters_conversion_c5xx.h中断别名映射正确;中断优先级配置。
  4. Motor‑Pilot 无法连接:确认串口 DMA 已开启;核对mcp_config.h串口参数;硬件 TX/RX 接线。
  5. 电机抖动无法起转:核对采样拓扑是否和工程文件匹配;电机参数、PID 参数导入正确;传感器接线(霍尔 / 编码器相位)。

10. 小结

  1. MC‑SDK V6.4 暂不原生支持 STM32C5,无法 Workbench 一键生成工程,采用半自动移植方案,可复用 G4 的 SDK 工程作为蓝本。
  2. 工程分为 MCU 底层、马达中间层、应用层三层;绝大多数 FOC 算法中间层代码可以直接复用,仅需要重写 PWM‑电流反馈硬件适配层,适配 HAL2.0 差异。
  3. CubeMX2 生成代码必须屏蔽自动生成的 SysTick、串口 DMA 中断,马达控制中断全部交给 SDK 的 it 文件接管。
  4. 提供三套采样拓扑(单电阻、三电阻单 ADC、三电阻双 ADC),样板预编译工程可直接选用,编译前切换传感器配置。
  5. 该移植方法论具备通用性,可以迁移到其它 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 参考手册、样例工程源码为准。

相关推荐