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

SimpleFOC移植STM32(四)—— 闭环控制

[复制链接]
攻城狮Melo 发布时间:2022-11-8 12:11
一、电机的三种控制模式# V3 Q6 e& g: z9 ~
(为保证本文可读性,把之前写过的搬运到此。)7 a' q4 M6 J4 p/ K
; n/ s; L# O% Y+ y
1.1、力矩控制模式& f  ?/ k7 z4 l) |5 G% @
  ◎电机在运行过程的电流,始终等于给定的值。6 p" H2 y2 z9 w8 u) \
  ◎比如使用电机来拉伸弹簧,设定电流值越大,弹簧被拉伸的长度越长。设定电流越小,弹簧被拉伸的长度越短。设定电流为零,弹簧不被拉伸。
4 U' \* g: t( y+ [" ?, k1 B8 b  ◎在SimpleFOC项目中,受限于Arduino UNO的运行速度,大部分例程没有使用电流采样,所以设定电压值代替设定电流值。
; V: a) |0 Y, T! P) J( g) S6 i1 J* y! E
1.2、速度控制模式
! W9 k# s! W1 A# t
  ◎让电机始终按照设定的速度运转,不因负载的变化而变化。
& m, X  T7 i  B% n  V  ◎速度控制一般会采用内环电流环,外环速度环的方式,所以可以限制转动过程中的电流不超过设定值。" U8 z$ L/ ^+ Q! f# E1 w
  ◎比如传送带传送物品,给定的速度不会因为传送带上是空载或者带载发生变化,但是当负载过大,电流超过设定值的时候会报警或自动停止。
; ?# M5 R) u! ^. U7 K7 Y- y3 {! t& U3 r; Q! h. q2 [
1.3、位置控制模式7 ~7 ]% U8 s0 m
  ◎精确控制电机转动到指定角度,% l# {4 p; g, f4 }+ G( k  y
  ◎位置控制一般会采用内环电流环,外环速度环,最外环位置环的方式,所以可以限制转动过程中的最大速度,和最大电流。
& I7 m# I0 t% U* A3 X  ◎比如机械臂从A点运动到B点,并限制挥舞过程中的最大速度和最大力矩。- s, s' C8 r! t/ o

! s2 L: _0 `4 K* H
1 }  @2 G6 _, v2 L3 L二、硬件介绍
! H1 o# Q7 A2 y: E  本节实验适合运行在SimpleMotor和STM32最小系统板上(Bluepill)。3 y6 j6 Y9 L1 r7 u! [

  S* S+ E0 H9 ]/ a, [2.1、原理图3 U/ Q$ F( C, _* j( \5 X

, q0 k& A9 N* J" R$ E0 u( A 3448411adf81412aabed4eecc3a4507b.png
( h( c! E: F6 R- L( O* H0 ]( V
9 I( p, [9 k2 v2.2、SimpleMotor方案
; o  j0 L2 s: }
2.2.1、准备清单
2 R. n$ t3 M1 ?* p# z) Z$ b ~(IC3XEHN[8TQ}AD[%I1_B1.png * C9 ]& S& W+ c4 G, r

- R7 S4 }( a# m6 l  _* g* x d5a47bc076ad442184f29941d6db93f3.png ' o! _6 G1 M5 I0 C. t! t, J) v; g
4 H0 I8 a) D" X5 L% @) h
带编码器云台电机可以是AS5600,也可以是TLE5012B。
. U" s! ?4 h! @' @7 }' ?8 {# t3 e, M
) q: X; R. ~/ W9 }3 g2 _$ M2 q: L2.2.2、接线
# g  ~( N. g" S9 D5 v# t5 Z! }8 h3 R/ A- m
f3206560b03b488f961bf7c8cde7d00c.png 3 g9 t1 }3 X$ M& m( v

5 K. K5 M' ^* x5 q3 g) b只展示M1的接线,M2的接线根据原理图自行连接。3 L( p" J, U) H# D! z( d% v
' V! j. V. P" o; G! |
2.3、STM32方案

- W) c0 q' X! b  x. i: p8 `' z2.3.1、准备清单
& F( n# u; J3 @0 u; E& P' V
) E# A  Z3 D# `! V* z0 g/ I+ A P`CJ835~}UQSJY0W@C~B{00.png
& `- Y' M5 [: s2 r2 L. i: n; G: d9 X( U* h3 ?! V8 P
0dad7682fadf419a9e5a53df3f648af3.png 0 ~7 S  L. ?$ q2 Q2 y

6 k* b$ n- a7 s/ i3 [/ f6 C带编码器云台电机可以是AS5600,也可以是TLE5012B。
$ Q% n3 T! z! c# s; e' n" |% Z, C& r
8 g+ O' s/ |' q4 F& s6 v, |2.3.2、接线3 E+ H1 x  w: F! V, e9 Y& p& y
2 s" W5 [/ L, O& Z. h
44a4b20f0f5a4de88ddda1b5c9969bde.png
3 J# ~" Q5 S( K( O9 L; ]5 W
0 h3 O# `  x2 s8 V对照 Shield V2.0.3 的原理图:% s) Q( [) r: I& h% X) B2 g

; a, s6 \/ |! y YW9LUA53XO(VRE`{W%2{CDG.png 4 J2 Y( X$ V0 y  G& i8 h# z8 M4 |* k
2_N~J`B]]L[X9M1T8V[905V.png 2 Y% t, S- d2 r2 p7 m! h9 q  b
* k) L& U7 ^0 Y" t! j! b# ?; _
41962b6a940a4df89f10d45df8df59aa.png
) s  x# p; a$ r- ?; z% `3 F
% i/ ]; o5 K1 F4 U只展示M1的接线,M2的接线根据原理图自行连接。& ?+ C6 ]! v0 u- {0 Q$ _

0 Z0 c/ B3 s* A' }: V9 M8 r" |+ b2 `2 i
三、控制原理
9 |* B& W$ p  T. ]1 H3 u3.1、闭环控制原理
: s6 K5 k; ]8 h' O1、力矩模式' W3 ?' [1 n- N, J, p7 R
) `9 f" J5 x& o7 ?% e3 ^
d76aac21357b40b6b4583cc11bf2923f.png : _; G* S* a, J7 n: U
" Y+ j! x* L& _: O
  ◎串口设定值为Uq,Ud固定为0;
! f6 \) P- D8 l" J$ Z: \- e$ `  ◎控制原理与开环控制很像,核心代码是SVPWM;/ d! P7 A- C7 l4 X8 r- h2 m0 j1 ?
  ◎开环的θ是人为设定的,而闭环的θ来自编码器。
/ N* j; q6 N' |8 m' g2 O/ O" F' Q: p6 A( a9 A
2、速度模式
) ]8 }1 ~5 q0 v5 p3 b& E
. o9 y6 K+ N) f! k4 u e93fbceacf204938af5fa5c5d2f97127.png 7 f9 y/ C/ Q/ k) O
3 d+ Q* P) u. r: V1 C- n9 m
  ◎力矩闭环外增加了速度环;
- J* T# h; `. r5 Z/ X9 B  ◎串口设定值为期望速度(Vd);8 j8 g6 `# X3 r# _" s
  ◎实际速度和期望速度的差作为PID输入,输出值为SVPWM的输入(Uq),Ud固定为0;, g/ @2 [3 J" O5 x, K3 X1 D8 m8 F
  ◎编码器读到的角度为机械角度,先转为电角度供SVPWM使用(θ);
( t' [' {2 H  L3 |) z+ _  ◎根据最近两次的角度差和时间差计算出当前速度(v),速度做滤波处理(Vf),因为速度要保持平滑不能突变;
& y% N; R" Y- |+ {
; K: v% G3 \! R" S! i4 T8 K3、位置模式
, U3 i5 [- j% j# J0 }) D8 o- H& t& q- h/ N8 E' h# [" D+ y$ H
f42d56b5da4446bcaeab6fd9ea42be26.png
: d, l2 q. c0 @" e# f6 ?) f; `% T$ J( R
  ◎与速度环相比多了一个位置环,相应的要调试位置环PID,创作者的代码中只使用了P参数,实际应用中一般会用PD参数。
8 p0 Y+ a( {5 ~
/ b! ^" _. N' C; u! H) w
  Y1 m2 @9 `% S! l8 B! t- w, `3.2、零点检测
3 Y/ s' R) h; B1 _  一般的无刷电机驱动器会有个学习模式,用拨码开关切换,第一次使用先拨到学习模式,检测电机参数后保存到内部flash。然后切换到工作模式,驱动器每次上电都会导入存储的参数,执行控制。' ?5 [5 [1 e* [" F; b& ^
  SimpleFOC上电后也会检测电机参数,但是没有保存的动作,所以每次上电都要检测,对于带磁编码器的电机,需要检测机械角度和电角度的偏差(zero_electric_angle),和电机极对数(pole_pairs)。
2 S# J; |, v" `' [  Q* H* a# Z. Z  机械角度零点和电角度的零点,在实际操作中基本是不可能对齐的,所以同学们不要有通过调整编码器角度,把零点对齐的这个想法。
+ E! N) D; ]* o3 R& q& N; J9 u7 O- P: h$ W) ^$ a3 c/ M
89447f2ab7524710acd5b9aee960d68d.png
+ o7 \3 c/ ~8 }, K
% e+ m* P/ a. Z5 [( E7 i1 i( _ 19a5b17d64b741b887481c57fcc026b2.png
0 |  C' y, e6 G8 J; _3 @5 a  C0 e# t: X: [6 V* O. A
代码位置在:BLDCMotor.c,- Y$ I# m* C2 \+ l  G8 m$ e& K

1 U1 C5 L3 N) F+ ]) o: t 6b615c62f39c40f992263242f866a33f.png
- J5 d; s& k7 K8 S. m" O+ M  U$ O. Y, W- U- i; Z6 L
bb494b47858c49a793a41e3fca465490.png
3 @* u0 |3 K+ q# V8 y- s
, M9 U7 ?3 k9 ]( I# R/ V( I3.3、零点检测代码简单说明
- t) z0 i% `% K9 i, P' D+ H* y) T4 E
关于代码中为什么要加 _3PI_2 的原因:
+ f9 k! @# X  D' z9 t# R7 q' ^& E; z, Y
9d303e8ce7734e509ef14a78f71ea478.png
: c1 u" c6 O0 U/ B( r
& h) H' `* B2 X/ ?4 S+ H磁场方向为d轴,垂直于转子磁场方向为q轴,d轴建立磁场,q轴做功,
6 X( m* }& J1 f3 u' b因为q轴是垂直磁场的,假如设置 θ=0°,电机最终停留在90°位置,所以要想让电机停留在0°,需设置 θ=270°。' T5 a$ r# h3 Z) l6 ]  H1 z8 ?
而d轴是磁场方向,设置θ=0°,电机就停留在0°。+ y2 R: h- ]4 n' ]
所以设置Uq=x,θ=270°,其效果等同于Ud=x,θ=0°。
+ \& q, H1 m1 J& b" ~% r1 b
2 S5 g. \% |, K 51255d415e644856b2d137faa6b75bc7.png
; N5 V" h2 n/ e$ f4 `" u2 ]% ?8 |& i% u3 W
以开环的方式实际测试,证明了确实是这样。# V7 b6 [5 t1 L' |! e

3 Z6 e1 Q$ c% o; r0 Z四、程序演示

# P, R2 }: e: u: R# B# I- G" O$ Q- }8 p" V: F9 E
7b8676d739734a96945fa96961550391.png
' P; B9 P* f8 p0 v5 `$ h1 L: L# L. E# x+ v
908a34b9ffee4180af72b49b9684a25f.png
2 x3 \( x% R8 x( C- t: [/ }
4 x9 \, Y5 i4 L& D 8d498285fbcc4bd2899e6540fc31c8f7.png 8 B: \0 e4 X% H: G5 t+ P

: K3 O) K  r& s! f$ b/ l+ p& C5 d注意:如果检测到的极对数与实际不符,停止继续操作,否则电机会堵转
, \2 H0 x" i' `2 v& B1 k) M/ {# O- B3 ]7 @) `" E

  z' n8 z/ V2 @: X" H, f1 P& H4.1、力矩模式, V0 Y  D1 G$ ]5 U) \9 _# i- S
1、选择力矩模式,其它参数根据实际情况设置$ ?( g& V, \0 x7 l) \, U2 F4 T

# p8 G5 o1 J% O8 [# Z! Q bee1ff2f76b94e95845a2e68ff200d80.png
8 ^' m8 L% l: r, z3 Q
5 W: ~7 ]1 R. ?1 o* Z1 d2、编译下载
# [8 ]$ w6 Z3 u  O3 T- t  可以串口下载或者SWDIO下载;
! q1 u( }6 f# \( I0 v! N4 |0 J  如果是串口下载,Boot加上跳线帽,下载完毕后拿掉跳线帽,按复位键重启或者断电重启。
7 z( u7 s4 H7 K8 r- K2 F$ u  注意:复位重启只能重启单片机,编码器没有重启,这可能会导致重启后的I2C接口编码器不能正确读出,SPI接口编码器不受影响。
4 P3 U  U  t& x* r3、等待初始化完成
. H; Q0 X7 X% R6 i3 p4、串口发送指令,此时发送的数据表示电压值Uq
/ Y: r' \" I; U  注意:设置的电压值不能超过voltage_power_supply/√3,比如电源电压12V,设置不能超过6.92V。- t# q" \8 O6 U- p  A) k3 B5 L

( o- b$ ]! c3 r) C. j$ \' C% L 58af0914159c483db785ddf037a84a90.png ( {3 L' v. H& ~) Q5 F; A- Z$ {, o5 m
" y* P6 }. B) X, N1 r# C
5、给电机施加阻力,感受不同电压对应不同的力矩1 S; P- A2 y& ?+ b" b% z3 f+ T6 N) c

* k( U; F. N) Z& h5 h2 Q" P! u注意:力矩模式不涉及PID,所以比较简单,大功率电机设置电压值不能太大。
! x: E7 n* Z# n+ V6 N
/ c, ?- j, b$ h% E& ?- k7 e5 \
9 e' M/ i: R% T* R4 K! }" E  Z4.2、速度模式/ ^  X; s. j8 H& O( v( I
1、选择速度模式4 b6 r+ ^, ]/ o, H, {1 l6 b. G+ J& A
# l- l6 Y* z$ ^- `  r
c1ee218c2ff846bfa49ca964cd1f7527.png
3 J3 w' N; g  }9 T
/ I0 u' B- @9 w注意:PID参数根据电机实际情况自行设置。
- |/ k: U9 x3 n/ l: g& a: ?# }- x7 h
2、编译下载! b4 j$ O6 c3 [* }+ j; [6 I
3、重新上电,等待电机初始化完成% `0 e) X1 ~6 J' i& ^
4、串口发送指令T6.28,观察电机是否以1圈/秒的速度转动。  s% s- p: s1 T* _" ?2 C
) L2 x# z$ C' y9 T0 P; d  V
c19ef1c8d1aa47dfa6061bc330ce43a2.png 3 E: l: ^" ~, h) L* D; Q

% p+ {2 B, ^- U  W* z3 b& h5、设置不同速度,观察电机转动变化。给电机施加阻力,观察电机转动
! p3 h0 Q3 q  G) F+ _- Z
/ Y" Z5 Y# C9 p- E  ]: c
" D/ v5 Q- y7 `8 T6 v% d: u4.3、位置模式
- S+ F- N/ Q& M( A: _1、选择位置模式
; D& g0 Z6 p2 S. ]+ j. i' K3 X. k* E9 D5 s4 q# W( Y4 L: b- d
1f8fc1d7463b42998f9b120e8d96e6c7.png ( @& M% J! m3 }( h( p( J- Y  T4 c

7 F# y4 ~, p# q; [( A) u注意:本例中,位置模式包含了位置PID和速度PID,根据电机实际情况自行设置,不了解PID的请百度。
! r! O: d/ j  e* b! E! Z9 ^3 @2、编译下载, s7 [4 K" r* D* s' f
3、重新上电,等待电机初始化完成5 P, c0 I7 B: F, Q/ K
4、串口发送指令T6.28,观察电机是否转动一圈
: x( u" y" H1 T, S+ Y  上电后为了保证电机为静止状态,设置初始化后的目标角度为当前角度,所以第一次设置角度6.28,电机不会转一圈。第一次可以设置目标角度为0。; Y5 ~5 U. D3 M, A" @

5 h+ \) O3 ~% }. e, d ad715685adef4cf2bc2b1a36bedb056b.png 4 L/ ~. N& ]( L9 l- O

4 G$ ], k$ r& G3 X* ?————————————————
( r+ J( m1 Q( B" B1 I& M3 l版权声明:loop222
1 D) V8 g; r0 h
! ?; J2 Y/ |) z) ^
$ @$ p2 K$ w2 g8 V) I; r5 W
赞 收藏 评论0 发布时间:2022-11-8 12:11

举报

0个回答

所属标签

相似技术帖

官网相关资源

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