Vai al contenuto
PLC Forum


Motore BLDC lavatrice LG


marcoc4d

Messaggi consigliati

Sandro Calligaro

Gestire le sonde Hall con un interrupt sulla variazione dei segnali a me non sembra una buona soluzione, perché potrebbe interagire con l'unico interrupt che si vuole certo, quello legato alla PWM.

Idealmente useresti dei capture, per ricavare il tempo tra una commutazione e la successiva.

Io credo, comunque, che nella lavatrice usino pochissimo le sonde Hall (forse solo per la posizione iniziale), e molto il sensorless. Se si ha, magari, anche la misura di tensione di fase (non mi ricordo se sia questo il caso), la dinamica in sensorless basato sulla back-EMF può essere nettamente migliore di quella con 2 sonde Hall, anche a velocità bassa (a velocità bassa, le sonde di Hall danno un'informazione di velocità con aggiornamento molto molto lento).

 

7 ore fa, marcoc4d ha scritto:

È una cosa sensata quella che dico?

Sì, è più che sensata.

A dire il vero, anche per la misura di corrente, in particolare con gli shunt, è bene evitare gli istanti che seguono una commutazione. I momenti migliori sono quindi quelli in cui si campiona anche la corrente, cioè picco o valle del contatore PWM (triangolare). Purtroppo, facendo così si perde l'esatto istante di commutazione, che è l'unico momento in cui la posizione è nota con precisione...

 

Link al commento
Condividi su altri siti


  • Risposte 159
  • Created
  • Ultima risposta

Top Posters In This Topic

  • marcoc4d

    71

  • Sandro Calligaro

    62

  • Livio Orsini

    19

  • zhavinchi1

    4

10 ore fa, Sandro Calligaro ha scritto:

Idealmente useresti dei capture, per ricavare il tempo tra una commutazione e la successiva

In effetti direi che si tratta di un capture, ho parlato di interrupt perché il codice é nella ISR del timer.

 

10 ore fa, Sandro Calligaro ha scritto:

Se si ha, magari, anche la misura di tensione di fase (non mi ricordo se sia questo il caso)

Nella scheda della ST che uso non c'é la misura della tensione di fase, non so se il controller della lavatrice ce l'abbia.

10 ore fa, Sandro Calligaro ha scritto:

Io credo, comunque, che nella lavatrice usino pochissimo le sonde Hall (forse solo per la posizione iniziale)

Ma lo avevo pensato anche io, penso anche che potrebbero usarle durante le fasi iniziali della centrifuga quando fa degli spunti e ripartenze senza fare fermare completamente il cestello, o come doppio controllo sul sensorless (mi é capitato che con delle sequenze di avvio troppo aggressive, la FOC parte a razzo e il motore rimane fermo senza generare nessun segnale di errore, si sente un suono generato dalle vibrazioni del cestello che diventa sempre più acuto).

 

Me ero dimenticato di dire nel post precedente che mi é stato di grande aiuto nella comprensione di come funziona lo state observer un tuo articolo:

https://www.researchgate.net/publication/337503604_Discrete-Time_Implementation_Issues_in_Back-EMF_Observer_for_Sensorless_Control_of_PMSM_and_SynRM

 

 

 

Link al commento
Condividi su altri siti

Sandro Calligaro
10 ore fa, marcoc4d ha scritto:

Me ero dimenticato di dire nel post precedente che mi é stato di grande aiuto nella comprensione di come funziona lo state observer un tuo articolo

Grazie, mi fa molto piacere... 🙂

In effetti, speravo proprio che potesse servire a qualcuno, nella pratica, più che altro. Dal punto di vista della ricerca è un risultato marginale, anche se dimostra quanta attenzione si debba avere ai dettagli. Per me è una specie di aneddoto, da tenere sempre a mente: i bachi si annidano quasi sempre dove dai per scontato che possano esserci! 😁

 

La cosa è nata dal fatto che, nei test, osservavamo un errore di stima della posizione enorme, che non riuscivamo a spiegarci (e che non avevamo mai visto prima). Mi ci sono rotto la testa per un bel po' di tempo, tra test e simulazioni, per poi capire che si poteva spiegare con pochi calcoli.

In macchine a magneti superficiali, di solito, quel problema non si vede (è trascurabile), perché l'induttanza è relativamente piccola. Per questo non era stato studiato prima (per le meno, noi non lo abbiamo trovato in letteratura).

 

Quel tipo di osservatore, a quanto ho potuto vedere (application note, ecc), è molto usato nell'industria, e a buona ragione, secondo me, perché è relativamente semplice (sia da capire che da implementare), non ha il problema della deriva causata dall'offset, richiede solo due parametri del motore ed è facile da tarare.

 

PS: ho caricato anche questo, che è citato dall'altro, che credo possa tornarti utile:
https://www.researchgate.net/publication/306315174_Design_Issues_and_Estimation_Errors_Analysis_of_Back-EMF-Based_Position_and_Speed_Observer_for_SPM_Synchronous_Motors
PPS: se proprio ti fai prendere dalla curiosità, qui c'è un riassunto (purtroppo non potevamo dare tutti i dettagli, anche per questioni di spazio) di come abbiamo fatto l'auto-tuning:

https://www.researchgate.net/publication/337522265_Feasible_Auto-Tuning_Procedure_for_Mid-Performance_Sensorless_IPMSM_and_SynRM_Drives

 

Modificato: da Sandro Calligaro
Link al commento
Condividi su altri siti

Grazie mille Sandro,

li leggerò senz'altro.

Tra l'altro mi é venuta la curiosità di fare qualche simulazione di luenberger observer e non avendo simulink sto iniziando ad usare openmodelica, non so se sia un' alternativa valida ma é l'unico free. Tra l'altro in openmodelica ho visto che c'é un modello già fatto di motore pmsm pronto da usare.

 

Link al commento
Condividi su altri siti

Sandro Calligaro

Non conosco openmodelica, ma in linea di principio qualunque simulatore dinamico (a parte quelli per soli circuiti) va bene.

So che come alternative a Simulink ci sono SciLab e Xcos, ma non li ho mai usati, ho sempre usato Simulink e da parecchi anni anche PLECS (che è nato per l'elettronica di potenza).

 

1 ora fa, marcoc4d ha scritto:

Tra l'altro in openmodelica ho visto che c'é un modello già fatto di motore pmsm pronto da usare.

Se puoi implementare schemi con operazioni su segnali, il modello del PMSM è relativamente semplice da realizzare, basandosi direttamente sul modello di tensione in coordinate sincrone (dq) e su un modello della parte meccanica del sistema (inerzia + attrito e/o altra coppia di carico).

E' sempre meglio non fidarsi di cose fatte da altri, se non puoi ispezionarle, a meno che non si tratti di qualcosa che non puoi fare da solo.

Se hai sviluppi, sono curioso di vedere cosa si riesce a fare anche con openmodelica!

Link al commento
Condividi su altri siti

Ciao Sando ho letto il primo articolo, https://www.researchgate.net/publication/306315174_Design_Issues_and_Estimation_Errors_Analysis_of_Back-EMF-Based_Position_and_Speed_Observer_for_SPM_Synchronous_Motors

é super interessante, non ho capito tutto ma conto di arrivare a capire tutto. Purtroppo anche se mi sono impegnato a studiare teoria dei sistemi non ho ancora dimestichezza con tutti i concetti.

Vorrei però fare paio di domande sperando che non siano troppo stupide :)

 

non ho capito nella Fig. 8.  Comparison among actual, dynamical estimated and theoretical (linearized) estimated back-EMFs and rotor position (simulation). 

che differenza c'é tra "dynamical estimated" e "theoretical (linearized) estimated".

 

L'altra domanda non ha una relazione diretta con l'articolo ma quello che volevo capire é la differenza di comportamento dello stesso sistema quindi stesso motore e stessi controlli avendo un osservatore ideale (cioé che restituisce la bemf senza errori) e uno reale magari pure tarato male.

Per esempio la risposta (velocità del motore nel tempo) ad un gradino della velocità di riferimento nel caso di osservatore ideale e nel caso di osservatore reale.

Mi chiedo ad anello chiuso si possono avere delle instabilità causate da un osservatore in sé stabile ma mal tarato.

Può essere che questa domanda non abbia senso. 

Link al commento
Condividi su altri siti

Sandro Calligaro

 

Il 26/4/2020 alle 17:39 , marcoc4d ha scritto:

Vorrei però fare paio di domande sperando che non siano troppo stupide :)

Parafrasando un personaggio di un film famoso, "Le domande non sono mai stupide. Le risposte, a volte, lo sono.😃

 

 

Il 26/4/2020 alle 17:39 , marcoc4d ha scritto:

non ho capito nella Fig. 8.  Comparison among actual, dynamical estimated and theoretical (linearized) estimated back-EMFs and rotor position (simulation). 

che differenza c'é tra "dynamical estimated" e "theoretical (linearized) estimated".

Se mi ricordo bene 😳...
Sono tutte simulazioni, in ogni caso, ma

  • "actual" è la posizione vera, che viene dal modello
  • "dynamical estimated" è la risposta dell'osservatore, implementato a tempo continuo
  • "linearized" è la risposta della funzione di trasferimento (15), dandole in pasto la posizione vera

A rileggerla, questa frase (messa appena prima della (16) mi sembra sbagliata:

Quote

In the case w~me = 0, the transfer function becomes a simple Single-Input Single-Output (SISO) second-order low-pass:

mi sembra sbagliata. O meglio, è valida in ogni caso la (16), perché il risultato (cioè la dinamica della stima di posizione, esclusa la PLL) non dipende da quella scelta (basta semplificare la (15), per vederlo.

 

Il 26/4/2020 alle 17:39 , marcoc4d ha scritto:

quello che volevo capire é la differenza di comportamento dello stesso sistema quindi stesso motore e stessi controlli avendo un osservatore ideale (cioé che restituisce la bemf senza errori) e uno reale magari pure tarato male.

Per esempio la risposta (velocità del motore nel tempo) ad un gradino della velocità di riferimento nel caso di osservatore ideale e nel caso di osservatore reale.

Mi chiedo ad anello chiuso si possono avere delle instabilità causate da un osservatore in sé stabile ma mal tarato.

La domanda è più che sensata!

Una parte della risposta è relativamente semplice, ma dice solo una parte della verità...

 

La stima di velocità (c'è anche la posizione, ma lasciamola da parte un attimo), cioè osservatore di back-EMF+estrazione, in questo caso, è il "sensore" di velocità che dà il feedback, se lo guardi dal punto di vista dell'anello di velocità.

Qualunque sensore ha dei limiti, un sensore di velocità ha, tipicamente, un limite di banda passante (o, in modo quasi equivalente, un ritardo). Anche un encoder incrementale soffre di questo problema, perché ci vuole un minimo di tempo per rilevare una variazione di velocità.

 

La banda passante del feedback deve essere come minimo maggiore della banda desiderata per il controllo di velocità, per esperienza e matematicamente direi almeno 3 volte tanto.

Se si spingono i guadagni del regolatore di velocità, ma non c'è banda sufficiente sul feedback, la risposta diventa oscillatoria, fino a diventare instabile.

Peggio ancora, la risposta ai disturbi del carico peggiora di molto. Infatti, si può imbrogliare sulla risposta alle variazioni del riferimento (in pratica, compensando la mancanza del feedback con un "anticipo" da parte del regolatore), ma i disturbi non si possono anticipare.

Queste cose cose sono molto generali, valgono praticamente per qualunque "plant" che abbia comportamento passa-basso (come il sistema meccanico), controllato con un PI.

 

 

Nell'articolo rappresentiamo la funzione di trasferimento della stima (è la stessa per la posizione e per la velocità) come la cascata di due passa-basso del secondo ordine, uno dovuto all'osservatore di back-EMF ed uno dovuto alla PLL. Entrambi si possono caratterizzati tramite due parametri, frequenza "naturale" w0 e smorzamento csi. Se lo smorzamento è tra 0.5 e 1 (tanto per dare range), la w0 corrisponde circa alla banda (in rad/s).

 

L'idea, nel dimensionare i guadagni di osservatore e PLL, è che le due bande debbano essere molto distanti (PLL rispetto ad osservatore), in modo che si possa considerarne una come dominante. Io ho sempre impostato la banda dell'osservatore come molto ampia, per poi "restringere" la banda con la PLL e, solitamente, con un ulteriore filtro passa-basso sulla velocità stimata.

Per periodi di campionamento di 100 us, è meglio non andare con l'osservatore oltre i 500 Hz, ma non conviene abbassarla molto, per evitare che (con la scelta w~me=0 dell'articolo) l'errore di posizione sia grande.

 

Non sono sicuro delle equazioni che mettono in relazione w0 e csi con K1 e K2 (cioè banda e smorzamento vs. guadagni dell'osservatore) per come li abbiamo riportati nell'articolo, mi ricordo che c'era una svista... sono semplici, in ogni caso, potrei darti le relazioni corrette per dimensionare (forse ci sono nell'articolo sull'auto-tuning). Nella tua implementazione, mi pare che le grandezze siano in per unit, quindi le cose sono un po' più complicate, ma possiamo ragionarci sopra.

 

 

Ora manca l'altra metà della storia: non si stima solo la velocità, ma anche la posizione!

Quanto errore si può accettare, in transitorio, sulla posizione? Purtroppo, la cosa è non-lineare. Un errore di 10° elettrici non porta a problemi grossi (si perde poca coppia, perché il seno di 80° è vicino a 1), ma se l'errore supera un certo valore, la PLL "perde il passo", cioè non è più sincronizzata. Sotto carico, il rischio è che la cosa diventi probabilistica, cioè una volta ti va bene, due no...

Quindi, il dimensionamento di osservatore della back-EMF e PLL andrebbe fatto anche considerando la stima di posizione. Purtroppo, qui entra in gioco anche il rapporto tra velocità elettrica e meccanica.

Negli ultimi tempi in cui ho fatto attivamente ricerca su queste cose, avevo verificato (solo teoricamente, ma ero abbastanza convinto) che, data una certa accelerazione massima, si poteva calcolare la banda di stima necessaria a tenere l'errore di posizione sotto controllo. Era anche un calcolo semplice, tra l'altro...

In linea di massima, le macchine con più coppie polari, a parità del resto, sembrerebbero richiedere più banda nella stima di posizione.

 

C'è una buona ragione per tenere bassi i guadagni, per contro, che è quella di ridurre il rumore di stima. Purtroppo, questo dipende molto dal sistema (misure di corrente, dead-time, armoniche della back-EMF nel motore stesso) e dalla velocità alla quale si vuole riuscire a lavorare (maggiore la velocità, meno problemi si hanno).

 

Come vedi, mancano ancora degli elementi da studiare, per venire in aiuto a chi vuole mettere in pratica queste cose senza dover tarare a mano i vari parametri.

Putroppo, però, ormai pubblicare su questi dettagli è molto difficile, appunto perché sono dettagli.

Mi dispiace di aver lasciato a metà questi ragionamenti, ma non è detto che non riesca a convincere qualcuno a riprenderli in mano seriamente...

Nel frattempo, ti ringrazio per avermi dato un'occasione per ripensarci, le idee si sbiadiscono veramente in poco tempo! 🙂

Modificato: da Sandro Calligaro
Link al commento
Condividi su altri siti

mi scoppia la testa mi sembra di avere a che fare con un blob che cambia forma continuamente :)

Il 30/4/2020 alle 22:21 , Sandro Calligaro ha scritto:

Se si spingono i guadagni del regolatore di velocità, ma non c'è banda sufficiente sul feedback, la risposta diventa oscillatoria, fino a diventare instabile.

A me succede che se la kp del regolatore di velocità é bassa, la velocità oscilla ed é instabile (oscillazione sempre piu grande), però nel mio caso suppongo che il feedback abbia tutta la banda necessaria per sostenere un kp alto.

Per guadagno del regolatore si intendono ki e kp?

Il 30/4/2020 alle 22:21 , Sandro Calligaro ha scritto:

L'idea, nel dimensionare i guadagni di osservatore e PLL, è che le due bande debbano essere molto distanti (PLL rispetto ad osservatore), in modo che si possa considerarne una come dominante. Io ho sempre impostato la banda dell'osservatore come molto ampia, per poi "restringere" la banda con la PLL e, solitamente, con un ulteriore filtro passa-basso sulla velocità stimata.

ecco qui il blob comincia a sfuggirmi.

Il PLL filtra l'errore sull'angolo elettrico mentre l'observer filtra sulla frequenza della bemf, qui non riesco a immaginare come possa essere il funzionamento complessivo dei due.

Un altra cosa che non riesco a capire é questo passaggio

2020-05-02.jpg.55b2910080a996f20fe3acb399ff500a.jpg

 

Non capisco fa sempre 1 come fa a diventare

 

1739277802_2020-05-02b.jpg.815ac81ebfb049d0a07362f587fa533a.jpg

Non riesco proprio a capirla questa FdT, vuol dire che quando l'angolo elettrico é 0 non c'é errore sulla stima di posizione perché anche l'angolo stimato viene 0, ho capito male qualcosa.

 

A proposito di openmodelica, ho abbandonato perché dopo una settimana che cercavo di fare un diagramma di bode di un semplice filtro non ho capito come si fa. Pensavo che dovesse essere una cosa fondamentale.

Per controprova e verificare che non fossi io troppo stupido o inesperto ho installato la versione di prova di simulink e in 10 minuti ho capito come si fa un diagramma di bode, dunque al di la della mia possibile inesperienza penso che ci sia qualcosa che deve essere migliorato in openmodelica.

Link al commento
Condividi su altri siti

Sandro Calligaro
3 ore fa, marcoc4d ha scritto:

Per guadagno del regolatore si intendono ki e kp?

Sì.

 

3 ore fa, marcoc4d ha scritto:

A me succede che se la kp del regolatore di velocità é bassa, la velocità oscilla ed é instabile (oscillazione sempre piu grande), però nel mio caso suppongo che il feedback abbia tutta la banda necessaria per sostenere un kp alto.

Questo è strani... l'unica spiegazione che mi do è che il ki sia troppo alto...

 

3 ore fa, marcoc4d ha scritto:

Non capisco fa sempre 1 come fa a diventare

No, mi pare che faccia sempre R(s):

I(s) è moltiplicata per   sinΘ·cosΘ - cosΘ·sinΘ = 0

R(s) è invece moltiplicata per   sin2Θ + cos2Θ = 1

L'errore che abbiamo fatto è quello di dire che la f.d.t. è R(s) solo se w~me=0, mentre è sempre così, indipendentemente dalla scelta di w~me.

Preciso che la velocità con tilde ~ (e non cappello ^) è quella che viene applicata all'osservatore, nella seconda equazione.

 

3 ore fa, marcoc4d ha scritto:

Il PLL filtra l'errore sull'angolo elettrico mentre l'observer filtra sulla frequenza della bemf, qui non riesco a immaginare come possa essere il funzionamento complessivo dei due.

Il PLL è un trucco per estrarre fase e frequenza (o angolo e frequenza) di un segnale sinusoidale.

Tutto il complesso, in realtà (osservatore della back-EMF + PLL) serve a quello scopo. A noi, per il controllo, interessano due funzioni di trasferimento: posizione stimata vs. posizione vera e velocità stimata vs. velocità vera. Il resto (back-EMF) è accessorio. Questa cosa non era stata trattata bene, in letteratura, mancava questo piccolo passaggio dalla dinamica della stima di back-EMF alla stima di posizione e velocità (che poi si rivela essere "trasparente", ma andava dimostrato). Per questo penso che il nostro articolo abbia dato un contributo utile.

 

Qui (vedi schema sotto) stiamo supponendo che l'ingresso della PLL sia la posizione.

In effetti, si potrebbe usare (e si usa, in certi casi) un anello come questo per estrarre la velocità dalla posizione e per filtrare la posizione stessa, senza avere errore a regime (questo perché, se si usasse un filtro passa-basso, a velocità costante si avrebbe un ritardo costante, cioè un errore costante di posizione).

Questo schema si applica anche al nostro caso, anche se l'ingresso è una coppia seno-coseno. Questo perché, con un'approssimazione molto comune, il segnale di errore (sin(err)) è considerato quasi proporzionale all'errore di posizione, se l'errore è piccolo. 

Quindi, indipendentemente da come viene generata la coppia seno-coseno che diamo in pasto al PLL, la f.d.t. tra l'angolo da cui sono generati seno e coseno e la posizione stimata è sempre la stessa. In pratica, il PLL introduce un effetto passa-basso (del 2° ordine, come si vede dai calcoli) tra angolo (argomento) delle sinusoidi di ingresso e posizione stimata.

image.png.4f24e72f8eb00bf70158c5b9c105edac.png

 

Se invece di usare il PLL volessimo estrarre istantaneamente la posizione, cosa potremmo usare? L'arcotangente è, per definizione, la funzione che estrae l'angolo a partire dalla tangente (usiamo in realtà il cosiddetto atan2, che usa i due argomenti sin-cos separati). Si potrebbe anche pensare (qualcuno fa così) di estrarre prima la posizione dalle back-EMF con l'arcotangente, e poi di usare esattamente lo schema PLL linearizzato (cioè lo stesso qui sopra), si otterrebbe lo stesso effetto.

Questo perché le operazioni come l'arcotangente non hanno dinamica, l'uscita dipende solo dall'ingresso istantaneo.

 

Per capire bene l'effetto che l'osservatore ha sulla posizione "trasportata" dalle back-EMF stimate (rispetto a quella vera, che è quella che genera le vere B-EMF), abbiamo costruito uno schema equivalente (vedi sotto). Qui si prende in ingresso la posizione vera e si modellano le back-EMF vere (anche se non le conosciamo, ovviamente), poi si mostra con quale dinamica escono le back-EMF stimate (con la combinazione di R(s) e I(s)), e come questa dinamica di stima della back-EMF influenzi la posizione estratta istantaneamente con l'arcotangente.

Linearizzando lo schema, si ottiene poi l'estratto che hai postato tu. In pratica, abbiamo dimostrato che, se si estraesse la posizione istantaneamente, con atan2 applicato alle uscite back-EMF stimate, si avrebbe che la f.d.t. tra posizione e posizione così estratta sarebbe R(s), cioè un passa-basso del 2° ordine, legato ai parametri del motore (R ed L) e ai guadagni dell'osservatore (K1 e K2).

image.png.c05073a8f5acab09b76eb98b839d5e98.png Non linearizzato

image.png.fcef0f33e51315c72d105790deca626c.png Linearizzato

 

Il PLL non fa altro che aggiungere una dinamica ulteriore (una f.d.t. in cascata, passa-basso del 2° ordine anche lei) alla posizione stimata che esce dallo schema qui sopra, quindi "rallenta" ancora la stima.

Lo so, detta così sembra complicata... a distanza e per iscritto non è facile spiegarsi bene!

 

PS: Devo ammettere che sarebbe stato molto meglio battezzare con due simboli diversi l'uscita di questo schema e quella del PLL... 🙂

Modificato: da Sandro Calligaro
Link al commento
Condividi su altri siti

19 ore fa, Sandro Calligaro ha scritto:

No, mi pare che faccia sempre R(s):

È vero mi ero perso R(s) 😁

Penso di avere capito ora la fdt dell'osservatore, credo che mi confondessi perché dimenticavo che la fdt é nel dominio di s e non di t 

 

Invece credevo di aver capito il concetto che il PLL non introduce sfasamento di posizione a velocità costante e invece adesso non mi ci trovo piu 🤔

Il dubbio che ho é se il pll é un filtro passa basso del secondo ordine avrà anche lui uno sfasamento tra ingresso e uscita?

 

 

Link al commento
Condividi su altri siti

Sandro Calligaro
2 ore fa, marcoc4d ha scritto:

Invece credevo di aver capito il concetto che il PLL non introduce sfasamento di posizione a velocità costante e invece adesso non mi ci trovo piu 🤔

Il dubbio che ho é se il pll é un filtro passa basso del secondo ordine avrà anche lui uno sfasamento tra ingresso e uscita?

Fai venire i dubbi anche a me (giustamente!).

La PLL è effettivamente un passa-basso, ma ha due integratori, nella catena (funzione di anello aperto), uno nel regolatore PI ed uno tra velocità stimata e posizione stimata.
In questo modo, riesce ad avere un errore a regime nullo anche con ingresso a rampa, quindi non ha errore di posizione, a velocità costante.

 

In Matlab ho usato il calcolo simbolico (credo che sia il Control Toolbox) per visualizzare le funzioni di trasferimento e le risposte, per una PLL come qui sotto, con Kp=2*pi*100 e tau_PLL=1/(2*pi*20).

image.png.ea635efed905ca0707cba28a94421136.png

Questi sono i diagrammi di Bode per la f.d.t. di anello aperto e anello chiuso 🙂

image.thumb.png.9142bd850867139123f5e392fd3114e3.png

Qui sotto, invece, la risposta in anello chiuso, con ingresso (posizione vera) a rampa.

La banda è circa 100 Hz = Kp/(2*pi), vedi f.d.t. fi anello chiuso, corriponde praticamente alla frequenza di attraversamento della f.d.t. di anello aperto.

Fissata la banda, con tau_PLL piccolo (quindi Ki grande), la risposta riprende la rampa più velocemente (come si vede qui sotto, all'inizio la stima è in ritardo), ma se si esagera si arriva all'instabilità.

image.thumb.png.2b6563192e826b54eefd24d503be5f30.png

Modificato: da Sandro Calligaro
Link al commento
Condividi su altri siti

ho fatto anche io il diagramma di bode ad anello chiuso del pll e volevo fare la risposta alla rampa ma non ci sono riuscito 😁

Adesso ho un altro dubbio che penso si ricolleghi a quello che dicevi prima riguardo la banda necessaria per mantenere l'errore entro un certo limite data un'accelerazione massima, ma non riesco ancora bene ad esprimerlo a parole ci devo pensare ancora un pò.

In pratica un disturbo sul carico produrrà un accelerazione, quindi bisognerebbe vedere cosa succede alla differenza tra angolo reale e stimato nella risposta ad una parabola?

 

Link al commento
Condividi su altri siti

  • 2 weeks later...
Sandro Calligaro

Mi dispiace di aver fatto passare un bel po' di tempo, purtroppo ho anche perso una bozza di risposta che stavo scrivendo.

C'è voluto un po', ma in queste cose bisogna essere precisi, altrimenti è meglio lasciar perdere...

 

  

Il 3/5/2020 alle 21:07 , marcoc4d ha scritto:

Invece credevo di aver capito il concetto che il PLL non introduce sfasamento di posizione a velocità costante e invece adesso non mi ci trovo piu 🤔

Il dubbio che ho é se il pll é un filtro passa basso del secondo ordine avrà anche lui uno sfasamento tra ingresso e uscita?

Fai venire i dubbi anche a me (giustamente!).

 

Quote

In pratica un disturbo sul carico produrrà un accelerazione, quindi bisognerebbe vedere cosa succede alla differenza tra angolo reale e stimato nella risposta ad una parabola?

Sì, questo è un caso, in alcune applicazioni sarà probabilmente il peggiore. L'altro è quello in cui è il controllo stesso, in risposta ad una variazione del riferimento di velocità, ad imporre un'accelerazione. Stiamo supponendo che le back-EMF vengano stimate perfettamente, e che il loro modulo (ampiezza) venga normalizzato.

 

La PLL ha due integratori, nella catena (funzione di anello aperto), uno nel regolatore PI ed uno tra velocità stimata e posizione stimata.
In questo modo, riesce ad avere un errore a regime nullo anche con ingresso a rampa, quindi non ha errore di posizione, a velocità costante. Questo è un modo di vedere la cosa.

In ogni caso, anche se le forme d'onda di ingresso alla PLL sono sinusoidali, a noi interessa la posizione e la velocità che queste "rappresentano", e con la dinamica equivalente analizziamo la risposta della PLL alle variazioni di posizione e velocità. Quindi, in termini concreti, risposta alla rampa di posizione (velocità costante, regime) e, nel caso che consideravamo negli ultimi post, risposta alla parabola (variazione di velocità a rampa).

 

 

image.png.ea635efed905ca0707cba28a94421136.png

In Matlab ho usato il calcolo simbolico (credo che sia il Control Toolbox) per visualizzare le funzioni di trasferimento e le risposte, per una PLL come qui sotto, con Kp_PLL=2*pi*100 e tau_PLL=1/(2*pi*20).

 

In ogni caso, questi sono i diagrammi di Bode per la f.d.t. di anello aperto e anello chiuso della PLL. Ci sono due poli nell'origine ed uno zero (quello del PI) a pulsazione 1/tau_PLL.

A parità di Kp_PLL, se si porta lo zero (1/tau_PLL) troppo vicino alla pulsazione di attraversamento (che corrisponde circa a Kp), ci si avvicina all'instabilità (in pratica, non si attraversa più a -20 dB/decade). Per contro, però, più in alto si trova il polo, più aumenta in pratica il guadagno legato al doppio integratore (si alza la prima parte della curva del guadagno, quella a -40 db/decade, venendo spostata in avanti), e quindi la capacità della PLL di inseguire velocemente le variazioni di velocità.

image.thumb.png.9142bd850867139123f5e392fd3114e3.png

Qui sotto, la risposta in anello chiuso nel tempo, con ingresso la posizione vera a parabola.

Per la risposta ad un segnale arbitrario si può usare lsim, ma come probabilmente hai già fatto, per il gradino si può usare step. Lo stesso vale per altri segnali "canonici" come rampa e parabola, perché basta usare step, moltiplicando la funzione di trasferimento per 1/s (per la rampa) o 1/s^2 (per la parabola).

image.png.02b57a5c787521b04265abdc26004146.png

image.png.cf57fd3373be32ee2e7fd416b8fd9c58.png

Come ho accennato, la banda è circa 100 Hz = Kp_PLL/(2*pi). La PLL ci mette qualche tau_PLL ad arrivare ad una sorta di regime, ma anche quando è agganciata, insegue la parabola con un ritardo che causa un errore costante di stima della posizione. La velocità, invece (per forza di cose) non ha errore a regime, ma solo inizialmente.

L'errore di posizione si stabilizza ad un valore che corrisponde al prodotto alpha*tau_PLL/Kp_PLL, dove alpha è l'accelerazione in radianti elettrici /s^2.

Se si fissa un'accelerazione massima ed un corrispondente limite per l'errore di posizione dovuto all'accelerazione, si vede può avere un criterio per dimensionare i guadagni del regolatore della PLL (ricordandosi che tau_PLL=Kp_PLL/Ki_PLL). Siccome stiamo usando le grandezze elettriche, velocità, posizione ed accelerazione sono meccanico-elettriche (_me), quindi, a parità di accelerazione meccanica, in pratica occorreranno guadagni maggiori per una macchina con più poli.

 

Queste considerazioni sull'accelerazione, purtroppo, non ho avuto modo di verificarle sperimentalmente (e chissà se mai ce l'avrò), ma intuitivamente sono sensate e non ho motivo di pensare che non siano corrette, visto che qui si tratta di pura dinamica (la PLL è un oggetto matematico, "artificiale", quindi il modello corrisponde molto bene alla realtà).

 

Questo è il codice che ho usato in Matlab:

%% Calculate PLL response to acceleration (speed ramp)

%% load data

clear all;
close all;
clc;

s = tf('s')

BW_Sp = 10;                                     % speed ctrl BW
BW_PLL = 10*BW_Sp;                              % desired PLL BW
Kp_PLL = 2*pi*BW_PLL;                           % PLL PI P gain
tau_PLL = 5/Kp_PLL;                             % PLL PI tau

Gpll = Kp_PLL*(1+tau_PLL*s)/(tau_PLL*s) * 1/s   % open-loop t.f. of PLL (normalized)
Gest = Gpll/(1+Gpll);                           % closed-loop estimation response (both position and speed)

pp = 2;                                         % pole pairs
t_accel = 1;                                    % acceleration time

max_speed = 3e3;                                % max speed [rpm]
alpha = pp * 6e3/60*2*pi / t_accel;             % acceleration [el.rad/s^2]
t = 0:0.0001:10*tau_PLL;                        % time vector for response calculation
wme = alpha*t;                                  % actual rotor speed [el. rad/s]
thetame = alpha/2*t.^2;                         % input rotor position [el. rad]

 

%% plot speed estimation response
figure;
hold on; grid on;

wme_est = lsim(Gest,wme,t);                           
plot(t,wme,'b','linewidth',1);
plot(t,wme_est.','r','linewidth',1);
wme_err = wme-wme_est.';
plot(t,wme_err,'g','linewidth',1);
ylim([0,10*max(wme_err)]);

title('Speed ramp response: speed estimation');
legend('actual speed.','estimated speed.','speed est. error');
xlabel('time ');
ylabel('speed [rad/s]');
set(gcf,'color','w')

 

%% plot position estimation response
figure;
hold on; grid on;
thetame_est = lsim(Gest,thetame,t);                           
plot(t,thetame,'b','linewidth',1);
plot(t,thetame_est.','r','linewidth',1);
thetame_err = thetame-thetame_est.';
plot(t,thetame_err,'g','linewidth',1);
ylim([0,2*alpha*tau_PLL/Kp_PLL]);

plot([t(1),t(end)],alpha*tau_PLL/Kp_PLL*[1 1],'m--','linewidth',1);
plot([tau_PLL,tau_PLL],[0,2*alpha*tau_PLL/Kp_PLL],'y--','linewidth',1);

title('Speed ramp response: position estimation');
legend('actual pos.','estimated pos.','pos. est. error');
xlabel('time ');
ylabel('angle [rad]');
set(gcf,'color','w')

Modificato: da Sandro Calligaro
Link al commento
Condividi su altri siti

Sandro Calligaro

Grazie, Livio, ma per spiegare veramente le cose ci vorrebbe un approccio sistematico, che richiede tempo...

In ogni caso, marcoc4d è molto sveglio e motivato, ha portato avanti un lavoro complesso e per lui totalmente nuovo, intuendo moltissime cose.

Modificato: da Sandro Calligaro
Link al commento
Condividi su altri siti

Rieccomi,

Sandro il tuo penultimo post é stato molto difficile da comprendere per me ma alla fine penso di avercela fatta, ho dovuto studiare la parte della teoria dei sistemi relativa alla stabilità dei sistemi retroazionati che avevo totalmente tralasciato precedentemente😊, quando avevo come obiettivo capire come funzionasse un osservatore e la pll

Fino ad ora i diagrammi di bode li ho fatti utilizzando simulink che permette di assemblare i blocchi e poi vedere i diagrammi una volta impostati i valori dei blocchi. Non pensavo nemmeno si potesse fare programmando. 

È tutto un mondo che si é aperto dall'idea iniziale di fare andare il motore con arduino (come ho potuto pensare che si potesse fare facilmente?)

Ho un dubbio riguardo alla stabilità di tutta la catena di controllo del motore, che alla fine é composta da PI di velocità, PI di corrente, inverter (facciamo finta che non esista), il motore con la sua massa che fa da filtro passa basso, il PLL e l'observer. Devo verificare se nel codice della ST le BEMF sono normalizzate o no in caso non siano normalizzate c'é pure il guadagno della pll che cambia con la velocità del motore. Quanti poli avrà tutta la catena ad anello aperto? Appena ho un attimo di tempo provo a scrivere tutta ftd ad anello aperto.

A occhio mi viene da pensare che basta regolare male un parametro e il tutto diventa instabile, magari no, mi piacerebbe capire che sensibilità ci sono ai vari parametri.

In effetti io ho "giocato" solo coi valori del PI di velocità anche perché non capivo cosa fossero tutti gli altri parametri. Però a parte il caso di Kp molto basso che rendeva la velocità del motore oscillatoria ed instabile nel senso che l'oscillazione diventava sempre piu grande, mi é sembrato che tutto il meccanismo fosse abbastanza robusto rispetto ad un errato settaggio dei parametri.

Link al commento
Condividi su altri siti

Sandro Calligaro
5 ore fa, marcoc4d ha scritto:

Quanti poli avrà tutta la catena ad anello aperto? Appena ho un attimo di tempo provo a scrivere tutta ftd ad anello aperto.

Se prendi il sistema nel suo complesso (tutto in una volta), impazzisci e basta.😊
Se ci pensi bene, anche lo schema di controllo solito (in coordinate sincrone) si basa sull'assunzione che la dinamica di velocità e quella di corrente siano molto diverse. Si fa in modo che la corrente sia regolata molto velocemente, così il regolatore di velocità vede un attuatore di coppia quasi ideale (il controllo di corrente Iq), come "interfaccia" tra la sua uscita ed il sistema meccanico.

 

Ne abbiamo già parlato, l'approccio che ho adottato finora è quello di fare in modo che la dinamica di ciascun "blocco" sia il più possibile indipendente da quella di altre. Per PLL ed osservatore di back-EMF questo è praticamente sempre vero, anche se la PLL usa le uscite dell'osservatore di back-EMF.

I problemi di stabilità vengono fuori principalmente quando si chiude un anello, come ad esempio per la velocità, dove tutta la catena di stima (della velocità) è un filtro (di tipo passa-basso) applicato sulla velocità vera (che è il feedback per il controllo, appunto, di velocità).

 

5 ore fa, marcoc4d ha scritto:

A occhio mi viene da pensare che basta regolare male un parametro e il tutto diventa instabile, magari no, mi piacerebbe capire che sensibilità ci sono ai vari parametri.

Circa 10 anni fa, ho avuto la fortuna di iniziare a fare ricerca in un progetto per un'azienda medio-grande, sul sensorless basato su osservatore della back-EMF.

Un collega di un'altra università, anche loro coinvolti nel progetto, cercò di applicare proprio il criterio della stabilità al dimensionamento dei guadagni dell'osservatore. In pratica, analizzò la stabilità dell'osservatore in presenza di errori sui parametri del motore, e selezionò i guadagni che garantivano la stabilità nel range più ampio di errore sui parametri (quindi, in pratica, i valori attorno ai quali la sensibilità era minima rispetto ad un errato dimensionamento). Non so se il problema fu un errore suo nei calcoli, fatto sta che coi suoi guadagni dell'osservatore non si riusciva a controllare la velocità. Credo che, semplicemente, l'obiettivo non fosse quello giusto.

Se si ragiona con l'obiettivo di raggiungere una certa banda di stima, fissato un valore di banda "ragionevole", il range di valori che comunque "funzionano" è abbastanza ampio (indicativamente, almeno dal 50 al 200% del valore scelto, se quel valore è stato scelto "a metà strada"). Considera, ad esempio, che la banda dell'osservatore di back-EMF dipende dalla radice del guadagno K2, perciò la sensibilità a K2 è relativamente bassa.

Il problema è, forse, nel riuscire a giudicare cosa sia "ragionevole", anche perché dipende da fattori come il rumore di misura o la presenza di armoniche della back-EMF.

 

Potresti dare un'occhiata all'articolo che ti avevo indicato, quello sull'auto-tuning. E' un po' "ristretto", per ragioni di spazio, ma c'è qualche indicazione per lo meno sul ragionamento che sta alla base del dimensionamento dei vari stadi:

https://www.researchgate.net/publication/337522265_Feasible_Auto-Tuning_Procedure_for_Mid-Performance_Sensorless_IPMSM_and_SynRM_Drives

L'idea di base è che non si deve avere banda di stima (o di controllo di corrente) troppo stretta (per la ragione di cui dicevo sopra), ma allo stesso tempo non ha senso nemmeno esagerare con la banda, perché si tende ad enfatizzare il rumore.

Un altro che potrebbe interessarti, perché è molto "pratico" (basato su test, ma non rigoroso, devo ammettere), è questo:

https://www.researchgate.net/publication/261501349_A_novel_approach_to_the_design_of_back-EMF_observer_based_sensorless_control_of_non-salient_PMSM_Theoretical_analysis_and_experimental_investigations

 

PS: Mi dispiace di indicarti solo cose mie, ma purtroppo siamo relativamente in pochi ad aver pubblicato cose abbastanza chiare (semplici) e "serie" su questi argomenti (faccio notare che, nell'industria, i migliori produttori erano arrivati ben prima di noi, su alcune di queste cose, ma non rendono pubbliche le tecniche!). Inoltre, di questi articoli (memoria permettendo) so cosa c'è di utile e poi riesco a chiarire le parti meno chiare.

Modificato: da Sandro Calligaro
Link al commento
Condividi su altri siti

  • 2 weeks later...

Buongiorno..****

Grazie

 

***** N. d. M. *****

 

Nuovo utente che probabilmente non hai letto io regolamento, altrimenti sapresti che è vietato accodarsi perchè in questo modo si causano confusioni e disguidi nelle risposte.

Si deve sempre aprire una nuova discussione.

 

Inoltre ti consiglio di di leggere attentamente tutta la discussione dall'inizio, divresti ottenere molte indicazioni su come risolvere il tuo problema.

Modificato: da Livio Orsini
Link al commento
Condividi su altri siti

  • 5 months later...

Buonasera

rieccomi qua dopo qualche mese.

Ero arrivato ad un punto morto con lo studio del motore e dell inverter, devo ancora verificare se campionando i sensori hall nel momento in cui si campiona la corrente si riducono i disturbi generati dalla pwm (ho spiegato male ma il concetto dovrebbe essere chiaro di quel che volevo dire). 

Purtroppo ho traslocato e ora la lavatrice si trova in garage (gelido d'inverno e torrido d'estate) e questo non fa certo venire voglia di fare esperimenti. Aspetto di trovare un esemplare da discarica da mettere in casa per giocare senza dover smontare la lavatrice ogni volta.

Ho trovato per ora una scheda di una lavatrice rotta molto simile a quella che ho io e anzi alla vista é identica. Sto cercando di capire come é fatta la parte di alimentazione di questa scheda giusto per copiarla senza dover stare a pensare pure a come fare una sezione di alimentazione robusta. E già ci sono delle cose che non capisco.

Guardando le piste mi sembra di poter dire che il primo blocco dell'alimentazione é fatto come nello schema allegato.

CE72 é l'elettrolitico che poi alimenta il motore e il resto della scheda con un  altra sezione switching.

Quello che non capisco é cosa ci fa l'induttanza  T2 (é la sigla sulla scheda) messa li. A prima vista pensavo fosse un trasformatore ma controllando ha un solo avvolgimento.

Riesco solo a ipotizzare che serva per limitare la corrente che carica il l'elettrolitico all'accensione, pero' considerando che deve supportare la corrente assorbita dal motore mi sembra tutto sommato piccola come volume di ferro.

Voi avete già visto qualcosa del genere?

2020-11-25.png.a20fdc7c997a6bfca983992abac0e89e.png

Allego anche la foto della scheda, l'induttanza (trasformatore?) e quella blu nell'angolo in alto a sinistra.

8cf51aad-4d93-4659-9983-45856a0a366d.thumb.jpg.bfeb81ce3cf8fb805b8af161993cc609.jpg

Grazie come sempre

Link al commento
Condividi su altri siti

  • 2 weeks later...
Sandro Calligaro

Ciao Marco, mi dispiace di non aver risposto prima.
Mi aspetto anch'io che sia per il PFC, ma non mi torna la posizione, manca anche lo switche del boost (che va a caricare la capacità di bus) a valle del raddrizzatore...

Link al commento
Condividi su altri siti

Ciao Sandro,

figurati non c'é problema, intanto ho trovato una lavatrice da esperimenti, sto provando a campionare i sensori Hall al momento del campionamento delle correnti del motore per vedere se si risolve il problema dei disturbi.

Ho trovato qui

http://www.falcomex.com/Prods/PFC.aspx dove dice:

 

Passive PFC methods use additional passive components in conjunction with the diode bridge rectifier from Fig. 1. One of the simplest methods is to add an inductor at the AC-side of the diode bridge, in series with the line voltage as shown in Fig.2a, and to create circuit conditions such that the line current is zero during the zero-crossings of the line voltage.

 

Mi sembra una configurazione simile a quella della LG con l'induttanza lato AC, da quel che ho capito é una soluzione molto grezza.

 

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...