kategorier: Mikrokontrollkretser
Antall visninger: 19709
Kommentarer til artikkelen: 0
Motor- og servokontroll med Arduino
I enkle design av automatiseringssystemer er det ofte nødvendig ikke bare å lese avlesningene til sensorer, men også å sette i gang mekanismer. Til dette brukes en rekke elektriske motorer. Det enkleste og mest populære alternativet er en likestrømsmotor. Han vant kjærlighetens kjærlighet med sin tilgjengelighet, enkle hastighetsjustering. Hvis oppgaven er å flytte en hvilken som helst mekanisme til en gitt vinkel eller avstand, er det praktisk å bruke en servostasjon eller en stepper-motor.
I denne artikkelen ser vi på servoer og små likestrømsmotorer, kobler dem til et Arduino-kort og justerer DCT.

DC-motor
Den vanligste elektriske motoren som brukes i bærbare enheter, leker, radiostyrte modeller og andre enheter. Permanente magneter er festet på den lille elektriske motoren på statoren, og en vikling på rotoren.

Strøm tilføres viklingen gjennom børsteenheten. Børster er laget av grafitt, noen ganger finnes kobberglidekontakter. Børster glir over lameller som ligger i den ene enden av rotoren. Hvis du ikke går inn på detaljer, avhenger dens rotasjonshastighet av ankerens viklingsstrøm.

På store likestrømsmotorer, på statoren, er en eksitasjonsvikling viklet, koblet til rotorviklingen (gjennom børsteenheten) på en viss måte (sekvensiell, parallell eller blandet eksitasjon). Dermed oppnås ønsket dreiemoment og antall omdreininger.
Fartskontroll

Når tilkoblet strømnettet begynner DC-motoren å rotere med nominelt turtall. For å redusere hastigheten må du begrense strømmen. For å gjøre dette introduseres ballastmotstander, men dette reduserer effektiviteten til installasjonen som helhet og det vises en overflødig varmekilde. For en mer effektiv regulering av spenning og strøm, brukes en annen metode - PWM-regulering.

En metode for å kontrollere pulsbreddemodulert signal (spenning) er å generere den ønskede spenningsverdien ved å endre pulsbredden, med en konstant varighet av perioden (frekvens).
Det vil si at perioden er delt inn i to deler:
1. Impulstid.
2. Pause tid.
Forholdet mellom pulstiden og den totale tiden av perioden kalles plikt syklus:
Ks = ti / tper
det gjensidige kalles "plikt syklus":
D = 1 / KZ = tper / t og
For å beskrive driftsmodusen til PWM-kontrolleren brukes begge konseptene: både driftssyklus og driftssyklus.
Motorens strømforbruk avhenger av kraften. Antall revolusjoner avhenger som sagt av strømmen. Strømmen kan justeres ved å endre spenningsmengden som påføres viklingene. Når den drives av en spenning som overstiger den nominelle verdien i henhold til motorpasset, vil dens hastighet også overstige den nominelle hastigheten. Slike driftsformer er imidlertid farlige for motoren, siden en større strøm strømmer i viklingene, noe som forårsaker økt oppvarming.
Hvis skade på motoren fra kortsiktige impulser eller gjentatte kortsiktige driftsformer er minimal, vil den under langvarig drift ved høyspenning og omdreininger brenne ut, eller lagrene vil varme seg opp og kile, og så vil viklingene brenne ut hvis strømforsyningen ikke er koblet fra.
Hvis inngangsspenningen er for lav, kan det hende at den lille motoren rett og slett ikke har nok strøm til å bevege seg. Derfor er det nødvendig å eksperimentelt finne ut den normale hastigheten og spenningen for en bestemt motor som ikke overskrider den nominelle.
Vi kobler oss til arduino
Jeg hadde en liten motor, ser det ut fra en kassettspiller, noe som betyr at nominell spenning vil være under 5 volt, da vil utgangseffekten til arduino være nok. Jeg får strøm fra 5V-stiften, dvs. fra utgangen fra den lineære stabilisatoren som er plassert på brettet. I henhold til ordningen som du ser nedenfor.
Jeg vet ikke strømmen til denne motoren, så jeg koblet den til strømmen, og jeg installerte en felteffekttransistor mellom motoren og strømstiften, på porten som signal fra PWM-utgangen ble brukt til, kan noen av de tilgjengelige brukes.

For å justere hastigheten la jeg en variabel motstand til kretsen, og koblet den til den analoge inngangen A0. For en rask tilkobling brukte jeg en loddløs brødplate, som også kalles brødplaten.
Jeg installerte en strømbegrensende motstand i transistorledningene (for å redusere portens ladestrøm, vil dette redde porten fra forbrenning og mikrokontrollerens strømforsyning fra innsynkning og dens frysing) med 240 ohm, og dro den til bakken med en 12 kOhm motstand, dette må gjøres for å gjøre den mer stabil lukkerbeholderen fungerte og utladet raskere.
Detaljer om felteffekttransistorer beskrevet i en artikkel på nettstedet vårt. Jeg brukte en kraftig, vanlig og ikke for dyr mosfet med en n-kanal og innebygd IRF840 omvendt diode.

Slik ser laboratoriemontasjen min ut:

PWM-kontrollfunksjonen kalles når du skriver til tilsvarende utgang (3, 5, 6, 9, 10, 11) verdier fra 0 til 255 med AnalogWrite-kommandoen (pin, value). Logikken i arbeidet hennes er avbildet i grafene nedenfor.

Et slikt signal tilføres porten til transistoren:

Programkoden til skam er kort og enkel, i detalj er alle disse funksjonene beskrevet i tidligere artikler om arduino.
int sensorPin = A0; // inngang fra potensiometer
int motorPin = 3; // PWM-utgang til porten til kameraet
ugyldig oppsett () {
pinMode (motorPin, OUTPUT);
}
void loop () {
analogWrite (motorPin, kart (analogRead (sensorPin), 0, 1023, 0, 256));
}
I analogWrite-funksjonen tildeler jeg en verdi til PWM-utgangen, gjennom kartkommandoen, gjør det mulig å fjerne flere kodelinjer og en variabel.
Dette er et arbeidsskjema, og det er flott for å observere prosesser når du kontrollerer lastkraften, lysstyrken på lysdiodene, hastigheten på motorene, du trenger bare å koble ønsket last i stedet for motoren. Samtidig, i stedet for 5V, kan en hvilken som helst spenning tilføres belastningen, for eksempel 12V, ikke glem å koble minus-strømforsyningen til kontakten, for eksempel 12V, ikke glem å koble minus-strømforsyningen til GND-stiften på mikrokontrollbordet.
I arduino er PWM-frekvensen, når den kalles via analogWrite-funksjonen, bare 400 Hz, ved minste spenningsverdier ble det hørt en brum med tilsvarende frekvens fra motorviklingene.

Servo
En motor som kan være i en forhåndsbestemt stilling, og når den utsettes for ytre faktorer, for eksempel en tvungen avbøyning av akselen, holder sin stilling uendret - kalles et servodrev. Generelt høres definisjonen litt annerledes ut:
Servo er en negativ tilbakemeldingsmotor.
Vanligvis kommer tre ledninger ut av en servo-stasjon:
-
Pluss kraft.
-
Mindre kraft.
-
Kontrollsignal.
Servo-stasjonen består av:
-
DC-motor (eller børsteløs motor);
-
Administrasjonsgebyr;
-
Posisjonssender (koder for servoer med en rotasjonsvinkel på 360 ° eller et potensiometer for servoer med en rotasjonsvinkel på 180 °);
-
Reduserer giret (senker motorhastigheten og øker dreiemomentet på drivakselen).
Kontrollenheten sammenligner signalet på den innebygde posisjonssensoren og signalet som kom gjennom kontrolltråden, hvis de er forskjellige, så er det en rotasjon i en vinkel der forskjellen mellom signalet er jevn.

Hovedtrekk ved servoer:
-
Dreiehastighet (tid hvor akselen roterer gjennom en vinkel på 60 °);
-
Dreiemoment (kg / cm, dvs. hvor mange kilo motoren tåler på spaken 1 cm fra akselen);
-
Forsyningsspenning;
-
Nåværende forbruk;
-
Ved hjelp av kontrollmetoden (analog eller digital er det ingen vesentlig forskjell, men digital er raskere og mer stabil).
Typisk er signalperioden 20 ms, og varigheten av kontrollpulsen:
-
544 μs - tilsvarer 0 °;
-
2400 μs - tilsvarer en vinkel på 180 °.
I sjeldne tilfeller kan pulslengden variere, for eksempel henholdsvis 760 og 1520 μs. Denne informasjonen kan tydeliggjøres i den tekniske dokumentasjonen for stasjonen. En av de mest populære hobbyservoer er Tower Pro SG90 og lignende modeller.Det er billig - omtrent 4 dollar.

Den holder 1,8 kg / cm på skaftet, og komplett med det er monteringsskruer og spaker med snor for akselen. Faktisk er denne babyen ganske sterk, og det er veldig problematisk å stoppe den med en finger - selve stasjonen begynner å slippe ut av fingrene - slik er styrken.
Servokontroll og Arduino
Som allerede nevnt utføres kontrollen ved å endre pulsvarighet, men ikke forveksle denne metoden med PWM (PWM), det riktige navnet er PDM (Pulse Duration Modulation). Lite avvik i signalfrekvensen (20 ms - varighet, frekvens 50 Hz) spiller ikke en spesiell rolle. Men ikke avvik fra frekvensen med mer enn 10 Hz, motoren kan gå ryk eller brenne ut.

Tilkoblingen til arduino er ganske enkel, du kan også drive stasjonen fra en 5V-stift, men ikke ønskelig. Faktum er at det i starten er et lite hopp i strømmen, dette kan føre til et kraftuttrekk og Falske mikrokontrollutganger. Selv om en liten stasjon (type SG90) er mulig, men ikke mer.
For å kontrollere slike servoer med arduino, har du Servo-biblioteket innebygd i IDE, det har et lite sett med kommandoer:
-
vedlegg () - legg til en variabel i pinnen. Eksempel: drive name.attach (9) - koble en servo til pin 9. Hvis stasjonen din trenger ikke-standardlengder på kontrollpulser (544 og 2400 μs), kan de spesifiseres adskilt med komma etter pinnetallet, for eksempel: servo.attach (pin, min vinkel (μs), max vinkel i ISS));
-
skriv () - angir akselenes rotasjonsvinkel i grader;
-
writeMicroseconds () - angir vinkelen gjennom pulslengden i mikrosekunder;
-
lese () - bestemmer den nåværende posisjonen til akselen;
-
vedlagt () - Sjekker om en pinne er satt med en servo tilkoblet;
-
løsne () - avbryt vedleggskommandoen.
Dette biblioteket lar deg kontrollere 12 servoer fra UNO, Nano og lignende brett (mega368 og 168), mens muligheten til å bruke PWM på pinne 9 og 10 forsvinner. Hvis du har MEGA, kan du kontrollere de 48. serverne, men PWM på pinner 11 og 12 vil forsvinne, hvis du bruker opptil 12 servoer, vil PWM forbli fullt funksjonell på alle kontakter.
Hvis du koblet til dette biblioteket, vil du ikke kunne jobbe med 433 MHz mottakere / sendere. Det er et Servo2-bibliotek for dette, som ellers er identisk.

Her er et eksempel på koden som jeg brukte til eksperimenter med en servostasjon, den er i standardeksemplet:
#include
Servo myservo; // erklært variabelnavn for myservo servo
int potpin = 0; // pin for tilkobling av innstillingspotensiometer
int val; // variabel for å lagre resultatene av lesing av signalet fra potensiometeret
ugyldig oppsett () {
myservo.attach (9); // sett 9 pinner som kontrollutgang for servo
}
void loop () {
val = analogRead (potpin); // resultater av lesing av potensiometeret som er lagret i trans. val, vil de være i området fra 0 til 1023
val = kart (val, 0, 1023, 0, 180); // oversette måleområdet fra analog inngang 0-1023
// i området for oppgaver for servo 0-180 grader
myservo.write (val); // pass konverteringen signal fra pot-ra til kontroll servoinngang
forsinkelse (15); // forsinkelse er nødvendig for stabil drift av systemet

konklusjon
Å bruke de enkleste elektriske motorene sammenkoblet med en arduino er en ganske enkel oppgave, mens mestring av dette materialet utvider mulighetene dine innen automatisering og robotikk. De enkleste robotene eller radiostyrte modellene av biler består av slike motorer, og servoer brukes til å kontrollere rotasjonen av hjulene.
I eksemplene som ble vurdert ble et potensiometer brukt til å stille inn rotasjonsvinkelen eller rotasjonshastigheten, hvilken som helst annen signalkilde kan brukes i stedet, for eksempel kan rotasjon eller endring i hastighet oppstå som et resultat av informasjon mottatt fra sensorer.
Et eksempel på bruk av servoer i alternativ energi: sporing av forekomst av sollys og justering av solcellepanelers plassering i kraftverk.
For å implementere en slik algoritme, kan du bruke flere photoresists eller andre optoelektroniske enheter for å måle mengden innfallende lys og, avhengig av avlesninger, innstille rotasjonsvinkelen til solcellepanelet.
Se også på elektrohomepro.com
: