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

SimpleFOC移植STM32(六)—— 双电机控制和力矩反馈

[复制链接]
攻城狮Melo 发布时间:2022-11-8 21:28
一、说明* N+ p9 F$ \7 y# }' B% Q
    双电机控制,主要是在上一章代码的基础上(SimpleFOC移植STM32(五)—— 电流采样及其变换),把一个电机的控制修改了对两个电机的控制。你的第一感觉会怎么做,把代码复制一遍,一个电机变两个电机,这样代码量就太大了。SimpleFOC的官方代码采用C++编写,定义了类,C语言中的结构体与类相似,通过结构体及其指针的应用,代码同样可以达到高效强悍的效果。( P0 E- q1 d+ Y4 t. k3 P% ~" C6 x
, e8 e' A& A2 A8 @; U$ b
  新建头文件 user.h ,定义电机的结构体,并声明M1,M2。下图" \5 A- a' R& j1 Q- H0 K
8f24c11602284ce2bf63b1af07d2637d.png " G5 M2 A# Z) O# C4 ?

* R, x& D' X: ?/ I# r  在 main.c 中调用头文件,下图# K/ X6 Y3 |6 p

. ]  N! F$ }" R. r* J 6e6d9cf2030145de8e715d6af2b87228.png
% A3 s8 S5 Q, L) l0 z, t3 @6 K
. n  u9 N9 R/ |/ u0 l5 Z. X& \  代码结构与单个电机控制没有变化,下图6 \$ T: O& ]' c

5 {5 r* [4 [9 B  i% {8 \ 9e60d1c212c848ffbbe5cade5062ffb8.png 4 `# E; e5 n2 c& J, R) [

1 \8 u% m) T0 S, w( Z 109e4127ad2740abb4b7c03f59f3d21d.png
7 T  Q2 o: P- ?5 S. d; T
9 q; E, g1 H, Z6 M# \  编译后的代码稍微比单个电机控制大一点,下图4 T# C" S0 }+ x, {8 g2 x

/ Y' q! p) E+ D/ `$ @ e6275aa43b44413abbdf98ae1781a8fe.png
- l! f5 O$ }* x5 |4 q. N" G$ P" z1 J( X# B, ^! a! ?$ P
  本章的工作,主要是从上到下从里到外,逐一修改函数,增加结构体指针,下图3 S. y/ g' s& `
4 W& G/ P6 k& d) h4 |1 X
5876dddf17d14d5da561cd998b1dbea8.png : B* n, v3 W' H- @1 d6 N3 [
, E' O% g7 _4 q
二、硬件介绍  V0 F$ O  d/ D! u2 y
2.1、原理图- N, Q& w- ?  b; z4 Y' ?+ u* l9 ~

; r# N4 t9 K# l0 @7 j, W& Y 1cbd826d3301474483af29d1463d7902.png
( Q( }: ~1 f% `5 v6 R2 c  t3 \1 i# ?! `5 F" J% b& l1 [
2.2、准备清单& q' [) d5 c! T
6 i. ^2 e; L' ~6 U. l/ Y
$K5_2LG}}5}`8OLITOLY.png
6 w$ c2 P# C6 k7 S5 A2 k2 S6 o
  D5 P/ I, x1 w当前代码支持AS5600、AS5047P、TLE5012B和MA730编码器。& U! i$ a. `3 D+ D9 _- s

. f+ B# Z! p: p5 e4 V6 N4 r
% \5 ]1 I! H0 v0 i+ |: t# L2.3、接线# v& G- X  e; V1 K/ U6 ^! ^

7 u& u: _- j* K0 c& D3 s3 ^7 I cca5eae870af413cb24e02fa5e17362c.png
, m3 W1 A2 F3 R$ a. E% C$ A
& z6 m* L3 h* t& o3 C
3 E- \8 Y4 G3 U! L0 M三、程序演示* M' ?/ L$ t3 W2 z
3.1、设置参数
, Q, G. [* q! z4 L# I. j7 i4 O9 D3 F1 [: |* E( {5 z
0cee56fb06ab48019242cde26418ec02.png . O" H& ]  R9 U+ k2 R* `3 S8 v$ k

) a& z" I0 I1 l3 ^3 y2 @1 J 5ec935dd34a940bcb302d52a5a978713.png
/ r" o1 \8 W7 N+ A0 f5 e* a, }2 y- i5 n( C6 e
部分PID参数设置放在了main函数中,设置其它PID参数请进入PID_init()函数。
6 c( Q3 R  V" _! \3 Y
' ?: r2 ?" {" p$ p  s$ Z( _# X& _, s% q  N" F9 T
3.2、编译下载9 h  g1 M  I' h
  可以串口下载或者SWDIO下载;
7 ^) T/ ~" W8 ?1 K/ @/ L0 S+ s  如果是串口下载,Boot加上跳线帽,下载完毕后拿掉跳线帽,按复位键重启或者断电重启。
6 ^+ N5 G, M! C, R$ b# u% V  注意:复位重启只能重启单片机,编码器没有重启,如果I2C接口编码器不能正确读出,请断电重启。SPI接口编码器不受此影响。
/ ~- T% l% l9 {4 ^, |: W
3 w/ W5 `. f4 a# W4 y- _% z* ]9 N2 m4 @: d5 n/ m, _# X
3.3、根据设置的控制模式操作
+ j9 d+ h) t( P% C  两个电机的参数和控制完全独立,可设置为不同的控制模式,具体操作请看之前的教程,此处不再赘述。
. p: i# B2 m; [; A4 ]
' |( y' W; m& Z- E* c. Y. g' w" V7 |" [9 W& E# A
四、双电机控制总结
7 ^$ \# w( V- B  双电机控制在操作和控制技术上与之前保持一致,主要是结构体及其指针的应用;0 z& v# A* ~0 O( d3 Z8 \. [; @2 U
  当前代码理论上很容易扩展为三个电机、四个电机或者更多电机的控制,只要单片机有足够资源;) }2 W& Q" q( r7 D/ j
  结构体(structure)再往前一步就是类(class),C和C++的区别主要是编程思维的区别,结构体已经是C语言在单片机编程中的极限了。
: f& N5 N0 U, H" I
7 J4 v- [' F/ Z( k9 D+ ^$ v
, F8 g& L1 [9 z& k' o五、力矩反馈
/ y  P% \. g/ @5.1、原理
, ]3 n0 {# t1 O4 D: X5 L  把两个电机的角度差做为力矩模式的目标值,使角度差趋向于0。当一个电机转动时,另一个电机因为角度差而产生力矩跟随转动;同样当一个电机堵转时,另一个电机也会因为角度差趋向于堵转电机的角度。- a+ ~: S! i5 ~' f1 b, Z7 M' E1 h
  代码是比较简单的,在双电机控制调试通过的情况下,只需要加入角度差计算就可以。
  s! O/ J0 o8 \
0 Q. b& k" k4 d 4dbf37e1026d445397febfd247a2b244.png
2 Z1 Z* L5 X0 T- G. `/ _+ K& i
+ |* ^6 Q! n- x5 W力矩反馈要实现以下目标:
$ s1 o- p  a5 m1 q  M8 }3 v1、两个电机一个转动,另一个跟随,停止转动,另一个也停止,能够自稳。
0 |4 h5 ~. u# ]) n  P2、拆掉一个电机,只接入任一个电机能够自稳。
+ L4 o! `8 u2 N8 ~% I) |! q
% {% R/ a' Y, K7 h6 n' x
/ Y$ K( f$ w1 p$ @: M5.2、硬件连接; X- g) p) r# R, G+ h1 d
  先以相同的两个电机为例
9 L& [$ T- ]! X+ b3 c/ }  P
; q) `+ K: c- i6 P8 M: @ 1f58332046364951833bad55ceeb5d08.png " z1 q% O/ G, [4 H* ]

6 n( B" }' B4 [* ~% c( c, J% }5.3、代码调试
( D  [+ N% L0 k0 b  代码简单,但是调试颇费功夫,让我想起了空调行业的一句谚语“三分设备,七分安装”,具体过程原因就不多说了,直接说结果。. ]& k4 P* |. u' |
  如上图相同的两个电机,首先三相线不能接的一样,要让一个电机为CW另一个CCW,然后根据检测到的方向,调整代码中减数和被减数的位置。
- e6 x' ?$ Q  H! J7 z) k+ ~8 A3 p7 h2 `- ]' d: U' D7 F* a
b314a531e73c4e9096d8af9a30df8626.png
# N1 t7 r* I0 Z8 p( V
0 P1 f8 m5 ?# d* C1 J% Y 043994cd406d4bf490fd55d3b340321d.png 9 S: Z3 a1 ~5 l: n6 H
$ A9 O* `* a* m! B4 I
  同样,不同型号的电机也可以按照上面的方法调试,' M8 V: d; q/ g) V" A: e

! g; F$ c( E5 e" Z- L0 I 4c472d804f144795bfad38ce8404ceea.png
) ^% B; W: ^. |# G4 U+ k' t( f/ u1 A6 b' V2 g3 V5 s+ Y
c20137a82805451f9d615b68d49f9b2d.png : C9 v' ^* ^* i2 f" I

9 N2 I. f, p# U6 Y' a调试的结果一定要符合以下两个目标:3 y: ~% ?2 V. N- z8 m0 u
1、两个电机一个转动,另一个跟随,停止转动,另一个也停止,能够自稳。
: X9 o' Y% w# ]- {/ a$ A3 V2、拆掉一个电机,只接入任一个电机能够自稳。  U/ ~  F( p# _( F: U

2 q7 \7 J6 c. M
' |4 @( x7 _4 M( C; \- R. L5.4、实战+ {( {  B- c" m6 x' n/ N$ h# j

* n  Q$ Y4 D' M4 H1 b( y 8ef1f6082844450ebe1f0730bb07b8e6.png
, ?3 C- C5 }" n) Q4 E) Q
' J8 H! O" Y, I# {+ ?2 \ 9e1298f41a4942099ef8511143f07aae.png
* O+ F. O: l5 R- d! S9 f/ o( w  J
0 p0 {: {, \  _3 W. K- ]% K7 x' ?
" b: F$ [) o- g1 ~————————————————1 I3 d8 F2 ?: _% u2 P. t. C1 ?
版权声明:loop222. B  e1 {! h( s( t: `

6 D8 N- I  K6 N# y& U' @& r8 Q2 I. A, A9 k0 Q; G( B1 ~
赞 收藏 评论0 发布时间:2022-11-8 21:28

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版