|
注意事项 1、电机的三根线可以任意接在驱动器的ABC三相上,不用区分; 2、开环控制最好选择Ω级的电机,尽量不要用mΩ级的航模电机,容易烧MOS和电机。开环控制在实际中也就启动时用用,这不是电机控制的一个常态。% j+ S. d% G- Q, Y 3、电机控制要尽快操作,不要停留时间太久,时刻注意电机和驱动器的发热情况,一旦过热立即断电。' g" A7 v+ X) W9 t+ m 一、硬件介绍 本节实验适合运行在SimpleMotor和SimpleFOCShield V2.0.3上。 ) ]3 Q8 M8 O# ]) U3 B2 M 1.1、硬件准备 s- `; z- r- R/ C 1.1.1、SimpleMotor方案 . ]. X9 f4 c- F5 E( z2 N% `4 {. V; q
带编码器云台电机可以是AS5600,也可以是TLE5012B。# i3 t F3 q7 X: g, w 1.1.2、SimpleFOCShield V2.0.3方案
* X2 Z' Q6 o# p$ e% U6 [
带编码器云台电机可以是AS5600,也可以是TLE5012B。: P! @7 J7 e3 ~; q y9 }0 b3 J 1.2、硬件连接 1.2.1、原理图7 P& E4 z& J7 p: r
7 s4 @' m# {; z) C 1.2.2、SimpleMotor接线
, @$ ?. Q5 B$ d3 u 1.2.3、STM32接线 对于SimpleFOCShield V2.0.3,需要杜邦线连接主板和驱动板,记得共地。 0 w5 f! N3 G/ x$ I# A. W 对照 Shield V2.0.3 的原理图:
8 t) |" O n+ h$ z, A9 A5 {* I* i
注意事项: ①、无刷电机的三根相线不用区分顺序,任意接在端子上即可,调整其中任意两根电机反转。 ②、12V先不要上电,开环控制电机会发热,上电时间过久容易烧坏。最好等到程序编译上传后再上电,上电尽快操作。 ③、最好使用大电阻的云台电机(比如10Ω),如果使用mΩ级的航模电机,操作不当,容易烧毁驱动器MOS和电机。 二、控制原理 2.1、SVPWM 3 B8 H8 Q- X; i6 e
H4 L% n5 F( r4 y; f5 K Uq为交轴,Ud为直轴,角度angle_e1是电机的电角度。* E; q# E: W, V* @ 一般应用直接设置Ud=0,通过控制Uq来控制磁场大小,控制angle来控制磁场方向;# S( ?, `* K# i% { 开环控制中,直接设置Uq = voltage_limit,按照固定的速度递增angle就是速度模式;递增angle到设定值就是角度模式。: M& e' ` j: k 闭环控制中,angle来自编码器,根据编码器计算实际速度和位置,如果速度大于设定值,PID调小Uq降低速度,如果速度小于设定值,程序调大Uq增加速度。 2.2、极对数* w0 a$ T& R, S* m 无刷电机转子中磁铁的对数就是极对数。5 I- l) Z) c$ E K3 k F. j" S
电机转子转一圈,称为360°(或者叫2Pi)机械角度,转子转过一对磁极,称为360°电角度。 如上图的7对极,电机需要转7X360电角度 = 360机械角度。SVPWM控制的angle为电角度,而编码器读到的是机械角度,所以需要把机械角度转为SVPWM可用的电角度。; b8 w. |6 L" Y9 h- m S / J( c4 z( \6 W( Z+ k" Q 2.3、开环控制+ z6 [5 j( ]& N5 t, z- v3 z SVPWM+设定的角度angle = 开环控制,5 v( Y7 ?4 M( N; M- R
三、软件操作和程序下载 3.1、Keil编译生成hex文件 选择生成hex文件。如果用STlink下载可忽略此步。
3.2、FlyMcu下载; A# F7 P$ w9 Q 如果用STlink下载可忽略此步。 5 Z2 S) r1 L* q; X5 I* o3 J0 Y5 A
- h0 q1 ^* n( d2 u9 S: Q" I( I 3.3、SimpleMotor准备 : [3 O7 U+ Q: p) G9 ^1 b9 p
- 如果用STlink下载,SWCLK接驱动板的SDK、SWDIO接驱动板的SWD,GND接GND。 , v4 I$ e$ n+ h! _: T, f - 如果用串口下载: 1、USB转串口的TXD接驱动板的RX1,USB转串口的RXD接驱动板的TX1,GND接GND, 2、按住Boot键不松手,按下RST键松开,然后再松开Boot键,单片机进入Boot模式, (如果你手头的驱动板Boot键是跳线帽,短接跳线帽相当于按住Boot键)6 M( ?# C' [6 p- q+ l& S# O 3、点击FlyMcu的开始编程,等待下载完成。 ) C4 ?3 k; q# Y" b, _/ S: O 四、程序演示 开环控制尽快操作,注意电机发热情况,发热严重要立即断电 1、电机抖动转不起来把voltage_limit设置的大一点, H2 E X' K" u3 n/ a0 r3 s 2、电机发热严重的把voltage_limit设置的小一点, 3、电机能转就表示一切正常,可以学**一章了,开环不是电机控制的常态,不要纠结太久。20211224; H4 ~5 o2 t8 N" G5 a7 e: k 4.1、开环速度控制5 a7 D" R! F' M+ k 4.1.1、打开工程5 z: a, G+ ?- a# g2 ? ) Y7 B" H" \: S9 H- \
4.1.2、修改参数7 a! K* W s4 E" p" M; d; _5 f - 选择controller=Type_velocity_openloop; - 电源电压和极对数根据实际情况设置;电源电压增加voltage_limit也要相应的增大 - voltage_limit在不了解电机性能的情况下从小逐渐增加,每次修改后注意工作电流和电机发热; - 如果电机功率较小而voltage_limit偏小,电机会转不动; - 如果电机功率较大而voltage_limit偏大,电机会发热严重。 4.1.3、编译下载) F% C4 @% m0 L FlyMcu通过串口下载或者STlink通过SWD接口下载。+ a* ]: w7 b: D( x) i# Q5 Z 串口下载需先进入Boot模式,下载完以后按复位键运行。/ J& h) N# T& T( g" J 6 [& `2 B8 R8 G& e' S( p9 e
9 m% P l5 J/ l% w8 l/ h+ j4 R/ Q 4.1.4、串口发送指令 常用的串口调试软件,在发送区敲回车,对应的16进制数据为0D 0A,也就是回车换行;Arduino IDE自带的串口监视器,输入指令点发送,只有16进制的0A。所以不能用Arduino IDE的软件给当前代码发送指令。; y! E6 U$ o7 D t9 e6 z 发送指令,从低速开始逐渐增加,速度设置过快电机容易失步变成振动。速度单位为rad/s,6.28表示一圈每秒。
4.2、开环位置控制& F9 b; @3 |( y& I- j* J; C 4.2.1、打开工程 和开环速度为同一个工程, @5 r% g7 R/ S. p. r1 @) W. y! P
4.1.2、修改参数 选择controller=Type_angle_openloop;7 @- T& o F7 _! P" R O; ?: X, X 9 ]& w7 f( u+ B% |" N0 w& y 4.1.3、编译下载 4.1.4、串口发送指令. K1 [7 e( i: }. `1 t 设定目标值,单位为rad,一圈=6.28rad。 - p0 \: N) o# [
————————————————' L, w: o6 R( F" X1 { 版权声明:loop222 # e" V9 a8 } K" c3 T 9 S- U: n6 a8 w3 h8 |( E5 Z |
【STM32H735G-DK 测评】STM32H735G-DK External Loder 编译和测试
Keil-MDK 在线调试设置断点的高级用法
请教下STM32N6570 怎么把分辨率改成320x240并可以全屏显示
【福利三:逢7发帖赢大礼】想要充分利用STM32H743VI片内的RAM空间(但并不顺利)
基于stm32平台上的IC-MU磁绝对值编码器SPI通讯和码盘数据处理
使用STM32 MCU和MPU连接PDM数字麦克风
分享STM32资料-采用 STM32U031R8 MCU 的 STM32 Nucleo-64 开发板,官方资料,数据手册等资料
HRTIM 指南
使用 STM32 的 DWT 单元监控内存
DAC,COMP,HRTIM Fault 功能的使用
微信公众号
手机版