kategorier: Mikrokontrollkretsar
Antal visningar: 19709
Kommentarer till artikeln: 0

Motor- och servokontroll med Arduino

 

I enkla konstruktioner av automatiseringssystem är det ofta nödvändigt att inte bara läsa avläsning av sensorer utan också att sätta igång mekanismer. För detta används en mängd olika elektriska motorer. Det enklaste och mest populära alternativet är en likströmsmotor. Han vann älskarnas kärlek med sin tillgänglighet, lätthet av snabbjustering. Om uppgiften är att flytta någon mekanism till en given vinkel eller avstånd är det bekvämt att använda en servodrift eller en stegmotor.

I den här artikeln tittar vi på servon och små likströmsmotorer, ansluter dem till ett Arduino-kort och justerar DCT.

Motor- och servokontroll med Arduino

DC-motor

Den vanligaste elmotorn som används i bärbara enheter, leksaker, radiostyrda modeller och andra enheter. Permanenta magneter är fixerade på den lilla elmotorn på statorn och en lindning på rotorn.

DC-motor

Ström matas till lindningen genom borstmonteringen. Borstar är gjorda av grafit, ibland koppar glidkontakter finns. Borstar glider över lameller som ligger i ena änden av rotorn. Om du inte går in på detaljer beror dess rotationshastighet på ankarens lindningsström.

Collector Motor Anchor

På stora likströmsmotorer, på statorn, är en excitationslindning ansluten, ansluten till rotorlindningen (genom borstmonteringen) på ett visst sätt (sekventiell, parallell eller blandad excitation). Således uppnås det önskade vridmomentet och antalet varv.


Hastighetskontroll

Elektrisk likströmsmotor

När DC-motorn är ansluten till elnätet börjar rotera med nominellt varvtal. För att minska hastigheten måste du begränsa strömmen. För att göra detta införs ballastmotstånd, men detta minskar installationens effektivitet som helhet och en överskottsvärmekälla visas. För en mer effektiv reglering av spänning och ström används en annan metod - PWM-kontroll.

PWM-kontroll

En metod för att styra pulsbreddmodulerad signal (spänning) är att generera det önskade spänningsvärdet genom att ändra pulsbredden med en konstant varaktighet på perioden (frekvens).

Det vill säga perioden är uppdelad i två delar:

1. Impulstid.

2. Pausa tid.

Förhållandet mellan pulstiden och periodens totala tid kallas arbetscykeln:

Ks = ti / tper

det ömsesidiga kallas "tullcykel":

D = 1 / KZ = tper / t och

För att beskriva PWM-styrenhetens driftläge används båda koncepten: både arbetscykel och arbetscykel.

Motorens nuvarande förbrukning beror på dess effekt. Antalet varv, som sagt, beror på strömmen. Strömmen kan justeras genom att ändra mängden spänning som appliceras på lindningarna. I själva verket, när den drivs av en spänning som överstiger det nominella värdet enligt motorcertifikatet, kommer dess hastighet också att överskrida den nominella hastigheten. Sådana driftsätt är emellertid farliga för motorn, eftersom en större ström flyter i lindningarna, vilket orsakar deras ökade uppvärmning.

Om skador på motorn på grund av kortvariga impulser eller upprepade kortvariga driftsätt är minimala, kommer den under långvarig drift vid högspänning och varv att bränna ut, eller dess lager kommer att värmas upp och kilas, och sedan kommer lindningarna att brännas ut om strömförsörjningen inte är frånkopplad.

Om ingångsspänningen är för låg kan den lilla motorn helt enkelt inte ha tillräckligt med kraft för att röra sig. Därför är det nödvändigt att experimentellt ta reda på den normala hastigheten och spänningen för en viss motor som inte överstiger den nominella.


Vi ansluter till arduino

Jag hade en liten motor liggande, verkar det från en kassettspelare, vilket innebär att dess nominella spänning kommer att vara under 5 volt, då kommer uteffekten för arduino att räcka. Jag kommer att driva den från "5V" -stiftet, dvs. från utgången från den linjära stabilisatorn som finns på kortet. Enligt schemat som du ser nedan.

Jag vet inte strömmen på denna motor, så jag anslöt den till strömmen, och jag installerade en fälteffekttransistor mellan motorn och strömstiftet, på grinden som en signal från PWM-utgången applicerades, någon av de tillgängliga kan användas.

Arduino DC motoranslutningsdiagram

För att justera hastigheten, lägger jag till ett variabelt motstånd till kretsen, ansluten till den analoga ingången A0. För en snabb anslutning använde jag en lödfri brödskiva, som också kallas brödskivan.

Jag installerade ett strömbegränsande motstånd i transistorkablarna (för att minska grindladdningsströmmen, detta kommer att rädda porten från förbränning och mikrokontrollerns strömförsörjning från nedgång och dess frysning) med 240 ohm, och drog den till marken med en 12 kOhm motstånd, detta måste göras för att göra det mer stabilt slutartanken fungerade och lossades snabbare.

Detaljer om fälteffekttransistorer som beskrivs i en artikel på vår webbplats. Jag använde en kraftfull, vanlig och inte för dyr mosfet med en n-kanal och inbyggd IRF840 omvänd diod.

Utförande och definierande del av kretsen

Så här ser min laboratoriummontering ut:

DC-motor och arduino

PWM-styrfunktionen anropas när man skriver till motsvarande utgång (3, 5, 6, 9, 10, 11) värden från 0 till 255 med kommandot AnalogWrite (stift, värde). Logiken i hennes verk visas i diagrammen nedan.

PWM-styrfunktion

En sådan signal appliceras på transistorns grind:

En sådan signal appliceras på transistorns grind

Programkoden till skam är kort och enkel, i detalj har alla dessa funktioner beskrivits i tidigare artiklar om arduino.

int sensorPin = A0; // ingång från potentiometer

int motorPin = 3; // PWM-utgång till kamerans grind

ogiltig installation () {

pinMode (motorPin, OUTPUT);

}

void loop () {

analogWrite (motorPin, karta (analogRead (sensorPin), 0, 1023, 0, 256));

}

I analogWrite-funktionen tilldelar jag ett värde till PWM-utgången, genom kartkommandot, med dess användning kan du ta bort flera kodrader och en variabel.


Detta är ett fungerande schema och det är bra för att observera processer när du styr lastkraften, lysdiodernas ljusstyrka, motorernas hastighet, du behöver bara ansluta önskad last istället för motorn. Samtidigt, i stället för 5V, kan alla spänningar appliceras på lasten, till exempel 12V, glöm inte att ansluta minus-strömförsörjningen till kontakten, till exempel 12V, glöm inte att ansluta minus-strömförsörjningen till GND-stiftet på mikrokontrollkortet.

I arduino är PWM-frekvensen, när den kallas via analogWrite-funktionen, bara 400 Hz, vid minsta spänningsvärden hördes en brum med motsvarande frekvens från motorlindningarna.

Arduino och servo

Servo

En motor som kan befinna sig i ett förutbestämt läge, och när det utsätts för yttre faktorer, till exempel en tvingad avböjning av axeln, håller sitt läge oförändrat - kallas en servodrift. I allmänhet låter definitionen lite annorlunda:

Servo är en negativ feedback-driven motor.

Vanligtvis kommer tre ledningar från en servo-enhet:

  • Plus kraft.

  • Mindre kraft.

  • Styrsignal.

Servomotorn består av:

  • DC-motor (eller borstfri motor);

  • Förvaltningsavgifter;

  • Positioneringssändare (kodare för servon med en rotationsvinkel på 360 ° eller en potentiometer för servon med en rotationsvinkel på 180 °);

  • Minska växeln (sänker motorvarvtalet och ökar vridmomentet på drivaxeln).

Styrenheten jämför signalen på den inbyggda positionssensorn och signalen som kom igenom styrtråden, om de skiljer sig, finns det en rotation i en vinkel där skillnaden mellan signalen är jämn.

Principen för servo

Servos huvudsakliga egenskaper:

  • Vridhastighet (tid under vilken axeln roterar genom en vinkel på 60 °);

  • Vridmoment (kg / cm, dvs. hur många kilogram motorn tål på spaken 1 cm från axeln);

  • Matningsspänning;

  • Strömförbrukning;

  • Med hjälp av kontrollmetoden (analog eller digital, det finns ingen signifikant skillnad, men digital är snabbare och mer stabil).

Typiskt är signalperioden 20 ms, och styrpulsens varaktighet:

  • 544 μs - motsvarar 0 °;

  • 2400 μs - motsvarar en vinkel på 180 °.

I sällsynta fall kan pulslängden variera, till exempel 760 respektive 1520 μs, denna information kan klargöras i den tekniska dokumentationen för frekvensomriktaren. En av de mest populära hobbyservorna är Tower Pro SG90 och liknande modeller.Det är billigt - cirka 4 dollar.

Sevroprivod för arduino

Den håller 1,8 kg / cm på axeln, och komplett med det är monteringsskruvar och spakar med splines för axeln. I själva verket är detta barn ganska starkt, och det är mycket problematiskt att stoppa det med ett finger - själva enheten börjar tappa ur fingrarna - det är dess styrka.


Servokontroll och Arduino

Som redan nämnts utförs kontrollen genom att ändra pulslängden, men förväxla inte denna metod med PWM (PWM), dess korrekta namn är PDM (Pulse Duration Modulation). Lite avvikelser i signalfrekvensen (20 ms - varaktighet, frekvens 50 Hz) spelar inte någon speciell roll. Men avvika inte från frekvensen med mer än 10 Hz, motorn kan springa ryckigt eller bränna ut.

Servokontroll och Arduino

Anslutningen till arduino är ganska enkel, du kan också driva enheten från en 5V-stift, men inte önskvärd. Faktum är att i början är det ett litet hopp i strömmen, detta kan orsaka kraftuttag och Felaktiga mikrokontrollutgångar. Även om en liten enhet (typ SG90) är möjlig, men inte mer.

För att kontrollera sådana servon med arduino har du Servo-biblioteket inbyggt i IDE, det har en liten uppsättning kommandon:

  • bifoga () - lägg till en variabel i stiftet. Exempel: drive name.attach (9) - anslut en servo till pin 9. Om din enhet behöver icke-standardlängder av kontrollpulser (544 och 2400 μs), kan de specificeras separerade med komma efter stiftnumret, till exempel: servo.attach (stift, min vinkel (μs), max vinkel i ISS));

  • skriva () - ställer in axelns rotationsvinkel i grader;

  • writeMicroseconds () - ställer in vinkeln genom pulslängden i mikrosekunder;

  • läs () - bestämmer axelns aktuella position;

  • bifogad () - Kontrollerar om en stift är inställd med en servo ansluten;

  • ta bort () - avbryt bifoga kommando.

Detta bibliotek låter dig styra 12 servon från UNO, Nano och liknande kort (mega368 och 168), medan möjligheten att använda PWM på stift 9 och 10 försvinner. Om du har MEGA kan du styra de 48: e servrarna, men PWM på stift 11 och 12 kommer att försvinna, om du använder upp till 12 servon, kommer PWM att förbli fullt fungerande för alla kontakter.

Om du ansluter detta bibliotek kan du inte arbeta med 433 MHz mottagare / sändare. Det finns ett Servo2-bibliotek för detta, som annars är identiskt.

Servo2-biblioteket

Här är ett exempel på koden som jag använde för experiment med en servo-enhet, det är i standarduppsättningen av exempel:

#include // anslut biblioteket

Servo myservo; // deklarerat variabelnamn för myservo servo

int potpin = 0; // stift för anslutning av inställningspotentiometern

int val; // variabel för att spara resultaten från att läsa signalen från potentiometern

ogiltig installation () {

myservo.attach (9); // ställa in 9 stift som kontrollutgång för servo

}

void loop () {

val = analogRead (potpin); // resultat av läsning av potentiometern sparad i trans. val, de kommer att ligga i intervallet 0 till 1023

val = karta (val, 0, 1023, 0, 180); // översätta mätområdet från analog ingång 0-1023

// inom intervallet uppgifter för servo 0-180 grader

myservo.write (val); // klara konverteringen signal från pot-ra för att kontrollera servoingång

fördröjning (15); // fördröjning behövs för att systemet ska fungera stabilt

 

Vi ansluter servon till Arduino

slutsats

Att använda de enklaste elektriska motorerna ihopkopplat med en arduino är en ganska enkel uppgift, samtidigt som du behärskar detta material utvidgar du dina funktioner inom området automatisering och robotik. De enklaste robotarna eller radiostyrda modellerna av bilar består av sådana motorer och servon används för att kontrollera hjulens rotation.

I de betraktade exemplen användes en potentiometer för att ställa in rotationsvinkeln eller rotationshastigheten, vilken som helst annan signalkälla kan användas istället, till exempel kan rotation eller förändring av hastighet uppstå som ett resultat av information mottagen från sensorer.

Ett exempel på användning av servos i alternativ energi: spåra infallsvinkeln för solljus och justera solpanelernas position i kraftverk.

För att implementera en sådan algoritm kan du använda flera fotoresister eller andra optoelektroniska enheter för att mäta mängden infallande ljus och, beroende på deras avläsningar, ställa in solpanelens rotationsvinkel.

Se även på elektrohomepro.com:

  • Hur servot är ordnat och fungerar
  • Arduino och stegmotor: fundament, scheman, anslutning och styrning
  • Har anslutningar till Arduino
  • Hur man skiljer en induktionsmotor från en likströmsmotor
  • Hur man ansluter inkrementell kodare till Arduino

  •