资讯专栏INFORMATION COLUMN

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

stefanieliang / 2338人阅读

摘要:力矩控制模式电机在运行过程的电流,始终等于给定的值。设定电流为零,弹簧不被拉伸。比如机械臂从点运动到点,并限制挥舞过程中的最大速度和最大力矩。


说明

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

一、电机的三种控制模式

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

1.1、力矩控制模式

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

1.2、速度控制模式

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

1.3、位置控制模式

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

二、硬件介绍

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

2.1、硬件准备

2.1.1、SimpleMotor方案

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


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

2.1.2、STM32方案

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


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

2.2、硬件连接

2.2.1、原理图

2.2.2、SimpleMotor接线

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

2.2.3、STM32接线


对照 Shield V2.0.3 的原理图:

STM32核心板V2.0.3
PA05
PA19
PA26
PB98
GNDGND

如果是AS5600编码器,如下

STM32核心板AS5600电机
PB6SCL
PB7SDA
3V3VCC
GNDGND

如果是TLE5012B编码器,如下

STM32核心板TLE5012电机
PB15MOSI
PB14MISO
PB13SCK
PB8CSQ
GNDGND
3V3VCC

三、控制原理

3.1、闭环控制原理

1、力矩模式

  ◎串口设定值为Uq,Ud固定为0;
  ◎控制原理与开环控制很像,核心代码是SVPWM;
  ◎开环的θ是人为设定的,而闭环的θ来自编码器。

2、速度模式

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

3、位置模式

  ◎与速度环相比多了一个位置环,相应的要调试位置环PID,创作者的代码中只使用了P参数,实际应用中一般会用PD参数。

3.2、零点检测

  一般的无刷电机驱动器会有个学习模式,用拨码开关切换,第一次使用先拨到学习模式,检测电机参数后保存到内部flash。然后切换到工作模式,驱动器每次上电都会导入存储的参数,执行控制。
  SimpleFOC上电后也会检测电机参数,但是没有保存的动作,所以每次上电都要检测,对于带磁编码器的电机,需要检测机械角度和电角度的偏差(zero_electric_angle),和电机极对数(pole_pairs)。
  机械角度零点和电角度的零点,在实际操作中基本是不可能对齐的,所以同学们不要有通过调整编码器角度,把零点对齐的这个想法。


代码位置在:BLDCMotor.c,


四、程序演示




注意:如果检测到的极对数与实际不符,停止继续操作,否则电机会堵转

4.1、力矩模式

1、选择力矩模式,其它参数根据实际情况设置

2、编译下载
  可以串口下载或者SWDIO下载;
  如果是串口下载,Boot加上跳线帽,下载完毕后拿掉跳线帽,按复位键重启或者断电重启。
  注意:复位重启只能重启单片机,编码器没有重启,这可能会导致重启后的I2C接口编码器不能正确读出,SPI接口编码器不受影响。
3、等待初始化完成
4、串口发送指令,此时发送的数据表示电压值Uq
  注意:设置的电压值不能超过voltage_power_supply/√3,比如电源电压12V,设置不能超过6.92V。

5、给电机施加阻力,感受不同电压对应不同的力矩

注意:力矩模式不涉及PID,所以比较简单,大功率电机设置电压值不能太大。

4.2、速度模式

1、选择速度模式

注意:PID参数根据电机实际情况自行设置,不了解PID设置的请百度。
2、编译下载
3、重新上电,等待电机初始化完成
4、串口发送指令T6.28,观察电机是否以1圈/秒的速度转动。

5、设置不同速度,观察电机转动变化。给电机施加阻力,观察电机转动

演示视频:
1、5010电机:https://www.bilibili.com/video/BV1cL4y1h7RL/
2、X4108S电机:https://www.bilibili.com/video/BV1Wq4y1o7q9/
3、2804电机:https://www.bilibili.com/video/BV1j64y187qp/

4.3、位置模式

1、选择位置模式

注意:本例中,位置模式包含了位置PID和速度PID,根据电机实际情况自行设置,不了解PID的请百度。
2、编译下载
3、重新上电,等待电机初始化完成
4、串口发送指令T6.28,观察电机是否转动一圈
  上电后为了保证电机为静止状态,设置初始化后的目标角度为当前角度,所以第一次设置角度6.28,电机不会转一圈。第一次可以设置目标角度为0。


(完)


本文只讲了M1电机的操作,源码中包含M1和M2两个工程,M2的操作可比照M1,不再赘述!

本节源码下载:
链接:https://pan.baidu.com/s/1HYhEYYBlKC9BJmZXo8Ngbg
提取码:ih65

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


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

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/121279.html

相关文章

  • STM32--CAN通讯实验

    摘要:而及是一对差分信号线,使用差分信号。帧结束表示数据帧结束的段。控制段控制段由个位构成,表示数据段的字节数。有效消息当消息依据协议正确接收并且成功通过标识符筛选后,该消息将视为有效。 目录 CAN协议介绍 物理层 闭环总线网络 开环总线网络  通讯节点 差分信号 协议层简介 CAN的波特率 位...

    myeveryheart 评论0 收藏0
  • 基于STM32Cube MX开发的TencentOS-Tiny软件包

    摘要:基于开发的软件包导师汪礼超学员崔林威摘要腾讯物联网操作系统是腾讯面向物联网领域开发的实时操作系统,具有低功耗,低资源占用,模块化,可裁剪等特性。图中断函数处理进行生成工程配置,按如下界面进行配置,最后点击,并点击。 ...

    shiyang6017 评论0 收藏0
  • STM32CubeMX学习教程之硬件I2C读取光照度

    摘要:使用库读写环境光照度传感器本文将教大家如何快速使用库读取光照度数据。五实验样机测试展示通过之前配置好的面板,通过涂鸦智能进行配网实时采集光照度传感器的数据。 使用STM32 HAL库读写环境光照度传感器(BH1750) 本文将教大家如何快速使用STM32HAL库读取光照度数据。 实现功能:通...

    tinylcy 评论0 收藏0
  • PS2手柄移植STM32上面的小笔记

    摘要:第二点与是同时完成的,说明这是全双工通信。上表中的表示数据线空闲,该数据线无数据传送。设置震动模式后用来控制右侧的小电机,表示关,其他值为开。单片机发送了给手柄,此时手柄会返回给单片机,意味着接收到了请求,即将返回数据。 ...

    Airy 评论0 收藏0
  • EC20模组使用MQTT库对接EMQX,基于STM32F407

    摘要:一说明本库基于编译,其他的内核也支持,采用串口和模组通信。使用时添加文件到工程中,头文件引用即可。此外,需要外部实现模组的复位操作,一般是对管脚拉高一段时间,复位函数需要指定函数为。四实例以下为使用的库,实现对接自建。 一、说明 本lib库基于STM32F407编译,其他的cortexM4内...

    whatsns 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<