|
一、电机的三种控制模式# 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) \ ◎比如使用电机来拉伸弹簧,设定电流值越大,弹簧被拉伸的长度越长。设定电流越小,弹簧被拉伸的长度越短。设定电流为零,弹簧不被拉伸。 ◎在SimpleFOC项目中,受限于Arduino UNO的运行速度,大部分例程没有使用电流采样,所以设定电压值代替设定电流值。 ) S6 i1 J* y! E 1.2、速度控制模式! W9 k# s! W1 A# t ◎让电机始终按照设定的速度运转,不因负载的变化而变化。 ◎速度控制一般会采用内环电流环,外环速度环的方式,所以可以限制转动过程中的电流不超过设定值。" U8 z$ L/ ^+ Q! f# E1 w ◎比如传送带传送物品,给定的速度不会因为传送带上是空载或者带载发生变化,但是当负载过大,电流超过设定值的时候会报警或自动停止。 3 {! t& U3 r; Q! h. q2 [ 1.3、位置控制模式7 ~7 ]% U8 s0 m ◎精确控制电机转动到指定角度,% l# {4 p; g, f4 }+ G( k y ◎位置控制一般会采用内环电流环,外环速度环,最外环位置环的方式,所以可以限制转动过程中的最大速度,和最大电流。 ◎比如机械臂从A点运动到B点,并限制挥舞过程中的最大速度和最大力矩。- s, s' C8 r! t/ o 二、硬件介绍 本节实验适合运行在SimpleMotor和STM32最小系统板上(Bluepill)。3 y6 j6 Y9 L1 r7 u! [ 2.1、原理图3 U/ Q$ F( C, _* j( \5 X
2.2、SimpleMotor方案; o j0 L2 s: } 2.2.1、准备清单
4 H0 I8 a) D" X5 L% @) h 带编码器云台电机可以是AS5600,也可以是TLE5012B。 2.2.2、接线 5 v# t5 Z! }8 h3 R/ A- m
只展示M1的接线,M2的接线根据原理图自行连接。3 L( p" J, U) H# D! z( d% v ' V! j. V. P" o; G! | 2.3、STM32方案 2.3.1、准备清单
: n; G: d9 X( U* h3 ?! V8 P
带编码器云台电机可以是AS5600,也可以是TLE5012B。 2.3.2、接线3 E+ H1 x w: F! V, e9 Y& p& y 2 s" W5 [/ L, O& Z. h
对照 Shield V2.0.3 的原理图:% s) Q( [) r: I& h% X) B2 g
* k) L& U7 ^0 Y" t! j! b# ?; _
只展示M1的接线,M2的接线根据原理图自行连接。& ?+ C6 ]! v0 u- {0 Q$ _ 9 M8 r" |+ b2 `2 i 三、控制原理 3.1、闭环控制原理 1、力矩模式' W3 ?' [1 n- N, J, p7 R ) `9 f" J5 x& o7 ?% e3 ^
" Y+ j! x* L& _: O ◎串口设定值为Uq,Ud固定为0; ◎控制原理与开环控制很像,核心代码是SVPWM;/ d! P7 A- C7 l4 X8 r- h2 m0 j1 ? ◎开环的θ是人为设定的,而闭环的θ来自编码器。 ' g2 O/ O" F' Q: p6 A( a9 A 2、速度模式
3 d+ Q* P) u. r: V1 C- n9 m ◎力矩闭环外增加了速度环; ◎串口设定值为期望速度(Vd);8 j8 g6 `# X3 r# _" s ◎实际速度和期望速度的差作为PID输入,输出值为SVPWM的输入(Uq),Ud固定为0;, g/ @2 [3 J" O5 x, K3 X1 D8 m8 F ◎编码器读到的角度为机械角度,先转为电角度供SVPWM使用(θ); ◎根据最近两次的角度差和时间差计算出当前速度(v),速度做滤波处理(Vf),因为速度要保持平滑不能突变; 3、位置模式 - H& t& q- h/ N8 E' h# [" D+ y$ H
6 ?) f; `% T$ J( R ◎与速度环相比多了一个位置环,相应的要调试位置环PID,创作者的代码中只使用了P参数,实际应用中一般会用PD参数。 3.2、零点检测 一般的无刷电机驱动器会有个学习模式,用拨码开关切换,第一次使用先拨到学习模式,检测电机参数后保存到内部flash。然后切换到工作模式,驱动器每次上电都会导入存储的参数,执行控制。' ?5 [5 [1 e* [" F; b& ^ SimpleFOC上电后也会检测电机参数,但是没有保存的动作,所以每次上电都要检测,对于带磁编码器的电机,需要检测机械角度和电角度的偏差(zero_electric_angle),和电机极对数(pole_pairs)。 机械角度零点和电角度的零点,在实际操作中基本是不可能对齐的,所以同学们不要有通过调整编码器角度,把零点对齐的这个想法。 ; J9 u7 O- P: h$ W) ^$ a3 c/ M
8 J; _3 @5 a C0 e# t: X: [6 V* O. A 代码位置在:BLDCMotor.c,- Y$ I# m* C2 \+ l G8 m$ e& K
" O+ M U$ O. Y, W- U- i; Z6 L
3.3、零点检测代码简单说明 , P' D+ H* y) T4 E 关于代码中为什么要加 _3PI_2 的原因: # R7 q' ^& E; z, Y
磁场方向为d轴,垂直于转子磁场方向为q轴,d轴建立磁场,q轴做功, 因为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°。
" u2 ]% ?8 |& i% u3 W 以开环的方式实际测试,证明了确实是这样。# V7 b6 [5 t1 L' |! e 四、程序演示 - G" O$ Q- }8 p" V: F9 E
0 v5 `$ h1 L: L# L. E# x+ v
注意:如果检测到的极对数与实际不符,停止继续操作,否则电机会堵转 ) M/ {# O- B3 ]7 @) `" E 4.1、力矩模式, V0 Y D1 G$ ]5 U) \9 _# i- S 1、选择力矩模式,其它参数根据实际情况设置$ ?( g& V, \0 x7 l) \, U2 F4 T
2、编译下载 可以串口下载或者SWDIO下载; 如果是串口下载,Boot加上跳线帽,下载完毕后拿掉跳线帽,按复位键重启或者断电重启。 注意:复位重启只能重启单片机,编码器没有重启,这可能会导致重启后的I2C接口编码器不能正确读出,SPI接口编码器不受影响。 3、等待初始化完成 4、串口发送指令,此时发送的数据表示电压值Uq 注意:设置的电压值不能超过voltage_power_supply/√3,比如电源电压12V,设置不能超过6.92V。- t# q" \8 O6 U- p A) k3 B5 L
" y* P6 }. B) X, N1 r# C 5、给电机施加阻力,感受不同电压对应不同的力矩1 S; P- A2 y& ?+ b" b% z3 f+ T6 N) c 注意:力矩模式不涉及PID,所以比较简单,大功率电机设置电压值不能太大。 4.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
注意:PID参数根据电机实际情况自行设置。 / 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
5、设置不同速度,观察电机转动变化。给电机施加阻力,观察电机转动 4.3、位置模式 1、选择位置模式 3 X. k* E9 D5 s4 q# W( Y4 L: b- d
注意:本例中,位置模式包含了位置PID和速度PID,根据电机实际情况自行设置,不了解PID的请百度。 2、编译下载, s7 [4 K" r* D* s' f 3、重新上电,等待电机初始化完成5 P, c0 I7 B: F, Q/ K 4、串口发送指令T6.28,观察电机是否转动一圈 上电后为了保证电机为静止状态,设置初始化后的目标角度为当前角度,所以第一次设置角度6.28,电机不会转一圈。第一次可以设置目标角度为0。; Y5 ~5 U. D3 M, A" @
———————————————— 版权声明:loop222 |
【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 功能的使用
微信公众号
手机版