Per quanto riguarda il mio programma, è un programma che fa alcuni calcoli e poi emette una tensione basata sul risultato usando funzione analogWrite. Tuttavia il mio problema è che avevo fatto la mia programmazione basandomi su un malinteso che la funzione analogWrite tramite PWM emetta una tensione analogica, dove in realtà “simula” solo la tensione analogica.
Ecco le parti rilevanti del mio codice:
int pwmOutput = 11; int pwm = 0; void compareNewOldVoltageYes(void) { if(pv_Vnew > pv_Vold && pwm != 255) { ++pwm; //increasing value } else if(pwm != 0) { --pwm; //decreasing } } void compareNewOldVoltageNo(void) { if(pv_Vnew > pv_Vold && pwm != 0) { --pwm; } else if(pwm != 255) { ++pwm; } } void loop() { reading(); PowerCalculation(); if(pv_NewP > pv_OldP) { compareNewOldVoltageYes(); } else { compareNewOldVoltageNo(); } analogWrite(pwmOutput, pwm); //analogWrite float displayPWMvolt = pwm * 0.0196; Serial.print("Output Voltage: "); Serial.print(displayPWMvolt); Serial.println(" V"); pv_OldP = pv_NewP; Serial.print("Previous Power: "); Serial.print(pv_OldP); Serial.println(" W"); }
Per quanto riguarda il circuito, il pin di uscita 11 è collegato a una resistenza da 1 ohm e quindi a GND. (Dove ho misurato la tensione) Sto usando la scheda Arduino Uno.
AGGIORNAMENTO :
Come detto nei commenti di @DatHa, pwm non emette tensione. Cè un modo per emettere la tensione come detto, senza cambiare la scheda?
Commenti
- PS La scrittura analogica utilizza PWM e NON produce una tensione analogica.
- @DatHa significa che non può essere fatto in questo modo? Esiste unaltra funzione per emettere la tensione analogica?
- Vedi la risposta di @Russell su arduino.stackexchange.com/questions/10041/…
- @dpw Non ' penso che funzioni in quanto il mio programma deve connettersi a un carico elettronico tramite la sua programmazione esterna e controllarlo utilizzando 0-5V.
- PWM emette un voltaggio specifico, oppure ' sono un pirata nellanno di nostro Signore 1734. Puoi ' t andare oltre un valore di 8 bit e ' cè sempre qualche imprecisione nel leggerlo.
Answer
Fondamentalmente hai tre opzioni:
- Passa a un Arduino Due che ha un DAC integrato che emette una tensione reale.
- Aggiungi un chip DAC esterno (come MCP4821 / 2) per creare la tensione per te
- Usa un filtro passa-basso (rete RC) su un pin PWM.
Delle tre opzioni di solito utilizzo un MCP4 822 poiché dà i migliori risultati e non costa quanto lutilizzo di un Due.
Commenti
- Grazie. Lopzione 2 sembra davvero buona, ma a causa di vincoli di tempo, sono andato avanti con lopzione 3 e ho ottenuto i risultati che volevo.
- o usa un R-2R ladder come " uomo povero ' s DAC "
- @AndreHolzner Considero un ladder R-2R uguale a un chip DAC ma con troppi fili per renderlo pratico sul tuo Arduino medio.
- @Majenko Volevo solo aggiungere che esistono " potenziometri digitali " o " digipots " che sono praticamente scale R-2R allinterno di un chip DIP-8. Sono più economici dei DAC. (Ad esempio X9C103)
- @FilipFranik Tranne che ' non sono ladder R-2R. ' sono solo una catena di resistori con un FET collegato a ciascuna connessione tra i resistori. Cè solo R. Molte R uguali. Sì, se lo scrivi con le due estremità del potenziometro su VCC e GND ottieni una specie di DAC, ma soffre dello stesso tipo di problemi di impedenza di un vero potenziometro. Fornisce una coppia di resistenze, mentre un DAC fornisce una tensione.
Risposta
A 5 V, 1 Il resistore ohm proverà ad affondare 1A e supererà di gran lunga le specifiche di 40mA. Utilizzare almeno una resistenza da 5 / 0,040 = 125 ohm per proteggere il pin. E se metti un condensatore tra il resistore e la massa, il circuito RC del condensatore appianerà il PWM in una tensione analogica.
Prova la risposta @russell suggerita con un resistore da 47K e un condensatore da 1uF, otterrai una tensione analogica alla giunzione da utilizzare con il tuo carico elettronico.
Rispondi
Per quanto ne so Arduino ha ADC (convertitori da analogico a digitale) ma non ne ha DAC (convertitori da digitale ad analogico). Quindi non è possibile emettere un voltaggio impostato da nessun pin in base a un valore digitale.
Commenti
- Gli Arduino basati su ARM di solito hanno almeno un DAC canale.
Risposta
NO .. Non cè modo di ottenere una tensione analogica da Arduino. Il meglio che puoi fare è utilizzare Arduino come convertitore di tensione Buck in modalità lineare o boost utilizzando un regolatore di tensione, un induttore e il transistor mosfet. Potrebbe anche essere necessario utilizzare un Mega o un Dulorme che forniscono una frequenza PWM diversa da quella standard di 50o Hz.
Buona fortuna
Risposta
Non esiste un modo diretto.
Oltre a @Majenko
Modo alternativo: puoi usare il bridge H come L293d per fornire un livello continuo.Molti circuiti inverter fai-da-te utilizzano questa tecnica.
http://www.instructables.com/id/How-to-Make-an-Inverter-Using-ARDUINO/?ALLSTEPS