
所选择的芯片未包含在MC Workbench中怎么办? 本文教你使用STM32CubeMX结合MC Workbench生成FOC代码 7 c% U* o: u0 U- s1 z% X3 [/ g& Q* u* R. L) L+ Z6 D! k & M& N/ R% q9 {( [, t 前言当前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(电机)。 % n6 f3 e, U- ^ 1MC Workbench操作 8 q8 Z4 X4 q- A3 v- a7 s3 M 如果有Demo板和电机,则选择对应的Demo板与电机型号;如果没有,直接选择customer board。这边我们看到没有Nucleo-STM32G474RET6,因此我们选择customer board。 ![]() 分别配置电源,电压保护,电机,电流采样,功率管。因为我们使用了现成的功率板与电机,这边我们使用默认参数即可。如果是自己的电机与功率板,请参考ST往期的技术培训。 7 {5 w. S2 U# y; N ![]() 首先我们看到在MC workbench中并没有STM32G474RET6这个芯片型号,因此我们需要选择与之相近的单片机。原则是Flash大小相同优先选择,型号相似次之,同一系列最后。这边我们可以选择STM32G474QE作为参考型号。 ![]() 7 ]9 g/ I$ ^& H+ v8 h 1.4数字端口配置这边我们使用的功率器件为单一PWM与控制使能方式,结合硬件连接为如下配置。 3 W1 b5 F: T y( H 如果PWM互补的方式则还需要配置下桥控制引脚。 $ \& U$ `6 F; F ![]() 同样的配置与硬件采样相关的模拟端口。 ![]() ![]() $ v- Q7 F. }( M; L 2+ ~& r3 Y; x. g基于STM32CubeMX生成电机控制外设的初始化代码 ' _& K; O) I9 w3 n' H+ Y& Q6 G, | 2.1新建STM32CubeMX工程 新建STM32G474RET6的工程 ![]() # L( X; X& q) [: M" L 2.2配置ADC % `( Q( e* i* j! Z& k& { 配置ADC1配置引脚可以直接打开MC Workbench生成的STM32G474QE的*.ioc文件做为参考。 }/ W! U, D H6 z$ N ![]() - m1 Z/ F, _" y" r$ D 这边注意ADC1左对齐,触发信号为Tim1 Trigger Out Event,只有Inject模式没有Regular模式。 ![]() ![]() 8 \4 M, k7 P' Z3 S1 V7 n - M# y+ Q P- K" l. \" B t 配置ADC2引脚与功能& h6 w* m6 F! F' ]9 f, ~* b5 b( ? 这边ADC2_IN14是复用在ADC1_IN14的引脚上。 ![]() , }0 s* E4 F. U4 y0 |, U2 h 配置ADC2功能6 s( c1 W# W& D; l* K ADC2有两个通道用于电压与温度传感采样,使用Regular模式。用于电流采样的使用Inject模式,这点区别于ADC1的配置。 ![]() ) x/ u# Q* e4 m3 `( t7 G( Y/ }# ~" F , ^/ ~+ m0 \+ ]- g" y 2.3配置Timer1 这边只使用上桥的PWM输出,因此只配置上桥输出PWM波,其中CH4用于ADC触发,无外部PWM输出。 ![]() - c9 W( ~* _9 |& Q$ g 配置TIM1功能, S! a& ~( @' t7 W2 g7 q 这边有些宏定义,可以参考MC Workbench生成的工程,注意定义为相同名字。 ![]() * i6 T! a# @* B/ k( G 使能TIM1的中断![]() / f, N' R! J( F: s4 ] ( F$ W, [! {: g6 E4 `# j6 i 2.4配置调试串口 / U: @9 U2 z* B: t1 n ![]() 6 M8 U' L m9 D$ t+ R3 p 2.5使能STM32G4特有的Cordic外设 ![]() ' A4 S( f: _" l3 i 2.6重新分配管脚 ' Q2 i+ p$ X* ^6 a& e 将管脚定义为硬件控制的引脚,增加输入输出引脚。 ![]() 2.7管脚名称重定义 重新定义管脚名称,符合MC Workbench生成的命名。 ![]() 2.8规划NVIC的中断优先级 4 F; Y; O, J7 R c5 ^. b: ~, k. J 这边特别注意中断优先级别的设定,将影响到程序运行。 ![]() 2.9不生成电机相关的中断程序 因为电机相关的中断程序中电机库中已经有了,这边不使用STM32CubeMX生成中断代码。 ![]() ; S+ g0 Y; s# U( E0 o% J 2.10系统其他的配置 ! M6 P, X1 a! D) y0 K. h; `4 d 分别配置RCC为外部晶振,GPIO口的默认设置,Sys的调试部分。 ![]() ' M0 V0 E3 @$ r/ e+ w4 R" a3 S+ i 2.11时钟配置 5 R0 N& r* }' D4 A! u 这边我们外部晶振为24MHz,System时钟配置为170MHz。 ![]() ' ~' o) Z+ \9 `4 A- z; H- L" u 2.12生成工程 ![]() 5 \8 j9 @8 y6 @ 对生成工程进行修改、添加 3.1拷贝文件 - l3 j# `/ b9 T. O- U* h 将MC Workbench生成的文件夹下的MCSDK_v5.4.3拷贝到STM32CubeMX直接生成的G474_MC文件夹下,另外Inc与Src文件也同时拷贝进去,需要选择不覆盖同名文件。 9 ^( K1 J- F3 i4 L) B$ ` ![]() 8 \7 g7 w$ r1 ~: P$ w n9 b 3.2添加电机FOC库 打开STM32CubeMX生成的工程,在工程中添加Group以及增加文件到工程中。 + X5 U: n0 y# i; x* a5 D ![]() ![]() 0 W! c# [ n p) P$ {2 k' L, g 3.3增加API以及控制文件到工程中 ! U& N5 [# U+ M6 p8 @9 D ![]() ![]() 3.4增加头文件包含目录 ![]() ![]() 包含头文件以及增加电机控制初始化函数。 ( L0 @# \; y8 M1 c& @$ }# U0 } ![]() + n: \) g8 | s5 W& n. o 49 s3 u+ D$ F: |9 c/ ~验证是否正常工作 ' |- c2 ~% ~5 c B D; F) U: v% X* O 编译下载后,使用Workbench控制电机转动。 4 q, G- M* w+ N" ^" f ![]() ![]() |