Suchcode

Steuerung eines DC-Motors mit einem L293D-Motortreiber und Arduino PWM

Steuerung eines DC-Motors mit einem L293D-Motortreiber und Arduino PWM

Dieses Projekt zeigt, wie man die Geschwindigkeit und Richtung eines Gleichstrommotors mit einem L293D-Motortreiberchip und den Pulsweitenmodulationsfähigkeiten (PWM) von Arduino steuern kann. Diese Einrichtung ermöglicht eine präzise Motorsteuerung, was sie für eine Vielzahl von Anwendungen geeignet macht.

Hier sind einige Projektideen, die dieses Setup nutzen:

  • Robotik:Steuern Sie die Bewegung der Räder eines kleinen Roboters.
  • Automatisierte Geräte:Erstellen Sie automatisierte Vorhänge, Jalousien oder ein kleines Förderband.
  • Lüftersteuerung:Passen Sie die Geschwindigkeit eines Kühlgebläses basierend auf den Temperaturmessungen an.
  • Sonnenverfolger:Positionieren Sie kleine Solarpanels so, dass sie der Sonne im Laufe des Tages folgen.

Hardware/Komponenten

  • Arduino Uno (oder kompatible Platine)
  • L293D Motorsteuerungs-IC
  • DC-Motor (ausgelegt für die Spannung und die Stromgrenzen des L293D, bis zu 600 mA)
  • 9V-Netzteil (für den Motor)
  • Verbindungskabel
  • Breadboard (empfohlen)

Verdrahtungsanleitung

Der L293D-Chip fungiert als Schnittstelle zwischen dem Arduino und dem Gleichstrommotor. Er ermöglicht es dem Arduino, sowohl die Geschwindigkeit als auch die Richtung des Motors zu steuern. Der Chip benötigt eine separate Stromversorgung für den Motor, da der Arduino nicht genügend Strom für die meisten Motoren liefern kann. (im Video bei 04:04)

%%VERKABELUNG%%

Code-Erklärung

Der Arduino-Code steuert den L293D-Treiber, der wiederum den DC-Motor steuert. Der Code verwendet PWM, um die Motorgeschwindigkeit zu variieren, und digitale Signale, um die Richtung zu wechseln.

Hier sind die wichtigsten konfigurierbaren Parameter im Code:


#define P1A 10 // Arduino pin connected to L293D input 1A
#define P2A 11 // Arduino pin connected to L293D input 2A
#define EN12 9 // Arduino pin connected to L293D enable pin (1,2EN)

const int speedStep = 15; // Increment for speed changes
const int speedDelay = 1000; // Delay between speed steps (in milliseconds)

DieL293D()Die Funktion steuert die Richtung und Geschwindigkeit des Motors. 'L' lässt den Motor im Uhrzeigersinn drehen, 'R' lässt ihn gegen den Uhrzeigersinn drehen.spdParameter steuert die Geschwindigkeit (0-255) undenaktiviert (1) oder deaktiviert (0) den Motor. (im Video bei 09:24)


void L293D(char dir,int spd, int en)
{
  if(dir =='L') // Clockwise rotation
  {
    // ...
    analogWrite(P1A,spd); // Set speed using PWM
    digitalWrite(P2A,LOW); 
  }else{ // Counter-clockwise rotation
    // ...
    digitalWrite(P1A,LOW);
    analogWrite(P2A,spd); // Set speed using PWM
  }
}

Live-Projekt/Demonstration

Das Video zeigt das Projekt in Aktion und demonstriert die Änderungen der Motordrehzahl und -richtung. Die Oszilloskopwerte visualisieren die PWM-Signale, die den Motor steuern. (im Video bei 11:07)

Kapitel

  • [00:00] Einführung in die DC-Motorsteuerung mit L293D
  • [00:30] Projektvorführung und Erklärung
  • [01:12] L293D Motorsteuerung Überblick
  • [02:08] DC-Motor-Spezifikationen
  • [02:30] L293D Datenblatt Erklärung
  • [04:40] Erklärung und Demonstration der Verdrahtung
  • [07:05] Arduino-Code-Erklärung
  • [11:07] Projektvorführung und Oszilloskopmessungen
144-Arduino source for L293D motor driver (loop)
Sprache: C++
/*
 * This is the Arduino code to control the speed of a motor using an L293D DC motor driver.

Watch instructions for this video: https://youtu.be/akQoGNUzhHI

 // Written for Robojax.com video 

 * Code is available at http://robojax.com/learn/arduino

 * 
 // Written by Ahmad S. for Robojax.com on 
// August 11, 2018 at 13:23 in Ajax, Ontario, Canada
// This code is AS IS without warranty. You may share it if you keep this note with the code.
*/
// DC motor control
#define P1A 10 // define pin 10 as P1A
#define P2A 11 // define pin 11 as P2A
#define EN12 9 // define pin 9 as the 1,2EN enable

const int speedStep =15;
const int speedDelay = 1000;// delay between speed increment

void setup() {
  // L293 Motor Control Code by Robojax.com 20180811
  Serial.begin(9600);// setup Serial Monitor to display information
  pinMode(P1A, OUTPUT);// define pin as OUTPUT for P1A
  pinMode(P2A, OUTPUT);// define pin as OUTPUT for P2A
  pinMode(EN12, OUTPUT);// define pin as OUTPUT for 1,2EN

  Serial.println("Robojax");
  Serial.println("L293D Motor Speed Control");
  
  // L293 Motor Control Code by Robojax.com 20180811   
}

void loop() {
  // L293D Motor Control Code by Robojax.com 20180811

 for(int speed=0; speed<=255; speed +=speedStep)
 {
  L293D('L',speed, 0);// 
  delay(speedDelay);// delay between each step
 }

  delay(50);// 50 millisecond delay
  // L293D Motor Control Code by Robojax.com 20180810 
}//loop end




/*
 * L293D(char dir,int spd, int en)
 * dir is a character: 'L' for clockwise direction
 *  or 'R' for counter-clockwise direction
 *  en is an integer: 1 to rotate, 0 to stop
 *  spd is the speed value from 0 to 255
 */
void L293D(char dir,int spd, int en)
{
  if(dir =='L')
  {
    if(en ==0){
       Serial.println("CW Motor Stopped");
    }else{
       Serial.print("Rotating CW: "); 
       Serial.println(spd);//print actual speed value        
    }
    digitalWrite(EN12 ,en);// Enable 1A and 2A 
    analogWrite(P1A,spd);// send PWM with spd value to P1A
    digitalWrite(P2A,LOW);// LOW signal to P2A       
   
  }else{
    if(en ==0){
       Serial.println("CCW Motor Stopped");
    }else{
       Serial.print("Rotating CCW: "); 
       Serial.println(spd);//print actual speed value     
    }    
    digitalWrite(EN12 ,en);// Disable 1A and 2A    
    digitalWrite(P1A,LOW);// Keep this pin LOW
    analogWrite(P2A,spd);// send PWM with spd value to  P2A  
  }
}//L293D end
145-Source for a simple L293D motor controller using Arduino (CW, CCW, and STOP)
Sprache: C++
++
/*

 * This is the Arduino code to control the speed of a motor using an L293D DC motor driver.
 * This code will control the motor with different directions and speed.

Watch instructions for this video: https://youtu.be/akQoGNUzhHI

 // Written for Robojax.com video 

 * Code is available at http://robojax.com/learn/arduino

 * 
 // Written by Ahmad Shamshiri for Robojax.com on 
// August 11, 2018 at 13:23 in Ajax, Ontario, Canada.
// This code is AS IS without warranty. You may share it if you keep this note with the code.
*/
// DC motor control
#define P1A 10 // define pin 10 as P1A
#define P2A 11 // define pin 11 as P2A
#define EN12 9 // define pin 9 as the 1,2EN enable

const int speedStep =15;
const int speedDelay = 1000;// delay between speed increment

void setup() {
  // L293 Motor Control Code by Robojax.com 20180811
  Serial.begin(9600);// setup Serial Monitor to display information
  pinMode(P1A, OUTPUT);// define pin as OUTPUT for P1A
  pinMode(P2A, OUTPUT);// define pin as OUTPUT for P2A
  pinMode(EN12, OUTPUT);// define pin as OUTPUT for 1,2EN

  Serial.println("Robojax");
  Serial.println("L293D Motor Speed Control");
  
  // L293 Motor Control Code by Robojax.com 20180811   
}

void loop() {
  // L293D Motor Control Code by Robojax.com 20180811


  L293D('L',255, 1);// maximum speed to the LEFT
  delay(3000);// wait for 3 seconds

  L293D('L',255, 0);// stop motor
  delay(2000);// wait for 2 seconds

  L293D('L',127, 1);// half speed to the LEFT
  delay(3000);// wait for 3 seconds  

  L293D('L',255, 0);// stop motor
  delay(2000);// wait for 2 seconds

  L293D('R',90, 1);// slow to the RIGHT
  delay(3000);// wait for 3 seconds  

  L293D('L',255, 0);// stop motor
  delay(2000);// wait for 2 seconds

  // L293D Motor Control Code by Robojax.com 20180810 
}//loop end




/*
 * L293D(char dir,int spd, int en)
 * dir is a character: 'L' for clockwise (CW) direction
 *  or 'R' for counter-clockwise (CCW) direction.
 *  en is an integer: 1 to rotate, 0 to stop.
 *  spd is the speed value from 0 to 255.
 */
void L293D(char dir,int spd, int en)
{
  if(dir =='L')
  {
    if(en ==0){
       Serial.println("CW Motor Stopped");
    }else{
       Serial.print("Rotating CW: "); 
       Serial.println(spd);//print actual speed value        
    }
    digitalWrite(EN12 ,en);// Enable 1A and 2A 
    analogWrite(P1A,spd);// send PWM with spd value to P1A
    digitalWrite(P2A,LOW);// LOW signal to P2A       
   
  }else{
    if(en ==0){
       Serial.println("CCW Motor Stopped");
    }else{
       Serial.print("Rotating CCW: "); 
       Serial.println(spd);//print actual speed value     
    }    
    digitalWrite(EN12 ,en);//enable 1A and 2A    
    digitalWrite(P1A,LOW);// Keep it LOW P1A
    analogWrite(P2A,spd);// send PWM with spd value to  P2A  
  }
}//L293D end

Dateien📁

Keine Dateien verfügbar.