当前位置:网站首页>如何制作自己的机器人

如何制作自己的机器人

2022-07-06 00:23:00 acktomas

如何制作自己的机器人

查看原文

Device Plus 编辑团队

2016 年 5 月 23 日

制作自己的机器人

如何使用带有 Arduino 部件和传感器的步进电机在 2 个轮子上制作自己的机器人:

一旦您了解了使用步进电机的基础知识,您就可以创建一些有趣的项目,甚至可以制作自己的机器人。这一次,我将尝试使用步进电机构建一个 2 轮机器人。

在上一篇文章中,使用 Arduino 控制电机 - 使用伺服电机进行转向制作遥控车,我们制作了遥控车,其中普通电机提供前进/后退运动,伺服电机控制转向。

在这个 2 轮机器人中,向前/向后移动和转动可以通过并排放置的两个电机来完成。您经常会看到使用这种 2 轴距作为运动源的机器人。我要制作具有这种多功能性的东西。

用这个电子构造配方制作你自己的机器人

大约时间:90 分钟
所需零件

两轮机器人的设计

制作自己的机器人

图 1 – 为 2 轮机器人建模

首先,您需要考虑 2 轮机器人的完整设计。如果有 2 个电机,则可以用简单的设计制作一个 2 轮机器人。2 个同向转动的电机提供向前/向后运动,反向转动提供转动能力。这一点,即使用两个电机可以很容易地实现基本运动控制,在许多领域都采用了这一点。让我们测量步进电机和其他要使用的部件的尺寸,并制作一个与该尺寸相匹配的机身。

我使用的 3D 打印机的零件可以在这里找到

图 1 使用免费的建模软件“123d design”,展示了我对 2 轮机器人身体的简单设计的想法。我正在考虑使用一块圆形木头作为底座,并将步进电机、Arduino 和电池连接到它上面。因为两轮机器人最终可能会向前或向后翻倒,所以我将在板的背面安装一个小滚珠脚轮作为支撑。

要确定车轮的尺寸,请将步进电机放在图 1 所示的圆形木块上,然后测量距地板的高度。到那个高度,加上脚轮浮动一点点+ 2-3mm时的高度,你就得到了轮子的直径。

制作自己的机器人

图1 3D打印机生产的圆板和轮子

制作自己的机器人

图2 支撑球脚轮

此外,我模拟了将步进电机锁定到板上的部分。步进电机的轴侧有四个 4mm 螺丝孔,所以我制作了一个零件,可以用它们将圆板锁定到步进电机上。

制作自己的机器人

图2 将步进电机固定在圆板上的部分

制作自己的机器人

图3 3D打印机打印出来的零件

一旦 3D 打印机生产出零件,我就安装了步进电机并确认了尺寸。它非常适合。

制作自己的机器人

图 4 – 零件组装

将驱动器连接到步进电机。

由于所有部件都安装在直径为 12 厘米的板上,因此我们需要尽可能谨慎地使用空间。由于步进电机驱动器L6470的板子和螺丝孔位置和尺寸与步进电机表面的相同,我可以将驱动器拧到步进电机的背面。通过这样做,我可以节省一点空间。

制作自己的机器人

图 5 – 暂时卸下螺丝并安装驱动板。

制作自己的机器人

图 6 – 步进电机背面的驱动板

使用 Arduino 驱动两个步进电机的电路

以前,我们只驱动一台步进电机。这一次,我们需要驱动两个步进电机。使用称为菊花链的方法,L6470 可以控制多个步进电机。

菊花链是一种 布线方案,其中多个设备按顺序或以环形方式连接在一起。 除了完整的单回路之外,包含内部回路的系统不能称为菊花链。

与 L6470 进行菊花链所需的电路如下所示。由于电线较多,接线时请注意不要弄错。

制作自己的机器人

图 3 – 连接两个步进电机的电路

与电路只有一个时的不同之处在于,第一和第二步进电机现在有一个连接它们的部件。用 L6470 数据表确认后,第一个步进电机连接到 SDO,第二个步进电机连接到 SDI。通过这部分发送和接收数据。

制作自己的机器人

图 4 – L6470 示意图

结论

电路接线完成后,我想说是时候开始编程部分了,但由于处理多个步进电机的程序可能有点复杂,退一步了解更多关于步进电机编程的知识可能是明智的。如果一切顺利,两个步进电机将像下面的视频一样同步。

如何制作自己的机器人(第 2 部分)

查看原文

Device Plus 编辑团队

2016 年 5 月 24 日

制作自己的机器人

如何在 2 个轮子上制作自己的机器人,使用带有 Arduino 部件和传感器的步进电机……第 2 部分

在第 1 部分中,我们使用库驱动步进电机。这一次,我们将更详细地研究步进电机编程并学习如何控制它,处理步进电机时遇到的问题,以及一些解决方案。

电子建筑配方

大约时间:90m
所需零件

步进电机评论

制作自己的机器人

图 1 – 步进电机和 L6470

我将在这篇文章中回顾如何通过编程来控制步进电机。从以下特性可以看出,与普通电机和伺服电机相比,步进电机的独特之处在于能够控制旋转。

  • 电机:通电时旋转
  • 伺服电机:对应一个信号在0到N度范围内旋转
  • 步进电机:可不受信号限制地控制

此外,您在实际控制电机时按顺序向电机发送 PWM 信号。也就是说,如果将 Arduino 直接连接到步进电机,控制会很困难。所以通常,对于像 Arduino 这样的微控制器,您会希望通过电机驱动器来控制步进电机,这使得各种类型的控制成为可能。(有关处理普通电机驱动器的信息,请参阅#12。

这次使用的 L6470 步进电机驱动器既便宜又具有板载控制/振荡器电路,用于检测步进电机、DSP 和通信 I/F 的过电流。从根本上说,当您尝试控制电机的转数或功率或需要精确运动时,您需要选择具有如下功能和能力的电机驱动器来完成您的电路。

[制作自己的机器人](http://www.rohm.com/web/global/search/parametric/-/search/Stepping Motor)

[步进电机驱动器目录 – ROHM](http://www.rohm.com/web/global/search/parametric/-/search/Stepping Motor)

因为我想要一个易于使用且价格便宜的产品,所以我使用的是 L6470。但是,上次和之前的时间,当我试图驱动步进电机时,我预计它会旋转。相反,我只有噪音和振动,但轴没有转动。我想知道我是否做了什么让它变得奇怪?

步进电机“失步”现象

在使用步进电机时,您经常会遇到失步。简而言之,失步就是步进电机的实际运动跟不上旋转控制信号,电机驱动器预期的旋转位置与实际步进电机位置失准,从而导致同步性丢失和电机不转。

跳出的原因多种多样。如下所述驱动步进电机通常会导致它。

  • 突然加速或减速步进电机
    • 突然加减速的时机带来了信号与电机不同步的可能。在这些情况下,首先逐渐加速/减速会消除这种可能性。
  • 扭矩不足
    • 如果电机没有足够的扭矩(转动功率),可能会发生失步。在这种情况下,您必须切换到具有所需扭矩的电机。
  • 驱动电压低/不稳定
    • 如果驱动电压低/不稳定,这可能会导致失步。L6470 规格要求 8V-45V,但在 8V 下运行时要小心。
  • 振动的影响
    • 如果对电机施加振动,可能会导致失步。

一般来说,出现失步时,上述原因都有可能,但扭矩不足导致的突然加速或超速是最常见的原因。因此,如果您的步进电机出现故障,这些原因值得调查。

另外意法半导体有卖L6470的,有详细的说明,大家也可以参考一下。

L6470 产品说明

对步进电机进行编程

现在,让我们深入研究这篇文章的主题,步进电机编程。为了通过 L6470 从 Arduino 控制步进电机,您必须对 l6470 进行编程以发送控制信号。电路如下。

制作自己的机器人

图 1 – 连接 Arduino、L6470 和步进电机的电路

步进电机控制程序流程

下面是步进电机程序。我们现在将细读这个程序的流程。

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687#include <Arduino.h>#include <SPI.h> //(1) Import for SPI transmission //(2) Define the stepper motor pin#define PIN_SPI_MOSI 11#define PIN_SPI_MISO 12#define PIN_SPI_SCK 13#define PIN_SPI_SS 10 void setup(){ delay(1000); Serial.begin(9600); //(3) Initialize the stepper motor pin pinMode(PIN_SPI_MOSI, OUTPUT); pinMode(PIN_SPI_MISO, INPUT); pinMode(PIN_SPI_SCK, OUTPUT); pinMode(PIN_SPI_SS, OUTPUT); digitalWrite(PIN_SPI_SS, HIGH); //(4) SPI signal to commence SPI transmission SPI.begin(); SPI.setDataMode(SPI_MODE3);// When SCK is high, send/receive data, when idle, set pin to HIGH SPI.setBitOrder(MSBFIRST);// Transmission from MSB //(5) L6470 settings L6470_setup();} //**********************************************//(6) SPI transmission method//void L6470_send(unsigned char value){ digitalWrite(PIN_SPI_SS, LOW); SPI.transfer(value); // Send control signal via SPI transmission digitalWrite(PIN_SPI_SS, HIGH); } //// (7) L6470 setup//void L6470_setup(){ // Device settings L6470_send(0x00); L6470_send(0x00); L6470_send(0x00); L6470_send(0x00); L6470_send(0xc0); //Set maximum revolution speed L6470_send(0x07);//register address L6470_send(0x20);//value(10bit),default 0x41 //Voltage setting when motor is idle L6470_send(0x09);//register address L6470_send(0xFF);//value(8bit),default 0x29 //Voltage setting when motor rotating at constant speed L6470_send(0x0a);//register address L6470_send(0xFF);//value(8bit),default 0x29 //Voltage setting when accelerating L6470_send(0x0b);//register address L6470_send(0xFF);//value(8bit),default 0x29 //Voltage setting when decelerating L6470_send(0x0c);//register address L6470_send(0xFF);//value(8bit),default 0x29 //full step, half step,1/4,1/8,…,1/128 step setting L6470_send(0x16);//register address L6470_send(0x00);//value(8bit} //// (8)Main process - loop()//**********************************************void loop(){ //360 degrees - Turn one complete revolution L6470_send(0x50);// Run(DIR,SPD),0x51:Forward,0x50:Reverse L6470_send(0x00); L6470_send(0x20);// Rotation speed settings L6470_send(0x00); delay(1604);// Turn 1 time every 1604ms L6470_send(0xB8);// Hard stop}

控制信号——关于 SPI 传输

首先,L6470 和 Arduino 之间的控制信号交换通过调用 SPI 传输(串行外设接口)的方法进行。这种 SPI 传输用于在 Arduinos 和 IC 芯片等微控制器之间交换信号。

在程序第二行(1)的“#include SPI.h”表达式中,我准备在Arduino上使用SPI传输。使用库时,请记住这些“#include <***.h>”表达式一直存在。

接下来,在(2)中,我设置了 L6470 使用的引脚。在这里,您可以看到书面的 MOSI 和 MISO。这些是 SPI 传输使用的基本信号线。

在 SPI 传输中,信号线由以下 3 个基本元素构成(使用 SS 信号时为 4 个元素)。每条信号线都有特定的时钟(SCK)、输出信号(MOSI:Master Out Slave In)和输入信号(MISO:Master In Slave Out)。实际传输时,通信安排为 Arduino 输出标准时钟信号 (SCK),然后与 L6470 一起使用 In 和 Out(MISO 和 MOSI)连接来回传输数据。

  • SCK——串行时钟
  • MISO – 主进从出
  • MOSI – 主出从入
  • SS – 从机选择

在 (3) 中,设置使用的信号线的引脚模式。接下来,在(4)中,设置要使用的SPI传输模式。正在连接的设备确定模式。

一旦 SPI 传输准备完成,在 (5) 中,我们终于可以使用 SPI 传输并开始 L6470 设置。实际发送SPI传输信号的部分是(6) L6470_send()函数的写法。

在进行 L6470 设置时,请根据数据表和手册中记录的规格设置所需的元素。

L6470 数据表

当您查看数据表的内容时,您将看到下面的命令地址表。这次因为我们使用的是12026电机,所以通过SPI传输将表中记录的寄存器地址发送到初始化L6470。

作为如何在编程中使用表格的示例:

123//Highest revolution speed settingL6470_send(0x07);//register addressL6470_send(0x20);//value(10bit),default0x41

以上是代码。如果我们在“最高转速”功能行的表格中查看,地址为“0x07”,长度为“10”位,初始值为“0x20”(以12026模式为例)。通过 SPI 传输发送表中的值,您可以进行各种设置。

制作自己的机器人桌

表 1 L6470 数据表。

初始化完成后,在 (8) 主过程中找到实际驱动步进电机的命令。您可以再次看到数据表中记录的各种命令。

  • 旋转指令
    0x51(正转)、0x50(反转)
  • 停止(软)命令 0xB0

在该示例中,发送正向或反向旋转命令,然后是 20 位旋转速度命令,然后是延迟(1604)。这使它在这段时间内转动。如果改变这个转速值,它可以加速或减速。

这是使用Arduino通过L6470驱动步进电机时的流程。另外,与此相对应,通过改变一些连接方式,可以像上次介绍的那样控制多台步进电机。

让我们试着驾驶一个两轮机器人

现在我们了解了步进电机的编程功能流程,让我们完成 2 轮机器人。我在上一篇文章中使用 3D 打印机完成了轮子和车身的打印,现在将在车身上安装必要的部件,这样您就可以完全制作自己的机器人了。

制作自己的机器人

图 2 – 制作您自己的机器人所需的所有部件都安装在身体上

安装了 Arduino、面包板和用于步进电机(2 个串联)的 9V 电池后,几乎没有剩余空间了……哎呀。
因此,我没有使用 Arduino UNO,而是尝试将其更换为 Arduino Pro Mini。

使用 Arduino Pro Mini 制作自己的机器人

图 3 – 使用 Arduino Pro Mini,非常完美!

制作自己的机器人

图 4 – 它整齐地安装在面包板上

制作自己的机器人

图 5 – 轮子牢固地安装在轴上,因此不会打滑

安装完所有部件后,我们终于可以打开电源并尝试驱动它。

有用!在视频中,步进电机连接了一个 12V 适配器。当我连接 9V 电池时,它们有点太重了,我注意到步进电机没有足够的扭矩。在这种情况下,如果它太重,就像我之前描述的那样,您可以更换电机本身,减轻重量,或者进一步改进电源以使稳定运行成为可能。

结论

这一次,我们使用步进电机在两个轮子上制作您自己的机器人。移动发生在代码中。当你制作自己的机器人时,你可以添加其他东西,比如在每一侧安装光传感器,制作一个朝着最亮的光移动的机器人,或者一个朝着声音移动的机器人,甚至是一个可以由智能手机驱动的机器人通过之前介绍的 ESP- WROOM -02使用 WIFI 通信。各种应用都是可能的。我可能会尝试在后续帖子中介绍一些改进。

下一次,我想我会制作一个使用磁传感器或其他很酷的东西的设备。

原网站

版权声明
本文为[acktomas]所创,转载请带上原文链接,感谢
https://acktomas.blog.csdn.net/article/details/125623681