Non dimenticare il transzorb insieme allo zener, il primo infatti oltre ad essere bidirezionale è molto più robusto e resistente ai forti spike, indispensabile sui forti carichi induttivi.
Allora, cerco di rispiegarlo meglio. Ho una matrice composta da 300 vettori (su ogni semionda), questi vettori vengono eseguiti facendo variare il duty cycle del PWM. Questo porta a creare ovviamente la sinusoide, che tramite una variabile viene limitata a 320V picco picco per ogni semionda (640V p-p totale). Fin qui tutto ok, ora però collegando un carico la sinusoide diminuirà di ampiezza e la distorsione aumenterà. Cos'è l'ampiezza non serve spiegarlo, per distorisione invece intendo la "deformazione" della forma d'onda che si allontana sempre di più dalla forma sinusoidale.
Perchè c'è distorsione? Perchè si è scelto di utilizzare il metodo free invece del metodo forzato, questo permette di avere un maggior rendimento ma introduce distorsione (se non opportunamente controllato), perchè il condensatore del filtro di uscita si carica e resta tale fino a una successiva inversione. Nel peggiore dei casi porta ad avere, nella fase di discesa della sinusoide, un onda quadra, onda quadra che si "pulisce" all'aumentare del carico che scarica il condensatore.
Mi fermo qui

, non mi far rispiegare da capo quale sono le differenze fra PWM forzato e PWM free, sono ampiamente spiegate un po' di pagine indietro, dove fra l'altro mi sembrava avessi dato anche te parere favorevole al Free...
Quindi tornando a noi, appurato che collegando un carico, ci sia una variazione di ampiezza e di distorsione, l'ADC del micro acquisisce questa forma d'onda, campionandola a una frequenza pari al susseguirsi dei valori di riferimento della matrice. Mi spiego meglio, abbiamo un timer (nel mio caso) che si preoccupa della sequenza di esecuzione dei valori della matrice (300 per ogni semionda), quando il timer "decide" di passare al prossimo valore, oltre a ricalcolare la nuova variabile tramite il nuovo valore di matrice, si preoccupa anche di attivare la lettura ADC che una volta completata viene disattivata e riattivata solamente al prossimo cambio di valore in matrice.
L'ADC quindi, restituisce 300 letture a 10 bit ogni semionda, creando di fatto una nuova matrice di vettori. Ogni volta che una lettura è pronta però, viene comparata con il valore che la matrice madre (chimiamola così la matrice originale per non confonderla) intende dare al prossimo passo (dei 300). L'algoritmo si preoccupa quindi in tempo reale (300 volte ogni semionda) di vedere di quanto si discosta il valore di ADC, dal valore che la matrice madre vorrebbe dare alla prossima variabile di duty cycle del PMW. Se questa differenza, è più grande di un certo valore (io ho impostato 0,5% ma si può scendere, più si scende più si appesantisce il micro), l'algoritmo calcola una costante da aggiungere alla matrice madre per avere una corretta forma d'onda in uscita.
Ora qui arriviamo al punto cruciale, ovvero come fare a riconoscere se si tratta di distorsione o semplicemente di cambio di ampiezza, ma questo lasciamolo a quando si affronterà il problema del feedback, altrimenti bruciamo i tempi e rallentiamo il grande lavoro che sta facendo il nostro BellaEli.
Spero di essermi spiegato bene, saluti Kekko.