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

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

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

" W2 s6 N8 `/ B6 B1 n
. N" B$ r  f0 ]3 q3 T6 _) ^  h

) k* O6 Z: ~8 r

) s6 b  ]/ [% v2 F% f9 o- y
前言
当前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
1
- S: k* j2 t9 ~) O2 ~. h* M
MC Workbench操作

" @$ b' r9 ]7 g
1.1新建工程

% z: d# G/ a" D, \0 j9 p& f
如果有Demo板和电机,则选择对应的Demo板与电机型号;如果没有,直接选择customer board。这边我们看到没有Nucleo-STM32G474RET6,因此我们选择customer board。

5 {( {! F1 f8 R0 ?
微信图片_20201207195438.png
5 j7 L  e+ C8 Q6 B7 V4 W5 n& e
1.2配置电机与功率板相关配置

* W+ k4 g# f. C
分别配置电源,电压保护,电机,电流采样,功率管。因为我们使用了现成的功率板与电机,这边我们使用默认参数即可。如果是自己的电机与功率板,请参考ST往期的技术培训。
: p& V$ k5 W# w; h2 R/ s# |+ r
微信图片_20201207195443.png
% 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
微信图片_20201207195447.png

. `1 M: D; o2 P" {" m/ G
1.4数字端口配置

+ z1 V7 {, h. h6 D+ c+ m
这边我们使用的功率器件为单一PWM与控制使能方式,结合硬件连接为如下配置。
% X6 I! @6 M5 e9 Y0 @# l  b
如果PWM互补的方式则还需要配置下桥控制引脚。

# s' ]  s$ V8 G+ Q% L. \
微信图片_20201207195450.png
) V1 s( V+ D, P( ~1 C( ^5 @2 |
1.5模拟端口配置
8 k. t0 U3 T# n. n9 Q* S
同样的配置与硬件采样相关的模拟端口。
微信图片_20201207195453.png
4 z3 k& d1 I* |' }
1.6生成代码

+ J- g) Q- ^2 G& n5 @+ o+ u6 ~4 p
生成STM32G474QE的电机控制代码,用于参考配置STM32G474RET6的CubeMx配置。
微信图片_20201207195458.png
* E4 b/ [. K" G7 S
29 d) C# U% e- L
基于STM32CubeMX生成电机控制外设的初始化代码
! A1 R. \2 a/ G( t2 x9 r
2.1新建STM32CubeMX工程

7 L* {6 y# u# Q
新建STM32G474RET6的工程
微信图片_20201207195502.png
- ]( |( r8 Z5 X; x, W  e

) s# ~6 M4 I; O3 c- d4 G$ n2 D
2.2配置ADC
- j; h# M, p* Y" |8 Q, {) }- O
配置ADC1配置引脚

8 d9 f0 P7 Q. G# X# Y% U7 w
可以直接打开MC Workbench生成的STM32G474QE的*.ioc文件做为参考。

4 l: N0 O) X1 K; {  V! d
微信图片_20201207195506.png
7 N' ]) ~. E; Z& T
配置ADC1功能
% B9 n& a! @2 b+ t/ c
这边注意ADC1左对齐,触发信号为Tim1 Trigger Out Event,只有Inject模式没有Regular模式。
微信图片_20201207195512.png
7 ], S5 Q% D, m+ X* c8 b1 e
使能ADC1/2中断
微信图片_20201207195516.png
* C6 j8 T% K9 I6 E2 M
- l  @" R# S7 e, m* S3 H8 {6 L
配置ADC2引脚与功能

5 Z. ?+ R) l2 }  @' p" _' t
这边ADC2_IN14是复用在ADC1_IN14的引脚上。
微信图片_20201207195519.png
3 v# o3 Y9 P9 b( m. s: h5 ^

( ~; s$ w4 k$ K
配置ADC2功能

+ ?4 m3 _2 I/ m
ADC2有两个通道用于电压与温度传感采样,使用Regular模式。用于电流采样的使用Inject模式,这点区别于ADC1的配置。
微信图片_20201207195522.png
# j! ~+ y" d3 K
9 I7 ^4 @  w, E) l1 w
2.3配置Timer1

9 Y) S* `: j1 x# b0 a0 q, n+ O
配置TIM1输出管脚
9 _$ p5 P5 s) }( M" u' `
这边只使用上桥的PWM输出,因此只配置上桥输出PWM波,其中CH4用于ADC触发,无外部PWM输出。

4 a" P" v: ~' B; ?* v
微信图片_20201207195525.png

1 F4 k4 n) ~) }
配置TIM1功能
2 X% \) p7 u# b2 `
这边有些宏定义,可以参考MC Workbench生成的工程,注意定义为相同名字。
微信图片_20201207195528.png

" c( V& G* _5 i

8 I) ?- M# a  r3 t: }5 G/ E
使能TIM1的中断
微信图片_20201207195531.png

0 E6 i- V9 o7 J* `; m

# u9 u  w( l! E' [: X" ]" f# j
2.4配置调试串口
3 c9 p8 d+ x# `, A
微信图片_20201207195534.png
9 f9 o( O! s1 ]4 Q
2.5使能STM32G4特有的Cordic外设

, J9 Q- g3 {* L/ d' T$ }0 v
微信图片_20201207195537.png
. b7 h& P* ]6 h8 W
2.6重新分配管脚
$ D+ V+ u$ a: Q+ c
将管脚定义为硬件控制的引脚,增加输入输出引脚。
0 `* y# V# ]$ s( y9 n1 b
微信图片_20201207195542.png

, Q9 G" D( v, P% T' j% G$ ~& Y4 f
2.7管脚名称重定义
9 w! i* v) P8 s) |9 R
重新定义管脚名称,符合MC Workbench生成的命名。
7 K- c' u2 w8 ]# \2 y' G5 K' d9 f
微信图片_20201207195545.png
: o  o3 v" w$ [% {
2.8规划NVIC的中断优先级
1 e6 B6 G% E4 G" V! |% ^
这边特别注意中断优先级别的设定,将影响到程序运行。

' R! c2 E! _, L" p- t: I
微信图片_20201207195548.png
& h% D) o+ N8 g
2.9不生成电机相关的中断程序

1 M, c3 q2 g' H" p5 B) m
因为电机相关的中断程序中电机库中已经有了,这边不使用STM32CubeMX生成中断代码。
* t9 o" b" f8 D, J* A7 J; h# V1 E. I
微信图片_20201207195551.png

' B, N" t0 Q: ^& P+ [9 P8 x4 Z% d" J2 f
2.10系统其他的配置

0 T: J* D% r% S/ Y
分别配置RCC为外部晶振,GPIO口的默认设置,Sys的调试部分。
微信图片_20201207195554.png
* |4 Y0 Q7 H% r& R* P% ~

) u( h( q' A5 a+ \, {' R3 a
2.11时钟配置
4 q" w! O. t9 b  g6 U+ d
这边我们外部晶振为24MHz,System时钟配置为170MHz。
微信图片_20201207195557.png
2 C  O/ c! O+ M$ M9 ~3 `/ D& k1 Y
6 i: Y+ D1 e3 n* d6 w
2.12生成工程
微信图片_20201207195600.png
1 D& l; h. K! ^' c5 ]8 E( s9 V

( ]5 t. x" `) r- q3 R* i
3
) _3 q) [% u* K- _3 U
对生成工程进行修改、添加

+ n+ ^" ?0 I) y3 f6 X# p( `
3.1拷贝文件

; O. z5 Y) [  e) l% d
将MC Workbench生成的文件夹下的MCSDK_v5.4.3拷贝到STM32CubeMX直接生成的G474_MC文件夹下,另外Inc与Src文件也同时拷贝进去,需要选择不覆盖同名文件。
( ?- N6 V8 F3 H9 D
微信图片_20201207195604.png

, K( t. g/ X5 C9 V0 L4 r
3.2添加电机FOC库
7 d& G3 B0 y9 ^% W; Q( M' |4 t
打开STM32CubeMX生成的工程,在工程中添加Group以及增加文件到工程中。
: m$ }7 @  ]# V! N% m7 ~8 S+ p
微信图片_20201207195607.png
微信图片_20201207195611.png
  X& s& {* t2 z) N+ U
3.3增加API以及控制文件到工程中
, K" w. `" T; S* ?, X  \9 E8 _
微信图片_20201207195614.png

8 y* U" W5 y6 R3 j) o
微信图片_20201207195618.png
3.4增加头文件包含目录

9 M: ~3 k! Q! G, o1 V
微信图片_20201207195620.png
2 J& y0 w( w) B4 M' p
微信图片_20201207195623.png

' X' F' M% ^( r  C
3.5修改Main.c文件
& I) l4 ?( N# I: Z7 ?
包含头文件以及增加电机控制初始化函数。
/ m& l+ B& z3 V& w& }" O2 o# N
微信图片_20201207195627.png
/ M2 e( W* n# P6 ]  K% `/ U
4& Y! y7 s& X6 B7 b$ a/ b
验证是否正常工作
5 P+ w8 p9 ]1 j1 \
编译下载后,使用Workbench控制电机转动。

0 `' D' j2 N4 D0 _+ j0 A
微信图片_20201207195629.png

# x+ a  l. M! L- x+ |% i
微信图片_20201207195632.png
! E& a9 n) z( C! Q
收藏 评论0 发布时间:2020-12-7 20:01

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版