使用IFX007T和磁角传感器TLE5012B如何实现平稳运行与精确的速度和位置控制
扫描二维码
随时随地手机看文章
SimpleFOC(场定向控制)库实现了一种先进的算法,可确保平稳运行和高度的扭矩,速度和位置控制。无论您是刚刚开始并寻找一种简单直观的方法来控制您的BLDC和步进电机,还是您是想要深入研究FOC算法的复杂性以优化特定应用程序和硬件的代码的高级用户,本指南都适合您。
通过利用IFX007T BLDC电机驱动器屏蔽和TLE5012B磁角传感器的功能,您将学习如何使用Arduino的SimpleFOClibrary来创建精确高效的电机控制系统。本指南将引导您完成设置和配置,确保您彻底了解如何实现最佳性能。
了解无刷直流电机和闭环控制
无刷直流电机缺乏物理电刷来换向绕组。相反,它们依赖于电子换向,其中控制器根据转子位置在电机相位之间切换功率。
开环控制(例如,基本PWM驱动)迫使电机遵循预定义的相位模式没有反馈。虽然简单,但这种方法难以应对不同的负载,缺乏扭矩精度,并且有失速的风险。
闭环控制通过连续监测转子位置并相应地调整相电流来解决这些问题。这需要两个关键组成部分:
角度传感器:测量转子位置(TLE5012B)。控制算法:动态调节电流(FOC)。
为什么是场定向控制(FOC)?
传统的控制方法如梯形换向对电机相进行独立处理,导致转矩脉动,效率低下。FOC采用了更聪明的方法:
数学转换:FOC将三相电流转换为旋转的两轴系统(d-q坐标),将扭矩产生(q轴)与磁通(d轴)解耦。
精确控制:通过直接控制扭矩和磁通组件,FOC最大限度地减少损失,减少热量,即使在低速下也能平稳运行。
硬件
1. IFX007T屏蔽叠加
IFX007T电机驱动屏蔽与英飞凌的XMC4700 Relax Kit或任何其他arduino兼容板集成。只需将IFX007T屏蔽板堆叠在XMC板的顶部。这提供了:
3x PWM输出电机相位
过电流/热保护
高达40V电机电源兼容性
注意:对于非xmc板(例如Arduino Uno),请手动连接IFX007T的PWM引脚(U/V/W)并启用引脚(EN_U/EN_V/EN_W)。
2. 连接TLE5012B角度传感器
TLE5012B的3线SPI接口简化了集成:
CS (Chip Select):连接到GPIO引脚。SCK/MISO/MOSI:连接到电路板的专用SPI引脚(见原理图)。
关键步骤:安装传感器的磁铁同心电机轴。即使是1毫米的偏差也会降低精度。
软件安装
1. 开始使用Arduino IDE和XMC板
要开始使用XMC板编程,您需要设置Arduino IDE。按照我们的分步指南开始使用XMC for Arduino文档。
开始吧!
准备好一切后,我们准备将第一个代码示例闪烁到微控制器。为了做到这一点,你必须在Arduino IDE中执行以下步骤:
1.选择合适的棋盘
一旦安装了XMC板系列,您可以从菜单中选择支持的板之一:Tools > board >英飞凌的XMC微控制器。在我们的情况下,我们必须选择XMC4700放松套件,以便选择正确的板。
SFOC和TLE5012B(磁角传感器)
TLE5012是一种通过SPI通信的磁性角度传感器。它提供了精确的角度测量,这是必不可少的电机控制应用。要将其与SimpleFOC一起使用,我们需要创建一个自定义传感器类,该类扩展SimpleFOC提供的sensor基类。
我们创建了一个自定义类stle5012sensor,它扩展了Sensor类。这个类将处理从TLE5012传感器的初始化和角度读取。
TLE5012传感器类有:
•用SPI引脚初始化传感器的构造函数。
•初始化传感器硬件的init()方法。
•一个以弧度为单位读取角度的getSensorAngle()方法。
在setup()函数中,我们通过调用TLE5012Sensor类的init()方法来初始化TLE5012传感器。这将设置SPI通信并确保传感器准备好提供数据。
在loop()函数中,我们使用sensor类提供的update()、getAngle()和getVelocity()方法连续读取传感器角度和速度。这些值被打印到Arduino的串行监视器上进行调试。
TLE5012传感器提供以度为单位的角度。我们将其转换为弧度,因为SimpleFOC使用弧度进行角度计算。换算公式为:
在初始化过程中,我们检查错误并将它们打印到串行监视器(如果有的话)。这有助于调试硬件或通信问题。
将代码上传到XMC4700并打开串行监视器(设置为115200波特)。您应该看到每100毫秒打印一次角度和速度值。这确认传感器工作正常。
通过遵循这些步骤并使用提供的代码,您可以成功地将TLE5012传感器与SimpleFOC库集成!
SFOC和IFX007T(开环控制)
•这将创建一个BLDCMotor类的实例。
构造函数参数为:
极对:电机中的极对数(这里为4)。
R:电机的相电阻,以欧姆为单位(这里为0.73欧姆)。
•这些线定义了用于电机相位(U, V, W)和使能引脚(EN_U, EN_V, EN_W)的引脚。
•创建了一个BLDCDriver3PWM实例,它使用三个PWM信号控制电机。
•Target_position是一个浮点变量,以弧度为单位保存电机的目标位置。Commander用于串行通信,允许通过串行命令设置目标位置,电压限制和速度限制等参数。
•设置函数初始化引脚、串行通信和电机驱动器。
•设置电源电压(driver.voltage_power_supply)为12V,限制驱动电压为6V。
•电机的电压限制设置为3V,速度限制为5 rad/s。
•运动控制类型设置为angle_openloop,这意味着电机将在开环控制中运行,其中角度控制无反馈。
•Commander配置为允许串行命令设置目标角度,电压限制和速度限制。
•回路功能使用开环控制将电机连续移动到target_position。
•command.run()允许通过串行命令实时调整电机参数。
SFOC和IFX007T(闭环控制)
TLE5012传感器向电机控制器提供实时角度反馈。闭环控制:电机利用传感器反馈精确达到目标角度。串行命令:您可以使用串行监视器通过发送T命令,然后以弧度为单位发送所需的角度来设置目标角度。
这些引脚用于与TLE5012传感器进行SPI通信。
TLE5012Sensor对象用SPI引脚初始化。
BLDCMotor对象表示电机,BLDCDriver3PWM对象使用PWM信号控制电机。
target_angle变量存储所需的电机位置。Commander类允许通过串行监视器设置目标角度
setup()函数初始化电机、传感器和驱动器,并配置控制参数。
loop()函数持续运行FOC算法,并根据目标角度更新电机位置。
总结
通过结合XMC4700, IFX007T的强大驱动和TLE5012B的精密传感,您创建了一个非常强大的电机控制系统。简单的FOC抽象了复杂的数学,让您专注于应用程序逻辑,无论您是构建CNC机器,机械臂还是自主无人机。
本文编译自hackster.io