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

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

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

( Q( o8 l9 o7 N& M# w
  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(电机)。

, S$ }1 m" L1 k, `* a' y
1
1 h# J+ K& C3 G, c
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。

4 G' }. l# G: l' u- R) s
微信图片_20201207195438.png
" [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
微信图片_20201207195443.png

! s8 k4 u7 I) ]" q7 {; g/ r* J
1.3芯片选择与配置
" s  ^$ [' C( |% A8 y: {7 m
首先我们看到在MC workbench中并没有STM32G474RET6这个芯片型号,因此我们需要选择与之相近的单片机。原则是Flash大小相同优先选择,型号相似次之,同一系列最后。这边我们可以选择STM32G474QE作为参考型号。

5 n4 E+ p# ~7 G' a& C" Z0 D
微信图片_20201207195447.png
$ |) U5 h( s! B% c1 o# Q; T' z
1.4数字端口配置

( N& ?7 D  ^1 D9 W. D5 ], R9 W
这边我们使用的功率器件为单一PWM与控制使能方式,结合硬件连接为如下配置。
9 D9 P0 E9 M2 c3 c7 a
如果PWM互补的方式则还需要配置下桥控制引脚。

: M* _$ M0 Y; r- [7 \- O3 Q
微信图片_20201207195450.png

# k- l! v6 p! x  C
1.5模拟端口配置

2 `7 D1 M7 D) O% i! y' v% m( c
同样的配置与硬件采样相关的模拟端口。
微信图片_20201207195453.png

) [5 K+ J# A3 }8 Z  }
1.6生成代码
6 y8 y7 D$ i2 L2 w
生成STM32G474QE的电机控制代码,用于参考配置STM32G474RET6的CubeMx配置。
微信图片_20201207195458.png
$ O# o+ ~9 H. M, U" ?: u* ]$ z
2
  [1 [3 l' U6 w) n0 W. q
基于STM32CubeMX生成电机控制外设的初始化代码
: M; J* ^3 h+ m! ^
2.1新建STM32CubeMX工程
5 F  ]: c: a- u
新建STM32G474RET6的工程
微信图片_20201207195502.png
" o3 g$ K! v* J7 R& a; Z+ n2 d
: K6 v5 e9 c+ V/ `& l+ D
2.2配置ADC

4 z1 r7 X7 [! P6 g# U
配置ADC1配置引脚

) \. m; m( ~6 t
可以直接打开MC Workbench生成的STM32G474QE的*.ioc文件做为参考。

! n, q0 D% T- C3 }2 T5 X( y
微信图片_20201207195506.png

. w; X) c0 |5 L
配置ADC1功能
4 S6 O1 E6 c# ^5 N5 a, S
这边注意ADC1左对齐,触发信号为Tim1 Trigger Out Event,只有Inject模式没有Regular模式。
微信图片_20201207195512.png
8 d9 }8 ^8 d- Q- k) E2 D
使能ADC1/2中断
微信图片_20201207195516.png
# k5 K/ l% d) L# Z* E

7 U" w. I/ o# ~3 x' [; O$ ^: P
配置ADC2引脚与功能

9 r, V7 ]+ W3 e  y  Z: a
这边ADC2_IN14是复用在ADC1_IN14的引脚上。
微信图片_20201207195519.png
# ?9 U* N2 i4 R! P

2 c, e  J2 J$ {. p! O
配置ADC2功能

$ P2 U3 N6 U* K3 f5 n; Y5 E
ADC2有两个通道用于电压与温度传感采样,使用Regular模式。用于电流采样的使用Inject模式,这点区别于ADC1的配置。
微信图片_20201207195522.png
) v' E* v7 U& L. J/ |' k8 M9 V

7 V/ c, b5 b) f+ t1 `7 b
2.3配置Timer1

0 c) w7 w+ B8 g) }) _
配置TIM1输出管脚

9 Y! H% U& D2 _- O5 z
这边只使用上桥的PWM输出,因此只配置上桥输出PWM波,其中CH4用于ADC触发,无外部PWM输出。
( o4 g; w: M6 Q& f2 Y
微信图片_20201207195525.png

' u+ [6 g7 E8 D8 t8 S6 Y2 W
配置TIM1功能
/ E  B# q- Z. O- ?
这边有些宏定义,可以参考MC Workbench生成的工程,注意定义为相同名字。
微信图片_20201207195528.png

, T6 V4 i1 @1 Z% p5 h

: i& M9 q& }  B2 g& Z. b/ X# Q  c- l
使能TIM1的中断
微信图片_20201207195531.png
2 n' [( g- p% R8 ~# N. S4 {

4 A4 H4 i7 ?* |% A1 [* j
2.4配置调试串口

# v, b9 R0 U$ k7 q7 B3 a
微信图片_20201207195534.png

# g2 R' }6 J3 ~$ t; M
2.5使能STM32G4特有的Cordic外设
  Y) x0 e3 f* Z
微信图片_20201207195537.png
9 a7 @6 |3 ~. _' k( a
2.6重新分配管脚

/ k3 T) P- [, y& Z7 S) ~1 i4 C
将管脚定义为硬件控制的引脚,增加输入输出引脚。

5 s7 Z. E& [8 @3 R
微信图片_20201207195542.png
* G- R( S( d& j2 [/ \
2.7管脚名称重定义
* b# e5 z8 i  F5 A( ^8 E
重新定义管脚名称,符合MC Workbench生成的命名。

( h, Z2 f  y% A
微信图片_20201207195545.png

  [% E" Y2 S6 A; w2 f
2.8规划NVIC的中断优先级
, q. y/ z/ W/ ^! |+ }
这边特别注意中断优先级别的设定,将影响到程序运行。
: w  F1 K% l: p, T8 ?
微信图片_20201207195548.png

8 Z; }! J! b1 O
2.9不生成电机相关的中断程序
$ B& U9 a- }; I
因为电机相关的中断程序中电机库中已经有了,这边不使用STM32CubeMX生成中断代码。
( C8 s; k3 m; }6 P, o: \
微信图片_20201207195551.png
) R# P. P  G1 Q% o
2.10系统其他的配置
3 \- K4 H7 \( F+ m3 T% [2 @
分别配置RCC为外部晶振,GPIO口的默认设置,Sys的调试部分。
微信图片_20201207195554.png

% u' T8 r$ j8 K5 d0 l# z

- W1 e3 M2 a: r
2.11时钟配置

% G+ |: `5 q) T4 f$ {
这边我们外部晶振为24MHz,System时钟配置为170MHz。
微信图片_20201207195557.png
. V# ]6 s  S1 |. a
, w; P8 T4 p4 D  C5 f( S, O1 @  p. [+ m  y
2.12生成工程
微信图片_20201207195600.png
% @$ Y2 X  s# M+ ?1 ^
$ D; G4 M" {3 u  E% y+ \% U
36 ?3 G/ F$ x6 ~$ ~2 b1 t
对生成工程进行修改、添加

$ B+ K( H$ c8 L; N3 D
3.1拷贝文件

( Y6 H6 `7 @" |2 y$ B* }: \
将MC Workbench生成的文件夹下的MCSDK_v5.4.3拷贝到STM32CubeMX直接生成的G474_MC文件夹下,另外Inc与Src文件也同时拷贝进去,需要选择不覆盖同名文件。
8 j* R( y# Q, O0 p8 f$ d
微信图片_20201207195604.png
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
微信图片_20201207195607.png
微信图片_20201207195611.png
0 E/ z  B8 _0 V# @& f4 X2 S" o
3.3增加API以及控制文件到工程中

4 f* u1 O% j. H! z+ \
微信图片_20201207195614.png

: D, m1 k4 ]( Z' m& ?2 u
微信图片_20201207195618.png
3.4增加头文件包含目录

( i) ]% B8 v4 o
微信图片_20201207195620.png

7 n) l; @, a2 E, u) p3 a, s0 U
微信图片_20201207195623.png
$ j+ t+ T* L" m4 ?
3.5修改Main.c文件
$ l6 P5 _  j, N6 Y
包含头文件以及增加电机控制初始化函数。

8 V5 t: d8 f8 ]3 ]
微信图片_20201207195627.png
+ @1 }9 M  E2 h8 z4 X8 g
43 f& |; q8 s6 |$ r* @6 f$ Z2 c
验证是否正常工作

$ M% J, N: C1 z2 s  V  [
编译下载后,使用Workbench控制电机转动。
1 i5 r7 b6 @" {* i
微信图片_20201207195629.png
: K$ }( z5 g+ Y7 y
微信图片_20201207195632.png

+ I5 V8 ?( p2 v
收藏 评论0 发布时间:2020-12-7 20:01

举报

0个回答

所属标签

相似分享

官网相关资源

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