Hur man matar ut en riktig analog spänning vid utgångsstift

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:

  1. Byt till en Arduino Due som har en inbyggd DAC som matar ut en verklig spänning.
  2. Lägg till ett externt DAC-chip (t.ex. MCP4821 / 2) för att skapa spänningen åt dig
  3. 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

Svar

Jag undrade om detta skulle ge en mer stabil utdata.

PWN presenterades för RC. Cap laddar, provet görs med en annan analog ingång. När PWN-stiftet blir lågt, tappar locket långsamt. Kanske behövs ett stort motstånd parallellt med locket för långsam urladdning?

Kommentarer

  • Du måste lägga till en R parallellt med C1 för urladdning av C1.

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *