När det gäller mitt program är det ett program som gör några beräkningar och sedan matar ut en spänning baserat på resultatet med analogWrite-funktion. Men mitt problem är att jag hade gjort min programmering baserat på en missuppfattning att analogWrite-funktion via PWM inte matar ut en analog spänning, där den faktiskt bara ”simulerar” den analoga spänningen istället.
Här är de relevanta delarna av min kod:
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"); }
När det gäller kretsarna ansluts utgångsstift 11 till ett 1 ohm motstånd och sedan till GND. (Där jag mätte spänningen) använder jag Arduino Uno-kort.
UPPDATERING :
Som sagt i kommentarerna från @DatHa matar inte pwm ut spänningen. Finns det något sätt att utspänningen som sagt utan att ändra kortet?
Kommentarer
- PS Analog skrivning använder PWM och det producerar INTE en analog spänning.
- @DatHa betyder det att det inte går att göra så? Finns det en annan funktion för att mata ut analog spänning?
- Se @Russell svar på arduino.stackexchange.com/questions/10041/…
- @dpw Jag tror inte ' att det fungerar eftersom mitt program måste ansluta till en elektronisk belastning via dess externa programmering porta och kontrollera den med 0-5V.
- PWM matar ut en specifik spänning, eller jag ' en pirat under vår Herres år 1734. Du kan ' t går över ett 8-bitarsvärde, och det finns ' alltid en viss felaktighet när man läser det.
Svar
Du har i princip tre alternativ:
- Byt till en Arduino Due som har en inbyggd DAC som matar ut en verklig spänning.
- Lägg till ett externt DAC-chip (t.ex. MCP4821 / 2) för att skapa spänningen åt dig
- Använd ett lågpassfilter (RC-nätverk) på en PWM-stift.
Av de tre alternativen använder jag vanligtvis en MCP4 822 eftersom det ger bäst resultat och inte kostar lika mycket som att använda en Due.
Kommentarer
- Tack. Alternativ 2 låter riktigt bra, men på grund av tidsbegränsningar gick jag vidare med alternativ 3 och fick de resultat jag ville ha.
- eller använd en R-2R stege som en " fattig man ' s DAC "
- @AndreHolzner Jag räknar en R-2R-stege på samma sätt som ett DAC-chip men med för många ledningar för att göra det praktiskt på din genomsnittliga Arduino.
- @Majenko Jag ville bara tillägga att det finns " digitala potentiometrar " eller " digipots " det är ganska mycket R-2R-stegar inuti ett DIP-8-chip. De är billigare än DAC. (Till exempel X9C103)
- @FilipFranik Förutom att de ' inte är R-2R-stegar. De ' är bara en kedja av motstånd med en FET ansluten till varje anslutning mellan motstånd. Det finns bara R. Många R är likadana. Ja, om du skriver upp det med de två ändarna av potentiometern till VCC och GND får du typ av DAC, men det lider av samma typ av impedansproblem som en riktig potentiometer gör. Det ger ett par motstånd, medan en DAC ger en spänning.
Svar
Vid 5V, en 1 ohm-motstånd kommer att försöka sjunka 1A och överstiga 40mA-specifikationerna långt. Använd minst ett 5 / 0,040 = 125 ohm motstånd för att skydda din stift. Och om du sätter en kondensator mellan ditt motstånd och jord, kommer kondensatorns RC-krets att jämna ut PWM till en analog spänning.
Försök med det föreslagna @russell-svaret med ett 47K motstånd och 1uF kondensator, du får en analog spänning vid korsningen att använda med din elektroniska belastning.
Svar
Såvitt jag vet har Arduinos ADC (analoga till digitala omvandlare) men har inga DAC (digitala till analoga omvandlare). Så du kan inte mata ut en inställd spänning från några stift baserat på ett digitalt värde.
Kommentarer
- ARM-baserade Arduinos har vanligtvis minst en DAC kanal.
Svar
NEJ .. Det finns inget sätt att få en analog spänning från Arduino. Det bästa du kan göra är att använda Arduino som en Buck Voltage-omvandlare i linjärt eller boost-läge med en spänningsregulator, induktor och mosfet-transistorn. Du kan också behöva använda en Mega eller Dulorme som ger en PWM-frekvens annan än standard 50o Hz.
Lycka till
Svar
Det finns inget direkt sätt.
Förutom @Majenko
Alternativt sätt: du kan använda H bridge som L293d för att ge kontinuerlig nivå.Många DIY-växelriktarkretsar använder denna teknik.
http://www.instructables.com/id/How-to-Make-an-Inverter-Using-ARDUINO/?ALLSTEPS