
所选择的芯片未包含在MC Workbench中怎么办? 本文教你使用STM32CubeMX结合MC Workbench生成FOC代码 w' `/ e, |; J) f; ] $ m% n% F9 C3 K+ I9 Z3 k" s % Q U0 D, F& U6 P8 f 前言当前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操作 " K' k% Y$ w9 s, w! M% U7 ^! \% p 1.1新建工程4 i2 g, [! p' C4 C: Q+ l. t 如果有Demo板和电机,则选择对应的Demo板与电机型号;如果没有,直接选择customer board。这边我们看到没有Nucleo-STM32G474RET6,因此我们选择customer board。 ![]() " [6 C( r8 q( o8 g7 G0 B F a0 U1 u% k 1.2配置电机与功率板相关配置3 N5 _' F6 U5 D! ^9 s ? 分别配置电源,电压保护,电机,电流采样,功率管。因为我们使用了现成的功率板与电机,这边我们使用默认参数即可。如果是自己的电机与功率板,请参考ST往期的技术培训。 3 ~/ e s& S0 z3 A; ?# R ![]() " s ^$ [' C( |% A8 y: {7 m 首先我们看到在MC workbench中并没有STM32G474RET6这个芯片型号,因此我们需要选择与之相近的单片机。原则是Flash大小相同优先选择,型号相似次之,同一系列最后。这边我们可以选择STM32G474QE作为参考型号。 ![]() $ |) U5 h( s! B% c1 o# Q; T' z 1.4数字端口配置这边我们使用的功率器件为单一PWM与控制使能方式,结合硬件连接为如下配置。 9 D9 P0 E9 M2 c3 c7 a 如果PWM互补的方式则还需要配置下桥控制引脚。 ![]() 同样的配置与硬件采样相关的模拟端口。 ![]() 6 y8 y7 D$ i2 L2 w 生成STM32G474QE的电机控制代码,用于参考配置STM32G474RET6的CubeMx配置。![]() $ O# o+ ~9 H. M, U" ?: u* ]$ z 2基于STM32CubeMX生成电机控制外设的初始化代码 : M; J* ^3 h+ m! ^ 2.1新建STM32CubeMX工程 5 F ]: c: a- u 新建STM32G474RET6的工程 ![]() " o3 g$ K! v* J7 R& a; Z+ n2 d : K6 v5 e9 c+ V/ `& l+ D 2.2配置ADC 可以直接打开MC Workbench生成的STM32G474QE的*.ioc文件做为参考。 ![]() 4 S6 O1 E6 c# ^5 N5 a, S 这边注意ADC1左对齐,触发信号为Tim1 Trigger Out Event,只有Inject模式没有Regular模式。 ![]() 8 d9 }8 ^8 d- Q- k) E2 D 使能ADC1/2中断![]() # k5 K/ l% d) L# Z* E 这边ADC2_IN14是复用在ADC1_IN14的引脚上。 ![]() # ?9 U* N2 i4 R! P ADC2有两个通道用于电压与温度传感采样,使用Regular模式。用于电流采样的使用Inject模式,这点区别于ADC1的配置。 ![]() ) v' E* v7 U& L. J/ |' k8 M9 V 2.3配置Timer1 这边只使用上桥的PWM输出,因此只配置上桥输出PWM波,其中CH4用于ADC触发,无外部PWM输出。 ( o4 g; w: M6 Q& f2 Y ![]() / E B# q- Z. O- ? 这边有些宏定义,可以参考MC Workbench生成的工程,注意定义为相同名字。 ![]() ![]() 2 n' [( g- p% R8 ~# N. S4 { 2.4配置调试串口 ![]() 2.5使能STM32G4特有的Cordic外设 Y) x0 e3 f* Z ![]() 9 a7 @6 |3 ~. _' k( a 2.6重新分配管脚 将管脚定义为硬件控制的引脚,增加输入输出引脚。 ![]() * G- R( S( d& j2 [/ \ 2.7管脚名称重定义 * b# e5 z8 i F5 A( ^8 E 重新定义管脚名称,符合MC Workbench生成的命名。 ![]() 2.8规划NVIC的中断优先级 , q. y/ z/ W/ ^! |+ } 这边特别注意中断优先级别的设定,将影响到程序运行。 : w F1 K% l: p, T8 ? ![]() 2.9不生成电机相关的中断程序 $ B& U9 a- }; I 因为电机相关的中断程序中电机库中已经有了,这边不使用STM32CubeMX生成中断代码。 ( C8 s; k3 m; }6 P, o: \ ![]() ) R# P. P G1 Q% o 2.10系统其他的配置 3 \- K4 H7 \( F+ m3 T% [2 @ 分别配置RCC为外部晶振,GPIO口的默认设置,Sys的调试部分。 ![]() 2.11时钟配置 这边我们外部晶振为24MHz,System时钟配置为170MHz。 ![]() . V# ]6 s S1 |. a , w; P8 T4 p4 D C5 f( S, O1 @ p. [+ m y 2.12生成工程 ![]() % @$ Y2 X s# M+ ?1 ^ $ D; G4 M" {3 u E% y+ \% U 36 ?3 G/ F$ x6 ~$ ~2 b1 t对生成工程进行修改、添加 3.1拷贝文件 将MC Workbench生成的文件夹下的MCSDK_v5.4.3拷贝到STM32CubeMX直接生成的G474_MC文件夹下,另外Inc与Src文件也同时拷贝进去,需要选择不覆盖同名文件。 8 j* R( y# Q, O0 p8 f$ d ![]() 2 B E- I; A' p G# f! A4 j3 `2 ` 3.2添加电机FOC库 / ?3 r# u5 P$ Y4 w 打开STM32CubeMX生成的工程,在工程中添加Group以及增加文件到工程中。 7 ~: g, x8 }8 A9 ~( K$ U ![]() ![]() 0 E/ z B8 _0 V# @& f4 X2 S" o 3.3增加API以及控制文件到工程中 ![]() ![]() 3.4增加头文件包含目录 ![]() ![]() $ j+ t+ T* L" m4 ? 3.5修改Main.c文件$ l6 P5 _ j, N6 Y 包含头文件以及增加电机控制初始化函数。 ![]() + @1 }9 M E2 h8 z4 X8 g 43 f& |; q8 s6 |$ r* @6 f$ Z2 c验证是否正常工作 编译下载后,使用Workbench控制电机转动。 1 i5 r7 b6 @" {* i ![]() : K$ }( z5 g+ Y7 y ![]() |