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

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

22小时前
189
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

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 参考手册、样例工程源码为准。

相关推荐