Convertire PWM Arduino in segnale analogico 0-5 Volt

Ciao a tutti,
ho un Arduino Uno R3 dal quale prelevo una PWM che voglio trasformare in segnale analogico 0-5 Volt che mi servono per poter pilotare un azionamento al cui ingresso accetta un segnale analogico appunto di 0-5 Volt.

So che è possibile trasformare la PWM in segnale analogico con un filtro passa basso RC, ma non sono esperto in questo.
Chiedo a voi di aiutarmi a capire/spiegarmi come si calcolano i due valori della resistenza e del condensatore RC.
Grazie

E' possibile con un'integratore RC, ma non proprio preciso ... dato che dici di dover pilotare un'azionamento, ti consiglierei di usare una di quelle breakout che montano un DAC pilotato I2C, che oltre a darti piu precisione, ti darebbe anche piu risoluzione (con il PWM al massimo avresti 255 livelli (piu lo zero), con il piu scadente dei DAC a 10bit come minimo 1023 ...

inoltre potresti avere anche piu canali, ad esempio il semplice TLV5618A ti darebbe 2 canali a 12bit in un chip ad 8 pin ... se te ne basta uno solo c'e' l'MCP4725, 1 canale a 12bit (4096 livelli), la breakout costa sui 4 Euro ... :wink:

se te ne basta uno solo c'e' l'MCP4725, 1 canale a 12bit (4096 livelli), la breakout costa sui 4 Euro

Ciao Etemenanki, grazie intanto per la tua preziosa e veloce risposta.
Alcune domande:

  1. l'MCP4725 accetta anche 255 livelli?
  2. l'MCP4725 imposta in "automatico" i livelli?
  3. con l'Atmega328P mando il PWM all'MCP4725 e in uscita ottengo gia i miei 0-5 analogici da mandare all'azionamento?
  4. l'MCP4725 trasforma il PWM in analogico..? Oppure trasforma l'analogico in PWM?

Fammi un po di chiarezza :wink:

No, quella schedina con l'MCP4725 e' un DAC (Digital to Analog Converter) ... tu via I2C gli dici che tensione far uscire, e lui lo fa ... niente PWM, lo piloti da programma ...

Sul sito di Adafruit, che e' uno dei tanti che lo vende, c'e' pure una libreria per usarlo, ed anche un tutorial con esempi ...

Ah ecco...
Allora credo che questa soluzione io la debba assolutamente accantonare perchè di programmazione non ne so nulla..
Lo sketch è gia stato realizzato per utilizzare la PWM.
Io ho solo bisogno di trasformare il PWM in analogico 0-5 volt

La soluzione per chi di programmazione e di elettronica non ne sa niente è proprio il dac. Diverso sarebbe se di elettronica ne capissi e fossi attrezzato, ma anche in quel caso preferirei il dac visto il costo e non serve metterlo a punto

Poi se decidi per i filtri attivi puoi provare con gli operazionali, ma sembra la strada lunga tortuosa e piena di burroni.

Ciao.

La soluzione per chi di programmazione e di elettronica non ne sa niente è proprio il dac

Ciao Maurotec, intendi la stessa soluzione che mi ha consigliato Etemenanki?
Se c'è gia qualcosa di pronto (DAC) potresti dirmi di cosa si tratta e come posso utilizzarlo..?

No, quella schedina con l'MCP4725 e' un DAC (Digital to Analog Converter) ... tu via I2C gli dici che tensione far uscire, e lui lo fa ... niente PWM, lo piloti da programma ...

Ciao Etemenanki, una domanda: per l'MCP4725 che mi consigliavi, va programmato il DAC o devo modificare l'attuale sketch su Arduino che mi gestisce la frequenza e il feedback?

Normalmente non li uso, ma devi modificare il programma sull'arduino ... invece di mandare i valori all'uscita del PWM, li dai in pasto alla libreria che gestisce il DAC (A meno che non ti servano cose speciali che la libreria non fa, il DAC non va programmato, solo pilotato attraversi la sua libreria)

Hai visto gli esempi nella libreria di Adafruit ? ... una volta inizializzato ti basta dargli il livello di tensione che vuoi (da 0 a 4095) come se fosse un PWM, ma piu preciso e con piu risoluzione ...

darioAVR:
Allora credo che questa soluzione io la debba assolutamente accantonare perchè di programmazione non ne so nulla..

Esistono dei modulini in commercio che fanno già quel che chiedi senza dover programmare nulla.
Li trovi più facilmente con uscita 0-10V ed in quel caso basta un partitore.

cotestatnt:
Esistono dei modulini in commercio che fanno già quel che chiedi senza dover programmare nulla.

... QUESTO ne è un esempio :slight_smile:

Basta cercare su Google"pwm to voltage converter module" ...

Guglielmo

Ok grazie Etemenanki ottima spiegazione, ma di programmazione sono a ZERO :cry:

Esistono dei modulini in commercio che fanno già quel che chiedi senza dover programmare nulla.
Li trovi più facilmente con uscita 0-10V ed in quel caso basta un partitore.

Ciao Cotestatnt, puoi linkarmi qualcosa?

Basta cercare su Google"pwm to voltage converter module" ...

Ciao Guglielmo, si avevo gia trovato questo convertitore ma ho letto che in ingresso accetta valori di 1-3 Khz.
La mia frequenza è di circa 20 Khz e non posso utilizzarlo...

darioAVR:
Ciao Cotestatnt, puoi linkarmi qualcosa?

Anche io avevo in mente moduli tipo quello linkato da Guglielmo (per il quale non ho ben chiaro perché hanno un limite cosi basso in frequenza, ci vorrebbe uno schema elettrico).
Se le frequenze in gioco sono queste, ti conviene lasciar perdere le cineserie e prendere un integrato pensato proprio per questo come questo (100Khz max) della Analog Devices
Solo che ti tocca usare il saldatore :)... il componente è disponibile in package MSOP12 che non è proprio semplicissimo da saldare (esistono degli adattatori MSOP-DIP).

Se le frequenze in gioco sono queste, ti conviene lasciar perdere le cineserie e prendere un integrato pensato proprio per questo come questo (100Khz max) della Analog Devices
Solo che ti tocca usare il saldatore :)... il componente è disponibile in package MSOP12 che non è proprio semplicissimo da saldare (esistono degli adattatori MSOP-DIP)

Ottimo !! Quindi utilizzando questo convertitore (a me basterebbe gia un canale, quindi mi sta bene il LTC2644-8).
Ma...per usare questo convertitore...devo sempre modificare lo sketch o comunque programmare qualcosa?.......
Per le saldature non ho alcun problema...

Debbo ricordare a tutti il punto 16.11 del REGOLAMENTO ... se non parliamo più di Arduino, ma di componentistica ... il thread va verso la chiusura ... ::slight_smile:

Guglielmo

Guglielmo si sta parlando di Arduino... nello specifico di un PWM che esce da uno dei 6 pin digitali e proprio perchè sto usando Arduino Uno R3...sto chiedendo come posso convertire il suo PWM in analogico.
Si sta pure parlando di evitare di modificare lo sketch (di Arduino)... quindi in poche parole di un componente che collegato opportunamente ad una uscita PWM di ARDUINO... io possa ottenere un segnale analogico.

PWM a 20 KHz su pin 6 di Arduino UNO? E' stato modificato Timer0 ? ? ? :o

E comunque ti è stato detto che con Arduino, senza mettere le mani nel codice, NON si fa ... quindi ora il disorso esula da Arduino ... qui stai cercado un convertitore da un generico PWM a 20 KHz ad analogico e ... Arduino NON c'entra più nulla ... ::slight_smile:

Guglielmo

PWM a 20 KHz su pin 6 di Arduino UNO? E' stato modificato Timer0 ? ? ? :o

Si, è stato modificato il Timer0 (penso sia questo) e probabile anche il prescaler...
Ok Guglielmo capisco e rimango sul tema Arduino Uno R3: se volessi ridurre la frequenza PWM quali righe di comando dello sketch devo considerare?
So che modificando il valore del prescaler posso modificare il PWM.
Sapete dirmi come fare o farmi un esempio?
Grazie

Se togli le righe che toccano Timer 0 torni al valore di default impostato dal "core" che è 976.5625 Hz.

Guglielmo

Se togli le righe che toccano Timer 0 torni al valore di default impostato dal "core" che è 976.5625 Hz.

Ok gli do un'occhiata..
Io pensavo invece che in qualche riga dello sketch ci fosse un NUMERO che facesse da divisore..

Esempio:

Se abbiamo un PWM di 31250/64 otteniamo una frequenza di 488 Hz
Se invece sostituiamo il valore 64 con 8 otteniamo 3.906 Hz

"setPwmFrequency(11, 64 );"
ad esempio in:
"setPwmFrequency(11, 8 );"