Arduino调节反馈式比例线性组件

当您需要了解执行器的确切位置时,就需要光学反馈系列。 它功能强大,可靠的执行器带有内置的光学传感器,可在您需要时提供反馈。 光反馈没有内置控制器,但确实提供了单相脉冲作为位置反馈信号,可以将其输入到诸如Arduino之类的外部控制器中。

多个线性执行器之间的同步运动对于某些客户应用的成功至关重要,一种常见的做法是打开两个活板门的两个线性执行器。 本教程旨在概述如何使用Arduino和光学系列线性致动器来实现这一目标。

同步控制

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

组件

接线图

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

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

  1. 按照接线图所示进行连接。
  2. 上传并运行下面的第一个程序。
  3. 将此程序输出的两个值复制到下面第二个程序的第23行。
  4. 上传并运行第二个程序。
  5. 通过更改变量K_p(第二行的第37行)来微调您的系统。 通过将电位计连接到模拟引脚A0并修改代码以读取电位计并使用map()函数,最容易做到这一点:K_p = map(analogRead(A0),0,1023,0,20000);

校准程序

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

#include <elapsedMillis.h>
elapsedMillis timeElapsed;

#define numberOfActuators 2 
int RPWM[numberOfActuators]={6, 11}; //PWM signal right side
int LPWM[numberOfActuators]={5,10}; 
int opticalPins[numberOfActuators]={2,3}; //connect optical pins to interrupt pins on Arduino. More information: https://www.arduino.cc/reference/en/language/functions/external-interrupts/attachinterrupt/
volatile long lastDebounceTime_0=0; //timer for when interrupt was triggered
volatile long lastDebounceTime_1=0;

int Speed = 255; //choose any speed in the range [0, 255]

...

同步程序

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

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

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

#include <elapsedMillis.h>
elapsedMillis timeElapsed;

#define numberOfActuators 2       
int downPin = 7;
int stopPin = 8;
int upPin = 9;        
int RPWM[numberOfActuators]={6, 11};                                  //PWM signal right side
int LPWM[numberOfActuators]={5,10};        
int opticalPins[numberOfActuators]={2,3};                             //connect optical pins to interrupt pins on Arduino. More information: https://www.arduino.cc/reference/en/language/functions/external-interrupts/attachinterrupt/
volatile unsigned long lastDebounceTime[numberOfActuators]={0,0};     //timer for when interrupt is triggered
int pulseTotal[numberOfActuators]={908, 906};                         //values found experimentally by first running two-optical-actuators-sync-calibration.ino

int desiredSpeed=255;                            
int adjustedSpeed;
int Speed[numberOfActuators]={};    

...

详情参阅 - 亚图跨际

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值