Come sincronizzare le uscite PWM nei microcontroller per pilotare i carichi in modo più efficiente

Di Bill Giovino

Contributo di Editori nordamericani di DigiKey

La maggior parte dei microcontroller ha almeno una periferica di modulazione della larghezza di impulso (PWM) che genera molteplici forme d'onda sotto forma di onde quadre. Queste uscite PWM possono essere utilizzate per pilotare carichi sincroni come i motori passo-passo nei sistemi meccanici e i MOSFET di potenza per i convertitori di potenza. Perché il carico di destinazione funzioni correttamente è importante che le forme d'onda PWM siano sincronizzate con precisione.

Se la periferica PWM non viene programmata con attenzione, può causare occasionali ritardi di fase tra le forme d'onda, con la conseguente perdita della sincronizzazione quando i fronti delle forme d'onda non si allineano correttamente. Questi ritardi di fase provocheranno il pilotaggio inefficiente dei carichi, sprecando energia e generando eventualmente un calore eccessivo. Per le periferiche PWM più comuni è possibile attivare o disattivare una PWM, il che causerà però ritardi di fase rispetto ad altre uscite PWM.

Ma nel caso di applicazioni con Internet delle cose (IoT) di piccole dimensioni, alimentate a batteria, dove una singola periferica PWM a 16 o 32 uscite viene utilizzata per controllare più carichi esterni, questo rappresenta un problema non da poco. Per queste applicazioni IoT, i ritardi di fase possono infatti sprecare l'energia della batteria. Inoltre, non venendo rilevati, possono sfuggire alla diagnostica di rete dell'endpoint IoT.

Questo articolo esamina alcune delle applicazioni per le periferiche PWM a microcontroller e spiega quando è importante che le forme d'onda PWM in queste applicazioni rimangano sincronizzate. Illustra quindi un microcontroller di Maxim Integrated, dotato di una periferica a treno di impulsi appositamente progettata per prevenire la perdita di sincronizzazione della forma d'onda in queste applicazioni e infine mostra come configurarla per garantire il pilotaggio efficiente del carico di destinazione.

Periferiche PWM a microcontroller e relativi carichi di destinazione

La maggior parte dei microcontroller per uso generale ha almeno una periferica PWM che viene utilizzata per generare onde quadre regolari e ripetute. Sono molti i carichi che possono beneficiare di un pilotaggio PWM: da quelli semplici ai sistemi di azionamento meccanici più complessi.

I diodi a emissione luminosa (LED) sono un esempio di carico semplice che può essere pilotato in modo molto efficiente con un segnale PWM, specie per applicazioni in cui occorre regolare l'intensità luminosa di un LED colorato. Rispetto al dimmeraggio di un LED variando la corrente continua diretta, quello della PWM mantiene con maggiore precisione la qualità della luce senza produrre un cambiamento di colore evidente. Una periferica PWM può facilmente pilotare uno o più LED. Se i LED vengono utilizzati come indicatori visivi per un operatore, le differenze di fase tra due o più LED non si notano. Se però vengono utilizzati in un'applicazione più complessa come quella in cui più LED comunicano dati sotto forma di modulazione della luce ai ricevitori ottici, la sincronizzazione dei LED può essere un'importante considerazione in fase di progetto.

Un motore a corrente continua azionato attraverso driver per motori in CI rappresenta un altro esempio di carico semplice per una PWM a microcontroller. Mentre la velocità del motore in corrente continua può essere facilmente modificata variando la tensione sui suoi due terminali, il controllo PWM consente di monitorare in modo più preciso la rotazione del motore. Se per un sistema di controllo ad anello chiuso si utilizza un sensore di velocità, è possibile mantenere la velocità del motore con maggiore precisione. Se si utilizzano due o più motori a corrente continua che devono essere azionati insieme, per mantenere un controllo preciso della velocità tra di essi potrebbe essere necessario sincronizzare le forme d'onda PWM.

Pilotaggio di motori passo-passo bipolari

La progettazione si fa più complessa quando si azionano motori passo-passo bipolari. I motori passo-passo bipolari sono azionati da due avvolgimenti con corrente reversibile (Figura 1). Ogni avvolgimento richiede due PWM, per un totale di quattro.

Schema di un motore passo-passo bipolare azionato da due avvolgimentiFigura 1: Un motore passo-passo bipolare viene fatto ruotare da due avvolgimenti (qui rappresentati dalle bobine rossa e verde) utilizzati per far scorrere la corrente in entrambe le direzioni. Controllando la fase e la durata del flusso di corrente negli avvolgimenti, è possibile controllare facilmente la velocità e la posizione del motore. (Immagine per gentile concessione di DigiKey)

Come si vede nella Figura 1, perché il motore possa funzionare i due avvolgimenti rappresentati dalle bobine rossa e verde devono essere pilotati nella sequenza corretta. La sequenza mostrata nella Figura 2 aziona il motore passo-passo bipolare di un passo completo a ogni cambio della forma d'onda.

Schema del pilotaggio delle due bobine in un motore passo-passo bipolareFigura 2: Affinché il motore passo-passo bipolare si muova di un passo completo a ogni cambio della forma d'onda, ogni sua bobina deve essere pilotata secondo lo schema sopra riportato. La corrente in ogni bobina viene prima condotta in una direzione, dopo di che la bobina diventa inattiva e la corrente viene condotta nella direzione opposta. (Immagine per gentile concessione di DigiKey)

Ogni passo del motore inizia a ogni transizione della forma d'onda. Come visto nella Figura 2, la polarità di tensione attraverso gli avvolgimenti - e quindi il flusso di corrente attraverso ognuno di essi - cambia a ogni passo. I ritardi di fase in uno qualsiasi dei segnali PWM possono causare il singhiozzo del motore, con conseguente perdita di coppia, specie alle basse velocità.

Un microcontroller con una periferica PWM che utilizza solo quattro uscite può controllare facilmente il motore passo-passo, senza che il mantenimento della sincronizzazione necessiti di eccessivi accorgimenti. La situazione si fa però più complessa se la stessa periferica PWM viene utilizzata per controllare più di un carico. Ad esempio, in una PWM a 16 uscite, quattro possono essere assegnate a un motore passo-passo, mentre le altre possono essere destinate ad altri carichi come motori a corrente continua o LED. Dopo aver configurato le uscite PWM per la frequenza e il ciclo di lavoro usando gli appositi registri, per ogni PWM viene impostato un bit in un registro di abilitazione/disabilitazione. In un microcontroller Arm®, il firmware può impostare i bit appropriati utilizzando il bit banding. Il bit banding esegue però una lettura/modifica/scrittura (RMW) sul registro di destinazione. Se altre uscite PWM sono programmate per iniziare o terminare durante l'operazione RMW, il risultato può essere imprevedibile. In alcune situazioni si può arrivare all'abilitazione o disabilitazione di una PWM contraria al controllo del firmware.

Maxim Integrated ha risolto questo problema con il microcontroller Arm Cortex®-M4F MAX32650 che opera a 120 MHz. Dispone di un'ampia gamma di periferiche, tra cui tre interfacce standard SPI, una Quad SPI, tre UART, due porte I2C, un'interfaccia USB 2.0 Hi-Speed con strato fisico (PHY), sei timer a 32 bit e un'unità di crittografia AES-256 (Figura 3).

Schema di MAX32650 di Maxim Integrated (fare clic per ingrandire)Figura 3: MAX32650 di Maxim Integrated si basa su un Arm Cortex-M4F a 120 MHz e dispone di una gamma completa di periferiche e opzioni di memoria specifiche per applicazioni di edge computing IoT ad alte prestazioni. (Immagine per gentile concessione di Maxim Integrated)

Con 3 MB di flash e 1 MB di SRAM, MAX32650 è mirato ai sofisticati endpoint di Internet delle cose (IoT) che richiedono l'edge computing. MAX32650 ha anche una periferica a 16 uscite a treno di impulsi in grado di generare sofisticati segnali PWM. Può generare onde quadre con una frequenza configurabile e un ciclo di lavoro del 50%, così come un treno di impulsi basato su un modello di bit programmabile che può essere lungo fino a 32 bit.

Prevenire i ritardi di fase

Il generatore del treno di impulsi può attivare o disattivare individualmente una qualsiasi delle 16 uscite PWM utilizzando il registro PTG_ENABLE a 32 bit. Scrivendo un 1 in qualsiasi posizione di bit si abilita quel treno di impulsi, consentendogli di funzionare come configurato. Scrivendo uno 0 gli orologi del treno di impulsi e la logica si arrestano e l'uscita viene congelata nello stato logico in cui si trova al momento. Questo registro ha le stesse limitazioni RMW dei registri di abilitazione/disabilitazione che si trovano nella maggior parte dei microcontroller, quindi il bit banding è sconsigliabile.

Per mantenere la sincronizzazione di fase tra le forme d'onda, la periferica del treno di impulsi di MAX32650 supporta una funzione esclusiva chiamata Safe Enable utilizzando il registro a 32 bit PTG_SAFE_EN e Safe Disable utilizzando il registro a 32 bit PTG_SAFE_DIS. I 16 bit superiori di ognuno di questi registri sono inutilizzati e si consiglia di riempire sempre con degli zeri le posizioni inutilizzate.

Per abilitare in modo sicuro una qualsiasi delle uscite, il firmware scrive un 1 nelle posizioni di bit corrispondenti in PTG_SAFE_EN. Questo imposta immediatamente anche le posizioni dei bit per le uscite in PTG_ENABLE, avviando l'uscita PWM. La scrittura di uno 0 in qualsiasi posizione di bit in PTG_SAFE_EN non ha alcun effetto sulle uscite del treno di impulsi.

Per disabilitare in modo sicuro una qualsiasi delle uscite, il firmware scrive un 1 nelle posizioni di bit corrispondenti in PTG_SAFE_DIS. Questo cancella immediatamente anche le posizioni dei bit per le uscite in PTG_ENABLE, interrompendo l'uscita PWM. La scrittura di uno 0 in qualsiasi posizione di bit in PTG_SAFE_DIS non ha alcun effetto sulle uscite del treno di impulsi.

La scrittura su questi registri non esegue un RMW. La funzione Safe Enable/Disable consente di avviare o arrestare immediatamente uno o più treni di impulsi, garantendo al tempo stesso che nessun altro treno di impulsi venga influenzato. Il bit banding non è supportato per i registri PTG_SAFE_EN e PTG_SAFE_DIS.

Facendo riferimento al motore passo-passo bipolare riportato nella Figura 1, le uscite del treno di impulsi 0 e 1 possono essere utilizzate per A e B per l'avvolgimento di corrente verde, mentre le uscite del treno di impulsi 2 e 3 possono essere utilizzate per C e D per l'avvolgimento di corrente rosso. Dato che le forme d'onda nella Figura 2 hanno dei punti morti, è opportuno utilizzare la funzione treno di impulsi per programmare un modello che si ripeta per un numero qualsiasi di volte senza l'intervento del firmware.

Una volta impostato, il motore può essere avviato scrivendo 0000000Fh in PTG_SAFE_EN. Questo dà inizio contemporaneamente al treno di impulsi dalle uscite da 0 a 3, avviando così il motore senza influenzare le altre uscite del treno di impulsi in esecuzione. Il motore può essere arrestato scrivendo 0000000Fh in PTG_SAFE_DIS. Nessuna di queste operazioni ha effetti su altri treni di impulsi in esecuzione.

Se una qualsiasi delle altre 12 uscite del treno di impulsi deve essere abilitata o disabilitata, la si può controllare in modo sicuro utilizzando questi due registri. Il funzionamento del motore passo-passo rimane invariato, a condizione di non scrivere un 1 nelle quattro posizioni inferiori dei bit di questi registri. Se invece si utilizza un registro di abilitazione standard con un RMW in cui le uscite possono essere instabili, si ha una variazione di fase che può influenzare negativamente la coppia. La funzione Safe Enable/Disable assicura che il motore passo-passo funzioni in modo efficiente, non sprechi energia e mantenga sempre la massima coppia.

I pin di uscita del microcontroller non sono sufficientemente potenti per pilotare un motore passo-passo e richiedono un driver per motori o un ponte H. A3909GLYTR-T di Allegro MicroSystems è un driver a doppio ponte H in grado di azionare motori che richiedono da 4 a 18 V e fino a 1 A per avvolgimento di corrente (Figura 4).

Schema del driver a doppio ponte H A3909 di Allegro MicroSystemsFigura 4: A3909 di Allegro MicroSystems è un driver a doppio ponte H con capacità source e drain fino a 1 A per bobine di motori passo-passo. (Immagine per gentile concessione di Allegro MicroSystems)

A3909 è dotato di protezione mediante circuito di arresto termico, protezione dalle sovracorrenti e protezione dai cortocircuiti. Ogni ingresso (INx) pilota l'uscita corrispondente (OUTx). MAX32650 PWM può collegare le uscite del treno di impulsi 0 e 1 agli ingressi IN1 e IN2 (verde) per pilotare la bobina verde tramite OUT1 e OUT2 e le uscite del treno di impulsi 2 e 3 a IN3 e IN4 (rosso) per pilotare la bobina rossa tramite OUT3 e OUT4. Ciò consente ad A3909 di pilotare direttamente il motore passo-passo.

A3909 supporta anche un'utile funzione ad alta impedenza. Se entrambi gli ingressi di un ponte H sono 0 logici per più di un millisecondo, entrambe le uscite vengono messe in uno stato di alta impedenza. Questo è utile per permettere il funzionamento inerziale del motore, o per qualsiasi passo del motore passo-passo che richieda un'uscita ad alta impedenza. Facendo di nuovo riferimento alla Figura 2, qualsiasi parte della forma d'onda che è inattiva trarrebbe benefici dall'essere messa in uno stato ad alta impedenza. Questo migliora l'efficienza impedendo che un avvolgimento interferisca nel funzionamento del motore mentre viene azionato dall'altro avvolgimento.

Se tutti e quattro gli ingressi (entrambe le coppie) sono mantenuti bassi per più di 1 ms, ovviamente entrambe le coppie di uscita vanno in alta impedenza esattamente come descritto sopra. La scheda tecnica la chiama Modalità di sospensione perché parte del circuito interno si spegne.

Conclusione

Le periferiche a microcontroller più comuni spesso includono funzioni PWM utilizzate per pilotare carichi esterni come motori e MOSFET di potenza. Poiché in alcuni casi l'esecuzione di operazioni di manipolazione dei bit nel registro di abilitazione PWM può causare risultati imprevedibili, i fornitori di microcontroller stanno cercando di risolvere questo problema con nuove periferiche PWM che offrono funzionalità in grado di abilitare e disabilitare in modo sicuro le singole uscite PWM senza interferire con le altre uscite PWM, evitando così occasionali ritardi di fase e perdita di sincronizzazione.

DigiKey logo

Esonero della responsabilità: le opinioni, le convinzioni e i punti di vista espressi dai vari autori e/o dai partecipanti al forum su questo sito Web non riflettono necessariamente le opinioni, le convinzioni e i punti di vista di DigiKey o le sue politiche.

Informazioni su questo autore

Image of Bill Giovino

Bill Giovino

Bill Giovino è un ingegnere elettronico con un BSEE ottenuto a Syracuse University, ed è uno dei pochi ad essere passati con successo da progettista, a ingegnere delle applicazioni sul campo, al marketing tecnologico.

Da oltre 25 anni, Bill promuove le nuove tecnologie per un pubblico tecnico e non tecnico a nome di molte aziende, tra cui STMicroelectronics, Intel e Maxim Integrated. In STMicroelectronics, Bill ha contribuito a guidare i primi successi dell'azienda nel settore dei microcontroller. Con Infineon, Bill ha orchestrato i primi successi di progettazione di microcontroller dell'azienda nel settore automotive statunitense. In qualità di consulente di marketing per la sua società CPU Technologies, Bill ha aiutato molte aziende a trasformare prodotti di secondo grado in storie di successo.

Bill è stato uno dei primi ad adottare l'Internet delle cose, compresa l'integrazione del primo stack TCP/IP completo su un microcontroller. Bill è fedele al motto "Le vendite guidate dall'educazione" e tiene molto alla crescente importanza di comunicazioni chiare e ben scritte nella promozione di prodotti online. È moderatore del famoso gruppo Sales & Marketing di LinkedIn Semiconductor e parla correntemente di B2E.

Informazioni su questo editore

Editori nordamericani di DigiKey