Hoe een echt analoog voltage op outputpin

wordt uitgevoerd. Wat betreft mijn programma, het is een programma dat wat berekeningen uitvoert en vervolgens een voltage uitvoert op basis van het resultaat met analogWrite-functie. Mijn probleem is echter dat ik mijn programmering had gedaan op basis van een misvatting dat de analogWrite-functie via PWM een analoge spanning uitvoert, terwijl het in feite alleen de analoge spanning “simuleert”.

Hier zijn de relevante onderdelen van mijn code:

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"); } 

Wat betreft de schakelingen, output pin 11 wordt verbonden met een 1 ohm weerstand en vervolgens met GND. (Waar ik de spanning heb gemeten) Ik gebruik een Arduino Uno-bord.

UPDATE :

Zoals gezegd in de commentaren van @DatHa, geeft pwm geen spanning af. Is er een manier om spanning uit te voeren zoals gezegd, zonder het bord te veranderen?

Reacties

  • PS Analoog schrijven maakt gebruik van PWM en produceert GEEN analoge spanning.
  • @DatHa betekent dit dat het niet op deze manier kan? Is er een andere functie om analoge spanning uit te voeren?
  • Zie @Russell antwoord op arduino.stackexchange.com/questions/10041/…
  • @dpw Ik denk niet dat ' dat werkt, aangezien mijn programma verbinding moet maken met een elektronische belasting via zijn externe programmering poort en controleer het met behulp van 0-5V.
  • PWM voert een specifiek voltage uit, of ik ' een piraat in het jaar van onze Heer 1734. Je kunt ' ga niet boven een 8-bits waarde, en er is ' altijd enige onnauwkeurigheid bij het lezen ervan.

Answer

Je hebt in principe drie opties:

  1. Schakel over naar een Arduino Due met een ingebouwde DAC die een echte spanning afgeeft.
  2. Voeg een externe DAC-chip toe (zoals de MCP4821 / 2) om de spanning voor u te creëren
  3. Gebruik een laagdoorlaatfilter (RC-netwerk) op een PWM-pin.

Van de drie opties gebruik ik meestal een MCP4 822 omdat het de beste resultaten geeft en niet zo veel kost als het gebruik van een Due.

Reacties

  • Bedankt. Optie 2 klinkt erg goed, maar vanwege tijdgebrek ging ik door met optie 3 en kreeg ik de resultaten die ik wilde.
  • of gebruik een R-2R ladder als een " arme man ' s DAC "
  • @AndreHolzner Ik tel een R-2R-ladder hetzelfde als een DAC-chip, maar met te veel draden om het praktisch te maken op je gemiddelde Arduino.
  • @Majenko Ik wilde gewoon toevoegen dat er " digitale potentiometers " of " digipots " dat zijn vrijwel R-2R-ladders in een DIP-8-chip. Ze zijn goedkoper dan DACs. (Bijvoorbeeld X9C103)
  • @FilipFranik Behalve dat ze ' geen R-2R ladders zijn. Ze ' zijn slechts een reeks weerstanden met een FET die is aangesloten op elke verbinding tussen weerstanden. Er is alleen R. Veel Rs allemaal hetzelfde. Ja, als je het met de twee uiteinden van de potentiometer opschrijft naar VCC en GND, krijg je een soort DAC, maar het heeft dezelfde soort impedantieproblemen als een echte potentiometer. Het levert een paar weerstanden, terwijl een DAC een spanning levert.

Answer

Bij 5V, een 1 ohm-weerstand zal proberen 1A te zinken en de specificaties van 40mA ver overtreffen. Gebruik een weerstand van minimaal 5 / 0,040 = 125 ohm om uw pin te beschermen. En als je de a-condensator tussen je weerstand en aarde plaatst, zal het RC-circuit van de condensator de PWM afvlakken tot een analoge spanning.

Probeer het voorgestelde @russell antwoord met een 47K weerstand en 1uF condensator, je krijgt een analoge spanning op de kruising om te gebruiken met uw elektronische belasting.

Answer

Voor zover ik weet hebben Arduinos ADC (analoog naar digitaal converters) maar geen DAC (digitaal naar analoog converters). Je kunt dus geen ingestelde spanning van pinnen uitvoeren op basis van een digitale waarde.

Opmerkingen

  • De ARM-gebaseerde Arduinos hebben meestal ten minste één DAC kanaal.

Answer

NEE .. Er is geen manier om een analoge spanning van de Arduino te krijgen. Het beste wat je kunt doen, is Arduino gebruiken als een Buck Voltage-omzetter in lineaire of boostmodus met behulp van een spanningsregelaar, inductor en de mosfet-transistor. Mogelijk moet u ook een Mega of Dulorme gebruiken die een andere PWM-frequentie levert dan de standaard 50o Hz.

Veel succes

Antwoord

Er is geen directe manier.

Naast @Majenko

Alternatieve manier: je kunt een H-brug zoals L293d gebruiken om continu niveau te bieden.Veel zelfgemaakte invertercircuits gebruiken deze techniek.

http://www.instructables.com/id/How-to-Make-an-Inverter-Using-ARDUINO/?ALLSTEPS

Antwoord

Ik vroeg me af of dit een stabielere output zou geven.

PWN gepresenteerd aan RC. Cap-ladingen, sample wordt gemaakt door een andere analoge ingang. Wanneer de PWN-pin laag wordt, wordt de dop langzaam ontladen. Misschien is een grote weerstand parallel met de dop nodig voor langzame ontlading?

Opmerkingen

  • Je moet toevoegen een R parallel met C1 om C1 te ontladen.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *