×

Arduino半步步进电机驱动器L298N

消耗积分:2 | 格式:zip | 大小:0.11 MB | 2022-12-09

h1654155275.6483

分享资料个

描述

半步电机驱动器

该项目是如何更准确地驱动双极步进电机的示例。驱动是通过软件切换 IO(bitbanging)并使用 Arduino MKR 的 PWM 定时器来完成的。对于半桥,我们使用 ST L298N

为什么是半步?

双极步进电机通常通过切换线圈进行四相步进。添加中间步骤使其更加准确和平滑(但扭矩会小一些)。这是一个有趣的链接,用于说明整步和半步之间的区别。我们将切换以下图表:

 
 
 
 
pYYBAGOSpOqACYXNAAB0muNGQbY192.jpg
 
1 / 2半步状态
 

我们总共有 8 个状态,一个接一个地对微步进行排序。每个序列状态的时间将定义切换速度和电机速度。通过将线圈序列之一相移 180 度(4 微步),方向很容易控制。

Bitbanging 和 PWM

使用的 L298N 电机驱动器可以驱动全桥 MOSFET 并切换线圈电流的正向、负向(或关闭)。

 
 
 
 
poYBAGOSpPWAYZxWAABBWtlsvrw882.png
 
1 / 2全桥 MOSFET
 

这是通过软件 IO 切换 - 位转换 - IN1/IN2 和 IN3/IN4 输入来完成的。L298N 驱动器是内部设置的,以防止通过 IN 信号上的反相输入门在一条腿上出现捷径 - 很好 :)。也可以用 PWM 信号驱动电桥使能信号 ENA/ENB,在线性区域稍微控制电流。这是由 Arduino Micro 的硬件完成的。MKR 版本有一个 ATSAMD21,可以产生 25Khz PWM 信号。有关详细信息,请参阅我的其他高速 PWM 项目L298N 驱动程序在Arduino Motor Shield Rev3上设置,它将数字 IO 和感应 IO 连接到模拟输入,因此我们可以测量通过电机的电流。还将使用外部电源 (12V) 并在电机护罩上提供支持。(重要:拆焊 Vin 连接!)我们使用MKR2UNO转换板将它们连接在一起。

NEMA 17 步进器

对于这个项目,我们使用 NEMA 17 格式的双极步进电机。它有 200 步(每步 1.8 度),但使用半步驱动需要 400 步转一圈。每个线圈的最大电流为 0.75A,我们通过 SenseA 以 1.65V/Amp 测量 CoilA 上的电流。

软件代码

Arduino 代码写在一张草图中。我使用全局变量来定义关键数据,例如:

  • Sequencer[7][8]:每个驱动信号的 8 个 ustep 状态的序列。
  • CurrentArray0[32]:用于监视电流和计算锁定的滚动数据
  • ShadowArray[512]:调试数据数组,用于绘制电流图

关键例程如下,代码中自解释:

  • MotorLoop(int lps, int dir):驱动电机在任何方向上进行 x 步
  • int CalcArray():计算锁定状态,返回%电流偏差(*10)
  • MotorPowerDown():通过关闭半桥关闭电机。(无电流)
  • DataDump():通过串口转储监控和调试数据
  • SetupPWMTimers():在引脚 3 和 11(ENA 和 ENB)上设置 25Khz PWM 信号

电机回路

电机回路正在读取序列发生器阵列,写入 IO(EN1/EN2、EN3/EN4)并写入 PWM 占空比(ENA/ENB)。以微秒为单位的相位延迟也在定序器阵列中。方向是通过将 CoilB 的数组索引移动 0 或 4 来完成的。第一圈还有一个启动序列 (#define MOTORSTART)。它的启动速度稍慢(扭矩更大),然后按照编程保持在正常速度。

锁定监控

关键是理解锁仓计算。该程序在每第 3 个序列状态(最大电流驱动)中测量 CoilA 中的电流,并将其保存在监控数组中。然后计算当前*时间偏差。为什么?> Current*Time与Watt*Time成线性关系(假设电压恒定),相当于Newton*Meter,也就是系统中的能量变化量(焦耳)。测量这种能量变化并触发超过某个值,就会触发锁定。锁定触发器在代码中定义 (#define MOTORLOCK)

你的马达?

对于每个电机,此电流*时间行为都会不同。要理解这一点,您可以转储测量的电流数据(用分号分隔),并将其复制粘贴到 Xls 表,制作数据表,计算触发器和图表:

 
 
 
 
pYYBAGOSpPiATeT3AACeBC3N18U729.jpg
 
1 / 2ShadowBuffer[512] 当前数据到 Xls
 

当以不同的 PWM 电平或其他时序速度驱动时,您会在测量中看到严重的斩波尖峰。有一个设置可以使电流尖峰达到一定水平以上。(#define PEAKFILTER),改变并尝试。:)


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !