亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 制造工艺

校准我的舵机

组件和用品

Arduino UNO
× 1
Adafruit PWM Servo Driver Shield
× 1
M3 螺栓
× 8
M3 垫圈
× 8
LM2596 DC-DC 降压转换器
× 1
红色PLA
× 1
白色PLA
× 1
180 度清晰的数学量角器
× 1
旋转电位器(通用)
× 1
9g 伺服电机
× 1

必要的工具和机器

3D 打印机(通用)

应用和在线服务

Arduino IDE
Autodesk Fusion 360

关于这个项目

在上一篇关于 Hackster 的帖子中,我写了关于我如何创建一个装备来比较来自同一批次的不同舵机的旋转方式,并表明将相同的 PWM 信号发送到不同的舵机会导致一些显着差异 - 下图显示了舵机它们都从最远的逆时针位置开始,并被发送相同的 PWM 信号——它们的行为都略有不同。

为什么不使用现有的 Arduino 伺服库?

我使用 Adafruit PWM Servo Driver 来驱动一堆伺服器,这允许我向每个伺服器发送不同的 PWM 信号。我可以使用内置在我的 Arduino 安装中的伺服库 - 但我有几个不这样做的原因:

  • 借助 Adafruit PWM 伺服驱动器,我可以通过 I2C 仅使用两个引脚来控制我的伺服系统,而不是将我的 Arduino 上的一个引脚专用于每个伺服系统。
  • 有时我发现使用 Arduino 伺服库时,当我连接到伺服器并发送信号使其旋转到零度位置时,它会旋转到行程极限并磨削伺服器内的齿轮。

当然,我使用的 9g 舵机很便宜,而且不是为精度而设计的——但我认为我可以从中榨取更多的价值。我想将它们用于步行机器人,并且需要它们的行为更加精确和可预测。

如何更准确地控制我的爱好舵机?

确认我的伺服系统的所有行为都略有不同,这让我想要构建一个允许我校准伺服系统的设备 - 我需要什么 PWM 值才能将伺服系统移动到 0 度位置?还是90度中心点?我如何避免发送一个 PWM 值,该值会导致伺服器在大量加减速和齿轮磨削的情况下处于极端位置?

我决定结合几个简单的概念。

  • 将我的舵机与一个简单量角器的中心对齐,这样当舵机的雨刷旋转时,我就可以测量它的位置。
  • 将电位器连接到 Arduino 的模拟输入端,这样我就可以在调整电位器轴的位置时通过调整 PWM 值来控制伺服雨刷器的位置。

对于这个版本,我很高兴使用我的 Arduino IDE 的 Serial Monitor 来告诉我 PWM 信号的值,我可以手动记录。

我使用 Autodesk 123D 设计了一个简单的装备,可以容纳电位器、量角器、单个伺服、我的 Arduino 和 Adafruit PWM 伺服驱动器以及电源。

我想继续使用 Adafruit PWM 伺服驱动器进行校准,因为这可能是我在最终项目中使用的。如果我要直接从 Arduino 上的引脚控制伺服,我会在设备中复制它并根据 Arduino 的 PWM 校准伺服。

构建设备

我打印了每个零件,并使用 M3 螺栓和垫圈将它们连接在一起。

我的设备设计中的安装孔已调整以适合我的组件 - 不同组件的孔直径和位置可能存在差异。

对于电子产品,我将电位器的中心引脚连接到 Arduino 的 A0 引脚,将其他引脚连接到 Arduino 上的 0v 和 5v。我将 PWM 伺服电机驱动器连接到 Arduino,然后我连接了 DC-DC 降压转换器(我已经调整为将 9v 电源输入转换为 5v 输出)。我将 9g 伺服连接到伺服电机驱动器屏蔽上的第一个插槽,然后将我的草图上传到 Arduino。

最终结果如下图所示。通过转动设备左上角的旋钮,我可以控制伺服的位置,并使用 Arduino IDE 中的串行监视器,我可以读取发送到任何给定角度的伺服电机的 PWM 信号。

那么设备告诉我什么?

对于我的舵机,我将其顺时针旋转到最远极限,然后将雨刷放在舵机上,使其刚好超出校准设备量角器上的 180 度标记。

我将电源连接到设备,然后旋转电位计旋钮,直到伺服指针与量角器上的 0 度标记对齐,并记下写入我的 Arduino IDE 串行输出的 PWM 值。然后我旋转电位器直到伺服指针指向 10 度,并再次记录 PWM 值。我每 10 度继续这个过程,直到我达到 180 度,我在下表中分享了结果。

我创建了一个结果图(如下所示),正如您所料,很明显 PWM 和伺服角之间存在很强的线性关系。

现在我有一些 PWM 和角度值是这个特定伺服的特征 - 其他伺服可能具有相似的特征,但它们不会完全相同。

为了获得更准确的伺服性能,我现在有几个选择:

  • 记录这些值对并将它们保存在我的 Arduino 草图中的一个数组中,当我想将伺服雨刷器移动到 90 度时(例如),只需参考与该角度相关的 PWM 值并发送该 PWM 值到伺服。这有一个缺点,我只能旋转到 10 的倍数的角度。
  • 或者,如果我想完全控制我发送到的角度,我可以使用数据集的线性回归来计算出与角度和 PWM 值相关的公式(对于这个伺服,PWM =2.35 * Angle + 159.4)。通过这种方式,我可以将想要转向的角度作为参数传递,并以编程方式计算将这个特定伺服机构旋转到该位置所需的 PWM。

无论哪种方式,我都能够比以前更准确、更自信地控制这个伺服系统。精确校准每个伺服系统需要付出更多的努力,但对于我的项目来说,额外的精度是值得的。

当然,当我从设备上卸下伺服器时,我一直保持着伺服雨刷器的连接,因为测量值与在校准时雨刷器的连接方式有关。

下一版本的改进

在校准了几个舵机之后,我想到了一些改进,我将在下一个版本中构建。

  • 伺服需要有一个快速释放机制 - 可能使用带有钕磁铁的夹子将伺服固定到位,而不是用 M3 螺栓固定。
  • 我想让它更小 - 也许我可以重新定位 Arduino 和电源来实现这一点。
  • 我需要在 9v 电池和降压转换器之间设置一个电源开关,这样我每次想关闭机器时都不需要完全断开电池的连接。
  • 我希望能够以更少的件数打印钻机。
  • 如果传感器能够检测到伺服系统何时处于特定角度位置并将其反馈给 Arduino,那么与其手动从量角器读取值,效果会更好——这可以消除一些视差误差。
  • 最后,显示任何结果的 LCD 显示屏会有很大帮助,因为我不需要将计算机连接到设备。

结束

就是这样 - 我的爱好伺服器很便宜,而且不是为了精度而设计的 - 对于很多应用来说,它们非常好。然而,我想从我的身上获得更高的准确性和可重复的性能,这篇文章中的装备帮助我实现了这一点。

代码

  • 伺服校准器设备草图
伺服校准装置草图C/C++
#include #define analogIn A0Adafruit_PWMServoDriver pwm =Adafruit_PWMServoDriver();int inputValue =0;int tmpPwmValue =0;void setup() { Serial.begin(9600); pwm.begin(); pwm.setPWMFreq(60);}void loop() { inputValue =analogRead(analogIn); // inputValue 将在 0 到 1024 之间 // 通过观察,伺服的最小和最大 PWM 值通常在 100 和 612 之间 // 下面的公式允许我们简单地将模拟输入转换为 PWM int pwmValue =(int)(100 + (输入值 / 2)); pwm.setPWM(0, 0, pwmValue); // 检查以确保我们没有不必要地显示重复数据 if (pwmValue !=tmpPwmValue) { Serial.print("Potentiometer Input ="); Serial.print(inputValue); Serial.print(", PWM ="); Serial.println(pwmValue); } tmpPwmValue =pwmValue;延迟(15);}

定制零件和外壳

伺服校准器零件的回购
https://github.com/jeremylindsayni/ServoCalibrator

制造工艺

  1. PLA 3D 打印:您需要知道的一切
  2. 使用树莓派进行平移/倾斜面部跟踪
  3. PLA vs ABS vs Nylon
  4. Walbi,步行两足动物
  5. Arduino IoT 机械臂
  6. PLA 与 ABS 的 3D 打印:有什么区别?
  7. 直流驱动器作为交流伺服系统的替代品
  8. PLA可回收甚至可生物降解吗?
  9. PLA会溶于水并分解吗?
  10. PLA灯丝是否导电(任何灯丝是否导电)?
  11. PLA 导电吗? 3D 灯丝电气特性。
  12. PLA 与 ABS 3D 打印。了解差异!