Categories: Circuits de microcontroladors
Nombre de visualitzacions: 19709
Comentaris sobre l'article: 0

Control motor i servo amb Arduino

 

En dissenys senzills de sistemes d'automatització, sovint és necessari no només llegir les lectures dels sensors, sinó també establir mecanismes de moviment. Per a això s’utilitzen una gran varietat de motors elèctrics. L’opció més simple i popular és un motor de corrent continu. Va guanyar l’amor dels amants amb la seva accessibilitat, facilitat d’ajust de velocitat. Si la tasca és traslladar qualsevol mecanisme a un angle o distància determinat, és convenient utilitzar un servoaccionador o un motor pas a pas.

En aquest article, mirem servos i petits motors de corrent continu, connectant-los a una placa Arduino i ajustant el DCT.

Control motor i servo amb Arduino

Motor de corrent continu

El motor elèctric més comú que s’utilitza en dispositius portàtils, joguines, models controlats per ràdio i altres dispositius. Els imants permanents es fixen en el petit motor elèctric de l'estator i una bobinada al rotor.

Motor de corrent continu

El corrent es subministra al bobinat a través del conjunt de raspalls. Els pinzells són de grafit, de vegades es troben contactes de lliscament de coure. Els raspalls llisquen sobre les làmpades situades en un extrem del rotor. Si no s’entra en detalls, la seva velocitat de rotació depèn del corrent de bobinatge de l’armadura.

Col·lecció Motor Àncora

Als motors de corrent continu, a l’estator, es connecta un enrotllament d’excitació, connectat al bobinat del rotor (a través del conjunt de raspalls) d’una manera determinada (excitació seqüencial, paral·lela o mixta). Així, s’aconsegueix el parell i el nombre de revolucions desitjats.


Control de velocitat

Motor elèctric de corrent continu

Quan es connecta a la xarxa elèctrica, el motor de corrent continu comença a girar a velocitat nominal. Per reduir la velocitat cal limitar el corrent. Per fer-ho, s’introdueixen resistències de llast, però això redueix l’eficiència del conjunt de la instal·lació i apareix un excés de calor. Per a una regulació més efectiva de la tensió i el corrent, s'utilitza un altre mètode - Control PWM.

Control PWM

Un mètode de control del senyal modulat d’amplada d’amplitud (voltatge) és generar el valor de tensió desitjat canviant l’amplada de pols, amb una durada constant del període (freqüència).

És a dir, el període es divideix en dues parts:

1. Impuls del temps.

2. Pausa el temps.

La relació del temps de pols amb el temps total del període s'anomena cicle de treball:

Ks = ti / tper

la mútua es diu "cicle de deures":

D = 1 / KZ = tper / t i

Per descriure el mode de funcionament del controlador PWM, s'utilitzen els dos conceptes: cicle de treball i cicle de treball.

El consum actual del motor depèn de la seva potència. El nombre de revolucions, com es va dir, depèn del corrent. El corrent es pot ajustar canviant la quantitat de tensió aplicada als enrotllaments. De fet, quan s’alimenta amb un voltatge que superi el valor nominal segons el passaport del motor, la seva velocitat també superarà la velocitat nominal. Tanmateix, aquests modes de funcionament són perillosos per al motor, ja que un corrent més gran flueix a les bobines, cosa que provoca el seu escalfament més gran.

Si el dany del motor per impulsos de curta durada o per modes de funcionament de curta durada repetida és mínim, aleshores durant un funcionament prolongat a major voltatge i velocitat, es cremarà o els seus coixinets s’escalfaran i es tallaran, i els enrotllaments es cremaran si l’alimentació no està desconnectada.

Si la tensió d’entrada és massa baixa, pot ser que el motor petit no tingui prou potència per moure’s. Per tant, cal esbrinar experimentalment la velocitat i la tensió normals per a un motor en concret que no superi el nominal.


Ens connectem a arduino

Tenia un motor petit, sembla d'un reproductor de cassets, cosa que vol dir que el seu voltatge nominal estarà per sota dels 5 volts, i la potència de sortida del arduino serà suficient. L’alimentaré des del pin 5V, és a dir. de la sortida de l'estabilitzador lineal situat a la placa. Segons l’esquema que veieu a continuació.

No conec el corrent d’aquest motor, així que el vaig connectar a l’alimentació i vaig instal·lar un transistor d’efecte de camp entre el motor i el pin d’alimentació, a la porta del qual s’aplicava un senyal de la sortida PWM i es pot utilitzar qualsevol dels disponibles.

Esquema de connexió del motor DC Arduino

Per ajustar la velocitat, he afegit una resistència variable al circuit, connectant-la a l’entrada analògica A0. Per a una connexió ràpida, he utilitzat una placa sense pa, que també s'anomena panell.

Vaig instal·lar una resistència de limitació de corrent al cablejat del transistor (per reduir el corrent de càrrega de la porta, això estalviarà el port de la combustió i l’alimentació d’energia del microcontrolador de la subsidència i la seva congelació) en 240 ohms, i la vaig tirar a terra amb una resistència de 12 kOhm, això s’ha de fer per fer-lo més estable el dipòsit de l'obturador funcionava i es descarregava més ràpidament.

Es descriuen detalls sobre transistors d’efectes de camp en un article del nostre lloc web. He utilitzat un mosfet potent, comú i no massa car amb un canal n i un díode invers IRF840 integrat.

Part executiva i definidora del circuit

Això és el que sembla el meu muntatge d'estand de laboratori:

Motor de corrent continu i arduino

La funció de control PWM s’anomena quan s’escriu als valors de sortida corresponents (3, 5, 6, 9, 10, 11) de 0 a 255 amb l’ordre AnalogWrite (pin, valor). La lògica de la seva obra es mostra en els gràfics següents.

Funció de control PWM

Aquest senyal s'aplica a la porta del transistor:

Aquest senyal s'aplica a la porta del transistor

El codi del programa per a la disbauxa és breu i senzill, detallant totes aquestes funcions en articles anteriors sobre arduino.

int sensorPin = A0; // entrada del potenciòmetre

int motorPin = 3; // Sortida PWM a la porta de la càmera

void setup () {

pinMode (motorPin, OUTPUT);

}

void loop () {

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

}

En la funció analogWrite, assigna un valor a la sortida PWM, mitjançant l’ordre map, el seu ús permet eliminar diverses línies de codi i una variable.


Es tracta d’un esquema de treball i és ideal per observar processos a l’hora d’ajustar la potència de càrrega, la brillantor dels LED, la velocitat del motor, només cal que connecteu la càrrega desitjada en lloc del motor. Al mateix temps, en lloc de 5V, qualsevol tensió es pot aplicar a la càrrega, per exemple 12V, no oblideu connectar l’alimentació menys al contacte, per exemple 12V, no us oblideu de connectar l’alimentació menys al pin GND de la placa del microcontrolador.

En arduino, la freqüència PWM, quan s'anomena a través de la funció analogWrite, és de només 400 Hz, als valors mínims de tensió, es va sentir un gruix de la freqüència corresponent a les bobinades del motor.

Arduino i servo

Servos

Un motor que pot estar en una posició predeterminada i quan està exposat a factors externs, per exemple, un desviament forçat de l’eix, manté la seva posició inalterada - s’anomena servoaccionament. En general, la definició sona una mica diferent:

Servo és un motor impulsat per feedback negatiu.

Normalment, tres cables surten d’un servoaccionador:

  • Més potència.

  • Menys potència.

  • Senyal de control.

El servoaccionament consta de:

  • Motor de corrent continu (o motor sense escombretes);

  • Comissions de gestió;

  • Sensor de posició (codificador per servos amb un angle de gir de 360 ​​° o un potenciòmetre per a servos amb un angle de gir de 180 °);

  • Reducció de l’engranatge (disminueix la velocitat del motor i augmenta el parell en l’eix motriu).

La unitat de control compara el senyal amb el sensor de posició integrat i el senyal que passava pel fil de control, si difereixen, hi ha una rotació en un angle en el que s’anivella la diferència entre el senyal.

El principi de funcionament del servo

Característiques principals dels servos:

  • Velocitat de gir (temps durant el qual l’eix gira a través d’un angle de 60 °);

  • Parell (kg / cm, és a dir, quants quilograms pot suportar el motor a la palanca a 1 cm de l’eix);

  • Tensió de subministrament;

  • Consum actual;

  • Pel mètode de control (analògic o digital, no hi ha diferències significatives, però el digital és més ràpid i estable).

Normalment, el període de senyal és de 20 ms, i la durada del pols de control:

  • 544 μs - correspon a 0 °;

  • 2400 μs - correspon a un angle de 180 °.

En casos rars, la longitud de l’impuls pot diferir, per exemple, 760 i 1520 μs, respectivament, aquesta informació es pot aclarir a la documentació tècnica de l’accionament. Un dels servos hobby més populars és el Tower Pro SG90 i models similars.És barat, uns 4 dòlars.

Sevroprivod per a arduino

Manté 1,8 kg / cm sobre l’eix, i amb ell s’hi completen cargols de muntatge i palanques amb fèrules per a l’eix. De fet, aquest nadó és bastant fort, i és molt problemàtic detenir-lo amb un sol dit (l’accionament en si comença a caure dels dits), aquesta és la seva força.


Servo control i Arduino

Com ja s’ha comentat, el control es realitza canviant la durada del pols, però no confongueu aquest mètode amb PWM (PWM), el seu nom correcte és PDM (Pulse Duration Modulation). Les lleus desviacions de la freqüència del senyal (20 ms - durada, freqüència 50 Hz) no tenen un paper especial. Però no us desvieu de la freqüència en més de 10 Hz, el motor pot funcionar bruscament o es pot cremar.

Servo control i Arduino

La connexió amb el arduino és força senzilla, també podeu alimentar la unitat des d’un pin 5v, però no desitjable. El fet és que al principi hi ha un petit salt de corrent, això pot provocar un consum d’energia i Sortides de microcontroladors falsos. Tot i que és possible 1 petita unitat (tipus SG90), però no més.

Per controlar aquests servos amb arduino, teniu la biblioteca Servo integrada a l'IDE, té un petit conjunt d'ordres:

  • attach () - afegeix una variable al passador. Exemple: drive drive.attach (9) - connecteu un servo al pin 9. Si la unitat necessita pols de control de longituds no estàndard (544 i 2400 μs), aleshores es poden especificar separats per una coma després del número de pin, per exemple: servo.attach (pin, angle angle (μs), angle màxim a la ISS));

  • write (): estableix l’angle de gir de l’eix en graus;

  • writeMicroseconds (): estableix l'angle a través de la longitud del pols en microsegons;

  • read () - determina la posició actual de l’eix;

  • attached (): comprova si es fixa un passador amb un servomotor connectat;

  • detach () - cancel·la l’ordre adjunt.

Aquesta biblioteca permet controlar 12 servos d’UNO, Nano i plaques similars (mega368 i 168), mentre que la capacitat d’utilitzar PWM en els pins 9 i 10 desapareix. Si teniu MEGA, podeu controlar els 48 servidors, però la PWM dels pins 11 i 12 desapareixerà, si utilitzeu fins a 12 servos, el PWM seguirà sent completament funcional en tots els contactes.

Si heu connectat aquesta biblioteca, no podreu treballar amb receptors / transmissors de 433 MHz. Hi ha una biblioteca Servo2 per a això, que és igualment idèntica.

Biblioteca Servo2

A continuació, es mostra un exemple del codi que he utilitzat per a experiments amb un servomotor, que es troba en el conjunt d’exemples estàndard:

#include // connecta la biblioteca

Servo myservo; // nom variable declarat per a myservo servo

int potpin = 0; // passador per connectar el potenciòmetre de configuració

int val; // variable per desar els resultats de la lectura del senyal del potenciòmetre

void setup () {

myservo.attach (9); // estableix 9 pins com a sortida de control del servo

}

void loop () {

val = analogRead (potpin); // resultats de la lectura del potenciòmetre desat en trans. val, estaran dins del rang de 0 a 1023

val = mapa (val, 0, 1023, 0, 180); // traduir l'interval de mesuraments des de l'entrada analògica 0-1023

// en el rang de tasques per servo 0-180 graus

myservo.write (val); // passar la conversió senyal del pot-ra al control entrada servo

retard (15); // es necessita un retard per al funcionament estable del sistema

 

Connectem el servo a Arduino

Conclusió

Utilitzar motors elèctrics més senzills combinats amb un arduino és una tasca bastant senzilla, mentre que dominar aquest material amplia les teves capacitats en el camp de l’automatització i la robòtica. Els robots més simples o models de cotxes controlats per ràdio consisteixen en motors d'aquest tipus i els servos s'utilitzen per controlar la rotació de les rodes.

En els exemples considerats, es va utilitzar un potenciòmetre per establir l’angle de gir o la velocitat de rotació, es pot fer servir qualsevol altra font de senyal en lloc, per exemple, es pot produir una rotació o un canvi de velocitat com a resultat de la informació rebuda dels sensors.

Un exemple d’ús de servos en energia alternativa: rastrejar l’angle d’incidència de la llum solar i ajustar la posició de les plaques solars a les centrals d’energia.

Per implementar un algorisme d’aquest tipus, en podeu fer servir diversos fotoresistors o altres dispositius optoelectrònics per mesurar la quantitat de llum incident i, segons les seves lectures, establir l’angle de gir del panell solar.

Consulteu també a electro-ca.tomathouse.com:

  • Com s’ordena i funciona el servo
  • Arduino i motor pas a pas: fonaments, esquemes, connexió i control
  • Disposa de connexió de dispositius a Arduino
  • Com distingir un motor d’inducció d’un motor de corrent continu
  • Com connectar el codificador incremental a Arduino

  •