• Non ci sono risultati.

Tra i vari task presenti nel sistema operativo, quello che gestisce completamente il motore è il “motor control task”. Il controller progettato, come detto è sensorless, dunque non utilizza sensori per capire la posizione del rotore, ma individua l’attraversamento dello zero delle f.e.m. indotte per poter capire dove si trova il rotore. Il problema principale di questo tipo di controllo è l’avvio del motore, quando questo è fermo, infatti, la forza elettromotrice indotta è nulla quindi questa tecnica non dà alcuna informazione sulla posizione del rotore e di conseguenza non è possibile

CAPITOLO 4: Progettazione Firmware

76

iniziare a pilotare in modo corretto le fasi del motore; a motore avviato invece la forza elettromotrice ha un’ampiezza che aumenta in modo proporzionale alla velocità del motore, dunque facilmente interpretabile. Per poter risolver questo problema è stato necessario pensare ad una strategia che possa mettere in movimento il motore anche senza conoscere la posizione iniziale del rotore, iniziando in questo modo a produrre la forza elettromotrice indotta. L’algoritmo implementato prevede una fase nella quale ignorando la posizione del rotore, vengono alimentate nella sequenza corretta (nota a priori) le bobine dello statore del motore. In questa fase i segnali di pilotaggio dei MOS non vengono controllati della posizione del rotore, come durante il normale pilotaggio six-step, ma la transizione tra gli stati della macchina è temporizzata da un segnale generato all’interno del microcontrollore stesso. Il tempo che intercorre tra due transizioni di stato viene decrementato in modo lineare. Partendo dalla condizione di motore fermo vengono selezionate e alimentate due fasi casuali per un certo tempo nel quale il campo magnetico prodotto da tali bobine sarà in grado di attirare il rotore, qualsiasi posizione esso occupi in quell’istante. Dopo questo tempo la macchina cambia stato e alimenta le due fasi successive che consentiranno al motore di continuare a ruotare, ovviamente sarà improbabile che questo passaggio avvenga all’istante corretto, dunque la coppia prodotta dal motore in questa fase non si avvicinerà a quella ottimale. È necessario alimentare per un tempo maggiore le due fasi inizialmente selezionate affinché esse riescano a mettere in movimento il motore nonostante esso sia fermo e le fasi alimentate non siano quelle ottimali, in quanto deve essere superata l’inerzia iniziale del rotore. Successivamente il tempo per cui sono

CAPITOLO 4: Progettazione Firmware

77

alimentate le bobine viene ridotto sempre di più, questo meccanismo produce un aumento della velocità del motore e di conseguenza la forza elettromotrice indotta nelle bobine raggiunge un’ampiezza tale da poter essere letta in modo corretto. Raggiunta tale condizione, dunque, si chiude l’anello di controllo e quindi il pilotaggio delle fasi viene eseguito leggendo la posizione del rotore, e il motore inizia a produrre la massima coppia possibile che può essere raggiunta attraverso un controllo six-step di questo tipo. Il pilotaggio che viene implementato dopo l’avvio libero è del tutto analogo al pilotaggio eseguito attraverso sensori Hall, a differenza di quest’ultimo cambia il metodo di riconoscimento della posizione occupata dal rotore rispetto alle bobine di statore, come ampiamente discusso nei capitoli precedenti. La prima fase di avvio libero ha in definitiva lo scopo di mettere in movimento il motore e di acceleralo fino ad una velocità tale da rendere valide e interpretabili le tensioni indotte nelle bobine e quindi poter capire quale sia la posizione del rotore. Il diagramma di flusso successivo descrive in modo grafico l’algoritmo appena descritto:

CAPITOLO 4: Progettazione Firmware

78

Figura 32: Diagramma di flusso relativo all'algoritmo di controllo del motore

STOP START=1? NO SI AVVIO LIBERO È soddisfatta la condizione di avvio libero? NO SI ANELLO CHIUSO CONTROLLO POSIZIONE START=1? SI NO

CAPITOLO 4: Progettazione Firmware

79

Come è possibile vedere anche dal diagramma di flusso di Figura 32 l’algoritmo ha una transizione dallo stato di “AVVIO LIBERO” a quello di “ANELLO CHIUSO” in seguito al verificarsi di una particolare condizione (condizione di avvio libero in figura 33). Dal punto di vista fisico è stato già detto che questa condizione corrisponde al raggiungimento di una certa ampiezza delle f.e.m. in modo tale da poter essere correttamente elaborate dal blocco di ZCD che solo allora potrà generare correttamente i segnali di emulazione dei sensori Hall. Ora è necessario soffermarsi su come sia possibile verificare questa condizione all’interno del microcontrollore. Poiché l’ampiezza delle f.e.m. indotte è direttamente proporzionale alla velocità del motore, una prima idea è quella di misurare la velocità del motore e di eseguire il passaggio tra le due zone di funzionamento al raggiungimento di una velocità target; questa possibilità è stata esclusa in quanto non è possibile misurare la velocità in modo attendibile fino al momento in cui le f.e.m. indotte non siano accettabili, il motivo di questa impossibilità nella misura della velocità verrà chiarito al lettore nel paragrafo successivo. Un’altra possibilità sarebbe quella di aspettare un certo tempo, nel quale viene eseguito l’algoritmo di avvio libero, al termine del quale si presuppone che i segnali di zero-crossing detection siano corretti; questo sarebbe però sempre vero se il motore fosse libero di girare sempre nelle medesime condizioni di carico applicato, cosa non vera in questa applicazione. Come già sottolineato più volte i segnali prodotti dal blocco di ZCD replicano in modo fedele i segnali che sarebbero prodotti dai sensori Hall, questa caratteristica è alla base dell’algoritmo di validazione dei segnali di controllo. I tre segnali Hall interpretati come una parola a tre bit,

CAPITOLO 4: Progettazione Firmware

80

producono una sequenza di codici in codifica Gray (come visto in tabella 1), ognuno dei quali individua univocamente il “sesto” di angolo giro elettrico in cui si trova il rotore e dunque questa sequenza si ripete ciclicamente mentre il motore è in rotazione. Ovviamente questa sequenza deve essere prodotta anche dai segnali di ZCD interpretati allo stesso modo. La validazione di questi viene effettuata andando a verificare la corretta sequenza dei codici in codifica Gray. Quando il numero di sequenze successive riconosciute raggiunge un numero abbastanza elevato, si può essere abbastanza certi che le f.e.m. indotte abbiano raggiunto un’ampiezza tale da poter fare funzionare in modo corretto il circuito di zero-crossing detection. Verificata tale condizione viene chiuso l’anello di controllo e dunque il motore viene pilotato in funzione della posizione del rotore ([17]).

Documenti correlati