{jcomments on}Il servomotore, o semplicemente servo, è un piccolo motore comandato elettricamente la cui posizione angolare o la cui velocità dipendono dal segnale inviato per comandarlo.
I servo sono impiegati in robotica e dove ci siano da posizionare angolarmente assi di rotazione così da poter controllare, per esempio, lo sterzo di un automobilina radiocomandata o gli alettoni di un aeromodello o al posizione di un braccio robotico.
Qui viene descritto il servo usato per assumere posizioni angolari in base al comando impartito.
Ho anche effettuato delle misurazioni per vedere come vanno le cose, i risultati li ho riassunti qui è c'è anche un video.
In commercio si distribuiscono due tipi di servo: analogici e digitali.
Mentre la struttura meccanica consiste sempre in un motorino che sposta un perno tramite un riduttore di velocità ad ingranaggi, la differenza fra i due tipi di servo risiede nel tipo di segnale che si invia per il comando, nell'elettronica che provvede a generare il segnale per azionare il motorino e nel modo di controllare la posizione assunta dal perno nella posizione voluta ed a mantenervelo ed alla possibilità di programmare molte funzioni. Il costo dei servo digitali è molto più elevato ma in cambio si dispone di maggiore precisione della posizione e del movimento grazie alla programmabilità e di inviare comandi in forma digitale come si fa con una linea seriale. Approfondimenti: Arduino_forum.
Qui ci si occupa di quelli analogici.
In breve, un servo analogico è un trasduttore che trasforma un segnale elettrico (codificato in PWM) in una posizione angolare del perno ed è composto da:
- un piccolo motorino elettrico che fa girare un perno tramite una serie di ingranaggi che riducono la velocità ed aumentano la coppia torcente; la posizione del perno è la grandezza in uscita del servo;
- un circuito elettronico per verificare la posizione del perno e fare ruotare, di conseguenza, in un senso o nell'altro il motorino od a fermarlo e tenerlo fermo
- un potenziometro, coassiale con il perno, per rilevare la posizione angolare assunta dal perno stesso (vedi reostati e potenziometri) (nota2)
- una linea di alimentazione composta da tre fili: uno per la massa (di solito nero o marrone) uno per l'alimentazione del circuito e del motorino (rosso) ed uno per inviare il segnale di comando (giallo nella figura sopra) (nota 1)
Il circuito elettronico riceve da Arduino un segnale ad impulsi PWM (tipico dei sistemi digitali come Arduino) ad una frequenza di 50 Hz, ovvero un impulso ogni 20ms il quale trasporta l'informazione sull'angolo: se la durata dell'impulso è 1,5ms il perno del servo si pone nella posizione centrale del suo campo di rotazione che spesso copre la gamma 0-180°.
Con impulsi più brevi di 1,5ms l'angolo del perno si riduce fino a zero (di default, la libreria servo di Arduino pone tale impulso 0,544ms) mentre con impulsi più lunghi di 1,5ms il perno ruota fino a 180° (ancora la libreria di Arduino pone la durata a 2,4ms).
L'elettronica deduce il valore che proviene da Arduino, codificato nel modo appena descritto, e lo confronta con l'angolo misurato dal potenziometro (nota 3) e di conseguenza fa girare il motorino in un senso e nell'altro in base alla differenza fra i due valori.
Un articolo molto esauriente si trova a questo link per cui si rinvia a quella scheda per avere le informazioni necessarie alla sua conoscenza ed al suo impiego. Un altro link utile è settorezero.
I servo che si acquistano nei negozi di elettronica si comportano tutti in questo modo ma possono avere differenze sulla durata dell'impulso in corrispondenza dei valori estremi della rotazione.
Il comando tramite scheda Arduino/Genuino deve essere costruito in modo da ripettare le specifiche del servo. Per fare questo c'è un'apposita libreria che va richiamata all'inizio del programma (libreria servo di Arduino).
Tra le caratteristiche salienti del servo sono da notare, oltre alle dimensioni ed il peso il cui significato è ovvio:
- la tensione di alimentazione
- la gamma delle posizioni angolari che può assumere il perno
- i valori di durata dell'impulso per comandare (nota 4) i valori angolari agli estremi della gamma
- la corrente assorbita
- la coppia motrice
- la velocità di rotazione (o durata del transitorio di posizionamento)
Esempio:
La tensione di alimentazione è in genere compresa fra 4,5V e 6V dc (corrente continua) quindi adatta ad utilizzare la stessa alimentazione prevista per la stragrande maggioranza dei circuiti elettronici digitali tra ciui Arduino/Genuino.
La gamma delle posizioni angolari che può assumere il perno è di solito compresa fra 0°, perno ruotato completamente in senso antiorario e 180°, perno ruotato completamente in senso orario.
I valori della durata dell'impulso di comando (PWM) sono tipici di ciascun servo e vanno conosciuti al momento della progettazione per inviare comandi corretti. Nel caso il servo sia pilotato con impulsi che eccedono in durata la gamma prevista dal servo in uso, ci potrebbero essere sovracorrenti eccessive con possibili danni per motore e circuiti. La libreria di Arduino prevede per default valori da 0,544ms per 0° e 2,400ms per 180°, valori che sono modificabili con i comandi previsti (vedi i parametri di attach)
La corrente assorbita viene raramente dichiarata nelle specifiche eppure rappresenta una delle principali preoccupazioni dei progettisti. La corrente viene assorbita per alimentare la circuiteria elettronica del controllo e rappresenta un valore base costante piuttosto modesto (diciamo 5-10mA) mentre la corrente assorbita per spostare il perno è di tipo impulsivo e raggiunge valori piuttosto elevati, anche 1A in presenza di ostacoli importanti o di blocco del perno (nota 5).
Quando il servo ha raggiunto la posizione fissata dal comando l'elettronica agisce in continuazione per mantenerla per cui permane l'assorbimento di corrente. Ad un tentativo di spostare il perno si ha un azione contraria del motore volta a mantenere la posizione; la corrente assorbita si chiama corrente di stallo ed è proporzionale allo sforzo esercitato per mantenere la posizione in contrasto con la forza esterna di disturbo.
In presenza di correnti impulsive occorre calcolare il valore medio della corrente per valutare il consumo della batteria la cui capacità va calcolata per assicurare l'alimentazione per tutta la missione.
La coppia motrice fornisce indicazioni sulla capacità del servo di muovere il perno vincendo la resistenza dell'apparato connesso meccanicamente ad esso (vedi nota 4). Il valore disponibile dipende dalla tensione della batteria, maggiore è la tensione disponibile, maggiore è la coppia prodotta. Un valore di 5,5kg*cm (nota 6) significa che un peso di 5,5Kg appeso al filo arrotolato su una puleggia di raggio 1cm è al limite della capacità di sollevamento del servo. Se il raggio è 2 cm, il peso sollevabile è la metà (2,75kg) .... il prodotto peso*raggio non deve superare il valore di coppia motrice del servo; in caso contrario il servo non si muove: è lo stallo.
La durata della rotazione è il tempo che il perno impiega per ruotare dell'angolo indicato. La notazione "0,2sec/60° senza carico" significa che impiega 0,2secondi per ruotare di 60° ... a vuoto! e impiegherà 0,6 secondi per ruotare di 180° (3volte il tempo per ruotare di 60°) ... a vuoto! Se ci sono altre masse connesse con il perno, la durata della rotazione sarà superiore.
La durata della rotazione ha un limite che dipende dalla velocità che il motore raggiunge a regime che, a sua volta, dipende dalla tensione di alimentazione disponibile.
Due parole sulle inerzie ed il transitorio di avviamento e frenata.
Tutte le masse connesse al perno a cominciare dal motorino, dagli ingranaggi e dal potenziomentro (che sono interni) per continuare con gli alberini di collegamento con le parti da muovere e le parti mobili stesse, hanno delle inerzie.
Avere inerzia significa che ogni massa sta ferma se nessuna forza o coppia agisce su di essa, che per muoverla occorre accelerarla, che finchè si muove continua a girare finchè una forza o una coppia non la ferma frenandola.
Accelerare una massa significa dare energia cinetica che deve essere fornita extra dalla batteria, per cui il movimento non passa subito da fermo e va a regime istantaneamente ma ci arriva tramite un periodo transitorio di velocità crescente da zero a regime in un tempo più o meno breve (durata del transitorio). In questo periodo la corrente assorbita dal motorino non deve solo vincere gli attriti ma anche fornire l'energia cinetica necessaria con la conseguenza che all'avviamento di un motore elettrico c'è sempre un picco di corrente (nota 7).
Viceversa, frenare una massa in moto, significa sottrarre energia cinetica che può avvenire per attrito (nota 8) che dissipa l'energia cinetica trasformandola in calore oppure producendo con lo stesso motore una coppia motrice di senso opposto al moto ottenuto invertendo la polarità del motore elettrico. L'inversione della polarità viene effettuata in modo automatico dall'elettronica del servo ma si traduce in un ulteriore picco di corrente per effettuare la frenata (nota 9).
Le inerzie consumano energia elettrica per cui posizionamenti frequenti di masse notevoli sono la causa principale di consumo di energia delle batterie e quindi di riduzione della durata della batteria.
Un esempio di utilizzo con Snap for Arduino è descritto in questo articolo: alberi elettrici.
note
nota 1: un servo assorbe una corrente non trascurabile che è bene sia fornita da un'alimentazione appoosita per non disturbare il funsionamento del controllore
nota 2: è un trasduttore che trasforma una posizione angolare in un segnale elettrico (una tensione)
nota 3: il potenziometro funge da partitore di tensione e la tensione in uscità è proporzionale all'angolo di rotazione del perno. La precisione del servo è dovuta alla precisione del potenziometro che rappresenta il ramo di controreazione del sistema controllato.
nota 4: viene usato spesso il termine "comandare": un conto è fissare l'angolo come viene imposto dal software, un altro è vedere che il perno va proprio in quella posizione. Dire che inviene inviato un comando per ruotare all'angolo 120°, per esempio, non significa che il perno andrà a posizionarsi in quell'angolo perchè la coppia motrice disponibile al perno non è detto che sia in grado di vincere la coppia resistente opposta dal carico e da tutti gli accidenti che possono intervenire anche in modo occasionale (granellini di polvere, scalini imprevisti ...)
nota 5: il blocco del perno si può avere anche quando ha raggiunto la posizione angolare ma agenti esterni cercano di spostare il perno dalla posizione raggiunta (è quello che accade nel comandare il timone di un velivolo o di un'imbarcazione)
nota 6: kilogrammicentimetro e non kilogrammi al centimetro. Va anche detto che kg*cm non è una grandezza del Sistema Internazionale che sarebbe il N*m (newton-metro o joule al rad) si usa però questo che è più comodo per le applicazioni dei servo suppongo perchè più vicino alle esperienze degli smanettoni.
nota 7: i motori dc hanno comunque un forte assorbimento di corrente quando sono fermi o ruotano ancora molto letamente rispetto alla velocità di regime (corrente di avviamento)
nota 8: i freni delle auto e delle bici operano in questo modo
nota 9: giusto per completezza di informazione: quando un veicolo usa il "freno motore" significa che si sfruttano gli attriti del motore per rallentare la corsa in modo da non surriscaldare i freni che in tal caso smetterebbero di frenare. Se si riesce a frenare senza invertire la polarità del motore elettrico ma modificando la fcem a vuoto agendo sugli avvolgimenti o sul campo magnetico induttore, si ha una frenata con recupero di energia ... ma per fare questo occorrono motori e circuiti appositamente predisposti per questa modalità e non è il caso dei motorini dei servo anche se ci piacerebbe.