3.15. Controllo dei motori in corrente continua

Un motore in corrente continua a spazzole è una bobina di filo avvolta su un albero all’interno di un campo magnetico. Facendo passare corrente attraverso la bobina, il campo esercita su di essa una forza; questa forza diventa coppia sull’albero. Le spazzole all’interno del motore invertono il verso della corrente nella bobina man mano che l’albero ruota, in modo che la coppia spinga sempre l’albero nello stesso verso. Applicando una tensione continua ai due terminali del motore, l’albero gira; invertendo la polarità, gira nel verso opposto.

I motori richiedono in genere da alcune centinaia di milliampere fino a diversi ampere, a tensioni di alimentazione superiori al binario logico a 3,3 V della camera. Un pin GPIO può erogare nell’ordine di 25 mA e non può invertire la polarità: può solo pilotare i suoi due binari. Lo stadio di pilotaggio tra la camera e il motore deve sopportare la corrente del motore, instradare un’alimentazione del motore separata e a tensione più elevata e consentire alla camera di invertire la polarità a comando. Il ponte a H a quattro transistor è la risposta standard.

3.15.1. Il ponte a H

Un ponte a H è costituito da quattro interruttori disposti a forma di H attorno al motore:

Lo schema di un ponte a H. In alto Vmotor è collegato attraverso l'interruttore S1 verso il basso a un nodo A sulla sinistra, e attraverso l'interruttore S2 verso il basso a un nodo B sulla destra. Il motore M è posto orizzontalmente tra A e B. Da A un altro interruttore S3 scende verso massa; da B un altro interruttore S4 scende verso massa.

Il ponte a H: quattro interruttori (S1S4) collegano il motore M tra Vmotor e massa.

Chiudendo coppie diverse di interruttori si seleziona ciò che il motore vede ai suoi terminali:

  • S1 + S4 chiusi, S2 + S3 aperti. La corrente scorre da Vmotor attraverso S1, dentro A, attraversa il motore fino a B e attraverso S4 verso massa. Il motore gira in un verso.

  • S2 + S3 chiusi, S1 + S4 aperti. La corrente scorre nel verso opposto attraverso il motore. Il motore gira nel verso opposto.

  • Tutti e quattro aperti. Entrambi i terminali del motore sono flottanti; il motore prosegue per inerzia.

  • S3 + S4 chiusi (oppure S1 + S2 chiusi). Entrambi i terminali del motore sono collegati allo stesso binario; l’energia cinetica del motore stesso genera una corrente che la coppia chiusa cortocircuita dissipandola come calore. Il motore frena.

La combinazione illegale è la chiusura di entrambi gli interruttori nella stessa colonna – S1 + S3 oppure S2 + S4 – che forma un cortocircuito da Vmotor direttamente a massa. Questo è lo shoot-through, e il codice della camera non deve consentirlo.

In pratica i quattro interruttori sono MOSFET (introdotti nella pagina Adattamento di livello) all’interno di un circuito integrato di pilotaggio. Il chip espone due o tre pin di ingresso a livello logico che internamente sono mappati ai quattro interruttori e include una logica di interblocco che previene lo shoot-through, in modo che il codice della camera non debba gestirlo direttamente.

3.15.2. Il PWM e l’induttanza del motore

Impostare la velocità del motore richiede qualcosa di più del semplice acceso o spento. Il trucco è lo stesso usato per i LED in Regolazione della luminosità dei LED con il PWM: si pulsa il pilotaggio a una frequenza elevata e si lascia che il carico ne calcoli la media. Per un LED il mediatore era l’occhio; per un motore è la bobina stessa.

Una bobina di motore ha un’induttanza considerevole. La corrente attraverso un induttore non può cambiare istantaneamente; varia a una velocità proporzionale alla tensione ai suoi capi. Pulsando il ponte acceso e spento a 20 kHz, la corrente della bobina sale durante ogni fase di accensione, e durante la fase di spegnimento la corrente deve continuare a scorrere: la bobina inverte la tensione ai propri capi per mantenerla.

Senza un percorso disponibile, quella corrente farebbe schizzare verso l’alto la tensione ai capi dell’interruttore appena aperto e potrebbe danneggiare il transistor. I diodi di ricircolo posti ai capi di ciascun interruttore – spesso semplicemente i diodi di corpo dei MOSFET stessi all’interno del chip di pilotaggio – forniscono alla corrente il percorso di cui ha bisogno. Essa scorre attraverso un diodo e ritorna attraverso uno degli interruttori ancora chiusi, completando un anello di ricircolo in cui la corrente decade gradualmente attraverso le piccole resistenze del ponte e del motore stesso. Il diodo blocca inoltre la tensione ai capi dell’interruttore aperto entro una caduta di diodo rispetto al binario verso cui l’anello ritorna, ben all’interno dell’area di sicuro funzionamento del MOSFET.

Il valore medio della corrente su ciascun periodo PWM è ciò che produce la coppia, e tale media segue linearmente il duty cycle: raddoppiando il duty si raddoppia all’incirca la coppia e, a carico costante, all’incirca la velocità. A differenza della regolazione di luminosità dei LED, dove la risposta non lineare dell’occhio richiede una curva, una variazione lineare di duty_u16 corrisponde già a una variazione lineare dello sforzo del motore.

La frequenza PWM deve solo superare due soglie:

  • Al di sopra di ~20 kHz la portante è al di fuori della banda udibile dall’uomo. Al di sotto di tale valore, la forza magnetica sulla bobina sale e scende a ogni impulso PWM e gli avvolgimenti e i lamierini vibrano fisicamente alla frequenza della portante: il motore diventa di fatto un piccolo altoparlante che emette un tono all’altezza del PWM.

  • Ben al di sopra di ~50 kHz i MOSFET e i loro driver di gate iniziano a perdere efficienza a causa delle perdite di commutazione. Durante ogni transizione di accensione e spegnimento il MOSFET sopporta per un breve istante sia una tensione significativa sia una corrente significativa, dissipando un piccolo picco di potenza sotto forma di calore; la capacità di gate dei MOSFET deve inoltre essere caricata e scaricata a ogni ciclo, cosa di cui si fa carico il chip di pilotaggio. Entrambi i costi crescono con la frequenza PWM, quindi a frequenze elevate il calore dovuto alla commutazione può eguagliare quello dovuto alla conduzione della corrente del motore.

20 kHz è il valore predefinito comodo per i motori di dimensioni hobbistiche.

3.15.3. Pilotaggio di un ponte a H

Un chip di pilotaggio del ponte a H a due ingressi mappa IN1 e IN2 ai quattro interruttori più o meno così:

  • IN1 = 0, IN2 = 0 – inerzia (tutti e quattro gli interruttori aperti).

  • IN1 = 1, IN2 = 0 – pilota in un verso.

  • IN1 = 0, IN2 = 1 – pilota nel verso opposto.

  • IN1 = 1, IN2 = 1 – frena.

Pilotando i due ingressi come uscite PWM la camera può impostare il verso scegliendo quale dei due pin trasporta il duty, e la velocità tramite il valore del duty stesso:

import time
from machine import PWM, Pin

in1 = PWM(Pin("P7"), freq=20_000, duty_u16=0)
in2 = PWM(Pin("P8"), freq=20_000, duty_u16=0)

def drive_a(speed):       # speed: 0..65535
    in1.duty_u16(speed)
    in2.duty_u16(0)

def drive_b(speed):
    in1.duty_u16(0)
    in2.duty_u16(speed)

def coast():
    in1.duty_u16(0)
    in2.duty_u16(0)

def brake():
    in1.duty_u16(65535)
    in2.duty_u16(65535)

drive_a(32768)    # half speed in direction A
time.sleep(2)
drive_b(16384)    # quarter speed in direction B
time.sleep(2)
coast()

Una rampa da spento a pieno regime e ritorno fornisce un avvio e un arresto graduali:

for d in range(0, 65535, 256):
    in1.duty_u16(d)
    time.sleep_ms(10)
for d in range(65535, 0, -256):
    in1.duty_u16(d)
    time.sleep_ms(10)

3.15.4. Driver con verso e velocità

Una seconda famiglia di chip per ponte a H espone un’interfaccia più comoda: un ingresso digitale di verso (spesso etichettato DIR o PH per «phase») più un ingresso di velocità (spesso PWM o EN per «enable»). Il pin di verso sceglie in quale direzione pilota il ponte; il duty cycle sul pin di velocità imposta la corrente media.

Questo è più facile da pilotare via software rispetto allo schema a due ingressi PWM. I due segnali corrispondono al modo in cui il problema viene di solito formulato – «gira in questa direzione, a questa velocità» – così il codice può scrivere set_direction(forward); set_speed(50) invece di ramificarsi tra in1 e in2. È necessario un solo canale PWM, il che libera l’altro canale dello stesso timer per un compito non correlato. E il pin di verso può rimanere fermo tra una variazione e l’altra senza ritriggerare il ponte, quindi cambiare velocità mantenendo fisso il verso tocca un solo registro.

import time
from machine import PWM, Pin

dir_pin = Pin("P8", Pin.OUT)
speed = PWM(Pin("P7"), freq=20_000, duty_u16=0)

def drive(direction, speed_u16):
    dir_pin.value(direction)         # 0 or 1
    speed.duty_u16(speed_u16)        # 0..65535

drive(0, 32768)     # direction A at half speed
time.sleep(2)
drive(1, 16384)     # direction B at quarter speed
time.sleep(2)
speed.duty_u16(0)   # stop

Ciò che «stop» effettivamente fa con questo tipo di driver – inerzia o frenata – dipende dal chip. Con un driver a due ingressi è il codice della camera a scegliere (entrambi gli ingressi bassi per l’inerzia, entrambi alti per la frenata); con un driver con verso e velocità decide il chip, quindi vale la pena dare un’occhiata al data sheet prima di affidarsi all’uno o all’altro comportamento.