|
0 1 前言 STM32C5是ST最新性价比芯片,生态系统基于最新版本的STM32CubeMX2,因为当前版本的MC SDK V6.4没有包含STM32C5芯片,如果客户需要创建基于马达控制代码,需要半自动化去实现控制代码的生成以及创建,本文可以应用于任意STM32芯片的马达工程创建,可以作为复用马达控制生态案例来使用,以Nucleo-C5A3ZG + X-Nucleo-IHM16M1 + Shinano LA052为例创建基于STM32C5的马达控制程序。 0 2 整理马达控制外设资源 第一步是要理清关于马达控制的基本资源,以及需要采用的策略,基本的构成为PWM和ADC两个基本外设,另外如果使用传感器,基本为HALL以及Encoder,无传感器控制常见的是STO+PLL和HSO两种。Nucleo-C5A3ZG + X-Nucleo-IHM16M1的资源分配如下,根据控制策略则需要选择不同资源。
0 3 创建马达代码整体步骤 创建步骤和普通应用创建基本类似,分为MCU底层,马达控制中间层,马达控制应用层,三个层次的操作如下: 3.1. MCU底层代码 MCU底层代码主要是针对TIMER,ADC,GPIO,中断等配置,这个部分可以借助Cubemx2.0进行配置,可以参考例程工程,这边不做具体的操作说明,只做关键几个外设的配置注意点的介绍说明。 3.1.1. PWM配置 主要是配置TIM1(或TIM8)做为PWM波输出,可以配置为上下桥互补输出,也可以配置为单独的三相PWM波(驱动芯片产生互补PWM),默认情况下X-Nucleo-IHM16M1是后一种硬件配置。对于过流保护,BKIN管脚输入,可配置一定的滤波。三电阻采样使用TIM1 CCR4产生TRGO触发信号,用于ADC采样的触发。单电阻采样则使用CCR5和CCR6的组合做为ADC的采样触发。频率计算可以根据实际电路调整,写入Counter period数据,比如使用15KHz,那么ARR 数据为144MHz/15KHz/2=4800。
▲ 图1. PWM配置 3.1.2. ADC配置 分别配置ADC管脚,不同的电流采样拓扑需要选择不同的ADC模块以及管脚,大致分为四种,三电阻,双电阻,单电阻,ICS;对于ADC使用方面也可以为3个,2个,1个ADC模块;MC SDK可以支持这些模式的组合,双电阻采样可以看做三电阻采样的特别模式,在马达控制软件中支持三电阻和单电阻的采样。对于本文所用ADC资源列表如下,比如使用2个ADC模块对三电阻电流采样方式,需要分别配置ADC2,ADC3。使用Inject组对电流采样,TIM1_TRGO做为触发信号。其他Bus电压,温度等则使用Regular组进行ADC采样。
▲ 图2. ADC配置
3.1.3. 中断配置 马达中用到的中断需要进行优先等级的分配,并且在MC SDK马达代码中会对中断资源以及中断服务函数进行配置,因此在Cubemx中不需要配置,代码中进行配置即可。
▲ 图3. 中断有限级别配置 3.1.4. 其他配置 时钟配置根据硬件进行配置,一般配置为最高主频时钟。因为用到了STM32C5的Cordic进行三角函数计算,要使能Cordic功能。如果涉及其他IO口或者通讯等功能,则进行对应的CubeMX2配置;如果需要使用Motor Pilot进行调试,需要配置串口,并且使能串口的DMA;如果用HALL Sensor,Encoder等,则需要配置相关的TIMER资源。 所有上面MCU外设配置好后,就可以生成MCU外设代码和基础工程文件,在这个工程文件上在进行添加工作。
▲ 图4. C5 Cubemx2.0基础工程 3.1.5. 手动修改部分代码 因为中断调用在马达库中会自定义,因此需要屏蔽自动生成的中断调用。 屏蔽mx_system.c中的SysTick_Handler函数。 屏蔽mx_usart2.c中的串口中断,以及DMA中断。 stm32c5xx_hal_conf.h中USE_HAL_DBGMCU_MODULE宏定义改为1。 3.2. 马达控制中间层 使用MC SDK V6.4的马达控制代码,需要修改与MCU底层代码的接口函数,并且要区别HAL1.0和HAL 2.0库函数结构的不同进行修改。可以先用MC SDK V6.4生成Nucleo-G431RB + X-Nucleo-IHM16M1 + Shinano LA052的代码,然后在这个基础上进行相关的移植修改工作。 3.2.1. PWM,ADC底层接口创建 整体拷贝MCSDK_v6.4.1-Full文件夹到工程目录下,添加一个C5xx文件夹,并且参考G4的代码,重新创建pwm_curr_fdbk.c文件以及相头文件,这边创建了三个文件,r1_ps_pwm_curr_fdbk.c是单电阻采样,r3_1_c5xx_pwm_curr_fdbk.c是三电阻1个ADC模块方式,r3_2_c5xx_pwm_curr_fdbk.c是三电阻2个ADC模块方式,三个文件实际使用根据情况只使用其中一个文件即可,详细见参考代码。
▲ 图5. 创建C5底层接口文件 3.2.2. 复用马达控制中间层 其他马达控制中间层基本可以复用,有区别的是usart_aspep_driver.h和encoder_speed_pos_fdbk.c以及hall_speed_pos_fdbk.c三个文件,实际区别也是有限,只是因为CubeMX库写法的不同,进行相关修改即可。
▲ 图6. MCLib\Any的区别
▲ 图7. encoder_speed_pos_fdbk.c的区别 添加中间层文件导入工程中,创建group。
▲ 图8. 工程中增加马达控制中间层 3.3. 马达控制应用层 应用层同样也可以复用STM32G4所使用到的文件,需要修改的是HAL 1.0和HAL 2.0不同所带来的写法不同以及STM32C5本体控制要求的不同而修改。这边会创建三个FOC文件mc_tasks_foc.c针对的是无传感观测器,mc_tasks_foc_hall.c针对的是HALL信号,mc_tasks_foc_encoder.c针对的是编码器,三个FOC文件根据Sensor不同,只需要使用其中一个文件。创建parameters_conversion_c5xx.h用于芯片时钟,ADC,TIMER时钟以及中断的别名定义。强调一点是这边创建了stm32c5xx_mc_it.c和stm32_mc_common_it.c文件,文件中基本涵盖了马达控制所使用到的中断处理。
▲ 图9. 向工程中添加马达控制应用层 0 4 运行马达 完成上面步骤的移植后,在工程中加入头文件包含,还需要根据当前的软件架构,加入马达初始化接口,以及调用API函数运行马达。 4.1. 完成用户应用层 用户应用层需要调用马达控制初始化函数MX_MotorControl_Init()用于马达控制底层以及中间层的初始化动作,完成后要调用MX_NVIC_Init()函数使能中断以及配置中断优先等级。本例中创建了main_mc.c文件用于接口文件,创建example.c文件用于调用以及程序结构化。最后就是在main函数中加入初始化和循环执行函数。
▲ 图10. 完成用户应用层 4.2. 硬件连接 本体硬件连接就是组合连接方式,Nucleo-C5A3ZG + X-Nucleo-IHM16M1 + Shinano LA052,因为Shinano电机有HALL,Encoder接口,可以分别测试无传感观测器,Hall Sensor,Encoder Sensor,有传感器控制要注意传感器接线顺序。
▲ 图11. 硬件连接图 4.3. 编译下载工程,运行马达 工程添加完毕后,编译工程,并修改相关错误,下载程序到STM32C5芯片中,之后就是大家熟悉的执行马达控制过程了,可以用Motor Pilot进行控制,也可以用API函数控制。
▲ 图12. Motor Pilot 控制 0 5 更换硬件后进行程序修改 本例程只是针对ST的马达控制板做说明,实际当中如果客户使用了STM32C5做了自己的马达控制板,同样也可以参考上面步骤,对代码进行修改。注意分配好硬件资源,然后按照上面步骤进行一步一步修改。MCU底层外设硬件根据实际应用进行管脚配置,马达控制的中间层基本不用改,而马达控制的应用层只需要修改与ADC或者PWM相关的几个.c或者.h文件即可。 5.1. 只更换马达情况 如果同一个硬件,只是更换不同马达,则只需要修改三个头文件: pmsm_motor_parameters.h – 马达本体参数 drive_parameters.h – 马达驱动参数,包含速度,电流PID参数 power_stage_parameters.h – 电源参数,如果更换电机的电压相同,则无需修改 可以使用MC SDK V6.4生成基于STM32G4控制的新马达的参数(注意PWM波频率要一致),生成的参数可以直接拷贝到这三个文件中。 5.2. 更换硬件情况 如果硬件已经是客户自己硬件,则需要修改除了上面的四个头文件外,还要注意以下几个文件,根据情况进行修改: mc_config_common.c – 重点关注ADC部分的修改 mc_parameters.c – ADC采样配置的修改 mc_init.h – 主要是对各个使用管脚的宏定义 mcp_config.h – 如果使用了Motor Pilot功能,需要修改串口配置 parameters_conversion_c5xx.h – 时钟宏定义,中断别名定义 0 6 关于示例工程使用说明 有6个工程文件,分别对应不同场景,每个工程中包含无传感,Hall,Encoder。
工程选择方式 首先打开相关工程文件,在工程中选择需要使用的传感器方式,编译后下载运行。对于单电阻测试需要把跳线调为单电阻模式。
▲ 图13. 工程选择Keil/IAR 0 7 总结说明 关于STM32C5的MC SDK V6.4版本软件移植,马达控制中间层以及应用层除了和ADC和PWM相关外设相关外,马达控制代码基本可复用状况下,移植只需要关注于Cube库的变化以及ADC,DMA等配置细节,其他可以方便移植到新的MCU中。 |
有奖直播 | STM32C5 & STM32Cube生态系统更新:开启高性价比开发新体验
线下实训 | STM32C5 × STM32Cube开发实战
STM32C542开发(1)----点亮LED
STM32C542开发(1)----点亮LED
STM32C5重新定义入门级微控制器的性能
【STM32C5】简而不凡,锋芒自显——Nucleo-STM32C562RE快速上手
留言赢礼 | 适用于STM32C5系列的STM32Cube嵌入式软件包
更新:借助升级版STM32Cube生态,释放STM32C5 MCU的全部潜能
【新品首发】STM32C5 重磅登场!Cortex-M33+40nm 工艺,入门级 MCU 迎来史诗级升级!(文末抽奖)
STM32C5 核心亮点总结及适配场景选型指南
微信公众号
手机版