Själv balansera upp och ned pendel (3 / 9 steg)
Steg 3: Kontrollera dc motorer med PWM - inget Gyro anslutningar
Så måste du först montera Uno och L298 H-bron. Bara borra några hål och fäst via små skruvar och distanser om man så vill. Eftersom det är en plast stöd behöver du inte oroa isolering. Jag monterade Uno på toppen och H bron nedanför. Batteriet hålls av zip-band. Ursprungligen använde jag en extern strömkälla för att göra den första provning. Jag föreslår att du binder upp L298 bron till dc-motorer och göra några tester först. Motorerna drivs av PWM vågformer. Den vågformer som kommer ut från Arduino visas i diagrammet ovan. Arduinoen kan inte driva en motor direkt så här PWM driver en H-Bridge controller att öka spänningen och öka köra nuvarande. Några H broar har två logik ingångar - en hålls hög och den andra låg för framåt, och motsatsen för omvänd. Detta är fallet för det som vi använder här. Andra har inre logik och använda bara hög/låg för framåt och bakåt. Kommandot analogWrite (pin, nummer från 0 till 255) ger styrkan av PWM som i huvudsak när i genomsnitt ut ger oss en del-anseendedcen som varierar från 0 till ett maximalt 255 för full fart!! Till exempel med analogWrite(10,255) skriver max PWM till pinne 10 (vilket är bara dc 5v), analogWrite(10,128) ger 50% fart till pin 10 och analogWrite(10,64) ger kvartalet fart. Stift 10 skulle då behöva vara ansluten till PWM-ingången på din H bridge. Se vågformen diagram.
Läs detta först
Vi kommer använda 5V reglerade spänningen utgång för potentiometrar senare.
Följ sedan handledningen på dc-motorer av John Boxall
http://tronixlabs.com/news/tutorial-l298n-Dual-mot...
Följ hans anslutningar som vi kommer att använda dem i vårt program.
Sedan kör hans exempel och kontrollera att båda motorer vända åt samma håll! Om inte sedan vända polariteten på en av de felande motorerna. Jag lutade mycket från hans Arduino tutorial.
Anslutningar är följande:
Arduino---> L298 H Bridge
D10---> 7
D5---> 12
D9---> IN1
D8---> IN2
D7---> IN3
D6---> IN4
Plus de motoriska anslutningarna.
Glöm inte att ansluta noll volt från Arduino till noll volt på H-bron. I själva verket noll volt kontakten på H bridge styrelsen blev ganska trång och jag hamnade lödning dem alla tillsammans för att göra dem robust.
Hans demo program är som följer. Kontrollera att det fungerar först innan du fortsätter till Gyro delen.
Anslut motor controller stift/till Arduino digital pins
motor en
int enA = 10;
int in1 = 9.
int in2 = 8.
motor två
int enB = 5;
int in3 = 7.
int in4 = 6;
void setup()
{
Ange alla de
motorisk kontroll stift till utgångar
pinMode(enA,OUTPUT);
pinMode(enB,OUTPUT);
pinMode(in1,OUTPUT);
pinMode(in2,OUTPUT);
pinMode (in3, produktionen);
pinMode(in4,OUTPUT);
}
void demoOne()
{
denna funktion kommer att köra motorerna i båda riktningarna vid en fast hastighet
slå på motor A
digitalWrite(in1,HIGH);
digitalWrite(in2,,LOW);
inställd hastighet på 200 utanför möjliga intervallet 0 ~ 255
analogWrite(enA,200);
slå på motor B
digitalWrite(in3,HIGH);
digitalWrite(in4,LOW);
inställd hastighet på 200 utanför möjliga intervallet 0 ~ 255
analogWrite(enB,200);
Delay(2000);
nu ändra riktning på motor
digitalWrite(in1,LOW);
digitalWrite(in2,HIGH);
digitalWrite(in3,LOW);
digitalWrite(in4,HIGH);
Delay(2000);
nu stänga av motorer
digitalWrite(in1,LOW);
digitalWrite(in2,LOW);
digitalWrite(in3,LOW);
digitalWrite(in4,LOW);
}
void demoTwo()
{
denna funktion kommer att köra motorerna över hela skalan av möjliga hastighet
Observera att maximal hastighet bestäms av motorn själv och driftspänningen
PWM värden skickas av analogWrite() är fraktioner av den högsta hastigheten som möjligt av din hårdvara
slå på motorer
digitalWrite(in1,LOW);
digitalWrite(in2,HIGH);
digitalWrite(in3,LOW);
digitalWrite(in4,HIGH);
accelerera från noll till högsta hastighet
för (int jag = 0; jag < 256; i ++)
{
analogWrite(enA,i);
analogWrite(enB,i);
Delay(20);
}
retardera från högsta hastighet till noll
för (int jag = 255; jag > = 0; i--)
{
analogWrite(enA,i);
analogWrite(enB,i);
Delay(20);
}
nu stänga av motorer
digitalWrite(in1,LOW);
digitalWrite(in2,LOW);
digitalWrite(in3,LOW);
digitalWrite(in4,LOW);
}
void loop()
{
demoOne();
Delay(1000);
demoTwo();
Delay(1000);
}