开启辅助访问
 找回密码
 立即注册

使用L293D电机驱动器板子和Arduino控制DC,步进和伺服 ...

babacdma 回答数0 浏览数963
如果您打算组装新的机器人,那么您最终将希望了解如何控制各种电机,例如DC电机,步进电机和伺服器。最简单,最便宜的方法之一是将L293D电动机驱动器与Arduino接起来。它是功能齐全的电动机驱动,非常适合许多机器人和CNC项目。
它可以驱动:


  • 具有8位速度选择的4个双向直流电动机(0-255)
  • 2个步进电机(单极或双极),具有单线圈,双线圈,交错或微步进。
  • 2台伺服电机
L293D电机驱动器和74HC595移位寄存器



  • L293D是一款双通道H桥电机驱动器,能够驱动一对DC电机或单个步进电机。
  • 由于板子有两个L293D电动机驱动器芯片组,这意味着它可以单独驱动多达四个直流电动机,因此非常适合构建四轮机器人平台。
  • 屏蔽层总共提供4个H桥,每个H桥可以为电机提供高达0.6A的电流。
  • 屏蔽层还带有一台74HC595移位寄存器,该寄存器将Arduino的4个数字引脚扩展到两个L293D芯片的8个方向控制引脚。
L293D电机驱动器和74HC595移位寄存器


通过屏蔽为电动机供电时,存在三种情况。


  • 适用于Arduino和电机的单个直流电源如果您想同时使用Arduino和电机的单个直流电源,只需将其插入Arduino的DC插孔或屏蔽板上的2针EXT_PWR块即可。将电源跳线放在电动机屏蔽罩上。仅当电动机电源电压小于12V时,才可以使用此方法。
  • (推荐)Arduino通过USB、USB电机通过直流电源供电:如果您想让Arduino由USB供电,而电机由DC电源供电,则插入USB电缆。然后将电动机电源链接到屏蔽板上的EXT_PWR模块。请勿将跳线放在板子上。
  • 用于Arduino和电机的两个独立的直流电源:如果您想要为Arduino和电机的两个独立的直流电源。将Arduino的电源插入DC插孔,然后将电机电源链接到EXT_PWR模块。确保将跳线从电动机护罩上卸下。
警告:
跳线就位时,请勿为EXT_PWR输入供电。否则可能会损坏电机护罩以及Arduino!

作为奖励,板子提供以下功能:

  • 板子带有一台下拉电阻阵列,可在加电期间保持电动机关闭。
  • 板载LED指示电动机电源正常。如果不亮,则电动机将无法运行。
  • RESET就是Arduino的reset按钮。为了省事起见,它仅显示在顶部。

输出端子





  • 两个L293D芯片的输出通道都通过两个5针螺钉端子输出M1M2M3M4。您可以将四个电压在4.5至25V之间的直流电动机链接到这些端子。
  • 模块上的每个通道均可向直流电动机提供高达600mA的电流。但是,提供给电动机的电流量取决于系统的电源。
  • 您也可以将两个步进电机链接到输出端子。一台步进电机链接到电机端口M1-M2,另一台链接到M3-M4
  • 如果碰巧有单极步进电机,还可以提供GND端子。您可以将两个步进电机的中心抽头链接到此端子。
  • 屏蔽层将16位PWM输出线引出到两个3针接头链接器上,您可以在其中链接两个伺服电机。

L293D屏蔽上未使用的引脚 屏蔽层未使用数字引脚#2,#13和模拟引脚A0-A5。
模拟引脚在右下角断开,其中引脚2的分支较小。如果要使用这些引脚,可以将一些接头链接到它。

安装AFMotor库



为了与屏蔽层通信,我们需要安装AFMotor.h库,以便我们可以发出简单的命令来控制DC,步进和伺服电机。
要安装库,请导航至“sketch”>“include library”>“manage libraries...”,等待库管理器下载库索引并更新已安装库的列表。



输入“ motor shield ”来过滤搜索。应该有几个条目。查找Adafruit提供的Adafruit Motor Shield库(V1固件)。单击该条目,然后选择“安装”。



L293D的直流电动机的驱动



既然我们了解了所有关于屏蔽的知识,我们就可以将其链接到Arduino了!
首先将板子插入Arduino的顶部。


接下来,将电源链接到电动机。尽管您可以将电压在4.5到25V之间的直流电动机链接到板子,但是在我们的实验中,我们使用的是额定9V的直流电动机。因此,我们将外部9V电源链接到EXT_PWR端子。
目前,将电动机链接到M1,M2,M3或M4电动机端子。在我们的实验中,我们将其链接到M4



下图将使您全面了解如何使用L293D电动机驱动器护罩控制直流电动机的速度和旋转方向,并可以作为更实际的实验和项目的基础。
#include <AFMotor.h>

AF_DCMotor motor(4);

void setup()
{
        //Set initial speed of the motor & stop
        motor.setSpeed(200);
        motor.run(RELEASE);
}

void loop()
{
        uint8_t i;

        // Turn on motor
        motor.run(FORWARD);
       
        // Accelerate from zero to maximum speed
        for (i=0; i<255; i++)
        {
                motor.setSpeed(i);  
                delay(10);
        }
       
        // Decelerate from maximum speed to zero
        for (i=255; i!=0; i--)
        {
                motor.setSpeed(i);  
                delay(10);
        }

        // Now change motor direction
        motor.run(BACKWARD);
       
        // Accelerate from zero to maximum speed
        for (i=0; i<255; i++)
        {
                motor.setSpeed(i);  
                delay(10);
        }

        // Decelerate from maximum speed to zero
        for (i=255; i!=0; i--)
        {
                motor.setSpeed(i);  
                delay(10);
        }

        // Now turn off motor
        motor.run(RELEASE);
        delay(1000);
}
代码解释

草图首先包括AFMotor.h库。
第二行AF_DCMotor motor(motorPort#);创建一台库对象。在这里,您需要声明电动机链接的电动机端口号。对于端口M1,写1,对于M2,写2,依此类推。
如果要将多个电动机链接到驱动器,请为每个电动机创建单独的对象。例如,以下代码片段创建了两个AFmotor对象。
AF_DCMotor motor1(1);
AF_DCMotor motor2(2);

  • setSpeed(speed)功能设置电动机的速度。在speed从0到255的范围与0被关闭和255作为全油门。您可以随时在程序中设置速度。
  • run(cmd)功能设置电动机的运行模式。有效值为cmd:

    • FORWARD -正向运行(旋转实际方向将取决于电机的接线)
    • BACKWARD-向后运行(旋转方向与FORWARD相反)
    • RELEASE–停止电动机。这会断开电动机的电源,等效于setSpeed(0)。电动机的防护罩没有实现动态破坏,因此电动机可能需要一些时间才能旋转下来。


L293D步进电机驱动


让我们将步进电机链接到L293D。首先将板子插入Arduino的顶部。

对于28BYJ-48单极步进器



如果使用的是28BYJ-48单极步进电机,则这些电机的额定电压为5V,每转可提供48步。因此,将外部5V电源链接到EXT_PWR端子。
切记卸下PWR跳线。
目前,将电动机链接到M1-M2(端口#1)或M3-M4(端口#2)步进电动机端子。在我们的实验中,我们将其链接到M3-M4


对于NEMA 17双极步进器


如果使用NEMA 17双极步进电机,则这些电机的额定电压为12V,每转可提供200步。因此,将外部12V电源链接到EXT_PWR端子。
切记卸下PWR跳线。
目前,将电动机链接到M1-M2(端口#1)或M3-M4(端口#2)步进电动机端子。在我们的实验中,我们将其链接到M3-M4



Arduino 代码


下图将使您完全了解如何使用L293D控制单极或双极步进电机,除了stepsPerRevolution参数外,这两种电机都相同。
在尝试绘制草图之前,请根据电动机的规格更改此参数。例如,对于NEMA 17,将其设置为200,对于28BYJ-48,将其设置为48。
#include <AFMotor.h>

// Number of steps per output rotation
// Change this as per your motor's specification
const int stepsPerRevolution = 48;

// connect motor to port #2 (M3 and M4)
AF_Stepper motor(stepsPerRevolution, 2);

void setup() {
  Serial.begin(9600);
  Serial.println("Stepper test!");

  motor.setSpeed(10);  // 10 rpm   
}

void loop() {
  Serial.println("Single coil steps");
  motor.step(100, FORWARD, SINGLE);
  motor.step(100, BACKWARD, SINGLE);

  Serial.println("Double coil steps");
  motor.step(100, FORWARD, DOUBLE);
  motor.step(100, BACKWARD, DOUBLE);

  Serial.println("Interleave coil steps");
  motor.step(100, FORWARD, INTERLEAVE);
  motor.step(100, BACKWARD, INTERLEAVE);

  Serial.println("Micrsostep steps");
  motor.step(100, FORWARD, MICROSTEP);
  motor.step(100, BACKWARD, MICROSTEP);
}
   
代码说明:

草图首先包括AFMotor.h库。
第二行AF_Stepper motor(48, 2);创建一台库对象。在这里,您需要传递电动机的每转步数和电动机所链接的端口号,作为参数。
在代码的设置和循环部分,我们简单地调用以下两个函数来控制电动机的速度和旋转方向。

  • setSpeed(rpm)功能设置电动机的速度,rpm您希望步进器每分钟转多少转。
  • step(#steps, direction, steptype)每次要移动电动机时,都会调用该函数。#steps是您要采取的步骤。direction是FORWARD或BACKWARD,有效值为stepstyle:

    • –一次给一台线圈通电。
    • –一次为两个线圈通电,以提供更大的扭矩。
    • 交错-在单张和双张之间交替进行,以在两者之间建立半步。这样可以使操作更顺畅,但是由于额外的半步,速度也降低了一半。
    • MICROSTEP –相邻线圈上下倾斜,以在每个完整步骤之间创建多个“微步骤”。这将导致更精细的分辨率和更平滑的旋转,但会损失扭矩。

L293D驱动伺服电机

使用L293D驱动伺服器非常容易。
电机接线实际上通过两个3引脚接头将Arduino的16位PWM输出引脚#9#10断开到的边缘。
Servos的电源来自Arduino的板载5V稳压器,因此您无需将任何东西链接到EXT_PWR端子。

当我们使用板载PWM引脚时,草图使用IDE的内置Servo库
#include <Servo.h>

Servo myservo;        // create servo object to control a servo
int pos = 0;        // variable to store the servo position

void setup()
{
        // attaches the servo on pin 10 to the servo object
        myservo.attach(10);   
}

void loop()
{
        // sweeps from 0 degrees to 180 degrees
        for(pos = 0; pos <= 180; pos += 1)
        {
                myservo.write(pos);
                delay(15);
        }
        // sweeps from 180 degrees to 0 degrees
        for(pos = 180; pos>=0; pos-=1)
        {
                myservo.write(pos);
                delay(15);
        }
}
使用道具 举报
| 来自北京
当贝投影