Stap 3: Controle van de dc-motoren met PWM - geen Gyro-verbindingen
Zo moet u in eerste instantie mount de Uno en de L298 H-brug. Alleen sommige boorgaten en hechten via kleine schroeven en spacers als je wilt. Want het is een kunststof back-hoeft u niet bang over isolatie. Ik gemonteerd het Uno aan de boven- en de H-brug eronder. De accu wordt gehouden door de zip-banden. Oorspronkelijk gebruikte ik een externe voeding te doen de eerste testen. Ik stel voor u draad van de L298-brug naar de gelijkstroommotoren en doen wat testen eerst. De motoren worden aangedreven door PWM golfvormen. De golfvormen die uit de Arduino komen worden weergegeven in het bovenstaande diagram. De Arduino rijden niet een motor direct zodat deze PWM een H-Bridge-controller rijdt te intensiveren van de spanning en verhogen het huidige besturen. Sommige bruggen H hebben twee ingangen van de logica - een hoog en de andere laag voor forward en het tegenovergestelde voor reverse wordt gehouden. Dit is het geval voor degene die we hier gebruiken. Anderen hebben interne logica en gewoon gebruik maken van hoog/laag voor forward en reverse. De analogWrite (pin, nummer van 0 tot 255) opdracht geeft de sterkte van de PWM die in wezen als gemiddeld out geeft ons een dc-component die van 0 tot een maximaal 255 voor volle snelheid varieert! Bijvoorbeeld met analogWrite(10,255) schrijft max PWM naar pin 10 (die is gewoon dc 5v), analogWrite(10,128) geeft 50% snelheid naar pin 10 en analogWrite(10,64) geeft kwartaal snelheid. Pin 10 zou dan moeten worden aangesloten op de ingang van de PWM van uw H-brug. Zie golfvorm diagrammen.
Lees dit eerst
Wij zullen de 5V geregeld spanning uitgang voor de potentiometers later gebruiken.
Volg de tutorial op dc-motoren door John Boxall
http://tronixlabs.com/News/tutorial-l298n-Dual-mot...
Volg zijn verbindingen zoals we in ons programma gebruiken zullen.
Vervolgens voert u zijn voorbeeld te controleren dat beide motoren in dezelfde richting draaien! Zoniet dan de polariteit omkeren op een van de gewraakte motoren. Ik leunde veel van zijn Arduino tutorial.
Verbindingen zijn als volgt:
Arduino---> L298 H Bridge
D10---> 7
D5---> 12
D9---> IN1
D8---> IN2
D7---> 3
D6---> IN4
Plus de motor verbindingen.
Vergeet niet nul volt via de Arduino verbinding te maken met de nul volt op de H-brug. In feite de nul volt connector op het bord van de brug H nogal druk werd en uiteindelijk heb ik ze allemaal samen te laten robuuste solderen.
Zijn demo-programma is als volgt. Zorg ervoor dat het eerste voordat u doorgaat met het deel van de Gyro werkt.
// connect motor controller pins/to Arduino digital pins
// motor one
int enA = 10;
int in1 = 9;
int in2 = 8;
// motor two
int enB = 5;
int in3 = 7;
int in4 = 6;
void setup()
{
// set all the motor control pins to outputs
pinMode(enA,OUTPUT);
pinMode(enB,OUTPUT);
pinMode(in1,OUTPUT);
pinMode(in2,OUTPUT);
pinMode(in3, OUTPUT);
pinMode(in4,OUTPUT);
}
void demoOne()
{
// this function will run the motors in both directions at a fixed speed
// turn on motor A
digitalWrite(in1,HIGH);
digitalWrite(in2,,LOW);
// set speed to 200 out of possible range 0~255
analogWrite(enA,200);
// turn on motor B
digitalWrite(in3,HIGH);
digitalWrite(in4,LOW);
// set speed to 200 out of possible range 0~255
analogWrite(enB,200);
delay(2000);
// now change motor directions
digitalWrite(in1,LOW);
digitalWrite(in2,HIGH);
digitalWrite(in3,LOW);
digitalWrite(in4,HIGH);
delay(2000);
// now turn off motors
digitalWrite(in1,LOW);
digitalWrite(in2,LOW);
digitalWrite(in3,LOW);
digitalWrite(in4,LOW);
}
void demoTwo()
{
// this function will run the motors across the range of possible speeds
// note that maximum speed is determined by the motor itself and the operating voltage
// the PWM values sent by analogWrite() are fractions of the maximum speed possible by your hardware
// turn on motors
digitalWrite(in1,LOW);
digitalWrite(in2,HIGH);
digitalWrite(in3,LOW);
digitalWrite(in4,HIGH);
// accelerate from zero to maximum speed
for (int i = 0; i< 256; i++)
{
analogWrite(enA,i);
analogWrite(enB,i);
delay(20);
}
// decelerate from maximum speed to zero
for (int i = 255; i>= 0; --i)
{
analogWrite(enA,i);
analogWrite(enB,i);
delay(20);
}
// now turn off motors
digitalWrite(in1,LOW);
digitalWrite(in2,LOW);
digitalWrite(in3,LOW);
digitalWrite(in4,LOW);
}
void loop()
{
demoOne();
delay(1000);
demoTwo();
delay(1000);
}