SimpleFOC STM32教程10|基于STM32F103+HAL库,速度闭环控制(有电流环)

导言


SimpleFOC STM32教程09|基于STM32F103+CubeMX,ADC采样相电流
在这里插入图片描述
如上图所示, 增加了电流环.至此, SimpleFOC整个框架都移植完成, 后续只需要根据自己项目的硬件改变驱动代码即可.
效果如下:

20250123-200906

RTT
在这里插入图片描述
如上图所示,三相占空比依然是马鞍波。当我用手去给电机施加阻力时,PID要维持目标转速,将马鞍波变大,提高扭矩抵抗阻力。

github:
项目源码:https://github.com/q164129345/MCU_Develop/tree/main/simplefoc10_stm32f103_vel_close_with_current
gitee(国内):
项目源码:https://gitee.com/wallace89/MCU_Develop/tree/main/simplefoc10_stm32f103_vel_close_with_current

一、代码


1.1、user_main.cpp

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

二、细节补充


2.1、电流环的两种控制模式dc_current与foc_current

在这里插入图片描述

  • dc_current模式只闭环扭矩分量Iq, Id默认为0(如果设置了相电感, Id也会有相应的值, 但不需要加入PID控制).
  • foc_current模式同时闭环扭矩分量Iq与励磁分量Id.

为什么分两种模式?基于现在我对FOC的认知水平.了解到:

  1. 当控制的无刷电机不会超过额定转速时, 用dc_current模式更合适. 此时, 只需要控制好扭矩分量Iq即可.
  2. 当控制的无刷电机需要超过额定转速时, 需要用foc_current. 此时, 需要励磁分量Id参与控制才能实现稳定的控制.
    在这里插入图片描述
    如上所示, 在BLDCMotor.cpp的函数void BLDCMotor::loopFOC()看到, 分别对dc_current模式与foc_current模式的算法区分开.

2.2、STM32F103完成一次FOC速度闭环控制一共需要多长时间?

STM32F103完成一次FOC速度闭环控制需要约431us. 运行一次loopFOC()方法与move()方法. STM32F103属于Cortex-M3架构, 没有硬件浮点运算器, 所以执行浮点运算的效率很差. 相比之下, STM32F407之类的Cortex-M4架构的MCU, 有硬件浮点运算器, 执行浮点运算的效率就比较高. 后续, 会更新STM32F407的SimpleFOC的实验.
在这里插入图片描述
在这里插入图片描述
如上所示, 通过示波器测量出来, 一次FOC速度闭环控制约431us.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wallace Zhang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值