
所选择的芯片未包含在MC Workbench中怎么办? 本文教你使用STM32CubeMX结合MC Workbench生成FOC代码 . N" B$ r f0 ]3 q3 T6 _) ^ h 当前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(电机)。 - N" n: F0 Y$ V, S, J2 E 1MC Workbench操作 如果有Demo板和电机,则选择对应的Demo板与电机型号;如果没有,直接选择customer board。这边我们看到没有Nucleo-STM32G474RET6,因此我们选择customer board。 ![]() 5 j7 L e+ C8 Q6 B7 V4 W5 n& e 1.2配置电机与功率板相关配置分别配置电源,电压保护,电机,电流采样,功率管。因为我们使用了现成的功率板与电机,这边我们使用默认参数即可。如果是自己的电机与功率板,请参考ST往期的技术培训。 : p& V$ k5 W# w; h2 R/ s# |+ r ![]() % R b# T& q" M3 g% H, Q 1.3芯片选择与配置, S% c g0 W% r0 S+ |( ?8 R! q 首先我们看到在MC workbench中并没有STM32G474RET6这个芯片型号,因此我们需要选择与之相近的单片机。原则是Flash大小相同优先选择,型号相似次之,同一系列最后。这边我们可以选择STM32G474QE作为参考型号。 + `5 E. }9 K1 p0 [1 i! O6 D. w9 T" o ![]() 这边我们使用的功率器件为单一PWM与控制使能方式,结合硬件连接为如下配置。 % X6 I! @6 M5 e9 Y0 @# l b 如果PWM互补的方式则还需要配置下桥控制引脚。 ![]() ) V1 s( V+ D, P( ~1 C( ^5 @2 | 1.5模拟端口配置8 k. t0 U3 T# n. n9 Q* S 同样的配置与硬件采样相关的模拟端口。 ![]() 4 z3 k& d1 I* |' } 1.6生成代码![]() * E4 b/ [. K" G7 S 29 d) C# U% e- L基于STM32CubeMX生成电机控制外设的初始化代码 ! A1 R. \2 a/ G( t2 x9 r 2.1新建STM32CubeMX工程 新建STM32G474RET6的工程 ![]() - ]( |( r8 Z5 X; x, W e 2.2配置ADC - j; h# M, p* Y" |8 Q, {) }- O 配置ADC1配置引脚可以直接打开MC Workbench生成的STM32G474QE的*.ioc文件做为参考。 ![]() 7 N' ]) ~. E; Z& T 配置ADC1功能% B9 n& a! @2 b+ t/ c 这边注意ADC1左对齐,触发信号为Tim1 Trigger Out Event,只有Inject模式没有Regular模式。 ![]() 7 ], S5 Q% D, m+ X* c8 b1 e 使能ADC1/2中断![]() * C6 j8 T% K9 I6 E2 M - l @" R# S7 e, m* S3 H8 {6 L 配置ADC2引脚与功能这边ADC2_IN14是复用在ADC1_IN14的引脚上。 ![]() 3 v# o3 Y9 P9 b( m. s: h5 ^ ADC2有两个通道用于电压与温度传感采样,使用Regular模式。用于电流采样的使用Inject模式,这点区别于ADC1的配置。 ![]() # j! ~+ y" d3 K 9 I7 ^4 @ w, E) l1 w 2.3配置Timer1 9 _$ p5 P5 s) }( M" u' ` 这边只使用上桥的PWM输出,因此只配置上桥输出PWM波,其中CH4用于ADC触发,无外部PWM输出。 ![]() 2 X% \) p7 u# b2 ` 这边有些宏定义,可以参考MC Workbench生成的工程,注意定义为相同名字。 ![]() ![]() 2.4配置调试串口 3 c9 p8 d+ x# `, A ![]() 9 f9 o( O! s1 ]4 Q 2.5使能STM32G4特有的Cordic外设 ![]() . b7 h& P* ]6 h8 W 2.6重新分配管脚 $ D+ V+ u$ a: Q+ c 将管脚定义为硬件控制的引脚,增加输入输出引脚。 0 `* y# V# ]$ s( y9 n1 b ![]() 2.7管脚名称重定义 9 w! i* v) P8 s) |9 R 重新定义管脚名称,符合MC Workbench生成的命名。 7 K- c' u2 w8 ]# \2 y' G5 K' d9 f ![]() : o o3 v" w$ [% { 2.8规划NVIC的中断优先级 1 e6 B6 G% E4 G" V! |% ^ 这边特别注意中断优先级别的设定,将影响到程序运行。 ![]() & h% D) o+ N8 g 2.9不生成电机相关的中断程序 因为电机相关的中断程序中电机库中已经有了,这边不使用STM32CubeMX生成中断代码。 * t9 o" b" f8 D, J* A7 J; h# V1 E. I ![]() 2.10系统其他的配置 分别配置RCC为外部晶振,GPIO口的默认设置,Sys的调试部分。 ![]() * |4 Y0 Q7 H% r& R* P% ~ 2.11时钟配置 4 q" w! O. t9 b g6 U+ d 这边我们外部晶振为24MHz,System时钟配置为170MHz。 ![]() 2 C O/ c! O+ M$ M9 ~3 `/ D& k1 Y 6 i: Y+ D1 e3 n* d6 w 2.12生成工程 ![]() 1 D& l; h. K! ^' c5 ]8 E( s9 V 对生成工程进行修改、添加 3.1拷贝文件 将MC Workbench生成的文件夹下的MCSDK_v5.4.3拷贝到STM32CubeMX直接生成的G474_MC文件夹下,另外Inc与Src文件也同时拷贝进去,需要选择不覆盖同名文件。 ( ?- N6 V8 F3 H9 D ![]() 3.2添加电机FOC库 7 d& G3 B0 y9 ^% W; Q( M' |4 t 打开STM32CubeMX生成的工程,在工程中添加Group以及增加文件到工程中。 : m$ }7 @ ]# V! N% m7 ~8 S+ p ![]() ![]() X& s& {* t2 z) N+ U 3.3增加API以及控制文件到工程中 , K" w. `" T; S* ?, X \9 E8 _ ![]() ![]() 3.4增加头文件包含目录 ![]() 2 J& y0 w( w) B4 M' p ![]() & I) l4 ?( N# I: Z7 ? 包含头文件以及增加电机控制初始化函数。 / m& l+ B& z3 V& w& }" O2 o# N ![]() / M2 e( W* n# P6 ] K% `/ U 4& Y! y7 s& X6 B7 b$ a/ b验证是否正常工作 5 P+ w8 p9 ]1 j1 \ 编译下载后,使用Workbench控制电机转动。 ![]() ![]() |