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

目录

  • 说明
  • 一、电机的三种控制模式
    • 1.1、力矩控制模式
    • 1.2、速度控制模式
    • 1.3、位置控制模式
  • 二、硬件介绍
    • 2.1、硬件准备
      • 2.1.1、SimpleMotor方案
      • 2.1.2、STM32方案
    • 2.2、硬件连接
      • 2.2.1、原理图
      • 2.2.2、SimpleMotor接线
      • 2.2.3、STM32接线
  • 三、控制原理
    • 3.1、闭环控制原理
    • 3.2、零点检测
  • 四、程序演示
      • 4.1、力矩模式
      • 4.2、速度模式
      • 4.3、位置模式

说明

  阅读此文,可对照之前这篇文章:SimpleFOC(四)—— 闭环控制

一、电机的三种控制模式

(为保证本文可读性,把之前写过的搬运到此。)

1.1、力矩控制模式

  ◎电机在运行过程的电流,始终等于给定的值。
  ◎比如使用电机来拉伸弹簧,设定电流值越大,弹簧被拉伸的长度越长。设定电流越小,弹簧被拉伸的长度越短。设定电流为零,弹簧不被拉伸。
  ◎在SimpleFOC项目中,受限于Arduino UNO的运行速度,大部分例程没有使用电流采样,所以设定电压值代替设定电流值。

1.2、速度控制模式

  ◎让电机始终按照设定的速度运转,不因负载的变化而变化。
  ◎速度控制一般会采用内环电流环,外环速度环的方式,所以可以限制转动过程中的电流不超过设定值。
  ◎比如传送带传送物品,给定的速度不会因为传送带上是空载或者带载发生变化,但是当负载过大,电流超过设定值的时候会报警或自动停止。

1.3、位置控制模式

  ◎精确控制电机转动到指定角度,
  ◎位置控制一般会采用内环电流环,外环速度环,最外环位置环的方式,所以可以限制转动过程中的最大速度,和最大电流。
  ◎比如机械臂从A点运动到B点,并限制挥舞过程中的最大速度和最大力矩。

二、硬件介绍

  本节实验适合运行在SimpleMotor和STM32最小系统板上(Bluepill)。

2.1、硬件准备

2.1.1、SimpleMotor方案

序号 名称 数量
1 SimpleMotor 1
2 带编码器云台电机 1
3 USB转串口 1
4 12V电源 1


带编码器云台电机可以是AS5600,也可以是TLE5012B。
AS5600电机 购买链接:某宝购买
TLE5012B电机 购买链接:某宝购买
SimpleMotor 购买链接:某宝购买

2.1.2、STM32方案

序号 名称 数量
1 STM32核心板 1
2 SimpleFOCShield V2.0.3 1
3 带磁编码器的云台电机 1
4 USB转串口 1
5 5V电源 1
6 12V电源 1
7 杜邦线 若干


带编码器云台电机可以是AS5600,也可以是TLE5012B。
AS5600电机 购买链接:某宝购买
TLE5012B电机 购买链接:某宝购买
simpleFOCShield V2.0.3购买链接:某宝购买

2.2、硬件连接

2.2.1、原理图

SimpleFOC移植STM32(四)—— 闭环控制_第1张图片

2.2.2、SimpleMotor接线

只拍照演示M1的接线,M2的接线根据原理图自行连接。

2.2.3、STM32接线

SimpleFOC移植STM32(四)—— 闭环控制_第2张图片
对照 Shield V2.0.3 的原理图:

STM32核心板 V2.0.3
PA0 5
PA1 9
PA2 6
PB9 8
GND GND

如果是AS5600编码器,如下

STM32核心板 AS5600电机
PB6 SCL
PB7 SDA
3V3 VCC
GND GND

如果是TLE5012B编码器,如下

STM32核心板 TLE5012电机
PB15 MOSI
PB14 MISO
PB13 SCK
PB8 CSQ
GND GND
3V3 VCC

三、控制原理

3.1、闭环控制原理

1、力矩模式
SimpleFOC移植STM32(四)—— 闭环控制_第3张图片
  ◎串口设定值为Uq,Ud固定为0;
  ◎控制原理与开环控制很像,核心代码是SVPWM;
  ◎开环的θ是人为设定的,而闭环的θ来自编码器。

2、速度模式
SimpleFOC移植STM32(四)—— 闭环控制_第4张图片
  ◎力矩闭环外增加了速度环;
  ◎串口设定值为期望速度(Vd);
  ◎实际速度和期望速度的差作为PID输入,输出值为SVPWM的输入(Uq),Ud固定为0;
  ◎编码器读到的角度为机械角度,先转为电角度供SVPWM使用(θ);
  ◎根据最近两次的角度差和时间差计算出当前速度(v),速度做滤波处理(Vf),因为速度要保持平滑不能突变;

3、位置模式
SimpleFOC移植STM32(四)—— 闭环控制_第5张图片
  ◎与速度环相比多了一个位置环,相应的要调试位置环PID,创作者的代码中只使用了P参数,实际应用中一般会用PD参数。

3.2、零点检测

  一般的无刷电机驱动器会有个学习模式,用拨码开关切换,第一次使用先拨到学习模式,检测电机参数后保存到内部flash。然后切换到工作模式,驱动器每次上电都会导入存储的参数,执行控制。
  SimpleFOC上电后也会检测电机参数,但是没有保存的动作,所以每次上电都要检测,对于带磁编码器的电机,需要检测机械角度和电角度的偏差(zero_electric_angle),和电机极对数(pole_pairs)。
  机械角度零点和电角度的零点,在实际操作中基本是不可能对齐的,所以同学们不要有通过调整编码器角度,把零点对齐的这个想法。
SimpleFOC移植STM32(四)—— 闭环控制_第6张图片
SimpleFOC移植STM32(四)—— 闭环控制_第7张图片
代码位置在:BLDCMotor.c——>int alignSensor(void),
SimpleFOC移植STM32(四)—— 闭环控制_第8张图片
SimpleFOC移植STM32(四)—— 闭环控制_第9张图片

四、程序演示

SimpleFOC移植STM32(四)—— 闭环控制_第10张图片
SimpleFOC移植STM32(四)—— 闭环控制_第11张图片
SimpleFOC移植STM32(四)—— 闭环控制_第12张图片

4.1、力矩模式

1、选择力矩模式,其它参数根据实际情况设置
SimpleFOC移植STM32(四)—— 闭环控制_第13张图片
2、编译下载
  可以串口下载或者SWDIO下载;
  如果是串口下载,Boot加上跳线帽,下载完毕后拿掉跳线帽,按复位键重启或者断电重启。
  注意:复位重启只能重启单片机,编码器没有重启,这可能会导致重启的编码器不能正确读出。
3、等待初始化完成
4、串口发送指令,此时发送的数据表示电压值Uq
  注意:设置的电压值不能超过voltage_power_supply/√3。
SimpleFOC移植STM32(四)—— 闭环控制_第14张图片
5、给电机施加阻力,感受不同电压对应不同的力矩

4.2、速度模式

1、选择速度模式
SimpleFOC移植STM32(四)—— 闭环控制_第15张图片
2、编译下载
3、重新上电,等待电机初始化完成
4、串口发送指令T6.28,观察电机是否以1圈/秒的速度转动。
SimpleFOC移植STM32(四)—— 闭环控制_第16张图片
5、设置不同速度,观察电机转动变化。给电机施加阻力,观察电机转动

4.3、位置模式

1、选择位置模式
SimpleFOC移植STM32(四)—— 闭环控制_第17张图片

2、编译下载
3、重新上电,等待电机初始化完成
4、串口发送指令T6.28,观察电机是否转动一圈
  上电后为了保证电机为静止状态,设置初始化后的目标角度为当前角度,所以第一次设置角度6.28,电机不会转一圈。第一次可以设置目标角度为0。
SimpleFOC移植STM32(四)—— 闭环控制_第18张图片

(完)


本节源码下载:
链接:https://pan.baidu.com/****
提取码:****

欢迎加入simpleFOC技术交流群:923734429 (入群申请写:CSDN)


请继续阅读相关文章:
SimpleFOC移植STM32(一)—— 简介
SimpleFOC移植STM32(二)—— 开环控制
SimpleFOC移植STM32(三)—— 角度读取

你可能感兴趣的:(simpleFOC,stm32,电机驱动)