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:
- Przełącz na Arduino Due, które ma wbudowany DAC który generuje rzeczywiste napięcie.
- Dodaj zewnętrzny układ DAC (taki jak MCP4821 / 2), aby wytworzyć napięcie dla Ciebie
- 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