Come funziona il servomotore e come controllare i servi usando Arduino

In questo tutorial impareremo come funzionano i servomotori e come controllare i servi usando Arduino e il driver PWM PCA9685. Puoi guardare il seguente video o leggere il tutorial scritto qui sotto.

Panoramica

Esistono molti tipi di servomotori e la loro caratteristica principale è la capacità di controllare con precisione la posizione del loro albero. Un servomotore è un sistema a circuito chiuso che utilizza il feedback di posizione per controllare il suo movimento e la posizione finale.,

Nei servomotori di tipo industriale il sensore di feedback di posizione è solitamente un encoder ad alta precisione, mentre nei servi RC o hobby più piccoli il sensore di posizione è solitamente un semplice potenziometro. La posizione effettiva catturata da questi dispositivi viene restituita al rilevatore di errore dove viene confrontata con la posizione di destinazione. Quindi, in base all’errore, il controller corregge la posizione effettiva del motore in base alla posizione di destinazione.,

In questo tutorial daremo un’occhiata dettagliata ai servomotori hobby. Spiegheremo come funzionano questi servi e come controllarli usando Arduino.

Hobby servi sono di piccole dimensioni attuatori utilizzati per il controllo di giocattoli RC auto, barche, aerei, ecc. Sono anche utilizzati dagli studenti di ingegneria per la prototipazione in robotica, creando braccia robotiche, robot biologicamente ispirati, robot umanoidi e così via.,

Come RC/Hobby Servo Lavoro

All’interno di un hobby servo ci sono quattro componenti principali, un motore a corrente continua, un cambio, un potenziometro e un circuito di controllo. Il motore a corrente continua è ad alta velocità e bassa coppia ma il cambio riduce la velocità a circa 60 giri / min e allo stesso tempo aumenta la coppia.

Il potenziometro è fissato sulla marcia finale o sull’albero di uscita, così come il motore ruota anche il potenziometro ruota, producendo così una tensione che è correlata all’angolo assoluto dell’albero di uscita., Nel circuito di controllo, questa tensione del potenziometro viene confrontata con la tensione proveniente dalla linea di segnale. Se necessario, il controller attiva un ponte H integrato che consente al motore di ruotare in entrambe le direzioni fino a quando i due segnali raggiungono una differenza di zero.

Un servomotore viene controllato inviando una serie di impulsi attraverso la linea di segnale. La frequenza del segnale di controllo dovrebbe essere 50Hz o un impulso dovrebbe accadere ogni 20ms., La larghezza dell’impulso determina la posizione angolare del servo e questi tipi di servi possono solitamente ruotare di 180 gradi (hanno limiti fisici di viaggio).

Generalmente impulsi con 1 ms durata corrispondono a 0 gradi di posizione, 1.5 ms durata a 90 gradi e 2 ms a 180 gradi. Anche se la durata minima e massima degli impulsi a volte può variare con marche diverse e possono essere 0,5 ms per 0 gradi e 2,5 ms per la posizione di 180 gradi.,

Arduino Servo Motor Control

Mettiamo quanto sopra detto per testare e fare un esempio pratico di controllo di un servo hobby utilizzando Arduino. Userò il MG996R che è un servo ad alta coppia con ingranaggi in metallo con coppia di stallo di 10 kg-cm. La coppia elevata ha un prezzo e questa è la corrente di stallo del servo che è 2.5 A. La corrente di marcia va da 500mA a 900mA e la tensione operativa va da 4.8 a 7.2 V.,

Le valutazioni attuali indicano che non possiamo collegare direttamente questo servo per Arduino, ma dobbiamo utilizzare un alimentatore separato per esso. Ecco lo schema del circuito per questo esempio.

Abbiamo semplicemente bisogno di collegare il pin di controllo del servo a qualsiasi pin digitale della scheda Arduino, collegare la terra e il positivo fili per esterno 5 V di alimentazione, e anche collegare il Arduino a terra per il servo di terra.,

È possibile ottenere i componenti necessari per questo esempio dai link qui sotto:

  • MG996R Servomotore …………………………. Amazon / Banggood / AliExpress
  • o S90 Micro Servo ………..…………………- Amazon / Banggood / AliExpress
  • Scheda Arduino ……………………………………. Amazon / Banggood / AliExpress
  • 5 V 2A Alimentazione DC …………………..….. Amazon / Banggood / AliExpress

Divulgazione: questi sono link di affiliazione. Come socio Amazon guadagno dagli acquisti di qualificazione.,

Vedi Anche

Arduino Motore Brushless Controllo Tutorial | ESC | BLDC

Arduino Servomotore Codice di Controllo

Ora diamo un’occhiata al codice Arduino per il controllo del servomotore. Il codice è molto semplice. Dobbiamo solo definire il pin a cui è collegato il servo, definire quel pin come uscita e nella sezione loop generare impulsi con la durata e la frequenza specifiche come abbiamo spiegato in precedenza.,

Dopo alcuni test ho trovato i seguenti valori per la durata degli impulsi che funzionano con il mio servo. Gli impulsi con durata di 0,6 ms corrispondevano alla posizione di 0 gradi, da 1,45 ms a 90 gradi e da 2,3 ms a 180 gradi.

Ho collegato un multimetro in serie con il servo per controllare l’assorbimento di corrente. Il massimo assorbimento di corrente che ho notato era fino a 0,63 A in stallo. Beh, questo perché questo non è il servo originale TowerPro MG996R, ma una replica più economica, che ovviamente ha prestazioni peggiori.,

Tuttavia, diamo un’occhiata a un modo più conveniente di controllare i servi usando Arduino. Questo sta usando la libreria Arduino servo.

Qui abbiamo solo bisogno di includere la libreria, definire l’oggetto servo, e utilizzando la funzione attach() definire il pin a cui il servo è collegato così come definire i valori minimi e massimi delle durate degli impulsi. Quindi usando la funzione write () impostiamo semplicemente la posizione del servo da 0 a 180 gradi. Con questa libreria possiamo guidare fino a 12 servi allo stesso tempo o 48 servi utilizzando Arduino Mega board.,

Vedi Anche

fai da te Arduino Robot Arm con Smartphone di Controllo

Arduino e PCA9685 PWM/ Servo Driver

C’è anche un altro modo per controllare la servi con Arduino, e di utilizzo dei PCA9685 servo driver. Questo è un 16-Canale 12-bit PWM e servo driver che comunica con Arduino utilizzando il bus I2C. Ha un orologio incorporato in modo che possa guidare 16 servi free running, o indipendentemente da Arduino.,

Cosa c’è di ancora più interessante possiamo collegare fino a 62 di questi driver su un singolo bus I2C. Quindi teoricamente possiamo controllare fino a 992 servi usando solo i due pin I2C dalla scheda Arduino. I 6 pin di selezione dell’indirizzo vengono utilizzati per impostare diversi I2C indirizzati per ogni driver aggiuntivo. Abbiamo solo bisogno di collegare i rilievi di saldatura secondo questa tabella.

Ecco lo schema del circuito e possiamo ancora una volta notare che abbiamo bisogno di un alimentatore separato per i servi.,

È possibile ottenere i componenti necessari per questo esempio dai link qui sotto:

  • MG996R Servomotore …………………………. Amazon / Banggood / AliExpress
  • PCA9685 PWM Servo driver ………………. Amazon / Banggood / AliExpress
  • Scheda Arduino ……………………………………. Amazon / Banggood / AliExpress
  • 5 V 6A Alimentazione DC …………………..….. Amazon / Banggood / AliExpress

Divulgazione: questi sono link di affiliazione. Come socio Amazon guadagno dagli acquisti di qualificazione.

Ora diamo un’occhiata al codice Arduino., Per il controllo di questo servo driver useremo la libreria PCA9685 che può essere scaricata da GitHub.

PCA9685 Codice Arduino

Quindi per prima cosa dobbiamo includere le librerie e definire l’oggetto PCA9685. Quindi utilizzando l’istanza Servo_Evaluator definire la durata degli impulsi o l’uscita PWM del driver. Si noti che le uscite sono a 12 bit, o che è una risoluzione di 4096 passi. Quindi la durata minima dell’impulso di 0,5 ms o 0 gradi di posizione corrisponderebbe a 102 passi e la durata massima dell’impulso di 2,5 ms o 180 gradi di posizione a 512 passi., Ma come spiegato in precedenza questi valori dovrebbero essere regolati in base al servomotore. Nel mio caso i valori da 102 a 470 corrispondevano alla posizione da 0 a 180 gradi.

Nella sezione setup dobbiamo definire la frequenza di clock I2C, impostare l’indirizzo del driver e impostare la frequenza su 50Hz.

Nella sezione loop, utilizzando le funzioni setChannelPWM() e pwmForAngle (), impostiamo semplicemente il servo all’angolo desiderato.,

Ho collegato un secondo servo al driver, e come mi aspettavo, non stava posizionando lo stesso del primo, e questo perché i servi che sto usando sono copie economiche e non sono così affidabili. Tuttavia, questo non è un grosso problema perché usando l’istanza Servo_Evaluator possiamo impostare diverse impostazioni di output per ogni servo. Possiamo anche regolare la posizione di 90 gradi nel caso in cui non sia esattamente nel mezzo. In questo modo tutti i servi funzioneranno allo stesso modo e si posizioneranno all’angolo esatto.,

Controllo di molti servi con Arduino e i driver PCA9685

Daremo un’occhiata a un altro esempio e questo è il controllo di molti servi con più driver PCA9685 concatenati.

A tale scopo abbiamo bisogno di collegare i driver tra loro e collegare l’indirizzo appropriato selezionare solder pad. Ecco lo schema del circuito:

Diamo un’occhiata al codice Arduino ora.,

Quindi dovremmo creare un oggetto PCA9685 separato per ciascun driver, definire gli indirizzi per ciascun driver e impostare la frequenza su 50Hz. Ora semplicemente usando le funzioni setChannelPWM() e pwmForAngle() possiamo impostare qualsiasi servo su qualsiasi driver per posizionare qualsiasi angolo che vogliamo.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *