La domanda riguarda il filtro passa basso da applicare a un segnale PWM per ricavarne il valore medio (continuo). Il segnale di ingresso e` un'onda quadra che varia fra 0 e un'ampiezza A (almeno si spera) e la continua che si ricava sara` anche lei compresa fra il valore nullo (duty cycle 0%) e il valore A (duty cyle 100%), quindi il guadagno in banda del filtro deve essere pari a 1.
Le specifiche importanti per cominciare a pensarci sono in prima battuta queste
- Frequenza del segnale PWM
- Attenuazione richiesta dal filtro
- Tipo di filtro (attivo/passivo)
- Ordine e famiglia del filtro
- Impedenza di carico (e di sorgente) in caso di filtro passivo
- Velocita` di risposta alla variazione del duty cycle
Frequenza di lavoro
La frequenza del segnale e` data, 20kHz, in generale la possiamo chiamare

Attenuazione richiesta
L'attenuazione ha a che vedere con il massimo ripple (rumore) tollerato in uscita: le risposte niente ripple di uscita, oppure attenuato il piu` possibile, non sono ovviamente risposte accettabili

Nel thread originale di parla di un PWM generato con una risoluzione di 8bit, quindi 256 livelli, pertanto potrebbe essere una scelta accettabile attenuare il segnale ad onda quadra di ingresso in modo che in uscita il ripple alla frequenza

In questo caso essendo il duty cycle quantizzato a 8 bit, possiamo richiedere che il ripple massimo sia pari al valore del fondoscala (ampiezza A) diviso per il numero di livelli

Sfortunatamente le attenuazioni dei filtri sono date solo per segnali sinusoidali, non per onde quadre a duty cycle variabile, ma si puo` fare una approssimazione, detta approssimazione di fondamentale, in cui si considera solo la sinusoide a frequenza

Nella figura seguente sono mostrati due esempi con duty cycle D=50% e D=17%. In blu e` riportato il segnale PWM, in rosso la sinusoide "nascosta" dentro al segnale blu, sinusoide che viene comoda per fare i conti approssimati, e in verde il valor medio del segnale PWM.
L'ampiezza della sinusoide dipende dal duty cycle, ha il suo valore massimo per




Se il segnale PWM ha una ampiezza picco picco di 5V, il valore medio avra` un range da 0V a 5V, il ripple dovra` avere una ampiezza massima di 5V/256=19.5mV, ma dovremo considerare una tensione di ingresso di

Da notare che usando solo la sinusoide fondamentale si trascurano tutte le armoniche, ma non dovrebbero dare troppi problemi perche' sono inizialmente di ampiezza minore della fondamentale e vengono attenuate piu` della fondamentale. Mentre per filtri semplicissimi si potrebbe fare il conto analitico del ripple, appena si sale un pochino di complessita` diventa una sofferenza inutile.
Tipo di filtro
Il filtro, di tipo passa basso tempo continuo (quindi niente filtri numerici!), puo` essere fatto in piu` modi, con diverse tecnologie, ad esempio filtro attivo con resistori condensatori e operazionali, oppure passivo classico con induttori e condensatori, oppure un filtro passivo che utilizza solo resistori e condensatori (il filtro dei disperati!).
Per una applicazione come questa in cui la maschera del filtro non e` molto importante, in cui non si vuole la complessita` di un operazionale e neppure il costo e l'ingombro degli induttori, ci si limitera` a un filtro passivo di tipo RC, che presenta pero` delle limitazioni rispetto alle altre tecnologie.
Ordine e famiglia del filtro
Avendo scelto dei filtri RC passivi, non si puo` parlare di famiglie (ad esempio Cebiceff, Butterworth, Cauer, Bessel...) perche' le reti RC passive possono solo fornire funzioni di trasferimento con poli reali, mentre i filtri seri hanno bisogno di poli complessi coniugati (e talvolta anche di zeri complessi coniugati). Il solo grado di liberta` che rimane e` l'ordine del filtro, e parzialmente anche il piazzamento dei poli, tenendo presenti le limitazioni delle reti RC. In pratica i soli filtri possibili sono quelli del primo e del secondo ordine a poli reali.
Impedenze di sorgente e di carico
Anche in questo caso i dati sono MIA (missed in action), anche se mi pare di aver visto in qualche datasheet che l'impendeza di ingresso dell'azionamento, quindi l'impedenza di carico del filtro sia di 100kΩ, mentre non si hanno notizie di quella di sorgente, che si assume di tipo logico, quindi in grado di erogare e assorbire una decina di milliampere (eventualmente anche un po' meno). Con un filtro attivo, o anche solo con un buffer, il problema dell'impedenza di carico scompare, ma si complica il circuito forse inutilmente.
Velocita` di risposta alle variazioni del duty cycle
A questa specifica ovviamente la risposta e` sempre "il piu` veloce possibile", che ovviamente non vuole dire nulla! Con un sistema PWM una banda ragionevole potrebbe essere dalle parti di

SI procede quindi al progetto di un filtro RC del primo e uno del secondo ordine, con attenuazione a 20kHz di 326 volte che fanno 50dB.
FIltro del primo ordine
Un passa basso RC del primo ordine e` quello di figura, dove e` anche indicata la funzione di trasferimento asintotica.
Le proprieta` di filtraggio sono definite dal solo parametro della frequenza del polo




La resistenza R del filtro deve essere molto minore della resistenza di carico 100kΩ, altrimenti si forma un partitore di tensione che non permette all'uscita in continua di salire fino a quasi 5V, mentre deve essere molto maggiore di Z, in modo da non caricare troppo nei transitori l'uscita della sorgente e permettere cosi` dei buoni fronti ripidi.
Un valore ragionevole potrebbe essere R=1kΩ, in modo da avere la tensione di uscita massima pari al 99% di 5V, mentre con il condensatore completamente carico oppure scarico, la massima corrente richiesta alla porta e` limitata a 5mA.
Trascurando la resistenza da 100kΩ, molto maggiore rispetto a R, come pure la Zout, molto minore rispetto ad R, la frequenza del polo e`data da


E con questo conto il progetto del filtro del primo ordine e` finito! La costante di tempo

Filtro del secondo ordine
Un filtro RC del secondo ordine, quindi con due poli reali, ha il vantaggio che a parita` di attenuazione ad alta frequenza presenta una risposta all'impulso molto piu` rapida. Lo schema e la funzione di trasferimento di questo filtro sono nella figura seguente
Se fosse possibile avere una coppia di poli reali coincidenti alla frequenza



Poli a frequenze piu` elevate implicano risposte piu` veloci. Purtroppo con una rete RC di quel genere non e` possibile ottenere due poli reali coincidenti, servirebbero comnponenti di valore infinito oppure negativo

Cominciamo a vedere a quali frequenze distinte bisogna mettere i poli reali per avere l'attenuazione voluta. Facendo i conti sul diagramma asintotico di Bode, mettendo due poli reali distinti, e considerando che si vuole arrivare sempre nello stesso punto si ha questa situazione:
Facendo i conti sul diagramma di Bode, per avere l'attenuazione voluta a 20kHz si devono mettere due poli con questa relazione di frequenza

Il problema e` calcolare ora i valori dei componenti delle due celle RC. L'idea ingenua di fare due celle uguali ciascuna con frequenza del polo pari a 1.1kHz non funziona.
Se si prova a fare una singola cella RC, assumendo sempre che la resistenza sia molto minore del carico e molto maggiore della sorgente, quindi il solito 1kΩ, si trova R=1kΩ e C=150nF (valore normalizzato). La frequenza del polo della singola cella e`a 1061Hz. Mettendo due di queste celle in cascata si ha questo schema
Se si vanno a calcolare le frequenze dei poli di questo circuito, AHIME` si trova che i due poli NON sono piu` a 1.061kHz, ma uno si e` alzato a 2.78kHz (evviva! polo a frequenza piu` alta, risposta piu` rapida!), ma l'altro si e` abbassato a 405Hz, comunque sempre piu` alto del polo singolo che era a 61Hz.
La rete puo` ancora essere modificata variando i componenti della seconda cella, mantenendo sempre pero` la frequenza del polo della seconda cella da sola a 1.061kHz, che vuol dire che se si aumenta la resistenza della seconda cella di un fattore k, bisogna ridurre la capacita` dello stesso fattore k, in modo che il prodotto RC rimanga costante.
Si ha in pratica questa situazione
variando il fattore k NON cambia il prodotto della frequenza dei due poli (vero che non volete la dimostrazione?) quindi non cambia l'attenuazione ad alta frequenza, mentre variano le singole frequenze dei due poli. Per k molto grande i due poli sono quasi coincidenti, mentre ad esempio per k=3.3 si hanno 626Hz e 1.82kHz, per k=2 si hanno 530Hz e 2.12kHz, mentre per k=1 i valori sono quelli dati prima.
La velocita` di risposta del sistema e` data dal polo a frequenza minore. Verrebbe pertanto naturare scegliere un valore di k elevato per avere un sistema con poco ritardo.
Come sempre in ingegneria se c'e` una buona ragione per fare un'azione, esiste un altro altrettanta buona ragione per fare l'opposto e il progettista deve trovare un compromesso.
Se si aumenta il fattore k, succede che la resistenza della seconda cella sale di valore e va a formare un partitore sempre piu` pesante con la resistena di carico, riducendo la tensione massima. Gia` con k=3.3 ci si trova con due resistenze in serie di valore totale di 4.3kΩ che fanno si` che la tensione massima sul carico sia di 4.79V al posto di 5V. E` quindi opportuno non salire troppo con il fattore k.
Risultati e verifica
I filtri che si possono utilizzare per filtrare il segnale PWM a 20kHz con un ripple residuo a 20kHz pari a circa 1LSB sono quindi i seguenti
La seconda cella del filtro del secondo ordine puo` essere scalata ad esempio con R=2.2kΩe C=68nF oppure R=3.3kΩ e C=47nF, ma l'errore in continua aumenta a causa della partizione con la resistenza di ingresso dell'azionamento.
Per verificare i conti si e` fatta una simulazione spice per verificare sia l'attenuazione sia la risposta all'impulso e il ripple. L'attenuazione e` nella figura seguente (cliccare sulla figura per vederla bene)
In verde la risposta del filtro del primo ordine, in rosso quella del secondo ordine. Si vede che a 20kHz l'attenuazione e` di 50.6dB e 51.1dB, come richiesto. Al variare del parametro k varia l'attenuazione nell'area intorno a qualche kilohertz, ma a 20kHz non si hanno cambiamenti. La banda passante del filtro del primo ordine e` di 61.2Hz, mentre la banda (a -3dB) dei filtri del secondo ordine e` appena superiore a 3kHz.
Il ripple di uscita in condizioni stazionarie e con duty cycle di ingresso di 0.5 (condizione piu` sfavorevole) e` nella figura seguente
La risposta all'impulso dei due filtri e` nella figura seguente
In verde il ripple di uscita del filtro del primo ordine. L'ampiezza e` di 22.9mV, maggiore di quello voluto di 19.5mV a causa delle approssimazioni sulla prima armonica la forma d'onda e` triangolare.
In rosso il ripple di uscita del filtro del secondo ordine con k=1, ampiezza 17.1mV, la forma d'onda e` approssimativamente data da archi di parabole perche' e` un'onda quadra integrata due volte. La differenza di livello e` dovuta al fatto che il filtro del primo ordine ha in serie solo una resistenza da 1kΩ, mentre nel secondo ordine la resistenza in serie totale e` di 2kΩ. Variando k cambia il valore medio della tensione di uscita ma non il ripple.
Infine nella figura seguente c'e` la simulazione della risposta all'impulso, con ingresso 5V partendo da uscita nulla (quindi salto da D=0 a D=1). In verde la risposta del primo ordine, che impiega circa 6.15ms per arrivare al 90% del fondoscala.
In blu la risposta del secondo ordine con k=1, che impiega 950µs per arrivare al 90% del suo fondoscala, minore del precedente a causa dei 2kΩ in serie al posto dell'1kΩ del filtro del primo ordine, in rosso e in verdino le risposte con k=2.2 e k=3.3 in cui i tempi di risposta al loro 90% valgono rispettivamente 750µs e 693µs.Il caso teorico con due poli reali coincidenti (non realizzabile con una rete RC passiva), avrebbe come tempo al 90% della variazione 588µs circa.
EDIT: L'avevo detto che era un dubbio serale, tardo, 1:40am, e sarebbe stato meglio fossi andato a dormire. Non ho idea da dove abbia preso quella banda di 3 kHz, che non ha nessun senso e mi ha lasciato perplesso anche il giorno dopo



Visto che e` venuto enorme e ho lasciato fuori parecchia roba, quasi quasi ne faccio un articolo!