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

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

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

+ P  Q( W1 X, D, O3 l6 _

' ^" ^5 Z- h/ [; d6 c: ~

1 E# H: ^0 v% c7 K/ F7 }

2 @& @( j( Y7 M
前言
当前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(电机)。

8 |, Y2 C; `! X1 F6 h
1
, F, n# h; @# |7 _$ y/ L/ [$ S
MC Workbench操作
7 K6 G) D, Q! `
1.1新建工程
  F0 F8 d/ W( M$ ^1 K% ]
如果有Demo板和电机,则选择对应的Demo板与电机型号;如果没有,直接选择customer board。这边我们看到没有Nucleo-STM32G474RET6,因此我们选择customer board。
. d5 ~2 T+ l# X% p
微信图片_20201207195438.png
' Y9 Z2 s0 d1 I; Z& f. C
1.2配置电机与功率板相关配置
; E: Z7 n; {5 X
分别配置电源,电压保护,电机,电流采样,功率管。因为我们使用了现成的功率板与电机,这边我们使用默认参数即可。如果是自己的电机与功率板,请参考ST往期的技术培训。

/ r; F' B9 j$ l' ~
微信图片_20201207195443.png
+ z1 O7 g& B2 C. f5 C1 z  R: _
1.3芯片选择与配置
( _6 f7 E$ F2 n: q
首先我们看到在MC workbench中并没有STM32G474RET6这个芯片型号,因此我们需要选择与之相近的单片机。原则是Flash大小相同优先选择,型号相似次之,同一系列最后。这边我们可以选择STM32G474QE作为参考型号。

4 w# \7 e: ~7 p* P1 O8 J# b
微信图片_20201207195447.png

+ h9 y8 j% [2 G) \8 Y2 P
1.4数字端口配置

/ k! a6 X( t  k; n' `
这边我们使用的功率器件为单一PWM与控制使能方式,结合硬件连接为如下配置。
) K9 x2 P* @8 X2 n+ A* G
如果PWM互补的方式则还需要配置下桥控制引脚。

- a4 ~. e( ]/ m  l
微信图片_20201207195450.png

  c. q6 t. p: v( O
1.5模拟端口配置

2 U' W. |+ D. K  j
同样的配置与硬件采样相关的模拟端口。
微信图片_20201207195453.png

) r2 X* z9 f! x( Z
1.6生成代码

4 w3 I4 ^3 x7 M' h6 Q4 o" u
生成STM32G474QE的电机控制代码,用于参考配置STM32G474RET6的CubeMx配置。
微信图片_20201207195458.png
& i; S" t# m- B( h5 d' I! T* ]
2
# {2 w% i3 Y2 n7 u7 C% R
基于STM32CubeMX生成电机控制外设的初始化代码

; G! |' c1 ]# J; G
2.1新建STM32CubeMX工程

$ }" z; I& O" E7 z8 y; `
新建STM32G474RET6的工程
微信图片_20201207195502.png

, X9 [/ |/ v, a% i1 A% m8 y8 m  w

0 P, u- Y7 z, y9 U6 y9 n" ]+ {
2.2配置ADC
% E0 H8 Q# G1 N( A% {( Q
配置ADC1配置引脚
, g2 \1 k* v" y7 l$ i0 L
可以直接打开MC Workbench生成的STM32G474QE的*.ioc文件做为参考。
. A4 ]7 O8 _5 Y. \6 n# e2 P0 ~
微信图片_20201207195506.png

. _8 [# M) @: n% P
配置ADC1功能
. s+ `& l4 d" b) r" m/ k) Z
这边注意ADC1左对齐,触发信号为Tim1 Trigger Out Event,只有Inject模式没有Regular模式。
微信图片_20201207195512.png

5 I( a4 ?0 B) p7 C7 ~6 v+ X: X& g
使能ADC1/2中断
微信图片_20201207195516.png

6 S; g  J$ D& e

+ S) ?9 T8 q1 X4 q. \
配置ADC2引脚与功能

* Q6 S, p* X: T
这边ADC2_IN14是复用在ADC1_IN14的引脚上。
微信图片_20201207195519.png
0 @+ l; n: z, O. T0 ], P+ f

: e$ r" `/ B% p
配置ADC2功能
8 e& N) [/ ]/ X; X# @' i+ b* c
ADC2有两个通道用于电压与温度传感采样,使用Regular模式。用于电流采样的使用Inject模式,这点区别于ADC1的配置。
微信图片_20201207195522.png
( @$ H- `$ I! j, p& Y
, m# l+ t/ N" w( h  B
2.3配置Timer1

) A4 }  ^: Y& M$ F/ P5 K3 l, T2 G6 e
配置TIM1输出管脚

9 F1 n: e2 T# C' \, M
这边只使用上桥的PWM输出,因此只配置上桥输出PWM波,其中CH4用于ADC触发,无外部PWM输出。
; ^+ \5 u  ]/ \' d; M$ o7 U- S3 @
微信图片_20201207195525.png

1 B: N) o0 Z4 d% p: F8 r/ A. _
配置TIM1功能
) ]# Y( A: c7 J. u; \
这边有些宏定义,可以参考MC Workbench生成的工程,注意定义为相同名字。
微信图片_20201207195528.png
; @! l+ j. o/ ?; B7 V
! X3 o9 N5 v* G; B& O/ b7 j
使能TIM1的中断
微信图片_20201207195531.png

2 d3 {) S1 E8 d

4 E% T/ }- p6 i* I: h$ b0 @
2.4配置调试串口

6 K2 l7 {. ^! E9 ]$ @& t
微信图片_20201207195534.png
% x+ P8 c$ R2 f
2.5使能STM32G4特有的Cordic外设

( d- q* v: e3 m+ O+ y$ V5 c8 b* M6 L
微信图片_20201207195537.png

. B+ U+ f4 e: z+ L& v0 Z3 ]
2.6重新分配管脚
# _6 q% k6 L+ |$ k( q. K& W0 M
将管脚定义为硬件控制的引脚,增加输入输出引脚。

2 e' g$ r  `9 |* o
微信图片_20201207195542.png
9 h9 i  [# U6 o" Q3 T/ K! n
2.7管脚名称重定义
' B8 k7 q2 a$ S: V  b
重新定义管脚名称,符合MC Workbench生成的命名。

, C: T$ g) W' ~3 \0 C
微信图片_20201207195545.png

$ I, y1 k- ^8 s, L3 @; k. ]7 t, v% X: D
2.8规划NVIC的中断优先级
( ]5 j. |" L# W& E8 K# y
这边特别注意中断优先级别的设定,将影响到程序运行。

$ ^; I& L* _8 E8 |* u4 `
微信图片_20201207195548.png

) n5 h! X5 g+ i; _
2.9不生成电机相关的中断程序

8 B1 u- `% F, q" C- j1 G" J
因为电机相关的中断程序中电机库中已经有了,这边不使用STM32CubeMX生成中断代码。
: b) v5 F2 u: F1 {1 T
微信图片_20201207195551.png
9 Z: _) T/ |, r! r
2.10系统其他的配置

2 j1 E# b& c5 E4 Y+ E
分别配置RCC为外部晶振,GPIO口的默认设置,Sys的调试部分。
微信图片_20201207195554.png

3 N2 |! ?0 O! U7 h) A8 d  m

) ~+ b3 x/ ^: q% N
2.11时钟配置

2 p6 e/ \) P9 x( c/ T
这边我们外部晶振为24MHz,System时钟配置为170MHz。
微信图片_20201207195557.png

' O  \  E3 w" `% D1 K4 _, Y  ~

1 B: f$ ^  Z- P# L( {
2.12生成工程
微信图片_20201207195600.png

* ^" w+ f( V4 X) _

, g3 q# @+ K( W+ r$ ?1 B
3
1 F  N6 j  i" u' n; V! Q( O- b
对生成工程进行修改、添加

' f! G- `$ |4 v3 s. ^- k
3.1拷贝文件
2 q8 b7 L0 D1 l9 M4 G9 |8 n
将MC Workbench生成的文件夹下的MCSDK_v5.4.3拷贝到STM32CubeMX直接生成的G474_MC文件夹下,另外Inc与Src文件也同时拷贝进去,需要选择不覆盖同名文件。

/ E0 S- B$ U! W  i# ]5 Y3 n
微信图片_20201207195604.png

! S% \4 Z6 _" U
3.2添加电机FOC库

5 W/ t3 {7 Y* u+ P: I) ]" D
打开STM32CubeMX生成的工程,在工程中添加Group以及增加文件到工程中。
) o2 E4 z6 k  Q
微信图片_20201207195607.png
微信图片_20201207195611.png
' W7 E1 a2 }" Z& ]. ?5 P* c4 w: ]+ h
3.3增加API以及控制文件到工程中
7 b, d! M2 _- ~# ~, R* ]$ W
微信图片_20201207195614.png

  l+ ^! n. j4 t- Y, i  L
微信图片_20201207195618.png
3.4增加头文件包含目录
3 K/ J4 ]) C& i: q! t
微信图片_20201207195620.png

% |1 _- f$ O0 [" Q* r# H! u+ o0 P8 D
微信图片_20201207195623.png

1 d" [/ n2 z1 U7 R  z/ h9 J  f, t' ?
3.5修改Main.c文件
) B; s1 P; o2 W$ c$ ^
包含头文件以及增加电机控制初始化函数。
' q) v8 d$ z" z  m6 }; J
微信图片_20201207195627.png

. ?# H& v) P& d" b/ p- U$ {
4
% L1 w8 u5 c3 C; z; T- a
验证是否正常工作

" {, C$ o% d6 H& X. o
编译下载后,使用Workbench控制电机转动。

) ^4 W/ r1 y5 ~% D+ U$ n$ w$ i: X
微信图片_20201207195629.png
! {# I; d1 L* s% x% a
微信图片_20201207195632.png
  N% u9 F2 N$ H/ i$ D. I& u
收藏 评论0 发布时间:2020-12-7 20:01

举报

0个回答
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版