使用Arduino同步控制两个光学线性执行器

多个线性执行器之间的同步运动对于某些客户应用的成功至关重要,一种常见的做法是打开两个活板门的两个线性执行器。为了实现这一目标,我们建议使用专用的Firgelli 同步控制盒FA-SYNC-2和FA-SYNC-4。但是,一些DIY者和黑客更喜欢像Arduino这样的微控制器的自由,而是更喜欢编写自己的同步控制程序。本教程旨在概述如何使用 光学系列线性执行器.

前言

本教程不是对用Arduino实现同步控制所需步骤的严格处理,而是对帮助您编写自己的自定义程序的广泛概述。 本教程是高级教程,假定您已经熟悉Arduino的硬件,软件,并且理想情况下具有脉冲宽度调制(PWM)信号,中断服务程序(ISR),传感器的反跳以及电机编码器的经验。 本教程提供的示例是基本比例控制器。以下示例可以实现许多改进,包括但不限于:实施PID控制回路并缩放到两个以上的线性执行器。 请注意,我们没有资源为Arduino应用程序提供技术支持,并且不会在这些公开教程之外调试,编辑,提供代码或接线图。

概述同步控制

通过比较两个线性执行器的长度并按比例调节速度来实现同步控制;如果一个执行器开始运动的速度快于另一个执行器,我们将减慢其速度。我们可以通过内置的光学编码器读取线性执行器的位置。光学编码器是一个小的塑料盘,其中有10个孔,该盘连接到DC电动机,因此当电动机旋转时,塑料盘也是如此。红外LED指向塑料盘,因此当它旋转时,光要么通过光盘上的孔传输,要么被光盘的塑料阻挡。光盘另一侧的红外传感器检测光何时穿过孔并输出方波信号。通过计算接收器检测到的脉冲数,我们既可以计算出电动机的RPM,也可以计算出线性执行器的行进距离。 35lb光学线性致动器每英寸行程具有50(+/- 5)个光脉冲,而200lb和​​400lb致动器均具有每英寸100(+/- 5)个脉冲。通过比较每个线性执行器已延伸的距离,我们可以按比例调整两个执行器的速度,以使它们在延伸时始终保持相同的长度。

所需组件

接线图

使用Arduino同步控制两个光学线性执行器

进行上述接线。请务必检查从线性执行器出来的电线颜色,因为上色约定可能会与上图所示有所不同。注意不要忽略连接在数字引脚7、8、9和GND之间的3个瞬时按钮。

    快速教程

    如果只想让两个线性执行器同步运动,请按照以下步骤操作:

    • 如接线图所示进行连接。
    • 上传并运行下面的第一个程序。
    • 将此程序输出的两个值复制到下面第二个程序的第23行。
    • 上载并运行第二个程序。
    • 通过更改变量K_p(第二行的第37行)来微调您的系统。最简单的方法是将一个电位计连接到模拟引脚A0,然后修改代码以读取电位计并使用map()函数:K_p = map(analogRead(A0),0,1023,0,20000);

    本教程的其余部分将更详细地介绍程序的一些关键功能。我们再次重申,这不是详尽的教程,而是概述了在创建自己的程序时要考虑的事项。

    校准程序概述

    在实现同步控制之前,我们必须首先校准系统。这涉及到计数每个致动周期的脉冲数,因为如产品规格中所述,每英寸行程有(+/- 5)个脉冲的公差。在下面上传并运行程序。该程序将完全收回执行器(第53行),并将光脉冲计数器变量设置为零,然后它将完全伸出并完全收回(分别为第63和74行)。在此启动周期中,中断服务程序(ISR)的行153和166将对脉冲数进行计数。启动周期完成后,将在第88行输出平均脉冲数,并记下这些值以供以后使用。

    https://gist.github.com/Will-Firgelli/89978da2585a747ef5ff988b2fa53904

    同步程序概述

    在上传同步控制程序之前,必须首先将校准程序输出的值复制到第23行,并用您自己的值替换当前数组:{908,906}。另外,如果您使用的是35lb线性执行器,则需要将第29行中的变量值从20毫秒更改为8毫秒。

    完全收回一次(确定原点)后,您可以通过按下与伸展,收回和停止命令相对应的三个按钮来同步移动两个线性执行器。通过比较执行器的相对脉冲计数器并调整它们之间的速度以始终保持同步,即使在不均匀负载下,执行器也将保持同步。请注意,当前程序实现了一个简单的比例控制器(第93行),因此会在平衡附近出现过冲和振荡。您可以通过更改在第37行定义的变量K_p进行调整。最简单的方法是将一个电位计连接到模拟引脚A0,然后修改代码以读取电位计并使用map()函数:K_p = map(analogRead(A0),0,1023,0,20000);

    为了获得最佳结果,我们强烈建议您删除比例控制器并实施PID控制回路。但是,这超出了本入门教程的范围,因此已被故意省略。

    https://gist.github.com/Will-Firgelli/44a14a4f3cac3209164efe8abe3285b6

    同步使用Bullet 36和Bullet 50执行器

    除了我们的光学系列线性执行器,我们还提供两种带内置编码器的线性执行器:Bullet 36 Cal。和Bullet 50 Cal,它们都具有内部正交霍尔效应编码器。霍尔效应编码器的工作原理与光学编码器相同,但是它不使用光,而是利用磁性。此外,作为正交编码器,它具有两个信号输出,每个信号输出相差90度。因此,您需要使用具有4个或更多中断引脚的Arduino板(Arduino Uno只有两个),并修改代码以处理每个执行器来自两个信号的输入。此外,防抖时间变量falsepulseDelay将需要与K_p一起调整。

    编写自己的程序的技巧

    超过两个线性执行器

    当使用两个或多个线性执行器时,Arduino Uno将不再工作,因为它只有两个中断引脚。您将需要使用带有适当数量的中断引脚的Arduino板,更多信息: https://www.arduino.cc/reference/en/language/functions/external-interrupts/attachinterrupt/

    其次,为了提高效率,建议使用数组和for()循环对每个执行器进行迭代来向量化您的编程。

    防弹跳

    与许多传感器一样,重要的是要意识到跳动信号。与机械开关一样,编码器也可能会弹跳。在上面的示例中,通过一个简单的延迟(由falsepulseDelay变量定义)处理了反跳过程,在您进行的任何软件更改或物理电路中过滤掉反跳噪声时都必须处理此问题。

    处理翻转

    如果您修改代码,则在处理millis()函数时请注意翻转。 millis()和lastDebounceTime数组都声明为无符号长变量,这意味着它们最多可以存储4,294,967,295(32 ^ 2-1)的值。这大约意味着49.7天的过渡期。当前程序旨在处理ISR(中断服务程序)功能中的翻转:count_0和count_1,但是,如果您修改此程序,请确保正确处理变量翻转,否则您的程序将在连续使用约49.7天后崩溃。有关更多信息,请参阅: https://www.norwegiancreations.com/2018/10/arduino-tutorial-avoiding-the-overflow-issue-when-using-millis-and-micros/

     

    Share this article

    特色产品

    Linear Actuator - 12v dc
    经典杆式线性执行器 In Stock
    From $109.99USD
    water resistant IP66 Premium Linear Actuator
    优质线性执行器 In Stock
    $129.99USD
    TVL-170后置弹出式电视升降机
    TVL-170后置弹出式电视升降机 In Stock
    On Sale From $590.00USD
    子弹系列50 Cal。线性执行器
    子弹系列50 Cal。线性执行器 In Stock
    From $279.99USD

    需要帮助查找正确的执行器?

    我们精密地设计和制造我们的产品,以便您获得直接制造商定价。我们提供当天发货和知识渊博的客户支持。尝试使用我们的执行器计算器,以获得适合您应用的执行器帮助。