categorieën: Microcontroller-circuits
Aantal keer bekeken: 19709
Reacties op het artikel: 0

Motor- en servobesturing met Arduino

 

In eenvoudige ontwerpen van automatiseringssystemen is het vaak niet alleen nodig om de metingen van sensoren te lezen, maar ook om bewegingsmechanismen in te schakelen. Hiervoor worden verschillende elektromotoren gebruikt. De eenvoudigste en meest populaire optie is een DC-motor. Hij won de liefde van liefhebbers met zijn toegankelijkheid, gemak van snelheidsaanpassing. Als het de taak is om een ​​mechanisme naar een bepaalde hoek of afstand te verplaatsen, is het handig om een ​​servoaandrijving of een stappenmotor te gebruiken.

In dit artikel kijken we naar servo's en kleine DC-motoren, deze aansluiten op een Arduino-bord en de DCT aanpassen.

Motor- en servobesturing met Arduino

DC motor

De meest voorkomende elektromotor die wordt gebruikt in draagbare apparaten, speelgoed, radiogestuurde modellen en andere apparaten. Permanente magneten zijn bevestigd op de kleine elektromotor op de stator en een wikkeling op de rotor.

DC motor

Stroom wordt geleverd aan de wikkeling door het borstelsamenstel. Borstels zijn gemaakt van grafiet, soms worden koperen schuifcontacten gevonden. Borstels glijden over lamellen aan het ene uiteinde van de rotor. Als u niet op details ingaat, hangt de rotatiesnelheid af van de wikkelingsstroom van het anker.

Collector Motoranker

Op grote DC-motoren, op de stator, is een excitatiewikkeling aangesloten, die op een bepaalde manier (sequentiële, parallelle of gemengde excitatie) is verbonden met de rotorwikkeling (door de borstelsamenstelling). Aldus worden het gewenste koppel en het aantal omwentelingen bereikt.


Snelheidsregeling

Elektrische DC-motor

Bij aansluiting op de netvoeding begint de DC-motor met het nominale toerental te draaien. Om de snelheid te verminderen, moet u de stroom beperken. Om dit te doen, worden ballastweerstanden geïntroduceerd, maar dit vermindert de efficiëntie van de installatie als geheel en er verschijnt een overtollige warmtebron. Voor een effectievere regeling van spanning en stroom wordt een andere methode gebruikt - PWM-verordening.

PWM-verordening

Een methode voor het besturen van pulsbreedtegemoduleerd signaal (spanning) is om de gewenste spanningswaarde te genereren door de pulsbreedte te veranderen, met een constante duur van de periode (frequentie).

Dat wil zeggen, de periode is verdeeld in twee delen:

1. Impulstijd.

2. Pauzetijd.

De verhouding van de pulstijd tot de totale tijd van de periode wordt de duty cycle genoemd:

Ks = ti / tper

het wederkerige wordt "duty cycle" genoemd:

D = 1 / KZ = tper / t en

Om de bedrijfsmodus van de PWM-controller te beschrijven, worden beide concepten gebruikt: zowel inschakelduur als inschakelduur.

Het stroomverbruik van de motor is afhankelijk van het vermogen. Het aantal omwentelingen hangt, zoals gezegd, af van de stroom. De stroom kan worden aangepast door de hoeveelheid spanning op de wikkelingen te wijzigen. In feite, wanneer aangedreven door een spanning die de nominale waarde volgens het motorcertificaat overschrijdt, zal zijn snelheid ook de nominale snelheid overschrijden. Dergelijke bedrijfsmodi zijn echter gevaarlijk voor de motor, omdat een grotere stroom in de wikkelingen vloeit, wat hun verhoogde verwarming veroorzaakt.

Als schade aan de motor door kortetermijnimpulsen of herhaaldelijk kortetermijnbedrijfsmodi minimaal is, zal deze bij langdurig bedrijf bij verhoogde spanning en snelheid doorbranden of zullen de lagers opwarmen en wiggen, en dan zullen de wikkelingen opbranden als de voeding niet wordt losgekoppeld.

Als de ingangsspanning te laag is, heeft de kleine motor simpelweg niet genoeg vermogen om te bewegen. Daarom is het noodzakelijk om experimenteel de normale snelheid en spanning te achterhalen voor een bepaalde motor die de nominale waarde niet overschrijdt.


We verbinden met Arduino

Ik had een kleine motor, het lijkt van een cassettespeler, wat betekent dat de nominale spanning lager zal zijn dan 5 volt, dan is het uitgangsvermogen van de Arduino voldoende. Ik zal het van stroom voorzien via de 5V-pin van de uitgang van de lineaire stabilisator op het bord. Volgens het schema dat u hieronder ziet.

Ik ken de stroom van deze motor niet, dus heb ik hem op de stroom aangesloten en een veldeffecttransistor tussen de motor en de stroompen geïnstalleerd, op de poort waarvan een signaal van de PWM-uitgang werd toegepast, elk van de beschikbare kan worden gebruikt.

Arduino DC Motor Verbindingsdiagram

Om de snelheid aan te passen, heb ik een variabele weerstand aan het circuit toegevoegd en deze aangesloten op de analoge ingang A0. Voor een snelle verbinding gebruikte ik een solderless breadboard, ook wel breadboard genoemd.

Ik heb een stroombegrenzende weerstand in de transistorbedrading geïnstalleerd (om de poortlaadstroom te verminderen, dit zal de poort van verbranding en de voeding van de microcontroller tegen verzakking en bevriezing besparen) met 240 Ohm, en deze met een 12 kOhm-weerstand naar de grond getrokken, dit moet worden gedaan om het stabieler te maken de sluitertank werkte sneller en werd ontladen.

Details over veldeffecttransistors beschreven in een artikel op onze website. Ik gebruikte een krachtige, gewone en niet te dure mosfet met een n-kanaal en ingebouwde IRF840 reverse diode.

Uitvoerend en bepalend deel van het circuit

Zo ziet mijn laboratoriumstandsamenstelling eruit:

DC motor en Arduino

De PWM-besturingsfunctie wordt opgeroepen bij het schrijven naar de overeenkomstige uitvoer (3, 5, 6, 9, 10, 11) waarden van 0 tot 255 met het AnalogWrite-commando (pin, waarde). De logica van haar werk is weergegeven in de onderstaande grafieken.

PWM-regelfunctie

Een dergelijk signaal wordt aangelegd op de poort van de transistor:

Een dergelijk signaal wordt toegevoerd aan de poort van de transistor

De programmacode voor de schande is kort en eenvoudig, in detail zijn al deze functies beschreven in eerdere artikelen over Arduino.

int sensorPin = A0; // invoer van potentiometer

int motorPin = 3; // PWM-uitvoer naar de poort van de camera

void setup () {

pinMode (motorPin, OUTPUT);

}

void loop () {

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

}

In de analogWrite-functie wijs ik een waarde toe aan de PWM-uitvoer, via het mapcommando. Met het gebruik ervan kunt u verschillende coderegels en één variabele verwijderen.


Dit is een werkschema en het is geweldig voor het observeren van processen bij het aanpassen van het laadvermogen, de helderheid van de LED's, de snelheid van de motoren, u hoeft alleen de gewenste belasting aan te sluiten in plaats van de motor. In dit geval, in plaats van 5V, kan elke spanning op de belasting worden toegepast, bijvoorbeeld 12V, vergeet niet om het negatieve vermogen aan te sluiten op het contact, bijvoorbeeld 12V, vergeet niet om het negatieve vermogen aan te sluiten op de GND-pin op de microcontroller-kaart.

In Arduino is de PWM-frequentie, wanneer deze wordt aangeroepen via de analogWrite-functie, slechts 400 Hz, bij de minimale spanningswaarden was een brom van de overeenkomstige frequentie hoorbaar uit de motorwikkelingen.

Arduino en servo

servo-

Een motor die zich in een vooraf bepaalde positie kan bevinden en bij blootstelling aan externe factoren, bijvoorbeeld een geforceerde afbuiging van de as, zijn positie ongewijzigd houdt - wordt een servoaandrijving genoemd. Over het algemeen klinkt de definitie een beetje anders:

Servo is een motor met negatieve feedback.

Gewoonlijk komen er drie draden uit een servoaandrijving:

  • Plus kracht.

  • Minder vermogen.

  • Besturingssignaal.

De servoaandrijving bestaat uit:

  • DC-motor (of borstelloze motor);

  • Beheerskosten;

  • Positiesensor (encoder voor servo's met een draaihoek van 360 ° of een potentiometer voor servo's met een draaihoek van 180 °);

  • Reductie van de versnelling (verlaagt het motortoerental en verhoogt het koppel op de aandrijfas).

De besturingseenheid vergelijkt het signaal op de ingebouwde positiesensor en het signaal dat door de besturingsdraad kwam, als ze verschillen, dan is er een rotatie onder een hoek waarbij het verschil tussen het signaal wordt geëgaliseerd.

Het werkingsprincipe van de servo

Hoofdkenmerken van servo's:

  • Draaisnelheid (tijd gedurende welke de as over een hoek van 60 ° roteert);

  • Koppel (kg / cm, d.w.z. hoeveel kilogram de motor kan weerstaan ​​op de hendel 1 cm van de as);

  • Voedingsspanning;

  • Huidige consumptie;

  • Door de besturingsmethode (analoog of digitaal, is er geen significant verschil, maar digitaal is sneller en stabieler).

Doorgaans is de signaalperiode 20 ms en de duur van de stuurpuls:

  • 544 microseconden - komt overeen met 0 °;

  • 2400 μs - komt overeen met een hoek van 180 °.

In zeldzame gevallen kan de pulslengte verschillen, bijvoorbeeld 760 respectievelijk 1520 μs, deze informatie kan worden verduidelijkt in de technische documentatie voor de omvormer. Een van de meest populaire hobbyservo's is de Tower Pro SG90 en vergelijkbare modellen.Het is goedkoop - ongeveer 4 dollar.

Sevroprivod voor arduino

Het houdt 1,8 kg / cm op de as en compleet met montageschroeven en hendels met splines voor de as. In feite is deze baby vrij sterk, en het is erg problematisch om hem met één vinger te stoppen - de drive zelf begint uit de vingers te vallen - zo is zijn kracht.


Servobesturing en Arduino

Zoals reeds vermeld, wordt de besturing uitgevoerd door de pulsduur te wijzigen, maar verwar deze methode niet met PWM (PWM), de juiste naam is PDM (Pulse Duration Modulation). Kleine afwijkingen in de signaalfrequentie (20 ms - duur, frequentie 50 Hz) spelen geen speciale rol. Maar wijk niet af van de frequentie met meer dan 10 Hz, de motor kan schokkerig lopen of doorbranden.

Servobesturing en Arduino

De verbinding met de Arduino is vrij eenvoudig, u kunt de schijf ook van stroom voorzien via een 5V-pin, maar niet wenselijk. Het feit is dat bij de start er een kleine sprong in de stroom is, dit kan een stroomafname veroorzaken en Valse microcontroller-uitgangen. Hoewel 1 kleine schijf (type SG90) mogelijk is, maar niet meer.

Om dergelijke servo's met Arduino te besturen, heb je de Servo-bibliotheek ingebouwd in de IDE, deze heeft een kleine set commando's:

  • attach () - voeg een variabele toe aan de pin. Voorbeeld: drive name.attach (9) - verbind een servo met pin 9. Als uw drive niet-standaard lengten van stuurpulsen (544 en 2400 μs) nodig heeft, kunnen deze worden gescheiden door een komma achter het pinnummer, bijvoorbeeld: servo.attach (pin, min hoek (μs), max hoek in het ISS));

  • write () - stelt de rotatiehoek van de as in graden in;

  • writeMicroseconds () - stelt de hoek door de pulslengte in microseconden in;

  • read () - bepaalt de huidige positie van de as;

  • bevestigd () - Controleert of een pin is ingesteld met een servo aangesloten;

  • detach () - annuleer opdracht bevestigen.

Met deze bibliotheek kunt u 12 servo's besturen van UNO, Nano en dergelijke boards (mega368 en 168), terwijl de mogelijkheid om PWM op pin 9 en 10 te gebruiken verdwijnt. Als u MEGA hebt, kunt u de 48e servers besturen, maar de PWM op pin 11 en 12 verdwijnt. Als u maximaal 12 servo's gebruikt, blijft de PWM volledig functioneel op alle contacten.

Als u deze bibliotheek hebt aangesloten, kunt u niet werken met 433 MHz ontvangers / zenders. Daar is een Servo2-bibliotheek voor, die overigens identiek is.

Servo2-bibliotheek

Hier is een voorbeeld van de code die ik heb gebruikt voor experimenten met een servoaandrijving, deze staat in de standaardset voorbeelden:

# include // connect the library

Servo myservo; // verklaarde variabele naam voor myservo servo

int potpin = 0; // pin voor het aansluiten van de instelpotentiometer

int val; // variabele om de resultaten van het lezen van het signaal van de potentiometer op te slaan

void setup () {

myservo.attach (9); // set 9 pin als besturingsuitgang voor servo

}

void loop () {

val = analogRead (potpin); // resultaten van het lezen van de potentiometer opgeslagen in trans. val, ze liggen tussen 0 en 1023

val = kaart (val, 0, 1023, 0, 180); // vertaal het meetbereik van analoge ingang 0-1023

// in het takenbereik voor servo 0-180 graden

myservo.write (val); // de conversie doorgeven signaal van pot-ra naar controle servo-ingang

vertraging (15); // vertraging is nodig voor een stabiele werking van het systeem

 

We verbinden de servo met Arduino

conclusie

Het gebruik van de eenvoudigste elektrische motoren in combinatie met een Arduino is een vrij eenvoudige taak, terwijl het beheersen van dit materiaal uw mogelijkheden op het gebied van automatisering en robotica uitbreidt. De eenvoudigste robots of radiogestuurde automodellen bestaan ​​uit dergelijke motoren en servo's worden gebruikt om de rotatie van de wielen te regelen.

In de beschouwde voorbeelden werd een potentiometer gebruikt om de rotatiehoek of rotatiesnelheid in te stellen, in plaats daarvan kan elke andere signaalbron worden gebruikt, bijvoorbeeld rotatie of verandering in snelheid kan optreden als gevolg van informatie ontvangen van sensoren.

Een voorbeeld van het gebruik van servo's in alternatieve energie: het volgen van de invalshoek van zonlicht en het aanpassen van de positie van zonnepanelen in energiecentrales.

Om een ​​dergelijk algoritme te implementeren, kunt u er meerdere gebruiken lichtgevoelige of andere opto-elektronische apparaten voor het meten van de hoeveelheid invallend licht en, afhankelijk van hun metingen, de rotatiehoek van het zonnepaneel instellen.

Zie ook op bgv.electricianexp.com:

  • Hoe de servo is gerangschikt en werkt
  • Arduino en stappenmotor: basisprincipes, schema's, verbinding en controle
  • Functies apparaten verbinden met Arduino
  • Hoe een inductiemotor te onderscheiden van een DC-motor
  • Hoe incrementele encoder aan Arduino te verbinden

  •