
所选择的芯片未包含在MC Workbench中怎么办? 本文教你使用STM32CubeMX结合MC Workbench生成FOC代码 2 D3 L! j; @) s; Y7 c6 u* Y2 f z" N( N3 u) q8 W6 f( K U 0 |) {9 @+ J& E9 E5 M4 M; r 前言当前ST的产品丰富多彩,多达1000多种的料号可供客户选择,同时ST针对电机FOC控制,推出了MC SDK V5.x的马达控制软件系统。该软件结合STM32CubeMX生成马达控制代码。由于MC Workbench软件的芯片选择有限,不可能包含所有ST的产品料号,因此有些客户需要使用该软件时,会发现选择的芯片未包含在workbench中。本文针对这种场景,详细说明如何结合STM32CubeMX与MC Workbench生成未包含的芯片程序。客户通过该文档可以使用全系列ST产品用于电机的FOC控制,为客户带来便利。本文使用Nucleo-STM32G474RET6(控制板) + X-Nucleo-IHM16M1(功率板)+ GBM2804H-100T(电机)。 MC Workbench操作 & B: X; E. q! `+ i2 ?7 q' \ 1.1新建工程$ q! ]5 h1 c$ E# U9 l- p$ r% L 如果有Demo板和电机,则选择对应的Demo板与电机型号;如果没有,直接选择customer board。这边我们看到没有Nucleo-STM32G474RET6,因此我们选择customer board。 , I8 V8 n( o6 A' V ![]() p8 s7 E6 P, r5 W/ W" \( a, W8 ] 1.2配置电机与功率板相关配置分别配置电源,电压保护,电机,电流采样,功率管。因为我们使用了现成的功率板与电机,这边我们使用默认参数即可。如果是自己的电机与功率板,请参考ST往期的技术培训。 5 r+ ~' [" M6 i8 U( b2 a ![]() 3 w8 ~# m% ~, t% { 首先我们看到在MC workbench中并没有STM32G474RET6这个芯片型号,因此我们需要选择与之相近的单片机。原则是Flash大小相同优先选择,型号相似次之,同一系列最后。这边我们可以选择STM32G474QE作为参考型号。 ![]() 这边我们使用的功率器件为单一PWM与控制使能方式,结合硬件连接为如下配置。 ( M$ _& A% s1 v0 ]1 \/ _ 如果PWM互补的方式则还需要配置下桥控制引脚。 ![]() ! G/ O9 I/ I' r7 b2 s 1.5模拟端口配置同样的配置与硬件采样相关的模拟端口。 ![]() 8 `# m; F7 Z; a$ [5 K5 V& l 生成STM32G474QE的电机控制代码,用于参考配置STM32G474RET6的CubeMx配置。![]() 7 H) x5 c3 ~- G& B% H: e 2基于STM32CubeMX生成电机控制外设的初始化代码 2.1新建STM32CubeMX工程 新建STM32G474RET6的工程 ![]() 2.2配置ADC 3 G/ X5 V) e5 {6 ^ k# \ 配置ADC1配置引脚. W" \) ~. U% X 可以直接打开MC Workbench生成的STM32G474QE的*.ioc文件做为参考。 & O/ ?7 @, u$ F0 m ![]() ) z6 v1 R9 Z" F% o 配置ADC1功能这边注意ADC1左对齐,触发信号为Tim1 Trigger Out Event,只有Inject模式没有Regular模式。 ![]() ! T# @* K6 ~( d6 ^% `: O4 l 使能ADC1/2中断![]() 4 u. a% L5 S' U 这边ADC2_IN14是复用在ADC1_IN14的引脚上。 ![]() & V5 F$ ?% r4 g8 w7 U! i 配置ADC2功能( g( O* m- {$ A! ^. x6 b5 D ADC2有两个通道用于电压与温度传感采样,使用Regular模式。用于电流采样的使用Inject模式,这点区别于ADC1的配置。 ![]() ' `0 t9 k$ g L; i, O# i( ? . B2 x) k6 E$ {, ?- c 2.3配置Timer1 4 K" @5 Q5 s6 B6 j$ F) @7 ~ 这边只使用上桥的PWM输出,因此只配置上桥输出PWM波,其中CH4用于ADC触发,无外部PWM输出。 . G# e" f) d, g5 r- |5 S- Y: A% h; { ![]() 4 S+ r- K5 e; N1 z# Z 配置TIM1功能这边有些宏定义,可以参考MC Workbench生成的工程,注意定义为相同名字。 ![]() ! k# ?, V7 U! j/ H, L+ R ![]() # }* P l+ v: B; }6 u" X, p 2.4配置调试串口 ![]() 5 H: |. ]' @+ K, j- R 2.5使能STM32G4特有的Cordic外设 ![]() 2.6重新分配管脚 6 ~, i$ v5 |$ I 将管脚定义为硬件控制的引脚,增加输入输出引脚。 , l, X6 [- [8 F3 v ![]() 0 U( w/ T F6 b! p5 o. [ 2.7管脚名称重定义 重新定义管脚名称,符合MC Workbench生成的命名。 / q ~ _& D0 k) k# U6 h" p ![]() 4 m8 x! {( Q3 K* ~3 v7 m 2.8规划NVIC的中断优先级 这边特别注意中断优先级别的设定,将影响到程序运行。 ![]() w1 e( V9 A/ I0 G8 t8 A3 i 2.9不生成电机相关的中断程序 因为电机相关的中断程序中电机库中已经有了,这边不使用STM32CubeMX生成中断代码。 ; y7 Z4 o, e; |6 E" ]5 e* i( l8 p ![]() % |8 P3 C% X7 L7 T8 u 2.10系统其他的配置 分别配置RCC为外部晶振,GPIO口的默认设置,Sys的调试部分。 ![]() 2.11时钟配置 这边我们外部晶振为24MHz,System时钟配置为170MHz。 ![]() 8 Y d0 r, e( v+ o 2.12生成工程 ![]() 4 f5 V( r M6 D : q S x$ d/ X- p9 u2 M9 g: ~ 35 r5 P( g: V& i# u& X. Q0 M/ q对生成工程进行修改、添加 3.1拷贝文件 将MC Workbench生成的文件夹下的MCSDK_v5.4.3拷贝到STM32CubeMX直接生成的G474_MC文件夹下,另外Inc与Src文件也同时拷贝进去,需要选择不覆盖同名文件。 , O/ u! ?4 E% \6 p- ` W ![]() 3.2添加电机FOC库 打开STM32CubeMX生成的工程,在工程中添加Group以及增加文件到工程中。 ![]() ![]() 5 F3 x% e. h) q3 {( v0 b+ x% { 3.3增加API以及控制文件到工程中 ![]() ![]() 3.4增加头文件包含目录 2 T. _7 [. i! C4 L2 C" A ![]() ![]() 3 T! k- P; ^4 ?: m3 t 包含头文件以及增加电机控制初始化函数。 ![]() 验证是否正常工作 8 z+ |' ~, K0 ? 编译下载后,使用Workbench控制电机转动。 ![]() 1 P! ?+ M6 Q! x ![]() |