Jak wyprowadzić prawdziwe napięcie analogowe na pinie wyjściowym

Jeśli chodzi o mój program, jest to program, który wykonuje obliczenia, a następnie podaje napięcie na podstawie wyniku za pomocą funkcja analogWrite. Jednak mój problem polega na tym, że programowałem w oparciu o błędne przekonanie, że funkcja analogWrite przez PWM wyprowadza napięcie analogowe, podczas gdy w rzeczywistości zamiast tego „symuluje” tylko napięcie analogowe.

Oto odpowiednie części mojego kodu:

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

Jeśli chodzi o obwody, pin wyjściowy 11 jest podłączony do rezystora 1 oma, a następnie do GND. (Gdzie zmierzyłem napięcie) Używam płyty Arduino Uno.

UPDATE :

Jak powiedziano w komentarzach @DatHa, pwm nie wyprowadza napięcia. Czy istnieje sposób na uzyskanie takiego napięcia wyjściowego bez wymiany płyty?

Komentarze

  • PS Zapis analogowy wykorzystuje PWM i NIE wytwarza napięcia analogowego.
  • @DatHa czy to oznacza, że nie można tego zrobić w ten sposób? Czy jest inna funkcja wyprowadzania napięcia analogowego?
  • Zobacz odpowiedź @ Russell na arduino.stackexchange.com/questions/10041/…
  • @dpw Nie ' nie sądzę, że to działa, ponieważ mój program musi łączyć się z obciążeniem elektronicznym za pomocą zewnętrznego oprogramowania portu i steruj nim za pomocą 0-5V.
  • PWM wyprowadza określone napięcie lub jestem ' piratem w roku Pańskim 1734. Możesz ' nie przekracza wartości 8-bitowej, a ' zawsze jest trochę niedokładny w czytaniu.

Odpowiedź

Zasadniczo masz trzy opcje:

  1. Przełącz na Arduino Due, które ma wbudowany DAC który generuje rzeczywiste napięcie.
  2. Dodaj zewnętrzny układ DAC (taki jak MCP4821 / 2), aby wytworzyć napięcie dla Ciebie
  3. Użyj filtra dolnoprzepustowego (sieć RC) na pin PWM.

Z trzech opcji zwykle używam MCP4 822, ponieważ daje najlepsze rezultaty i nie kosztuje tyle co korzystanie z Due.

Komentarze

  • Dziękuję. Opcja 2 brzmi naprawdę dobrze, ale ze względu na ograniczenia czasowe wybrałem opcję 3 i otrzymałem wyniki, które chciałem.
  • lub użyj R-2R drabina jako " biedny człowiek ' s DAC "
  • @AndreHolzner Liczę drabinkę R-2R tak samo jak chip DAC, ale ze zbyt dużą liczbą przewodów, aby była praktyczna na przeciętnym Arduino.
  • @Majenko Chciałem tylko dodać, że istnieją " potencjometry cyfrowe " lub " digipoty ", które są w zasadzie drabinkami R-2R wewnątrz układu DIP-8. Są tańsze od przetworników DAC. (Na przykład X9C103)
  • @FilipFranik Z wyjątkiem tego, że ' nie są drabinkami R-2R. ' to po prostu łańcuch rezystorów z tranzystorem FET podłączonym do każdego połączenia między rezystorami. Jest tylko R. Wiele R jest jednakowych. Tak, jeśli zapiszesz to z dwoma końcami potencjometru do VCC i GND, otrzymasz coś w rodzaju przetwornika cyfrowo-analogowego, ale ma takie same problemy z impedancją, jak prawdziwy potencjometr. Zapewnia parę rezystancji, podczas gdy przetwornik cyfrowo-analogowy zapewnia napięcie.

Odpowiedź

Przy 5 V, 1 rezystor omowy będzie próbował obniżyć 1A i znacznie przekroczyć specyfikację 40mA. Proszę użyć co najmniej rezystora 5 / 0,040 = 125 omów, aby chronić swój pin. A jeśli umieścisz kondensator między rezystorem a masą, obwód RC kondensatora wygładzi PWM do napięcia analogowego.

Wypróbuj sugerowany @russell answer z rezystorem 47K i kondensatorem 1uF, otrzymasz analogowe napięcie na złączu do użycia z Twoje obciążenie elektroniczne.

Odpowiedź

O ile wiem, Arduino mają ADC (konwertery analogowo-cyfrowe), ale nie mają żadnych DAC (przetworniki cyfrowo-analogowe). Dlatego nie można wyprowadzić ustalonego napięcia z żadnych pinów w oparciu o wartość cyfrową.

Komentarze

  • Arduino oparte na ARM zwykle ma co najmniej jeden przetwornik cyfrowo-analogowy kanał.

Odpowiedź

NIE .. Nie ma możliwości uzyskania analogowego napięcia z Arduino. Najlepsze, co możesz zrobić, to użyć Arduino jako konwertera napięcia Buck w trybie liniowym lub doładowania za pomocą regulatora napięcia, cewki indukcyjnej i tranzystora mosfet. Konieczne może być również użycie Mega lub Dulorme, które zapewniają częstotliwość PWM inną niż standardowe 50o Hz.

Powodzenia

Odpowiedź

Nie ma bezpośredniego sposobu.

Oprócz @Majenko

Alternatywny sposób: możesz użyć mostka H, takiego jak L293d, aby zapewnić ciągły poziom.Wiele obwodów inwertera DIY wykorzystuje tę technikę.

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

Odpowiedź

Zastanawiałem się, czy to dałoby bardziej stabilne wyjście.

PWN przedstawiony RC. Czapka ładuje się, próbka jest pobierana przez inne wejście analogowe. Kiedy pin PWN spada, powolne rozładowywanie nasadki. Może potrzebny jest duży rezystor równolegle z nasadką do powolnego rozładowywania?

Komentarze

  • Musisz dodać R równolegle z C1, aby rozładować C1.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *