Comunicazione sensorless per motori brushless

In questo articolo per la rubrica Firmware Reload analizziamo un’applicazione con microprocessori AVR ATmega32M1 per motori DC brushless.

I motori brushless sono idealmente derivati dai motori in DC con il proposito di eliminare il collettore a lamelle e quindi le spazzole. Esistono due tipi di motore brushless: DC o trapezoidali; AC o sinusoidali. In un motore in DC a spazzole l’avvolgimento rotorico (indotto) è alimentato dall’esterno attraverso le spazzole e le lamelle di collettore. La rotazione del rotore determina lo spostamento relativo delle spazzole sul collettore e la conseguente alimentazione delle spire opportune. Il collettore a lamelle insieme alle spazzole funge da commutatore automatico dell’alimentazione sugli avvolgimenti rotorici. Nel motore brushless il collettore viene sostituito da un commutatore elettronico controllato. Ciò rende possibile lo scambio delle posizioni tra rotore e statore, ovvero il campo viene ora generato da magneti permanenti posti sul rotore, mentre gli avvolgimenti sono realizzati sullo statore (Figura 1).

Un’evoluzione ha portato alla realizzazione di questa macchina con tre avvolgimenti statorici posti a 120° meccanici. Il brushless trapezoidale ha una magnetizzazione del rotore tale che, una volta posto in rotazione, produce sugli avvolgimenti statorici una f.e.m. indotta con caratteristiche profilo trapezoidale. Tale sarà dunque il profilo della f.c.e.m. durante l’esercizio della macchina. I tre avvolgimenti statorici, posti a 120° meccanici, vedranno E con i rispettivi ritardi temporali. Alimentando il motore e pilotando opportunamente le correnti I in modo che siano come nella Figura 2 si nota come in ogni istante il prodotto E*I, equivalente alla potenza meccanica e dunque legato alla coppia, è dovuto a due avvolgimenti per volta ed è costante. Dunque: P = 2 *E*I. Il motore per funzionare ha bisogno di un circuito di comando che tenga conto della posizione angolare dell’albero, tramite alcuni sensori (effetto Hall), che vanno correttamente posizionati in fase sullo statore.

Figura 1: Motore Brushless

Figura 1: Motore Brushless

 

Figura 2: correnti e f.c.e.m. in un motore brushless.

Figura 2: correnti e f.c.e.m. in un motore brushless

APPLICAZIONE

Dopo questa breve presentazione teorica dei motori DC Brushless, diamo un’idea di una possibile applicazione pratica con l’aiuto di un esempio. La prossima parte di questo articolo si occuperà dell’hardware e software con ATmega32M1 per una applicazione nei motori DC brushless. Il software include il controllo della velocità attraverso un correttore PID. Tale correttore è composto di tre coefficienti principali: KP (coefficiente proporzionale), KI (coefficiente integrale), e KD (coefficiente derivativo). L’errore tra la velocità desiderata e la velocità reale (Figura 3) viene moltiplicato per ogni guadagno.

Figura 3: PID.

Figura 3: PID

Quindi, la somma dei tre termini fornisce il comando da applicare al motore ed ottenere la giusta velocità. L'ATmega32M1 è stato sviluppato per fornire una soluzione integrata per il motore avanzato per applicazioni di controllo con connettività CAN e LIN. Sulla base del rendimento elevato, l’architettura RISC AVR a 8-bit, l'ATmega32M1 integra tutte le periferiche di base necessarie per soddisfare le esigenze di algoritmi complessi. Formato da blocchi come ADC 10-bit e amplificatori differenziali con opzioni di guadagno programmabile, questo tipo di microcontrollore fornisce tutte le funzionalità necessarie per il controllo di motori BLDC nel loro sistema ambientale. L'ATmega32M1 include ingressi indipendenti di confronto per consentire controllo sensorless in assenza di componenti esterni e tre singoli comparatori disponibili per le misurazioni di campo elettromagnetico.

Un ulteriore confronto è disponibile per il rilevamento di correnti. Il suo riferimento può essere fissato con una qualsiasi tensione di riferimento. La frequenza di clock arriva fino a 64 MHz. Il bit versatile Power stage controller, inoltre, genera segnali programmabili per il controllo del motore. Questa applicazione è stata sviluppata e testata con schede ATAVRMC310 e ATAVRMC300. La scheda ATAVRMC300 è la scheda di alimentazione, mentre l'ATAVRMC310 è la scheda processore costruita per ATmega32M1 (Figura 4).

Figura 4: schema hardware generico dell’applicazione.

Figura 4: schema hardware generico dell’applicazione

Come mostrato in Figura 5 il microcontrollore contiene uno Stage Controller (PSC). Il PSC può essere visto come un modulatore di larghezza di impulso con sei segnali in uscita.

Figura 5: implementazione hardware.

Figura 5: implementazione hardware

Un ingresso di guasto (Over_Current) è legato alla PSCIN. Questo ingresso consente di disattivare tutte le uscite PSC. E’ possibile misurare la corrente con un differenziale amplificato a due canali programmabili: 5, 10, 20 e 40 stadio di guadagno. Inoltre, la resistenza di shunt deve essere adatta al range di amplificazione. In Figura 6 osserviamo l’implementazione delle porte I/O del microcontrollore.

Figura 6: Microcontroller I/O.

Figura 6: Microcontroller I/O

Le uscite UH, UL, VH, VL, WH e WL sono utilizzate per controllare il power bridge, che dipende dallo stadio Power Control (PSC) che genera segnali PWM. Per tali applicazioni si consiglia la modalità in Figura 7. Il registro POCRnRA viene utilizzato per regolare la sincronizzazione dell’ADC per la misura della corrente.

Figura 7: Power Control (PSC).

Figura 7: Power Control (PSC)

CONFIGURAZIONE SOFTWARE

Atmel fornisce le librerie per il controllo motori DC Brushless. Il primo passo è configurare il microcontrollore. La funzione da utilizzare è mc_init (). Esso invia le funzioni di inizializzazione software e hardware e imposta tutti i parametri del motore (la direzione del motore, velocità del motore, l’accensione e arresto del motore). Dopo la configurazione del microcontrollore e l’inizializzazione, il motore può essere avviato. Solo poche funzioni sono necessarie per controllare il motore (Figura 8):

mci_run void (void) Utilizzato per avviare il motore

Bool mci_motor_is_running (void) Ottiene lo stato del motore

mci_stop void (void) Ferma il motore.

Figura 8: Configuration Loop

Figura 8: Configuration Loop

UTILIZZATO PER ARRESTARE IL MOTORE

Attraverso le funzioni mc_set_speed_ loop () e mc_set_open_loop() è possibile settare la velocità del motore opportunamente regolando il guadagno del PID. Nelle Figure 9 e 10 viene mostrato l’andamento dei fattori K del PID per una buona configurazione parametrica del motore.

Figura 9: K (proporzionale).

Figura 9: K (Proporzionale)

 

Figura 10: K (Integrale).

Figura 10: K (Integrale)

Scarica subito una copia gratis

Scrivi un commento

Seguici anche sul tuo Social Network preferito!

Send this to a friend