Jak vydat skutečné analogové napětí na výstupním pinu

Pokud jde o můj program, jedná se o program, který provádí určité výpočty a poté na základě výsledku na základě výsledku odešle napětí funkce analogWrite. Mým problémem však je, že jsem programování provedl na základě mylné představy, že funkce analogWrite přes PWM vydává analogové napětí, kde ve skutečnosti pouze „simuluje“ analogové napětí.

Zde jsou relevantní části mého kódu:

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"); } 

Pokud jde o obvody, výstupní pin 11 je připojen k rezistoru 1 ohm a poté k GND. (Kde jsem měřil napětí) používám desku Arduino Uno.

UPDATE :

Jak je uvedeno v komentářích od @DatHa, pwm nevydává výstupní napětí. Existuje způsob výstupu výstupního napětí, jak je uvedeno, bez výměny desky?

Komentáře

  • PS Analogový zápis používá PWM a NEVYDÁVÁ analogové napětí.
  • @DatHa znamená to, že to nelze provést tímto způsobem? Existuje jiná funkce pro výstup analogového napětí?
  • Viz odpověď @Russell na stránce arduino.stackexchange.com/questions/10041/…
  • @dpw ' si nemyslím, že to funguje, protože můj program se musí připojit k elektronické zátěži prostřednictvím svého externího programování port a ovládejte jej pomocí 0-5V.
  • PWM vydává určité napětí, nebo jsem ' ma pirát v roce našeho Pána 1734. Můžete ' nepřesahuje 8bitovou hodnotu a při čtení ' je vždy nějaká nepřesnost.

Odpověď

V zásadě máte tři možnosti:

  1. Přepnout na Arduino Due s vestavěným DAC který vydává skutečné napětí.
  2. Přidejte externí čip DAC (například MCP4821 / 2) a vytvořte pro vás napětí
  3. Použijte dolní propust (RC síť) na pin PWM.

Ze tří možností obvykle používám MCP4 822, protože poskytuje nejlepší výsledky a nestojí tolik nákladů jako použití splatnosti.

Komentáře

  • Děkuji. Možnost 2 zní opravdu dobře, ale vzhledem k časovým omezením jsem pokračoval s možností 3 a získal požadované výsledky.
  • Nebo použijte R-2R žebřík jako " chudák ' s DAC "
  • @AndreHolzner Počítám žebřík R-2R stejně jako čip DAC, ale s příliš mnoha vodiči, aby to bylo praktické pro vaše průměrné Arduino.
  • @Majenko Chtěl jsem jen dodat, že existují " digitální potenciometry " nebo " digipots ", které jsou do značné míry R-2R žebříky uvnitř čipu DIP-8. Jsou levnější než DAC. (Například X9C103)
  • @FilipFranik Kromě toho, že ' nejsou žebříky R-2R. Jsou ' pouze řetězcem rezistorů s FET připojeným ke každému spojení mezi rezistory. Existuje pouze R. Mnoho R stejných. Ano, pokud to napíšete dvěma konci potenciometru na VCC a GND, dostanete jakýsi DAC, ale trpí stejným druhem problémů s impedancí jako skutečný potenciometr. Poskytuje dvojici odporů, zatímco DAC poskytuje napětí.

Odpověď

Při 5 V, 1 ohm rezistor se pokusí potopit 1A a daleko přesáhnout specifikace 40mA. K ochraně svého kolíku použijte alespoň odpor 5 / 0,040 = 125 ohmů. A pokud vložíte kondenzátor mezi odpor a zem, RC obvod kondenzátoru vyhladí PWM na analogové napětí.

Vyzkoušejte navrhovanou @russell odpověď s odporem 47K a kondenzátorem 1uF, na křižovatce získáte analogové napětí, které lze použít s vaše elektronické zatížení.

Odpověď

Pokud vím, Arduinos mají ADC (analogově-digitální převaděče), ale nemají žádné DAC (digitálně-analogové převodníky). Na základě digitální hodnoty tedy nemůžete vyslat nastavené napětí z žádného pinu.

Komentáře

  • Arduiny založené na ARM mají obvykle alespoň jeden DAC kanál.

Odpověď

NE .. Neexistuje způsob, jak získat analogové napětí z Arduina. Nejlepší, co můžete udělat, je použít Arduino jako převodník napětí Buck v lineárním nebo zesilovacím režimu pomocí regulátoru napětí, induktoru a tranzistoru MOSFET. Také možná budete muset použít Mega nebo Dulorme, které poskytují PWM frekvenci jinou než standardní 50o Hz.

Hodně štěstí

Odpověď

Přímý způsob neexistuje.

Kromě @Majenko

Alternativní způsob: pro zajištění kontinuální úrovně můžete použít H můstek jako L293d.Mnoho obvodů invertoru používá tuto techniku.

http://www.instructables.com/id/How-to-Make-an-Inverter-Using-ARDUINO/?ALLSTEPS

Odpověď

Napadlo mě, jestli by to poskytlo stabilnější výstup.

PWN předloženo RC. Nabíjení uzávěru, vzorek je proveden jiným analogovým vstupem. Když PWN pin klesne, pomalé vybíjení víčka. Možná je pro pomalé vybíjení paralelně s krytkou zapotřebí velký rezistor?

Komentáře

  • Je třeba přidat an R paralelně s C1 k vybití C1.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *