Stap 2: Controle 2 borstelmotoren DC
De GOduino III maakt gebruik van de L293D h-brug (motor rijder) die is een robuuste en goedkope duik IC dat circuit ontwerp vereenvoudigt. Het heeft ingebouwde EMF bescherming en thermische shutdown ingeval motoren trekken teveel huidige die kan ook schade aan de L293D.
Een enkele L293D kunt 2 geborsteld gelijkstroommotoren met piek/kraam huidige tot 600mA per motor. Piek/kraam huidige is de stroom die de motor trekt wanneer verhinderd draaien terwijl nog aangedreven.
Als u twee L293D ICs meeliften, kunt u dubbele de stroom van de GOduino III tot 1.2a per motor. Dit is meer dan genoeg aan de macht van de meeste gelijkstroommotoren voor kleine robots.
Pololu en Solarbotic, bijvoorbeeld, bieden een brede selectie van motoren die goed binnen de huidige ratings van de L293D werken.
Het L293D logica circuit wordt gevoed via de GOduino III power regulator (7805) maar de L293D van motorische controle circuit rechtstreeks van de accu wordt aangedreven.
Elke motor wordt aangedreven van de L293D via een 2-pins mannelijke header (Motor 1 en 2 van de Motor). De volgorde van een motor palen verbinden met de 2-pins header beslist de draairichting van de motor. U kunt ook motor draairichting van de Arduino schets.
TIP: Soldeer een 0.1uF keramische condensator over de pijlers van uw DC borstelmotor voor toegevoegde circuit stabiliteit. Het verkorten van de leads op de condensator zoveel mogelijk voor betere respons en te voorkomen dat per ongeluk elektrische shorts.
De GOduino III ATmega328 pinnen zijn toegewezen aan de L293D h-brug op deze manier (met behulp van de Arduino pin nummering):
Motor 1 Pole1---> Arduino Pin 4
Motor 1 paal 2---> Arduino Pin 2
Motor 1 inschakelen---> Arduion Pin 5 (PWM)
Motor 2 Pole1---> Arduino Pin 7
Motor 2 competentiepolen2---> Arduino Pin 8
Motor 2 inschakelen---> Arduion Pin 6 (PWM)
DE SOFTWAREBIBLIOTHEEK
Ik schreef de Goduino motor bibliotheek om te elimineren de behoefte om te onthouden van het hoge, lage pin uitgang sequenties moest zetten of stoppen van een motor.
Er zijn 4 functies in de Goduino motor bibliotheek:
- de snelheid van de verzamelingen van het motorSpeed (mot1speed, mot2speed) voor beide motoren.
- motorStop(motorNum) stopt een motor.
- motorForward(motorNum) draait een motor in één richting.
- motorBack(motorNum) draait een motor in de omgekeerde richting.
PARAMETERS
Er zijn twee 2-pins mannelijke koppen op de GOduino III PCB: Motor 1 en Motor 2. Alle functies in de motor Goduino-bibliotheek die een enkele parameter, het is 1 voor Motor 1 of 2 voor Motor 2.
De enige functie die twee parameters is de motorSpeed() functie. De eerste parameter stelt snelheid voor Motor 1 en de tweede sets snelheid voor Motor 2. De maximumsnelheid is 1023. Dit betekent dat uw motor de max snelheid kan worden vergroot of verkleind met 1023 stappen.
De GOduino III-bibliotheek en andere ondersteunende bestanden kunnen worden gedownload van Github:
https://github.com/techbitar/goduino
U kunt de voorbeeldcode (motortest.ino) opgenomen in de bibliotheek van de Goduino onder de map examples te testen en te synchroniseren motor draairichting. De video toont de GOduino III met de test-routine. De Arduino IDE open:
Bestanden/Examples/Goduino/motortest
Opmerking: Ik heb vermeden met behulp van Arduino Uno pin 3 en 11, omdat ze worden gebruikt door de Arduino tone() functie. Dus nu kan ik het opbouwen van een robot die lawaai maakt. (Applaus).
Dit is de test code wordt gebruikt in de video. Controleer mijn Github voor updates en bugfixes:
/*
Bestand: motortest.ino - voorbeeld sketch om te testen de GOduino III robot controller.
Gemaakt door: Hazim Bitar (techbitar op gmail dot com)
Datum: 23 augustus 20012.
Versie: 0.11 beta
Licentie: Vrijgegeven in het publieke domein.
*/
#include < Goduino.h >
Goduino myrobot;
VOID Setup {}
Serial.begin(9600);
Serial.println ("ingestelde snelheid van beide motoren tot 100 (max 1024)");
myrobot.motorSpeed(50,50);
}
void loop {}
Serial.println ("TESTFASE I - beide motoren samen IN dezelfde richting draaien");
delay(3000);
Serial.println ("Spin beide motoren in één richting (3 sec)");
myrobot.motorForward(1);
myrobot.motorForward(2);
delay(3000);
Serial.println ("Stop beide motoren voor 1 sec");
myrobot.motorStop(1);
myrobot.motorStop(2);
delay(1000);
Serial.println ("Spin beide motoren in tegengestelde richting (3 sec)");
myrobot.motorBack(1);
myrobot.motorBack(2);
delay(3000);
Serial.println ("Stop beide motoren voor 1 sec");
myrobot.motorStop(1);
myrobot.motorStop(2);
delay(1000);
//=================================================================================
Serial.println ("TEST fase II - SPIN elke MOTOR OPPOSTE van de andere");
delay(3000);
Serial.println ("Spin motor 1 in één richting, terwijl motor 2 in tegengestelde richting (3 sec)");
myrobot.motorForward(1);
myrobot.motorBack(2);
delay(3000);
Serial.println ("Stop beide motoren voor 1 sec");
myrobot.motorStop(1);
myrobot.motorStop(2);
delay(1000);
Serial.println ("Spin motor 2 in één richting, terwijl 1 motor in tegengestelde richting (3 sec)");
myrobot.motorBack(1);
myrobot.motorForward(2);
delay(3000);
Serial.println ("Stop beide motoren voor 1 sec");
myrobot.motorStop(1);
myrobot.motorStop(2);
delay(1000);
//=================================================================================
Serial.println ("TEST fase III - elke MOTOR draaien terwijl de andere IS gestopt");
delay(3000);
Serial.println ("Spin motor 1 in één richting terwijl motor 2 is gestopt (3 sec)");
myrobot.motorForward(1);
myrobot.motorStop(2);
delay(3000);
Serial.println ("Stop beide motoren voor 1 sec");
myrobot.motorStop(1);
myrobot.motorStop(2);
delay(1000);
Serial.println ("Spin motor 2 in één richting terwijl motor 1 is gestopt (3 sec)");
myrobot.motorForward(2);
myrobot.motorStop(1);
delay(3000);
Serial.println ("Stop beide motoren voor 1 sec");
myrobot.motorStop(1);
myrobot.motorStop(2);
delay(1000);
Serial.println ("Spin motor 1 in omgekeerde richting terwijl motor 2 is gestopt (3 sec)");
myrobot.motorBack(1);
myrobot.motorStop(2);
delay(3000);
Serial.println ("Stop beide motoren voor 1 sec");
myrobot.motorStop(1);
myrobot.motorStop(2);
delay(1000);
Serial.println ("Spin motor 2 in omgekeerde richting terwijl motor 1 is gestopt (3 sec)");
myrobot.motorBack(2);
myrobot.motorStop(1);
delay(3000);
Serial.println ("Stop beide motoren voor 1 sec");
myrobot.motorStop(1);
myrobot.motorStop(2);
delay(1000);
}