所选择的芯片未包含在MC Workbench中怎么办? 本文教你使用STM32CubeMX结合MC Workbench生成FOC代码 + O$ t6 u- T8 W8 C6 X* G& w. t 0 _6 m/ ]0 x. X. L 前言当前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操作 & ^$ S* d" l3 E+ m1 w! Q4 I 1.1新建工程如果有Demo板和电机,则选择对应的Demo板与电机型号;如果没有,直接选择customer board。这边我们看到没有Nucleo-STM32G474RET6,因此我们选择customer board。 ; g8 P8 e* M- q+ U 1.2配置电机与功率板相关配置& X% x l2 q* N/ t8 | 分别配置电源,电压保护,电机,电流采样,功率管。因为我们使用了现成的功率板与电机,这边我们使用默认参数即可。如果是自己的电机与功率板,请参考ST往期的技术培训。 % c8 r) z) K* Z2 b5 x5 |0 a3 G" { % M' [% U5 n; U, p 首先我们看到在MC workbench中并没有STM32G474RET6这个芯片型号,因此我们需要选择与之相近的单片机。原则是Flash大小相同优先选择,型号相似次之,同一系列最后。这边我们可以选择STM32G474QE作为参考型号。 1 x5 r- H, r' Q, i 1 I: o( s$ C9 w0 i 1.4数字端口配置! O3 q- N% x, V4 Y. K2 ^ 这边我们使用的功率器件为单一PWM与控制使能方式,结合硬件连接为如下配置。 如果PWM互补的方式则还需要配置下桥控制引脚。 " a l/ P# \1 l! {$ V N 1.5模拟端口配置, Q) [ Z. H3 t' g- C 同样的配置与硬件采样相关的模拟端口。 基于STM32CubeMX生成电机控制外设的初始化代码 ; o8 F5 o3 T$ I0 G) i( Z6 P 2.1新建STM32CubeMX工程 ( d, Y0 }' E# l( y( Z3 i0 S& a 新建STM32G474RET6的工程 2.2配置ADC 可以直接打开MC Workbench生成的STM32G474QE的*.ioc文件做为参考。 7 A0 o8 Z2 d' Q5 ~0 ? 1 M+ w9 k) N, ~( W' Q! y4 o# d9 T 配置ADC1功能这边注意ADC1左对齐,触发信号为Tim1 Trigger Out Event,只有Inject模式没有Regular模式。 6 a# f6 Y$ J, j8 n! m$ e1 e, _9 }+ e % k5 ~* a) T: S* J" Z7 g- d 这边ADC2_IN14是复用在ADC1_IN14的引脚上。 Z4 K. k+ Q6 E: T % b5 n4 D- B6 X! ?3 F! G+ ` 配置ADC2功能/ ?/ U* X) l# B5 y# f ADC2有两个通道用于电压与温度传感采样,使用Regular模式。用于电流采样的使用Inject模式,这点区别于ADC1的配置。 2.3配置Timer1 ! x$ o0 s- w4 a0 D 这边只使用上桥的PWM输出,因此只配置上桥输出PWM波,其中CH4用于ADC触发,无外部PWM输出。 " V& u# t4 p9 {7 R/ e 这边有些宏定义,可以参考MC Workbench生成的工程,注意定义为相同名字。 / G) i8 B+ o! n5 H 2.4配置调试串口 7 i: i1 m6 C, S( W9 g, w 2.5使能STM32G4特有的Cordic外设 8 m6 f3 [* }- S8 ~6 `/ L 2.6重新分配管脚 . }# Y5 T4 w* o6 w 将管脚定义为硬件控制的引脚,增加输入输出引脚。 * j) W3 j3 O* J, K( e/ Q6 B0 k $ O) J/ c/ r# r) q. t( v& y/ Q: @ 2.7管脚名称重定义 $ T2 n9 s$ A" m7 @# M& u 重新定义管脚名称,符合MC Workbench生成的命名。 2.8规划NVIC的中断优先级 这边特别注意中断优先级别的设定,将影响到程序运行。 2.9不生成电机相关的中断程序 3 q/ X4 o5 j1 A5 o* v4 a 因为电机相关的中断程序中电机库中已经有了,这边不使用STM32CubeMX生成中断代码。 4 ?% i* l5 h( R; `) h 2.10系统其他的配置 ( X! @, ^4 E& r4 @/ d 分别配置RCC为外部晶振,GPIO口的默认设置,Sys的调试部分。 8 N0 t+ f" U& a2 ~: w 2.11时钟配置 这边我们外部晶振为24MHz,System时钟配置为170MHz。 2.12生成工程 对生成工程进行修改、添加 3.1拷贝文件 7 J5 p; h4 S1 L; N. X 将MC Workbench生成的文件夹下的MCSDK_v5.4.3拷贝到STM32CubeMX直接生成的G474_MC文件夹下,另外Inc与Src文件也同时拷贝进去,需要选择不覆盖同名文件。 ' D: E h$ \. J2 l, }; H 3.2添加电机FOC库 打开STM32CubeMX生成的工程,在工程中添加Group以及增加文件到工程中。 6 `4 e& r! l5 Z7 K( C3 [ 3.3增加API以及控制文件到工程中 3.4增加头文件包含目录 ( M T% J; e' v) X5 @ " |% U8 O. x8 K0 q / ]5 z5 j4 m: F4 Z, W6 m+ d 3.5修改Main.c文件包含头文件以及增加电机控制初始化函数。 $ c% r3 e% e& `6 ?9 e+ z! ^ $ @: a! q- N/ i# W0 k) j 4验证是否正常工作 编译下载后,使用Workbench控制电机转动。 . E- h8 X( d; @- ~! ? |