Når det gjelder programmet mitt, er det et program som gjør noen beregninger og deretter sender ut en spenning basert på resultatet ved hjelp av analogWrite-funksjon. Problemet mitt er imidlertid at jeg hadde gjort programmeringen min basert på en misforståelse om at analogWrite-funksjon via PWM sender ut en analog spenning, der den faktisk bare «simulerer» den analoge spenningen.
Her er de relevante delene av koden min:
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 gjelder kretsene, kobles utgangsbolten 11 til en 1 ohm motstand og deretter til GND. (Der jeg målte spenningen) bruker jeg Arduino Uno-kort.
UPDATE :
Som sagt i kommentarene fra @DatHa, utgir ikke pwm spenning. Er det en måte å utgangsspenning som sagt uten å endre kortet?
Kommentarer
- PS Analog skriving bruker PWM, og det produserer IKKE en analog spenning.
- @DatHa betyr det at det ikke kan gjøres på denne måten? Er det en annen funksjon for å sende ut analog spenning?
- Se @Russell svar på arduino.stackexchange.com/questions/10041/…
- @dpw Jeg tror ikke ' som fungerer fordi programmet mitt må koble til en elektronisk belastning via den eksterne programmeringen port og kontroller den ved hjelp av 0-5V.
- PWM sender ut en spesifikk spenning, eller jeg ' er pirat i vår Herres år 1734. Du kan ' t går over en 8-biters verdi, og ' er alltid litt unøyaktig i å lese den.
Svar
Du har i utgangspunktet tre alternativer:
- Bytt til en Arduino Due som har en innebygd DAC som sender ut en ekte spenning.
- Legg til en ekstern DAC-brikke (for eksempel MCP4821 / 2) for å lage spenningen for deg
- Bruk et lavpassfilter (RC-nettverk) på en PWM-stift.
Av de tre alternativene bruker jeg vanligvis en MCP4 822 siden det gir de beste resultatene og ikke koster så mye som å bruke en Due.
Kommentarer
- Takk. Alternativ 2 høres veldig bra ut, men på grunn av tidsbegrensninger gikk jeg videre med alternativ 3 og fikk de resultatene jeg ønsket.
- eller bruk en R-2R stige som " stakkars mann ' s DAC "
- @AndreHolzner Jeg teller en R-2R-stige det samme som en DAC-brikke, men med for mange ledninger for å gjøre det praktisk på din gjennomsnittlige Arduino.
- @Majenko Jeg ville bare legge til at det eksisterer " digitale potensiometere " eller " digipoter " det er ganske mye R-2R-stiger inne i en DIP-8-brikke. De er billigere enn DAC. (For eksempel X9C103)
- @FilipFranik Med unntak av at de ' ikke er R-2R-stiger. De ' er bare en kjede av motstander med en FET koblet til hver forbindelse mellom motstandene. Det er bare R. Mange R er like. Ja, hvis du skriver det opp med de to endene av potensiometeret til VCC og GND, får du en slags DAC, men det lider av samme type impedansproblemer som et ekte potensiometer gjør. Det gir et par motstander, mens en DAC gir en spenning.
Svar
Ved 5V, en 1 ohm motstand vil prøve å synke 1A og overstige 40mA spesifikasjonene. Bruk minst en 5 / 0,040 = 125 ohm motstand for å beskytte pin. Og hvis du setter kondensatoren mellom motstanden og jorda, vil kondensatorens RC-krets glatte ut PWM til en analog spenning.
Prøv det foreslåtte @russell svar med en 47K motstand og 1uF kondensator, du får en analog spenning i krysset du kan bruke med din elektroniske belastning.
Svar
Så vidt jeg vet har Arduinos ADC (analoge til digitale omformere), men har ikke noe DAC (digital til analoge omformere). Så du kan ikke sende en angitt spenning fra noen pinner basert på en digital verdi.
Kommentarer
- De ARM-baserte Arduinoene har vanligvis minst en DAC kanal.
Svar
NEI .. Det er ingen måte å få en analog spenning fra Arduino. Det beste du kan gjøre er å bruke Arduino som en Buck Voltage-omformer i lineær eller boost-modus ved hjelp av en spenningsregulator, induktor og mosfet-transistoren. Du må kanskje også bruke en Mega eller Dulorme som gir en annen PWM-frekvens enn standard 50o Hz.
Lykke til
Svar
Det er ingen direkte vei.
I tillegg til @Majenko
Alternativ måte: du kan bruke H bridge som L293d for å gi kontinuerlig nivå.Mange DIY inverter kretser bruker denne teknikken.
http://www.instructables.com/id/How-to-Make-an-Inverter-Using-ARDUINO/?ALLSTEPS