Sì, tutti i microcontrollori hanno un modo per produrre segnali di tensione controllati dal firmware. Il metodo della forza bruta prevede che il micro includa un convertitore da digitale ad analogico (D / A). Il firmware scrive un numero sul D / A e produce una tensione proporzionale a quel numero.
Una specifica importante di D / As è quanti bit ha il numero. Questo determina la sua risoluzione. Il D / A può produrre 2 N valori diversi quando ci sono N bit nel numero. Ad esempio, un D / A a 8 bit può produrre 256 livelli di tensione diversi. Si noti che un normale pin di uscita digitale può essere considerato come un D / A a 1 bit. Il numero ha due stati, 0 e 1, e la tensione di uscita è alta o bassa.
La maggior parte dei micro non ha D / As multi-bit integrato perché c'è poca richiesta per questo. Di solito proviamo a convertire i valori analogici in digitali il più presto possibile, facciamo le manipolazioni in modo digitale, quindi controlliamo le cose con gli impulsi. È insolito desiderare che un micro produca una tensione analogica. Anche in applicazioni come l'audio che potresti pensare intrinsecamente a un segnale analogico, le cose sono spesso gestite in modo digitale o con impulsi alla fine. Questo è fondamentalmente quello che è un amplificatore di classe D.
Se non si desidera utilizzare uno dei set limitati di micro che hanno un D / A integrato, è possibile aggiungerne uno esternamente. Ci sono molti D / As disponibili che il micro può guidare su un bus SPI, per esempio.
Tuttavia, a meno che non sia necessaria un'uscita ad alta velocità, il filtro passa basso dell'uscita PWM di un micro produce un segnale analogico gradevole. I micro sono bravi a produrre sequenze di impulsi ben controllate e molti hanno hardware incorporato per questo scopo. Ad esempio, si consideri un'uscita digitale che può essere modificata ogni 1 µs (con una frequenza di 1 MHz). Supponiamo di aver raggruppato i frammenti di tempo di 1 µs in blocchi di 1023. Per ciascun blocco, è possibile avere da 0 a 1023 dei frammenti in qualsiasi punto. Se dovessi fare una media di questo, otterresti un valore analogico con 1024 livelli possibili, che è quello che otterrai da un D / A a 10 bit. Il segnale non elaborato conterrà il valore medio desiderato, oltre alle alte frequenze a partire da 1 MHz / 1023 = 978 Hz. Applicando alcuni poli di filtro passa basso (un resistore e un condensatore per polo),
Questo tipo di A / D ha alcune belle proprietà in quanto è molto lineare, monotonico e privo di potenza di due uscite glitch. L'unico inconveniente è di solito la larghezza di banda. Per alcuni semplici resistori e condensatori che formano il filtro passa-basso, probabilmente non è possibile ottenere un segnale analogico più veloce di qualche 10s di Hz.
Si noti che l'utilizzo di 1023 sezioni per blocco è stata una scelta arbitraria effettuata. Se si desidera una maggiore risoluzione, ingrandire i blocchi, ma l'output filtrato dovrà cambiare più lentamente. Tuttavia, molti micro possono eseguire la generazione PWM in hardware con una velocità di taglio molto più rapida di 1 MHz.
Proverei a vedere se il metodo PWM può essere fatto funzionare prima di passare a un D / A esterno.