En nybörjares guide till Arduino (13 / 15 steg)
Steg 13: Köra motorer
DC-motorer
Med de metoder som beskrivs i föregående steg, kan du bara snurra motorn i en riktning. Du kan ändra riktning, behöver du en H-bron (kallas ibland en full bro). Den består av 2 NPN och 2 PNP transistorer, eller 2 N-kanal och 2 P-kanal fETsna.
Ta en titt på bilden för en typisk MOSFET H-bridge circuit.
Obs: du kan inte bara ersätta MOSFETs i detta schema av transistorer: transistorer måste basera nuvarande, fETsna behöver utfärda utegångsförbud spänning.
Låt oss ta reda på hur denna krets fungerar:
Vi kallar den vänstra ingången input A och rätta ingång B.
När ingång A är låg, genomföra transistor Q1 inte. Detta innebär att portarna till Q2 och Q3 är hög (de är anslutna till VSS genom R1). Q3 är en N-kanal MOSFET, så det börjar bedriva (eftersom den har en positiv gate spänning). Q2 är en P-kanal MOSFET, så den inte genomföra (eftersom det har ingen spänningsskillnad mellan grinden och källan, båda är anslutna till VSS).
Den vänstra terminalen av motorn är nu anslutna till marken, via Q3.
När input B är hög, bedriver Q4. Detta innebär att utfärda utegångsförbud för av Q5 och Q6 är låga. (De är anslutna till marken genom Q4 och R2 spelar ingen roll i detta fall). F6 är en N-kanal MOSFET, så den inte genomföra (eftersom det har ingen spänningsskillnad mellan grinden och källan, båda är anslutna till marken).
Q5 är en P-kanal MOSFET, så det börjar bedriva (eftersom den har en negativ gate spänning, i förhållande till källan).
Rätt terminalen av motorn är nu anslutna till VSS genom Q5.
I detta fall kommer att motorn snurra motsols.
Den andra bilden är en motsvarande krets för denna situation.
Du kan redan gissa att om A är hög, och B är låg, motorn kommer att snurra medsols. Om A och B är både hög eller båda låg, inte kommer att motorn snurra, eftersom båda terminalerna är ansluten till antingen VSS eller marken. (så ingen spänningsskillnad)
Även om du kan bygga denna krets själv, är det sättet lättare att använda en IC. Exempelvis fick jag några L6202 marker av en gammal skrivare. En annan H-bridge chip är L298 eller L293.
De ansluter direkt till 2 digital stiften på Arduino, och de flesta av dem har också en "Aktivera" PIN-kod, som du kan använda med en tredje pwm stift, för att kontrollera motorns hastighet.
Adafruit har en riktigt bra handledning om hur man använder dem: https://learn.adafruit.com/adafruit-arduino-lesson...
Stegmotorer
En annan vanligt förekommande motor är stegmotor.
En vanlig DC motor har en snurrande spole inuti två permanenta magneter. Stegmotorer har å andra sidan, en rörlig magnet (rotor) och några stillastående spolar (stator). Genom att aktivera spolarna i en viss sekvens, kommer att rotorn snurra.
Följande videos hjälper dig att förstå hur det fungerar:
För att köra en unipolärstepper, behöver du bara 4 NPN-transistorer, eller 4 N-kanal MOSFETs. (se bild)
För att hitta pinout för din stepper, slå upp i databladet, eller använda en multimeter, och mäta resistansen mellan trådarna. Vissa kombinationer av tråd har ett motstånd som är 2 gånger högre än de andra, dessa är de yttre två ledningarna i schematiskt.
Anslut två center trådarna till positiva binda av strömförsörjningen och de yttre ledningarna till samlare av driva transistorer (se schema). Beräkna lämplig bas motstånden, som förklaras i föregående steg, och ansluta dem till stift 8, 9, 10, 11 av Arduino. Glöm inte att ansluta marken för strömförsörjningen till marken i din Arduino.
För att köra en bipolärstepper, behöver du 2 H-broar. Anslut utgångarna av varje H-brygga till en spole i nummerlistan. Anslut ingångarna av H-broar till stift 8, 9, 10, 11 av Arduino. Glöm inte att ansluta marken för strömförsörjningen till marken i din Arduino. Anslut den aktivera linjen till VSS.
Obs: stegmotorer dra mycket ström, så du inte kan använda ombord strömtillförseln till Arduino. Du bör också använda hög effekt transistorer eller MOSFETs. Kontrollera temperaturen i transistorerna, och Lägg till en kylfläns vid behov.
Nu öppnar i stepper_oneRevolution exempel (fil > exempel > Stepper) och ändra antalet steg per varv att matcha din motor.
Längst upp i filen finns det en rad
#include <stepper.h >
Detta lägger bara koden o filen Stepper.h till skiss, så du kan använda dess funktioner. Detta kallas stepper bibliotek.
På rad 24 skapar vi en instans av Stepper klass. Instansen som kallas "myStepper" (detta namn är bara godtyckliga), och har 5 parametrar: antalet steg i ett varv (360°) och de 4 stift som ansluter till baserna av transistorerna.
En klass har en uppsättning funktioner, att köra en funktion för en viss instans, används en punkt (fullt stopp): instance.function(arguments);
myStepper.setSpeed(60);
Kom ihåg Serial.print (...)? Detta fungerar på ett liknande sätt.
SetSpeed(rpm) funnction anger hastigheten, i rotationer per minimalt (så det beror på antalet steg per varv).
En annan funktion i klassen Stepper är step(steps), det visar bara motor för ett givet antal steg. Om detta tal är positivt kan flyttas det medsols, om den är negativ, det kommer att röra sig motsols.
Ladda upp exemplet till Arduino och motorn ska vända 360° medurs, sedan 360° motsols, och så vidare. Om det inte, men bara vibrerar, försök byta 2 utgångsstift, tills det fungerar. Du kan byta fysiska stiften till Arduino, eller bara ändra PIN-kod på rad 24. (t.ex. 9, 8, 10, 11 istället för 8, 9, 10, 11)
Användning av klasser gör det mycket enkelt att skapa flera Stepper instanser. Titta på exemplet _2steppers_oneRevolution.
När en stepper inte går, håller det en spole på block motorn, så det inte rör sig. Detta drar mycket ström, men, och genom sig och transistorerna kan få mycket varmt.
För att stoppa detta, kan du bara utföra en digitalWrite (pin, låg) på de 4 stiften på nummerlistan.
Om du använder en enhet IC (som en H-bro eller en darlington array), kan du också ansluta aktivera PIN-koden till din Arduino. Om du anger det höga, motorn kommer att aktiveras, och när du anger det låga, det blir ingen spänning över motorn alls.
Du kan skapa en egen liten funktion så här inaktiverar stepper, som jag gjorde i exemplet Stepper_stop
voidstepperOff() {
digitalWrite(8,LOW);
digitalWrite(9,LOW);
digitalWrite(10,LOW);
digitalWrite(11,LOW);
}
Du kan göra funktioner som stort sett allt, till exempel om du måste utföra en serie kommandon flera gånger i programmet. En bra tutorial på klasser, funktioner och bibliotek är biblioteket handledning på Arduin