kategorier: Microcontroller kredsløb
Antal visninger: 19709
Kommentarer til artiklen: 0
Motor- og servostyring med Arduino
I enkle design af automatiseringssystemer er det ofte nødvendigt ikke kun at læse aflæsninger af sensorer, men også at aktivere mekanismer. Til dette bruges en række elektriske motorer. Den enkleste og mest populære mulighed er en jævnstrømsmotor. Han vandt kærlighedernes kærlighed med sin tilgængelighed, lette hurtigjustering. Hvis opgaven er at flytte en mekanisme til en given vinkel eller afstand, er det praktisk at bruge et servo-drev eller en trinmotor.
I denne artikel ser vi på servoer og små DC-motorer, forbinder dem til et Arduino-kort og justerer DCT.

DC-motor
Den mest almindelige elmotor, der bruges i bærbare enheder, legetøj, radiostyrede modeller og andre enheder. Permanente magneter er fastgjort på den lille elektriske motor på statoren og en vikling på rotoren.

Der tilføres strøm til viklingen gennem børsteindretningen. Børster er lavet af grafit, nogle gange findes kobberglidekontakter. Børster glider over lameller placeret i den ene ende af rotoren. Hvis du ikke går nærmere ind på detaljer, afhænger dens omdrejningshastighed af ankerens viklingsstrøm.

På store jævnstrømsmotorer, på statoren, er der en excitationsvikling, der er forbundet med rotorviklingen (gennem børsteindretningen) på en bestemt måde (seriel, parallel eller blandet excitation). Således opnås det ønskede drejningsmoment og antallet af omdrejninger.
Hastighedskontrol

Når den er tilsluttet lysnettet, begynder DC-motoren at rotere med nominel hastighed. For at reducere hastigheden skal du begrænse strømmen. For at gøre dette introduceres ballastmodstande, men dette reducerer installationens effektivitet som helhed, og der vises en overskydende varmekilde. Brug en anden metode til mere effektiv regulering af spænding og strøm - PWM-kontrol.

En metode til styring af pulsbreddemoduleret signal (spænding) er at generere den ønskede spændingsværdi ved at ændre pulsbredden med en konstant varighed af perioden (frekvens).
Det vil sige, perioden er opdelt i to dele:
1. Impulstid.
2. Pausetid.
Forholdet mellem pulstiden og den totale periode i perioden kaldes pligtcyklus:
Ks = ti / tper
det gensidige kaldes "pligtcyklus":
D = 1 / KZ = tper / t og
For at beskrive PWM-controllerens betjeningstilstand bruges begge koncepter: både driftscyklus og driftscyklus.
Motorens aktuelle forbrug afhænger af dens effekt. Antallet af omdrejninger afhænger som sagt af strømmen. Strømmen kan justeres ved at ændre mængden af spænding, der påføres viklingerne. Når den er drevet af en spænding, der overstiger den nominelle værdi i henhold til motorcertifikatet, vil dens hastighed også overstige den nominelle hastighed. Sådanne driftsformer er imidlertid farlige for motoren, da en større strøm strømmer i viklingerne, hvilket medfører øget opvarmning af dem.
Hvis skader på motoren fra kortsigtede impulser eller gentagne kortsigtede driftsformer er minimale, vil den under langvarig drift ved høj spænding og omdrejningstal brænde ud, eller dens lejer vil varme op og kile, og så vil viklingerne brænde ud, hvis strømforsyningen ikke er afbrudt.
Hvis indgangsspændingen er for lav, kan den lille motor ganske enkelt ikke have nok strøm til at bevæge sig. Derfor er det nødvendigt at eksperimentelt finde ud af den normale hastighed og spænding for en bestemt motor, der ikke overstiger den nominelle.
Vi opretter forbindelse til arduino
Jeg havde en lille motor, ser det ud fra en kassettspiller, hvilket betyder, at dens nominelle spænding vil være under 5 volt, så er outputkraften til arduino nok. Jeg tænker den fra 5V-stiften, dvs. fra output fra den lineære stabilisator placeret på brættet. I henhold til det skema, som du ser nedenfor.
Jeg ved ikke strømmen til denne motor, så jeg tilsluttede den til strømmen, og jeg installerede en felteffekttransistor mellem motoren og strømstiften, på den port, hvortil der blev anvendt et signal fra PWM-udgangen, hvilken som helst af de tilgængelige kan bruges.

For at justere hastigheden tilføjede jeg en variabel modstand til kredsløbet, som forbinder den til den analoge indgang A0. For en hurtig forbindelse brugte jeg en loddetal brødbræt, der også kaldes brødbræt.
Jeg installerede en strømbegrænsende modstand i transistorledningen (for at reducere portladningsstrømmen, dette vil redde porten fra forbrænding og mikrokontrollerens strømforsyning fra bundfald og dens frysning) med 240 ohm, og trak den til jorden med en 12 kOhm modstand, dette skal gøres for at gøre det mere stabilt lukkerbeholderen arbejdede og udledte hurtigere.
Detaljer om felteffekttransistorer beskrevet i en artikel på vores hjemmeside. Jeg brugte en kraftig, almindelig og ikke for dyre mosfet med en n-kanal og indbygget IRF840 omvendt diode.

Sådan ser min laboratoriesamling ud:

PWM-kontrolfunktionen kaldes, når der skrives til den tilsvarende output (3, 5, 6, 9, 10, 11) værdier fra 0 til 255 med AnalogWrite-kommandoen (pin, værdi). Logikken i hendes arbejde er afbildet i nedenstående grafer.

Et sådant signal påføres transistorens port:

Programkoden til skam er kort og enkel, i detaljer er alle disse funktioner beskrevet i tidligere artikler om arduino.
int sensorPin = A0; // input fra potentiometer
int motorPin = 3; // PWM-udgang til porten på kameraet
ugyldig opsætning () {
pinMode (motorPin, OUTPUT);
}
void loop () {
analogWrite (motorPin, kort (analogRead (sensorPin), 0, 1023, 0, 256));
}
I analogWrite-funktionen tildeler jeg en værdi til PWM-output via kortkommandoen, hvis anvendelse det giver dig mulighed for at fjerne flere kodelinjer og en variabel.
Dette er en arbejdsplan, og det er fantastisk til at observere processer, når man styrer belastningen, lysstyrken på lysdioderne, hastigheden på motorerne, du skal bare tilslutte den ønskede last i stedet for motoren. I dette tilfælde, i stedet for 5V, kan enhver spænding tilføres belastningen, for eksempel 12V, glem ikke at forbinde den negative effekt til kontakten, for eksempel 12V, glem ikke at tilslutte den negative effekt til GND-stiften på mikrokontrolkortet.
I arduino er PWM-frekvensen, når den kaldes via analogWrite-funktionen, kun 400 Hz, ved minimumsspændingsværdierne hørtes en brumme af den tilsvarende frekvens fra motorviklingerne.

Servo
En motor, der kan være i en forudbestemt position, og når den udsættes for eksterne faktorer, for eksempel en tvungen afbøjning af skaftet, holder sin position uændret - kaldes et servo-drev. Generelt lyder definitionen lidt anderledes:
Servo er en negativ feedback-drevet motor.
Tre ledninger kommer typisk ud af et servodrev:
-
Plus strøm.
-
Mindre magt.
-
Styresignal.
Servo-drevet består af:
-
DC-motor (eller børsteløs motor);
-
Administrationsgebyrer;
-
Placeringssender (indkoder til servoer med en rotationsvinkel på 360 ° eller et potentiometer til servoer med en rotationsvinkel på 180 °);
-
Reduktion af gear (sænker motorhastigheden og øger drejningsmomentet på drivakslen).
Betjeningsenheden sammenligner signalet på den indbyggede positionssensor og signalet, der kom gennem kontroltråden, hvis de er forskellige, er der en rotation i en vinkel, hvor forskellen mellem signalet er jævnt.

Servos vigtigste egenskaber:
-
Drejningshastighed (tid, i hvilken akslen roterer gennem en vinkel på 60 °);
-
Drejningsmoment (kg / cm, dvs. hvor mange kg motoren kan modstå på håndtaget 1 cm fra skaftet);
-
Forsyningsspænding;
-
Nuværende forbrug;
-
Ved hjælp af kontrolmetoden (analog eller digital er der ingen signifikant forskel, men digital er hurtigere og mere stabil).
Typisk er signalperioden 20 ms, og varigheden af kontrolpulsen:
-
544 μs - svarer til 0 °;
-
2400 μs - svarer til en vinkel på 180 °.
I sjældne tilfælde kan pulslængden variere, f.eks. Henholdsvis 760 og 1520 μs. Disse oplysninger kan afklares i den tekniske dokumentation for drevet. En af de mest populære hobbyservoer er Tower Pro SG90 og lignende modeller.Det er billigt - omkring 4 dollars.

Det holder 1,8 kg / cm på akslen, og komplet med det er monteringsskruer og håndtag med splines til akslen. Faktisk er denne baby ret stærk, og det er meget problematisk at stoppe den med en finger - selve drevet begynder at falde ud af fingrene - sådan er dens styrke.
Servokontrol og Arduino
Som allerede nævnt udføres kontrollen ved at ændre impulsvarigheden, men forveksle ikke denne metode med PWM (PWM), dens korrekte navn er PDM (Pulse Duration Modulation). Lette afvigelser i signalfrekvensen (20 ms - varighed, frekvens 50 Hz) spiller ikke en særlig rolle. Men afvig ikke fra frekvensen med mere end 10 Hz, motoren kan køre stikkende eller brænde ud.

Forbindelsen til arduino er ganske enkel, du kan også tænde drevet fra en 5V-stift, men ikke ønskeligt. Faktum er, at der i starten er et lille spring i strømmen, dette kan forårsage en strømafbrydelse og Falske mikrocontroller-output. Selvom 1 lille drev (type SG90) er mulig, men ikke mere.
For at kontrollere sådanne servoer med arduino har du Servo-biblioteket indbygget i IDE, det har et lille sæt kommandoer:
-
vedhæft () - tilføj en variabel til stiften. Eksempel: drevnavn.tilslut (9) - tilslut en servo til pin 9. Hvis dit drev har brug for ikke-standardlængder af kontrolpulser (544 og 2400 μs), kan de indstilles adskilt med et komma efter pin-nummeret, for eksempel: servo.attach (pin, min vinkel (μs), max vinkel i ISS));
-
skriv () - indstiller aksels rotationsvinkel i grader;
-
writeMicroseconds () - indstiller vinklen gennem pulslængden i mikrosekunder;
-
læse () - bestemmer den aktuelle position af akslen;
-
vedhæftet () - Kontrollerer, om en pin er indstillet med en servo tilsluttet;
-
løsne () - annullér vedhæftede kommando.
Dette bibliotek giver dig mulighed for at kontrollere 12 servoer fra UNO, Nano og lignende boards (mega368 og 168), mens muligheden for at bruge PWM på pin 9 og 10 forsvinder. Hvis du har MEGA, kan du kontrollere de 48. servere, men PWM på stifter 11 og 12 forsvinder, hvis du bruger op til 12 servoer, vil PWM forblive fuldt funktionsdygtig på alle kontakter.
Hvis du har tilsluttet dette bibliotek, vil du ikke være i stand til at arbejde med 433 MHz modtagere / sendere. Der er et Servo2-bibliotek til dette, som ellers er identisk.

Her er et eksempel på koden, som jeg brugte til eksperimenter med et servodrev, det er i standardeksemplet:
#include
Servo myservo; // deklareret variabelnavn for myservo servo
int potpin = 0; // pin for tilslutning af indstillingspotentiometeret
int val; // variabel for at gemme resultaterne af læsning af signalet fra potentiometeret
ugyldig opsætning () {
myservo.attach (9); // sæt 9 pin som kontroloutput for servo
}
void loop () {
val = analoglæse (potpin); // resultater af aflæsning af potentiometer gemt i trans. val, de vil være i området fra 0 til 1023
val = kort (val, 0, 1023, 0, 180); // oversæt måleområdet fra analog indgang 0-1023
// i intervallet af opgaver til servo 0-180 grader
myservo.write (val); // bestå konverteringen signal fra pot-ra til kontrol servo input
forsinkelse (15); // Forsinkelse er nødvendig for stabil drift af systemet

konklusion
Brug af de enkleste elektriske motorer parret med en arduino er en forholdsvis enkel opgave, mens du mestrer dette materiale udvider dine muligheder inden for automatisering og robotik. De enkleste robotter eller radiostyrede modeller af biler består af sådanne motorer, og servoer bruges til at kontrollere hjulets rotation.
I de betragtede eksempler blev et potentiometer brugt til at indstille rotationsvinklen eller rotationshastigheden, en hvilken som helst anden signalkilde kan bruges i stedet, for eksempel kan rotation eller ændring i hastighed forekomme som et resultat af information modtaget fra sensorer.
Et eksempel på brug af servoer i alternativ energi: sporing af forekomsten af sollys og justering af solcellepanelers placering i kraftværker.
For at implementere en sådan algoritme kan du bruge flere fotoresister eller andre optoelektroniske enheder til måling af mængden af indfaldende lys og, afhængigt af deres målinger, indstiller rotationsvinklen for solcellepanelet.
Se også på elektrohomepro.com
: