categorie: Circuiti a microcontrollore
Numero di visite: 19709
Commenti sull'articolo: 0

Controllo motore e servo con Arduino

 

Nei progetti semplici di sistemi di automazione, spesso è necessario non solo leggere le letture dei sensori, ma anche attivare meccanismi di movimento. Per questo, viene utilizzata una varietà di motori elettrici. L'opzione più semplice e più popolare è un motore a corrente continua. Ha vinto l'amore degli innamorati con la sua accessibilità, facilità di regolazione della velocità. Se il compito è spostare qualsiasi meccanismo di un determinato angolo o distanza, è conveniente usare un servoazionamento o un motore passo-passo.

In questo articolo, esaminiamo i servi e i piccoli motori DC, collegandoli a una scheda Arduino e regolando il DCT.

Controllo motore e servo con Arduino

Motore a corrente continua

Il motore elettrico più comune utilizzato in dispositivi portatili, giocattoli, modelli radiocomandati e altri dispositivi. I magneti permanenti sono fissati sul piccolo motore elettrico sullo statore e un avvolgimento sul rotore.

Motore a corrente continua

La corrente viene fornita all'avvolgimento attraverso il gruppo spazzole. Le spazzole sono realizzate in grafite, a volte si trovano contatti scorrevoli in rame. Le spazzole scivolano sulle lamelle situate a un'estremità del rotore. Se non si entra nei dettagli, la sua velocità di rotazione dipende dalla corrente di avvolgimento dell'indotto.

Ancora motore collettore

Sui grandi motori a corrente continua, sullo statore, è collegato un avvolgimento di eccitazione, collegato all'avvolgimento del rotore (attraverso il gruppo spazzola) in un certo modo (eccitazione sequenziale, parallela o mista). Pertanto, si ottengono la coppia e il numero di giri desiderati.


Controllo della velocità

Motore elettrico a corrente continua

Quando è collegato alla rete, il motore CC inizia a ruotare alla velocità nominale. Per ridurre la velocità è necessario limitare la corrente. Per fare ciò, vengono introdotte resistenze di zavorra, ma ciò riduce l'efficienza dell'installazione nel suo complesso e appare una fonte di calore in eccesso. Per una regolazione più efficace di tensione e corrente, viene utilizzato un altro metodo: Regolamento PWM.

Regolamento PWM

Un metodo per controllare il segnale modulato in larghezza di impulso (tensione) è quello di generare il valore di tensione desiderato modificando la larghezza di impulso, con una durata costante del periodo (frequenza).

Cioè, il periodo è diviso in due parti:

1. Tempo di impulso.

2. Tempo di pausa.

Il rapporto tra il tempo dell'impulso e il tempo totale del periodo è chiamato duty cycle:

Ks = ti / tper

il reciproco si chiama "duty cycle":

D = 1 / KZ = tper / t e

Per descrivere la modalità operativa del controller PWM, vengono utilizzati entrambi i concetti: sia duty cycle che duty cycle.

Il consumo corrente del motore dipende dalla sua potenza. Il numero di rivoluzioni, come detto, dipende dalla corrente. La corrente può essere regolata modificando la quantità di tensione applicata agli avvolgimenti. Infatti, quando alimentato da una tensione che supera il valore nominale in base al passaporto del motore, la sua velocità supererà anche la velocità nominale. Tuttavia, tali modalità operative sono pericolose per il motore, poiché una maggiore corrente scorre negli avvolgimenti, il che provoca il loro aumento del riscaldamento.

Se il danno al motore dovuto a impulsi a breve termine o modalità di funzionamento a breve termine è minimo, quindi durante un funzionamento prolungato con tensione e velocità maggiori, si brucerà o i suoi cuscinetti si surriscalderanno e si incunearanno, quindi gli avvolgimenti si bruceranno se l'alimentazione non viene scollegata.

Se la tensione di ingresso è troppo bassa, il piccolo motore potrebbe semplicemente non avere abbastanza potenza per muoversi. Pertanto, è necessario scoprire sperimentalmente la velocità e la tensione normali per un determinato motore che non superi il valore nominale.


Ci connettiamo ad Arduino

Avevo un piccolo motore, sembra da un lettore di cassette, il che significa che la sua tensione nominale sarà inferiore a 5 volt, quindi la potenza di uscita dell'Arduino sarà sufficiente. Lo alimenterò dal pin 5 V, ad es. dall'uscita dello stabilizzatore lineare situato sulla scheda. Secondo lo schema che vedi di seguito.

Non conosco la corrente di questo motore, quindi l'ho collegato all'alimentazione e ho installato un transistor ad effetto di campo tra il motore e il pin di alimentazione, sul gate del quale è stato applicato un segnale dall'uscita PWM, è possibile utilizzare uno qualsiasi di quelli disponibili.

Schema di collegamento del motore DC Arduino

Per regolare la velocità, ho aggiunto un resistore variabile al circuito, collegandolo all'ingresso analogico A0. Per una rapida connessione, ho usato una breadboard senza saldatura, che è anche chiamata breadboard.

Ho installato un resistore limitatore di corrente nel cablaggio del transistor (per ridurre la corrente di carica del gate, questo salverà la porta dalla combustione e l'alimentazione del microcontrollore dalla subsidenza e dal suo congelamento) di 240 Ohm e l'ho tirata a terra con una resistenza da 12 kOhm, questo deve essere fatto per renderlo più stabile il serbatoio dell'otturatore funzionava e si scaricava più velocemente.

Dettagli sui transistor ad effetto di campo descritti in un articolo sul nostro sito Web. Ho usato un mosfet potente, comune e non troppo costoso con un canale n e un diodo inverso IRF840 incorporato.

Parte esecutiva e di definizione del circuito

Ecco come si presenta il mio stand di laboratorio:

Motore DC e Arduino

La funzione di controllo PWM viene chiamata quando si scrivono sui valori di uscita corrispondenti (3, 5, 6, 9, 10, 11) da 0 a 255 con il comando AnalogWrite (pin, valore). La logica del suo lavoro è rappresentata nei grafici sottostanti.

Funzione di controllo PWM

Tale segnale viene applicato al gate del transistor:

Tale segnale viene applicato al gate del transistor

Il codice del programma per la disgrazia è breve e semplice, in dettaglio sono state descritte tutte queste funzioni nei precedenti articoli su arduino.

int sensorPin = A0; // input dal potenziometro

int motorPin = 3; // Uscita PWM al gate della telecamera

void setup () {

pinMode (motorPin, OUTPUT);

}

void loop () {

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

}

Nella funzione analogWrite, assegno un valore all'uscita PWM, tramite il comando map, il suo utilizzo consente di rimuovere diverse righe di codice e una variabile.


Questo è uno schema funzionante ed è ottimo per osservare i processi quando si regola la potenza di carico, la luminosità dei LED, la velocità del motore, è sufficiente collegare il carico desiderato invece del motore. In questo caso, invece di 5 V, è possibile applicare qualsiasi tensione al carico, ad esempio 12 V, non dimenticare di collegare l'alimentazione negativa al contatto, ad esempio 12 V, non dimenticare di collegare l'alimentazione negativa al pin GND sulla scheda del microcontrollore.

In arduino, la frequenza PWM, quando chiamata tramite la funzione analogWrite, è solo 400 Hz, ai valori di tensione minima, si è udito un ronzio della frequenza corrispondente dagli avvolgimenti del motore.

Arduino e servo

Servo

Un motore che può trovarsi in una posizione predeterminata e quando esposto a fattori esterni, ad esempio una deflessione forzata dell'albero, mantiene invariata la sua posizione - viene chiamato servoazionamento. In generale, la definizione sembra leggermente diversa:

Il servo è un motore pilotato con feedback negativo.

In genere, tre servo escono da un servoazionamento:

  • Più potenza.

  • Meno potenza.

  • Segnale di controllo.

Il servoazionamento è costituito da:

  • Motore a corrente continua (o motore brushless);

  • Commissioni di gestione;

  • Sensore di posizione (encoder per servi con angolo di rotazione di 360 ° o potenziometro per servi con angolo di rotazione di 180 °);

  • Riduzione dell'ingranaggio (riduce la velocità del motore e aumenta la coppia sull'albero motore).

L'unità di controllo confronta il segnale sul sensore di posizione incorporato e il segnale che è passato attraverso il filo di controllo, se sono diversi, quindi c'è una rotazione ad un angolo in cui viene livellata la differenza tra il segnale.

Il principio di funzionamento del servo

Caratteristiche principali dei servi:

  • Velocità di rotazione (tempo durante il quale l'albero ruota di un angolo di 60 °);

  • Coppia (kg / cm, ovvero quanti chilogrammi può sopportare il motore sulla leva a 1 cm dall'albero);

  • Tensione di alimentazione;

  • Consumo attuale;

  • Con il metodo di controllo (analogico o digitale, non vi è alcuna differenza significativa, ma il digitale è più veloce e più stabile).

In genere, il periodo del segnale è di 20 ms e la durata dell'impulso di controllo:

  • 544 μs - corrisponde a 0 °;

  • 2400 μs - corrisponde a un angolo di 180 °.

In rari casi, la lunghezza dell'impulso può differire, ad esempio, 760 e 1520 μs, rispettivamente, queste informazioni possono essere chiarite nella documentazione tecnica dell'azionamento. Uno dei servi per hobby più popolari è il Tower Pro SG90 e modelli simili.È economico - circa 4 dollari.

Sevroprivod per arduino

Tiene 1,8 kg / cm sull'albero e completa con esso le viti di montaggio e le leve con scanalature per l'albero. In realtà, questo bambino è abbastanza forte, ed è molto problematico fermarlo con un dito - l'unità stessa inizia a cadere dalle dita - tale è la sua forza.


Servocomando e Arduino

Come già accennato, il controllo viene eseguito modificando la durata dell'impulso, ma non confondere questo metodo con PWM (PWM), il suo nome corretto è PDM (Pulse Duration Modulation). Lievi deviazioni nella frequenza del segnale (20 ms - durata, frequenza 50 Hz) non svolgono un ruolo speciale. Ma non deviare dalla frequenza di oltre 10 Hz, il motore può funzionare a scatti o bruciarsi.

Servocomando e Arduino

La connessione all'Arduino è abbastanza semplice, puoi anche alimentare l'unità da un pin 5v, ma non è desiderabile. Il fatto è che all'inizio c'è un piccolo salto di corrente, questo può causare un assorbimento di potenza e False uscite del microcontrollore. Sebbene sia possibile 1 disco piccolo (tipo SG90), ma non di più.

Per controllare tali servi con arduino, hai la libreria Servo integrata nell'IDE, ha un piccolo set di comandi:

  • attach () - aggiunge una variabile al pin. Esempio: drive name.attach (9) - collega un servo al pin 9. Se l'unità richiede lunghezze non standard di impulsi di controllo (544 e 2400 μs), è possibile impostarle separate da una virgola dopo il numero di pin, ad esempio: servo.attach (pin, angolo minimo (μs), angolo massimo nella ISS));

  • write () - imposta l'angolo di rotazione dell'albero in gradi;

  • writeMicroseconds () - imposta l'angolo attraverso la lunghezza dell'impulso in microsecondi;

  • read () - determina la posizione corrente dell'albero;

  • attach () - Verifica se un pin è impostato con un servo collegato;

  • detach () - annulla il comando attach.

Questa libreria consente di controllare 12 servi da UNO, Nano e schede simili (mega368 e 168), mentre scompare la possibilità di utilizzare PWM sui pin 9 e 10. Se hai MEGA, puoi controllare i 48 server, ma il PWM sui pin 11 e 12 scomparirà, se usi fino a 12 servi, il PWM rimarrà perfettamente funzionante su tutti i contatti.

Se hai collegato questa libreria, non sarai in grado di lavorare con ricevitori / trasmettitori a 433 MHz. C'è una libreria Servo2 per questo, che è altrimenti identica.

Libreria Servo2

Ecco un esempio del codice che ho usato per esperimenti con un servoazionamento, è nel set standard di esempi:

#include // collega la libreria

Servo myservo; // ha dichiarato il nome della variabile per myservo servo

int potpin = 0; // pin per il collegamento del potenziometro di impostazione

int val; // variabile per salvare i risultati della lettura del segnale dal potenziometro

void setup () {

myservo.attach (9); // imposta 9 pin come uscita di controllo per servo

}

void loop () {

val = analogRead (potpin); // risultati della lettura del potenziometro salvati in trans. val, saranno nell'intervallo da 0 a 1023

val = mappa (val, 0, 1023, 0, 180); // traduce il campo di misura dall'ingresso analogico 0-1023

// nella gamma di compiti per servo 0-180 gradi

myservo.write (val); // passa la conversione segnale da pot-ra al controllo ingresso servo

ritardo (15); // è necessario un ritardo per il funzionamento stabile del sistema

 

Colleghiamo il servo ad Arduino

conclusione

L'utilizzo dei motori elettrici più semplici abbinati a un arduino è un compito abbastanza semplice, mentre la padronanza di questo materiale espande le tue capacità nel campo dell'automazione e della robotica. I robot più semplici o i modelli di auto radiocomandati sono costituiti da tali motori e i servi vengono utilizzati per controllare la rotazione delle ruote.

Negli esempi considerati, è stato utilizzato un potenziometro per impostare l'angolo di rotazione o la velocità di rotazione, è possibile utilizzare qualsiasi altra sorgente di segnale, ad esempio, la rotazione o la variazione della velocità possono verificarsi a seguito delle informazioni ricevute dai sensori.

Un esempio dell'uso dei servi nell'energia alternativa: tracciare l'angolo di incidenza della luce solare e regolare la posizione dei pannelli solari nelle centrali elettriche.

Per implementare un tale algoritmo, puoi usarne diversi fotoresist o altri dispositivi optoelettronici per misurare la quantità di luce incidente e, in base alle loro letture, impostare l'angolo di rotazione del pannello solare.

Vedi anche su electro-it.tomathouse.com:

  • Come è organizzato e funziona il servo
  • Arduino e motore passo-passo: fondamenti, schemi, connessione e controllo
  • Funziona collegando i dispositivi ad Arduino
  • Come distinguere un motore a induzione da un motore a corrente continua
  • Come collegare l'encoder incrementale ad Arduino

  •