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

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

[复制链接]
攻城狮Melo 发布时间:2022-11-8 21:28
一、说明
. M$ B" b# D" G2 q+ P    双电机控制,主要是在上一章代码的基础上(SimpleFOC移植STM32(五)—— 电流采样及其变换),把一个电机的控制修改了对两个电机的控制。你的第一感觉会怎么做,把代码复制一遍,一个电机变两个电机,这样代码量就太大了。SimpleFOC的官方代码采用C++编写,定义了类,C语言中的结构体与类相似,通过结构体及其指针的应用,代码同样可以达到高效强悍的效果。% a- O8 L8 L  J% O; p1 i
& K3 n% m2 \/ @' C& J
  新建头文件 user.h ,定义电机的结构体,并声明M1,M2。下图
  M. {# G) w6 i- f  s, Z+ W- s8 T( J0 D 8f24c11602284ce2bf63b1af07d2637d.png * ~5 y* T: @; L8 h* ?8 |1 B6 _/ F

4 ^' `3 X3 s$ }* ^- \3 [9 V  在 main.c 中调用头文件,下图& r9 U* l) Q5 T! `4 K

5 V9 R! ]8 x" p 6e6d9cf2030145de8e715d6af2b87228.png
0 O% y0 D/ A# X5 y" F9 D& Q+ i
0 W9 m5 f% v+ X* K2 f+ G* \) q" [. O  代码结构与单个电机控制没有变化,下图
! G% Z* ^4 L* s/ _" G5 A8 n7 _4 T7 k" s6 g' a5 Z; |
9e60d1c212c848ffbbe5cade5062ffb8.png
+ L0 b' l* p% \! Y7 }' {! |7 P& X. v5 C2 w3 p. m/ e" A2 y
109e4127ad2740abb4b7c03f59f3d21d.png * M  Q2 e9 k9 H+ q! a
9 @. E1 p) d' H9 w# U
  编译后的代码稍微比单个电机控制大一点,下图  Y- }) F3 d. D( O* h# ~- T
; h% L& M8 h" i" }
e6275aa43b44413abbdf98ae1781a8fe.png + D* m6 C) n* M$ @* X: v+ |
4 s; n) N  ?" a# R+ b/ s9 d4 u( E
  本章的工作,主要是从上到下从里到外,逐一修改函数,增加结构体指针,下图
/ u& m8 Q# `/ V1 b' \( a7 O0 s3 m$ |9 D. t
5876dddf17d14d5da561cd998b1dbea8.png
7 U6 X2 Y2 ?$ d& Y
$ ~( ?) D) ^3 j二、硬件介绍0 E# @( e; `- z9 X
2.1、原理图) Q$ L5 T( o/ F

: Z( F/ V' E& u& w, }0 N9 |+ E 1cbd826d3301474483af29d1463d7902.png
  {7 b$ r9 }" I* F) k& g& ~- ~8 e: T% ?2 P. {2 b
2.2、准备清单5 N/ d  q# I+ b* H5 H* l) y2 S( n1 @' n5 w
6 o6 b9 b, a8 Z& `: z
$K5_2LG}}5}`8OLITOLY.png * L$ _7 {) w* e2 o

) l6 x* W( U& N; E当前代码支持AS5600、AS5047P、TLE5012B和MA730编码器。& F, h8 ]$ k2 |- x
% q( b! z8 w  d( _9 w2 K5 p
, l9 c7 Z. Y$ `4 @9 ^7 M% M+ |
2.3、接线' u7 C7 A/ N! e& ]$ ]. A, P

5 ]( a1 A3 s4 _* F; w9 J2 | cca5eae870af413cb24e02fa5e17362c.png . N" M! y2 B1 u0 V

! l6 w+ O" g3 G$ y$ |) a: {8 u% U/ D
三、程序演示
. p+ Q" Y, c0 [' g  B3.1、设置参数6 ]7 K' r8 K/ S& P2 f2 y8 T

; G6 y. X* P( e: K 0cee56fb06ab48019242cde26418ec02.png
+ @4 O  ^6 V; R, g3 I7 H5 w3 n, E' {# n4 S
5ec935dd34a940bcb302d52a5a978713.png
6 O6 e! R! h/ o) ]* c( c! C" @6 B  c( h+ a7 N6 a
部分PID参数设置放在了main函数中,设置其它PID参数请进入PID_init()函数。( F& c# G$ X2 }, Y3 O8 n4 x. y; Q
" l9 v& i4 F/ C! ?
* z9 A/ q4 n. C
3.2、编译下载
7 d% K8 f4 |1 t- g- n( C  可以串口下载或者SWDIO下载;0 P( ]+ y+ R( t/ ]3 v/ ?
  如果是串口下载,Boot加上跳线帽,下载完毕后拿掉跳线帽,按复位键重启或者断电重启。% a. l" Y2 n0 C$ X' y. s% B# K5 N( U" @
  注意:复位重启只能重启单片机,编码器没有重启,如果I2C接口编码器不能正确读出,请断电重启。SPI接口编码器不受此影响。# c+ ?! ]) o, [& N" T- ?

1 {1 v  @, S8 {$ _
% w4 a  n% ?* [" h# q- o! _% A3.3、根据设置的控制模式操作
4 _% v. J2 S8 E2 v& k4 U9 [  两个电机的参数和控制完全独立,可设置为不同的控制模式,具体操作请看之前的教程,此处不再赘述。6 H4 h% \5 ~  x$ b" a" `
5 }9 N# F1 K; X* v8 M: t0 r

9 ]: ]* ~) K4 Y+ U四、双电机控制总结
8 \( U; m' E; S) J# l: C3 G, a  双电机控制在操作和控制技术上与之前保持一致,主要是结构体及其指针的应用;
4 u0 X* @+ Y5 e: i  当前代码理论上很容易扩展为三个电机、四个电机或者更多电机的控制,只要单片机有足够资源;/ l* l! {* F3 P$ j# B4 {$ S" {2 W
  结构体(structure)再往前一步就是类(class),C和C++的区别主要是编程思维的区别,结构体已经是C语言在单片机编程中的极限了。" K" u# J0 I: a1 f6 k" }" `
4 E- O* F6 O4 w/ u) `6 ~! |8 @+ l
7 @, [  K. D  @+ l
五、力矩反馈- \8 q! {1 ?1 N1 u, E
5.1、原理! F, a  F) r, Q4 P5 D4 _
  把两个电机的角度差做为力矩模式的目标值,使角度差趋向于0。当一个电机转动时,另一个电机因为角度差而产生力矩跟随转动;同样当一个电机堵转时,另一个电机也会因为角度差趋向于堵转电机的角度。, ^$ p) W0 m. W+ q; l$ i$ T' Y
  代码是比较简单的,在双电机控制调试通过的情况下,只需要加入角度差计算就可以。
: L- K( r% H3 [. }' \2 o) l' F* Z9 {( F
4dbf37e1026d445397febfd247a2b244.png
# g8 b: I' P' G& i0 ?
7 m( [% }* v# B) `力矩反馈要实现以下目标:2 O5 C" Z+ n! j& j! t
1、两个电机一个转动,另一个跟随,停止转动,另一个也停止,能够自稳。
0 o( e! N( J4 K$ P2、拆掉一个电机,只接入任一个电机能够自稳。( M$ K# o; c7 L/ {7 f# E' t) R

8 K& w, g; m$ w  Q$ B2 `; v: u( U0 B% ~0 ?! x' l! ]. v
5.2、硬件连接+ E, N7 E& s1 o
  先以相同的两个电机为例
0 x, X# _& U" d( h
. F* U: ~! H4 K* a7 k8 ^ 1f58332046364951833bad55ceeb5d08.png 5 @% |$ M; s; a
4 P6 M3 V# e1 X
5.3、代码调试; L* }4 M  S  Z8 C2 X
  代码简单,但是调试颇费功夫,让我想起了空调行业的一句谚语“三分设备,七分安装”,具体过程原因就不多说了,直接说结果。
6 M$ }( e1 c# P1 C2 |; J  如上图相同的两个电机,首先三相线不能接的一样,要让一个电机为CW另一个CCW,然后根据检测到的方向,调整代码中减数和被减数的位置。; n  c9 e0 ]2 N8 P$ y5 t

9 I. y. h7 w; a3 [) M) ` b314a531e73c4e9096d8af9a30df8626.png   K) O. r8 J9 {+ \8 v1 e8 k& `

  ]3 s5 m0 o4 ?8 m 043994cd406d4bf490fd55d3b340321d.png ; j  {$ {4 A* i) Y1 H# i

3 N: I% z# C% Z: d7 ?  同样,不同型号的电机也可以按照上面的方法调试,
% L' h* \: l; X2 i! }7 e( h& }6 U. b; i
4c472d804f144795bfad38ce8404ceea.png
7 C( I4 K; ]- _+ c, @7 _/ j" ?7 Y1 u$ E$ }% J% f
c20137a82805451f9d615b68d49f9b2d.png 4 Z% @4 E7 x+ U6 Q, B- \6 n
' Y$ C% ]- w5 D/ m8 b% g
调试的结果一定要符合以下两个目标:
2 V0 K% c" A9 E/ p# W( p+ N1、两个电机一个转动,另一个跟随,停止转动,另一个也停止,能够自稳。0 x$ t/ e% G% s! ?7 E. |5 q7 s
2、拆掉一个电机,只接入任一个电机能够自稳。
; l4 `( h# o8 g1 z* I4 h$ f1 v

* D# c( a  {# C6 T8 D$ z, Q' C1 z5.4、实战
4 r  w2 |; H0 r% F% {: q9 s' {6 F4 @) c' H
8ef1f6082844450ebe1f0730bb07b8e6.png
' l0 v7 ^" l; P, x7 V& G  f' b; q; \* N( U% z. B) H
9e1298f41a4942099ef8511143f07aae.png
% B! i& `1 d, i! P1 b
6 K& h1 H* J8 w" Z0 j# ^2 b! l' ], U' s+ o2 }5 W
————————————————8 F; D- @* i8 O& E: ?; o
版权声明:loop222
& x! w. X) Y1 _/ B1 }
5 b2 p: `7 g, K* w9 b7 n0 I
. g. `) u; _- H6 d
收藏 评论0 发布时间:2022-11-8 21:28

举报

0个回答

所属标签

相似分享

官网相关资源

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