Vai al contenuto
PLC Forum


Iniezione di terza armonica


peppe855

Messaggi consigliati

Buon giorno, ho realizzato un parte di codice tramite dspic tramite il quale si da' in ingresso un setpoint di velocità e si ottiene in uscita un segnale modulato in ampiezza e frequenza ovvero la caratteristica V/Hz costante. Adesso vorrei implementare l'iniezione di terza armonica, pero' per capire se il software che scrivo è corretto dovrei visualizzare con l'oscilloscopio la sola fondamentale, per cui vi chiedo basta semplicemente porci un filtro RC con frequenza di taglio adeguata o serve qualcosa di diverso? grazie

Link al commento
Condividi su altri siti


SandroCalligaro

Per misurare la fondamentale hai due possibilità: visualizzare la concatenata o la tensione stellata (di fase).

Concatenata: differenza tra le uscite inverter

Stellata o di fase: differenza tra uscite inverter ed un centro stella fittizio (il centro di una rete di 3 resistenze uguali a stella).

 

Se invece ti interessa verificare che l'iniezione di terza armonica sia corretta, dovresti guardare la differenza tra ciascuna uscita inverter ed il negativo del DC bus.

 

Ovviamente devi filtrare le tensioni adeguatamente (ad es. 1/(2 pi RC) = Fsw/(5÷10), purché sia 5÷10 volte la fondamentale).

Magari dico una cosa ovvia (se è così, scusami ;)), fai molta attenzione a dove colleghi la massa delle sonde.

 

Se pensi di fare anche altri sviluppi, ti potrebbe interessare però avere, più in generale, a disposizione un DAC (vero e proprio oppure fatto con una PWM filtrata).

In questo modo puoi visualizzare facilmente all'esterno il valore istantaneo (ad ogni passo di controllo) di qualunque variabile del micro.

Se hai verificato che la periferica PWM funzioni correttamente (cioé che le forme d'onda siano correttamente sincronizzate, e che i 3 duty-cycle siano proporzionale ai 3 compare, anche a 0 e al massimo valore di conteggio), allora puoi verificare la correttezza dell'iniezione di terza armonica semplicemente guardando il valore dei compare o dei duty-cycle calcolati dall'algoritmo, invece di andare a fare misure (scomode) sulle uscite dell'inverter.

 

PS: per curiosità (liberissimo di non rispondermi!):)...

 che algoritmo usi per la modulazione (iniezione di terza armonica fatta come, esattamente)? Compensi le variazioni del bus DC?

Link al commento
Condividi su altri siti

Allora chiamiamo V1n1 V2n1 V3n1 le tre azioni di controllo che si otterrebbero dall'algoritmo di controllo senza che sia implementata l'iniezione di terza armonica, nel caso di massima azione  di controllo cioè V1n1=Vdc/2 (ovviamente V1n1 è sinusoidale quindi sto supponendo la massima azione di controllo ed anche l'istante in cui la sinusoide passa per il valore massimo) con V2n1 e V3n1 adeguatamente sfasate di 120 gradi. 

Adesso chiamero' V1n3 V2n3 V3n3 i tre segnali di terza armonica che andranno a sommarsi con i precedenti V1n1 V2n1 V3n1 che l'algoritmo di controllo continua a fornire, bene tali tre segnali di terza armonica li vado a calcolare nel seguente modo:

V1n3= ( max[V1n1,V2n1,V3n1]+min[V1n1,V2n1,V3n1] ) / 2;

Adesso prendo l'azione di controllo generata dal sistema di controllo (V1n1,V2n1,V3n1) e vado a sommargli rispettivamente la terza armonica precedentemente calcolata, ora da questo nuovo valore vado a calcolarmi il dutycycle che non sforera' il massimo valore ma sarà comunque responsabile (mediamente in un Tc) di un aumento di tensione tra una fase dell'inverter e il centro stella del mio carico/motore.

Sandro non ho ben capito la formula Fsw/(5 ÷10) cioè nel mio caso Fsw=14,4Hz e la fondamentale varia tra (0-60)Hz quanto dovrei scegliere C?

Per le misure non c'è problema dato che sto facendo tutto cio' lavorando con Vdc=12v poichè voglio solo provare la correttezza del software.

Per la correttezza delle tre "sinusoidi" a livello software sembrano correttamente sfasate in quanto ad ogni Tc le loro ampiezze mi danno somma nulla ed i puntatori alla Sine Table sono sfasati correttamente (dal debug).

Mentre per verificare che ad ogni riferimento di velocità imposto da potenziomentro corrisponda effettivamente sia un aumento della frequenza che della ampiezza ho fatto la FFT con l'oscilloscopio che correttamente trasla la fondamentale verso destra aumentando anche la sua ampiezza.

Link al commento
Condividi su altri siti

SandroCalligaro

Se ho capito la tua notazione, allora

V0 =  V1n3 = V2n3 = V3n3 =  ( max[V1n1,V2n1,V3n1]+min[V1n1,V2n1,V3n1] ) / 2  + 0.5*Vdc

è il modo comune che aggiungi a tutti e tre i valori di tensione di ramo (uscita inverter rispetto al negativo del bus DC). In questo modo puoi facilmente ottenere i duty-cycle come (V1n1 + V0)/Vdc

 

Siccome le tre tensioni V1n1,V2n1,V3n1 sono una terna trifase (hanno somma nulla), V0 sarà anche la tensione del centro stella di un carico bilanciato collegato alle uscite dell'inverter. Per questo le tre tensioni tra uscita inverter e centro stella del carico (cioè le tensioni di fase del motore) saranno quelle desiderate.

 

La formula che hai usato dà lo stesso risultato della space vector, ma a mio parere è molto più efficiente da implementare.

Con l'iniezione di "terza armonica" il range massimo di tensione di fase diventa ±Vdc/sqrt(3) invece che ±Vdc/2 (altrimenti a cosa ti servirebbe la "terza armonica"?).

 

Voglio sperare che  Fsw=14,4 kHz :)

Io sceglierei 1/(2*pi*R*C) = 600 Hz. A questo punto scegli le resistenze in modo che la corrente non sia troppo elevata (a seconda di Vdc), e di conseguenza C.

 

Quando parlavo di fare attenzione intendevo dire anche che è facile dei corti, se non ci si pensa...

 

Quote

Per la correttezza delle tre "sinusoidi" a livello software sembrano correttamente sfasate in quanto ad ogni Tc le loro ampiezze mi danno somma nulla ed i puntatori alla Sine Table sono sfasati correttamente (dal debug).

Intendevo una verifica a livello più basso (a monte del discorso trifase), cioè sulla PWM di ciascun ramo di inverter.

Ad esempio, si può impostare la tensione di uscita di ramo dal debugger, con valori da 0 a Vdc, e verificare che il vero duty-cycle corrisponda correttamente.

Vdc può essere una costante durante il debugging, ma nel funzionamento reale dovrebbe essere, possibilmente, il valore misurato (evitando però di dividere per zero nel calcolo del duty, nel caso dovessi fare prove senza alimentazione).

 

Una volta che questo "driver" della periferica funziona correttamente, puoi concentrarti sull'algoritmo di controllo, dimenticando la PWM e facendo conto che la tensione applicata dall'inverter sia quella che ad ogni passo assegni a V1n1,V2n1,V3n1, ritardata di un passo.

Ci sarebbe poi l'effetto dei dead-time, ma questo è un discorso un po' più complicato.

 

 

 

Link al commento
Condividi su altri siti

Grazie per l'esauriente risposta.

Lo so' che l'ho scritta io la formula pero' mi sono venuti un paio di dubbi atroci leggendo i miei appunti:

1) l'iniezione di terza armonica va' sempre fatta a prescindere? cioè anche se in un determinato Tc l'azione di controllo è inferiore a Vdc/2 (per cui è un valore ottenibile anche senza iniezione) o come dicevo tale formula devo sempre implementarla ad ogni passo di campionamento?

2) quei V1n1 V2n1 V3n3 provenienti ad esempio da un PI devono poter raggiungere (Vdc/2)*1.15=Vdc/rad3  perchè se implemento la formula di V0 lasciando che V1n1,V2n1,V3n1 siano al piu' Vdc/2 avrei sbagliato tutto giusto?

Grazie ancora

Link al commento
Condividi su altri siti

SandroCalligaro

Sì, V1n3 bisogna sottrarla, hai ragione, mentre 0.5*Vdc bisogna sommarlo.

Il concetto è che si hanno 3 valori di tensione, il cui massimo e minimo non sono centrati rispetto allo zero.

Sottraendo la media tra max e min si fa in modo che max e min siano equidistanti dallo zero.

 

Se anche facendo il conto della "terza armonica" stai dentro i tempi di calcolo, mettere un "if" in più allunga solamente i tempi, tanto vale fare sempre il conto allo stesso modo.

Hai anche il vantaggio che la modulazione corrisponde alla space vector, che usa i vettori attivi di minima lunghezza, quindi tendenzialmente minimizza il ripple di corrente.

 

In ogni caso questa non è l'unica soluzione, ci sono altre modulazioni abbastanza semplici che mirano a ridurre il numero di commutazioni (cerca "bus-clamped").

In teoria potresti inventarti una modulazione a piacere, ad esempio aggiungendo a tutti e tre i segnali uno stesso valore "a caso" ad ogni passo.:)

Nel caso dell'inverter a due livelli non ha molto senso inventarsi modulazioni al di là delle bus-clamped e della space vector (al di là del modo in cui si fanno i calcoli), ma nell'inverter a tre livelli, ad esempio, c'è molto lavoro sulle modulazioni.

 

Se limiti la tensione ad un valore più basso di Vdc/sqrt(3) non cambia niente, solamente non sfrutti al meglio la tensione disponibile, che in pratica (banalizzando molto) significa che riduci la massima velocità di funzionamento del motore.

 

 

Link al commento
Condividi su altri siti

Salve a tutti

Pur lavorando da oltre 30 anni nell'automazione, l'argomento di questo topic non rientra nel mio campo, ma la curiosita' e' forte: che cosa e' l'iniezione di terza armonica?

Effettivamente non si finosce mai di imparare.

Link al commento
Condividi su altri siti

SandroCalligaro

Il problema alla base è quello di massimizzare la tensione di fase (cioé stellata) disponibile sul motore, a fronte di una certa tensione di alimentazione del bus.

Le tensioni di fase del motore ovviamente devono rimanere le stesse, indipendentemente dal metodo di modulazione adottato.

Qui modulazione significa scelta del duty-cycle da applicare a ciascuna gamba dell'inverter, date le tre tensioni di fase da applicare al motore.

 

Normalmente nel controllo motore (e non solo, anche in altri casi di switching) si considera come tensione il valore mediato nel periodo di PWM.

 

Il centro stella del motore non è collegato, ed il carico (il motore) lo si considera bilanciato. Il centro stella del motore si porterà al valore medio delle tensioni ai morsetti del motore.

Quindi si ha libertà nella scelta del modo comune da applicare, perché se si aggiunge lo stesso valore V0 a tutte e tre le uscite di ramo dell'inverter, aumenterà dello stesso valore V0 anche il centro stella del motore, e le tensioni stellate viste dal motore saranno indifferenti rispetto a V0.

 

Una scelta possibile (e "furba") è quella di usare un valore di modo comune come quello descritto nei post precedenti.

Il risultato è quello che ho scritto sopra, cioè si fa in modo che gli estremi dei 3 valori di duty-cycle siano il più possibile vicini al 50% (cioè centrati attorno al 50%), in modo che si raggiunga 0 o 100% ad un valore di tensione stellata più alto.

Senza l'aggiunta del modo comune la tensione massima di fase generabile verso il motore è metà della tensione di bus DC, mentre con questo metodo (ma ce ne sono altri che raggiungono lo stesso obiettivo) si può arrivare a 1/sqrt(3), cioè circa il 57% (è circa il 15% di tensione in più).

Tra l'altro, questo significa che, se si alimentasse l'inverter con un raddrizzatore ideale, si potrebbe avere in uscita la stessa ampiezza della tensione di rete.

 

Il segnale di modo comune generato con max e min è periodico (ma non sinusoidale) di frequenza 3x la fondamentale desiderata, ma tra gli altri metodi per raggiungere lo stesso scopo ce n'è uno (probabilmente il primo inventato) nel quale si inietta una sinusoide a frequenza 3x la fondamentale (con una precisa ampiezza e fase), quindi è proprio la terza armonica.

Link al commento
Condividi su altri siti

Sempre chiaro e pulito nelle tue spiegazioni, se posso permettermi di completare il discorso direi che l'iniezione di un segnale sinusoidale di terza armonica estende il range di linearita' del 10% mentre l'iniezione di un segnale di terza armonica triangolare (cioè quello che abbiamo scritto in formule sopra) permette come dice Sandro un estensione del 15%

Link al commento
Condividi su altri siti

SandroCalligaro

PS: peppe855, mi hai fatto venire il dubbio, così ho verificato... :)

Aggiungere una terza armonica vera e propria (sinusoide a 3x frequenza fondamentale, di ampiezza pari a 1/6 della fondamentale e fase zero) dà lo stesso incremento del 15.5% (1/sqrt(3) rispetto a 1/2) in termini di massima ampiezza della fondamentale o di larghezza del range lineare di tensione.

Vedi immagine: stessa ampiezza della fondamentale ( 1/sqrt(3) ), con i due diversi metodi. Stesso valore massimo della tensione di ramo (0.5).

Il risultato è diverso solo in termini di ripple.

 

90bf4697f1c31b21e299ec560259c53a.png

Link al commento
Condividi su altri siti

  • 2 months later...

Ciao a tutti,

 

scusate ma mi avete messo curiosità. L'iniezione della terza armonica come concetto mi è abbastanza chiara ma a lato pratico non ho la minima idea di come si possa fare.

Peppe855 ha scritto una parte di codice per che dispositivo? DSPIC è l'abinete di sviluppo? E' scaricabile free? Ci sono delle librerie apposta?

 

Scusate la mia ignoranza in merito... 

Link al commento
Condividi su altri siti

SandroCalligaro

Provo a partire alla lontana, perché non mi è chiaro il tuo punto di partenza. Scusami se scrivo cose troppo banali ...

 

Anni fa la generazione delle forme d'onda PWM veniva effettuata in analogico, ora invece c'è una periferica digitale che si occupa di questo compito.

Il concetto comunque non cambia molto: in digitale o in analogico, il controllore genera ad ogni periodo un valore di duty-cycle per ogni uscita (quindi 3 per un inverter trifase), che viene "attuato" da una periferica, che si occupa cioè di generare una forma d'onda quadra con quel duty-cycle.

 

In un drive moderno, l'iniezione di terza armonica, così come praticamente ogni altro algoritmo legato al controllo, viene implementata come codice (solitamente C), che viene eseguito da un microcontrollore all'interno del drive.

Solitamente questo tipo di operazioni vengono eseguite una volta a periodo di switching (ad es. ogni 100 us).

In generale in un drive il microcontrollore legge delle misure (corrente, tensione del bus DC, eventualmente posizione,..), le elabora in un certo modo (algoritmo in codice C) ed il risultato principale saranno i 3 valori di duty-cycle, che la periferica di PWM si occuperà di generare.

Link al commento
Condividi su altri siti

Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...