Med hensyn til mit program er det et program, der foretager nogle beregninger og derefter udsender en spænding baseret på resultatet ved hjælp af analogWrite-funktion. Men mit problem er, at jeg havde lavet min programmering baseret på en misforståelse om, at analogWrite-funktion via PWM ikke udsender en analog spænding, hvor den faktisk kun “simulerer” den analoge spænding i stedet.
Her er de relevante dele af min kode:
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"); }
Med hensyn til kredsløbet forbindes udgangsstift 11 til en 1 ohm modstand og derefter til GND. (Hvor jeg målte spændingen) bruger jeg Arduino Uno-kort.
UPDATE :
Som sagt i kommentarerne fra @DatHa, udsender pwm ikke spænding. Er der en måde at udgangsspænding som sagt uden at ændre kortet?
Kommentarer
- PS Analog skrivning bruger PWM, og det producerer IKKE en analog spænding.
- @DatHa betyder det, at det ikke kan gøres på denne måde? Er der en anden funktion til output af analog spænding?
- Se @Russell svar på arduino.stackexchange.com/questions/10041/…
- @dpw Jeg tror ikke ' det virker, da mit program skal oprette forbindelse til en elektronisk belastning via sin eksterne programmering port og styr den ved hjælp af 0-5V.
- PWM udsender en bestemt spænding, eller I ' er pirat i året for vor Herre 1734. Du kan ' t går over en 8-bit værdi, og der er ' altid en vis unøjagtighed ved læsning af den.
Svar
Du har grundlæggende tre muligheder:
- Skift til en Arduino Due, som har en indbygget DAC som udsender en reel spænding.
- Tilføj en ekstern DAC-chip (såsom MCP4821 / 2) for at skabe spændingen for dig
- Brug et lavpasfilter (RC-netværk) på en PWM-pin.
Af de tre muligheder bruger jeg normalt en MCP4 822 da det giver de bedste resultater og ikke koster så meget som at bruge en Due.
Kommentarer
- Tak. Mulighed 2 lyder rigtig godt, men på grund af tidsbegrænsninger gik jeg videre med mulighed 3 og fik de ønskede resultater.
- eller brug en R-2R stige som en " fattig mand ' s DAC "
- @AndreHolzner Jeg tæller en R-2R-stige det samme som en DAC-chip, men med for mange ledninger til at gøre det praktisk på din gennemsnitlige Arduino.
- @Majenko Jeg ville bare tilføje, at der findes " digitale potentiometre " eller " digipots " der er stort set R-2R stiger inde i en DIP-8 chip. De er billigere end DACer. (For eksempel X9C103)
- @FilipFranik Medmindre de ' ikke er R-2R-stiger. De ' er bare en kæde af modstande med en FET forbundet til hver forbindelse mellem modstande. Der er kun R. Mange Rer alle de samme. Ja, hvis du skriver det op med de to ender af potentiometeret til VCC og GND, får du en slags DAC, men det lider af den samme slags impedansproblemer, som et ægte potentiometer gør. Det giver et par modstande, hvorimod en DAC tilvejebringer en spænding.
Svar
Ved 5V er en 1 ohm-modstand vil forsøge at synke 1A og langt overstige 40mA-specifikationerne. Brug mindst en 5 / 0,040 = 125 ohm modstand for at beskytte din pin. Og hvis du sætter en kondensator mellem din modstand og jord, udjævner kondensatorens RC-kredsløb PWM til en analog spænding.
Prøv det foreslåede @russell svar med en 47K modstand og 1uF kondensator, du får en analog spænding ved krydset til brug med din elektroniske belastning.
Svar
Så vidt jeg ved, har Arduinos ADC (Analog til Digital Converters), men har ikke nogen DAC (digital til analog konvertere). Så du kan ikke udsende en indstillet spænding fra nogen stifter baseret på en digital værdi.
Kommentarer
- De ARM-baserede Arduinos har normalt mindst en DAC kanal.
Svar
NEJ .. Der er ingen måde at få en analog spænding fra Arduino. Det bedste, du kan gøre, er at bruge Arduino som en Buck Voltage-konverter i lineær eller boost-tilstand ved hjælp af en spændingsregulator, induktor og mosfet-transistoren. Du bliver muligvis også nødt til at bruge en Mega eller Dulorme, der giver en anden PWM-frekvens end standard 50o Hz.
Held og lykke
Svar
Der er ingen direkte vej.
Ud over @Majenko
Alternativ måde: Du kan bruge H-bro som L293d til at give et kontinuerligt niveau.Mange DIY inverter kredsløb bruger denne teknik.
http://www.instructables.com/id/How-to-Make-an-Inverter-Using-ARDUINO/?ALLSTEPS