【问题标题】:Drawing curve using two motors axes使用两个电机轴绘制曲线
【发布时间】:2016-10-26 20:18:31
【问题描述】:

我正在尝试使用二维轴上的两个电机绘制一个圆或任何可能接近曲线(例如正弦)的东西。基本上我正在运行一个带有两个 nema17 步进电机的树莓派和 Adafruit 电机帽。

我想实现一些“平滑”,但似乎我只能得到真正“混叠”的结果,我想知道这是否是因为我正在驱动步进电机。 (但我相信 3D 打印机使用步进电机并取得一些不错的效果)

做一些数学运算,我可以算出每个电机的速度: X = R cos(t) 和 Y = R sin(t) 所以 Vx = -R sin(t) 和 Vy = R cos(t)

但我不确定这是不是最好的方法,因为我不确定我是否可以驱动步进电机的速度,但只能在步骤之间做一些延迟。

我也考虑过计算曲线的所有 x 和 y 位置,但我再次不确定我的构建精度是否足够高。

为了完成,我正在使用 Adafruit 库:https://github.com/adafruit/Adafruit-Motor-HAT-Python-Library,所以我并没有真正深入研究硬件代码,而只是使用库提供的功能。基本上,我可以单独运行每个电机 x 步。这是步进卡:https://www.adafruit.com/product/2348

构建(这是非常DIY):https://www.youtube.com/watch?v=uqSTZiI4KuY

【问题讨论】:

  • 如果您的步进电机齿轮相当高,那么一步就是例如1mm 那么你将很难得到看起来光滑的东西。 OTOH,如果一步是例如0.1mm(或更小)那么你应该能够得到平滑的线条。您还必须采取很多步骤 - 如果您尝试使用例如近似圆8 个样品,您将得到一个八角形。要获得更精确的帮助,您必须发布您的代码。
  • 我已为我的问题添加了详细信息。我相信我可以有一些好的分辨率,我认为 1 step
  • 如果您一次只运行一台电机,那么不可避免地会出现短的水平线或垂直线,尤其是由于电机启动/停止而不可避免的晃动。要获得对角线,您必须同时运行两个电机 - 每个电机都以对应于您尝试绘制的线的斜率的速率运行 - 并且最好保持电机连续运行,调节它们的速度而不是启动/停止。跨度>
  • 我可以同时运行两个电机,但你所说的“每个电机都以对应于你试图绘制的线的斜率的速率”是什么意思?

标签: math raspberry-pi motordriver adafruit


【解决方案1】:

首先需要一些规范:

  1. 你的电机控制看起来怎么样?

    你控制什么(速度,+/- 脉冲,???)你有任何校正单元(如果你驱动错误,它会启动并校正值,这样电机就不会失去位置)?你有运动控制处理器还是你自己产生脉冲?

  2. 您的目标精度和步进分辨率是多少?

现在有一些见解:

我认为您的方法不好,因为您不能以任何速度驱动电机,而是应该保持电机之间的速度比,这样运动斜率就是您所需要的。这些是我通常处理的锯齿和失真的主要原因:

  1. 步进分辨率

    如果您设法平稳地驱动速度,那么对于曲线,您有时可以忽略步进分辨率,因为它会被惯性和构造灵活性平滑地覆盖。所以除非你有真正的大步骤,这应该不是什么大问题。

  2. 振动

    这是最大的问题,因为您无法以您想要的任何速度驱动步进电机。每个电机都是不同的,并且电机的机械连接方式(定子和转子)也很重要。步进电机通常在低频下具有共振区域,因此应在启动电机时避免(如果可能)或尽可能快地驱动这些区域。

    如果您在该区域工作,那么电机会产生特定的振动,例如,而不是直线,您会得到类似正弦波的东西。该区域还存在其他问题,例如您正在损失大量能量,并且有用扭矩只是正常操作水平的一小部分,因此几乎不可能进行所有动力学计算。

    如果您想确定哪些频率是问题,然后以恒定频率驱动您的电机,例如 50Hz 几秒钟,然后 100,150,200, 250,...,当您开始听到噪音或电机将开始跳跃/振动时,您就在附近共振区。距离越近,情况就越糟糕!

    如果您对未连接的电机执行此操作,您将获得电机的共振频率。但机械师本身也可能有一个或多个共振区域,因此您也应该在机械师内部对其负载进行此操作。

  3. 控制单元

    如果您为每个电机配备了独立的运动处理器(就像许多 CNC 一样),那么以机械和齿轮可以提供的最佳精度制作曲线是不可能的。因为单独的运动控制单元可以完美地完成线条(并且仅在最佳情况下),因为必须同步生成曲线所需的比特流,这在这种设置中是不可能的。在这种情况下,如果您通过多条线来近似曲线,则输出通常看起来更好。如果您使用曲线驱动此类设置,则输出将围绕所需的形状振荡,尤其是当您在每个轴上获得不同的机械性能时。

    如果您自己生成脉冲,那么您应该没问题。带有曲线插值的运动控制不是一件容易的事。我通过沿要“渲染”的曲线生成控制点然后计算速度来做到这一点,这样电机就不会松动位置,而且工作速度不会比连接到CNC的工具的速度快>。之后,我以步进分辨率对曲线进行插值,并生成控制流,其中每个驱动电机都存在+/- 控制位,然后同步发送到电机。但是我放入几行文字的东西非常复杂,可以填满整本书。十多年来,我一直在为我的工作编写这些东西(因为它支付了我的账单),但我仍然是该领域的新手。

  4. 电气故障

    有时冷接头和/或高噪音会导致很多无法预料的问题,尤其是在自制硬件上。新手通常会忽略屏蔽、电缆的长度和位置、EMC 或 RF 噪声、电源/数字/阻塞接地等内容。为了确保您的电气设备正常,您可以对其进行测试。将一个计数器连接到您的电机控制上,看看脉冲数是否应为应有的值。同样使用示波器探测一些引脚在操作过程中的噪声也不会受到伤害。电机和电机驱动器会产生大量噪音,有时会扭曲运动控制或发送的数据。

    但在您开始四处寻找之前,请阅读以下内容:

所以我的建议是找出造成失真的原因,如果可以的话,将其删除...

【讨论】:

  • 谢谢你,这是一个非常完整的回复,我理解你关于别名和解析的所有观点,我已经在我的问题中添加了一些细节。
  • @batmat 看起来没有运动控制处理器单元(在硬件中),但我没有使用 Adafruit lib 的经验,所以我无法确定是否有 SW 控制层,但我强烈怀疑这样您很可能会忽略项目符号 #3 中的内容。
猜你喜欢
  • 2021-11-13
  • 2022-12-18
  • 2016-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-22
相关资源
最近更新 更多