你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

使用STM32CubeMX结合MC Workbench生成FOC代码

[复制链接]
gaosmile 发布时间:2020-12-7 20:01
所选择的芯片未包含在MC Workbench中怎么办?
本文教你使用STM32CubeMX结合MC Workbench生成FOC代码

7 o. I1 ]7 z/ Y6 \9 a' ^4 O: e
* U; C: d( `2 b' g4 x2 @' A

; Q4 m9 Y. }% G1 Y( V: U  v
: M0 `" H* ?- e2 g7 _: I* ^1 h9 q
前言
当前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(电机)。
- F' \4 @: ]3 k0 z
1
5 ^1 }( ~3 P' j  d
MC Workbench操作
0 j+ R) k. `) K" n+ |" J% }
1.1新建工程

) `8 o2 H3 W3 D: h+ x" M  e& E
如果有Demo板和电机,则选择对应的Demo板与电机型号;如果没有,直接选择customer board。这边我们看到没有Nucleo-STM32G474RET6,因此我们选择customer board。

/ {& ~0 e+ e2 a1 I6 ]7 H
微信图片_20201207195438.png
5 C. Q1 b; P3 K; I( L: P3 B
1.2配置电机与功率板相关配置
2 P* x7 B" h( S  j
分别配置电源,电压保护,电机,电流采样,功率管。因为我们使用了现成的功率板与电机,这边我们使用默认参数即可。如果是自己的电机与功率板,请参考ST往期的技术培训。

9 `6 M+ P8 [! k3 {8 T0 l
微信图片_20201207195443.png

. E7 f# i* s& q' e) X
1.3芯片选择与配置

# H0 G3 L: `  b4 o" \" B
首先我们看到在MC workbench中并没有STM32G474RET6这个芯片型号,因此我们需要选择与之相近的单片机。原则是Flash大小相同优先选择,型号相似次之,同一系列最后。这边我们可以选择STM32G474QE作为参考型号。
& N9 w8 m/ U; `  G. I: O
微信图片_20201207195447.png
; ^2 s+ |0 `2 F7 N" Z$ H
1.4数字端口配置

+ \& c  |/ `; \
这边我们使用的功率器件为单一PWM与控制使能方式,结合硬件连接为如下配置。
2 j6 l5 @; B1 [' v; r
如果PWM互补的方式则还需要配置下桥控制引脚。
2 r8 c" O+ A: h8 c
微信图片_20201207195450.png
' ~: I- V$ F9 [# i5 i- f; X0 ?) ~3 P
1.5模拟端口配置
7 u( a& I/ I! C  W+ x9 {# G2 _
同样的配置与硬件采样相关的模拟端口。
微信图片_20201207195453.png
3 L+ V( H. I& x; ]* @3 O
1.6生成代码

9 F; f6 c7 k$ ^6 [1 p
生成STM32G474QE的电机控制代码,用于参考配置STM32G474RET6的CubeMx配置。
微信图片_20201207195458.png
4 Y6 G/ t# i5 a. p  y
26 i. S. }, p. ^1 J4 x
基于STM32CubeMX生成电机控制外设的初始化代码
7 I  g( X5 B3 c# v, T) L
2.1新建STM32CubeMX工程

; i& q! W2 B# @: d+ t" l- t
新建STM32G474RET6的工程
微信图片_20201207195502.png

. @6 L2 ~% k( t4 _+ ?0 b. U9 s- u

- w4 B. l% [5 }: z9 O" W
2.2配置ADC
0 D. }- s# l- [& [* S; w
配置ADC1配置引脚
& d6 L! D# y( G4 ~( e& I5 E
可以直接打开MC Workbench生成的STM32G474QE的*.ioc文件做为参考。
" P. [. m  x- e8 b8 d( I
微信图片_20201207195506.png

2 u* |! P* D7 c
配置ADC1功能

6 {3 V) d1 R6 O/ |2 k/ [
这边注意ADC1左对齐,触发信号为Tim1 Trigger Out Event,只有Inject模式没有Regular模式。
微信图片_20201207195512.png

  t3 I! i# \3 A6 r
使能ADC1/2中断
微信图片_20201207195516.png

9 {, D* C7 x& a$ O! P
- \, l( g! X! i. k  m8 V& [* w4 k
配置ADC2引脚与功能
4 l: H4 y; |8 b4 a0 c, B/ E* x  \/ t
这边ADC2_IN14是复用在ADC1_IN14的引脚上。
微信图片_20201207195519.png

$ e+ q  H9 ~( }
$ D; J* q* Y9 y2 E) h! F; h; D6 l
配置ADC2功能
8 w" W) E' z8 r  X0 D% }1 H* A
ADC2有两个通道用于电压与温度传感采样,使用Regular模式。用于电流采样的使用Inject模式,这点区别于ADC1的配置。
微信图片_20201207195522.png
  W# j5 L- U  j# J3 \- @" |

4 a# K' O! g5 x( X* l
2.3配置Timer1
1 f" U6 d7 c# R6 [. c8 K
配置TIM1输出管脚

9 N3 @6 P8 v1 k" e$ ?* b
这边只使用上桥的PWM输出,因此只配置上桥输出PWM波,其中CH4用于ADC触发,无外部PWM输出。
2 b  F: X$ k8 t9 @2 D: J/ B
微信图片_20201207195525.png

$ Z$ R! E& _, W, k, B; b5 W3 ?
配置TIM1功能
6 P- O+ M, O6 }
这边有些宏定义,可以参考MC Workbench生成的工程,注意定义为相同名字。
微信图片_20201207195528.png
3 Q% O2 y& n* ?

3 P5 `- u0 L3 S) D/ Y
使能TIM1的中断
微信图片_20201207195531.png
1 x2 T0 B8 C6 i1 _- k, B8 u# o& Y
$ J7 v# y# e0 U" n4 D; ]/ Z" ^
2.4配置调试串口
. }  t$ g. |5 J' H
微信图片_20201207195534.png
. d: X1 f4 r: i( J
2.5使能STM32G4特有的Cordic外设

% g. W( ]5 c9 u8 S5 ~
微信图片_20201207195537.png
3 X0 l7 x! N+ A/ @% i& I% }* x
2.6重新分配管脚
2 U9 {6 g+ ^/ f9 O3 H- G1 u
将管脚定义为硬件控制的引脚,增加输入输出引脚。
0 s$ ^! Y) s5 {$ K5 U0 W/ N7 F
微信图片_20201207195542.png
" @& ?. ^" R0 k% @
2.7管脚名称重定义
- S: `' b9 |& E! k6 z0 _2 x+ d
重新定义管脚名称,符合MC Workbench生成的命名。

  G. O/ z; q) g. q& x0 d: `% \
微信图片_20201207195545.png
( q! x7 |" ~9 I* O: v5 R* U
2.8规划NVIC的中断优先级
" d6 _+ |$ u) \- q
这边特别注意中断优先级别的设定,将影响到程序运行。

5 S5 H; L$ |5 @, t; b1 U% A, P' E
微信图片_20201207195548.png

8 V6 u! W& r  `( M
2.9不生成电机相关的中断程序
) O1 Q" c9 f4 S
因为电机相关的中断程序中电机库中已经有了,这边不使用STM32CubeMX生成中断代码。

% H2 z- j) u4 c. d/ O$ @' ?
微信图片_20201207195551.png
5 v7 n) J1 T8 K' x1 @; Z
2.10系统其他的配置
- w- L5 z1 y% E9 W/ D, h
分别配置RCC为外部晶振,GPIO口的默认设置,Sys的调试部分。
微信图片_20201207195554.png
6 X. h( a- w0 C  G: U

& ~9 e/ f; }* L- ~' T) o8 R
2.11时钟配置
0 ~- ?* a7 k0 \9 v
这边我们外部晶振为24MHz,System时钟配置为170MHz。
微信图片_20201207195557.png
: d8 z4 @, K9 ?$ D# t$ _2 q

' ]8 O2 L/ r& y9 P
2.12生成工程
微信图片_20201207195600.png
7 j- O/ r3 P% O' y) k
5 i! F- W% l. q1 A# J4 k+ z6 r9 O
37 p5 f8 }$ R4 x& f. v
对生成工程进行修改、添加

% J  r! p  K) U8 e
3.1拷贝文件

) T$ Q5 c( B5 t* w
将MC Workbench生成的文件夹下的MCSDK_v5.4.3拷贝到STM32CubeMX直接生成的G474_MC文件夹下,另外Inc与Src文件也同时拷贝进去,需要选择不覆盖同名文件。

- N3 o% U8 p, Z& _+ h: y
微信图片_20201207195604.png

. a- v* B. ~' V% _4 u
3.2添加电机FOC库
# C, C: |' @! Z' y3 @
打开STM32CubeMX生成的工程,在工程中添加Group以及增加文件到工程中。

$ G" C& B' M1 c' s7 }
微信图片_20201207195607.png
微信图片_20201207195611.png

! I6 X5 ~, {' `8 n" [8 B/ S/ O. T% p
3.3增加API以及控制文件到工程中

8 j9 N% G6 D3 J9 |) d
微信图片_20201207195614.png
/ ?3 ?% p( ~/ m; x4 Y- a) ?
微信图片_20201207195618.png
3.4增加头文件包含目录
1 L* I; ^% t8 ^8 n
微信图片_20201207195620.png
+ ?4 @3 J- @- M% \7 E9 j
微信图片_20201207195623.png
" A! `6 ^3 ~3 N% h
3.5修改Main.c文件

3 w/ t9 T# V" I: r/ k& d* \9 G
包含头文件以及增加电机控制初始化函数。
" Q# G* T$ L5 m4 s6 ?8 X2 d
微信图片_20201207195627.png
( i, ^6 l1 x7 K
4, {8 C# a" T4 h" ^/ s
验证是否正常工作

+ o! o2 I9 T* F0 X! t
编译下载后,使用Workbench控制电机转动。

: F3 T2 I2 M$ o6 M/ [: w
微信图片_20201207195629.png

' H3 d5 u& e3 h! h) g  V7 Z; Q1 }3 w
微信图片_20201207195632.png
" b6 T0 V0 M6 K/ _2 A, C
收藏 评论0 发布时间:2020-12-7 20:01

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版