Jeśli chodzi o mój program, jest to program, który wykonuje pewne obliczenia, a następnie wyprowadza napięcie na podstawie wyniku za pomocą funkcji analogWrite. Jednak moim problemem jest to, że wykonałem programowanie w oparciu o błędne przekonanie, że funkcja AnalogWrite przez PWM generuje napięcie analogowe, podczas gdy w rzeczywistości zamiast tego „symuluje” 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 zespół obwodów, styk wyjściowy 11 jest podłączony do rezystora 1 om, a następnie do GND. (Gdzie zmierzyłem napięcie) Używam płyty Arduino Uno.
AKTUALIZACJA :
Jak powiedziano w komentarzach @DatHa, PWM nie wytwarza napięcia wyjściowego. Czy istnieje sposób na napięcie wyjściowe, jak wspomniano, bez zmiany płyty?
Odpowiedzi:
Zasadniczo masz trzy opcje:
Z trzech opcji zwykle korzystam z MCP4822, ponieważ daje najlepsze wyniki i nie kosztuje tyle, co korzystanie z Due.
źródło
Przy napięciu 5 V rezystor 1 Ω będzie próbował obniżyć 1 A i znacznie przekroczyć specyfikację 40 mA. Użyj rezystora co najmniej 5 / 0,040 = 125 omów, aby zabezpieczyć 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 sugerowaną odpowiedź @russell z rezystorem 47K i kondensatorem 1uF, otrzymasz napięcie analogowe na złączu do użycia z obciążeniem elektronicznym.
źródło
O ile wiem Arduinos mają ADC (przetworniki analogowo-cyfrowe), ale nie mają żadnych przetworników DAC (cyfrowo-analogowych). Nie można więc wyprowadzić ustawionego napięcia z żadnych styków na podstawie wartości cyfrowej.
źródło
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ż standardowa 50o Hz.
Powodzenia
źródło
Nie ma bezpośredniego sposobu.
Oprócz @Majenko
Alternatywny sposób: możesz użyć mostka H jak L293d, aby zapewnić ciągły poziom. Wiele obwodów inwertorowych DIY korzysta z tej techniki.
http://www.instructables.com/id/How-to-Make-an-Inverter-Using-ARDUINO/?ALLSTEPS
źródło