Todellisen analogisen jännitteen tuottaminen lähtönipillä

Ohjelmani osalta se on ohjelma, joka suorittaa joitain laskelmia ja antaa sitten jännitteen tuloksen perusteella käyttäen analogWrite-toiminto. Ongelmani on kuitenkin se, että olin ohjelmoinut väärän käsityksen perusteella, että analogWrite-toiminto PWM: n kautta tuottaa analogisen jännitteen, missä se itse asiassa vain ”simuloi” analogista jännitettä.

Tässä ovat asiaankuuluvat osat koodini:

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

Mitä tulee piiriin, lähtönasta 11 on kytketty 1 ohmin vastukseen ja sitten GND: hen. (Missä mitasin jännitteen) Käytän Arduino Uno -korttia.

UPDATE :

Kuten @DatHa kommentoi, pwm ei lähetä jännitettä. Onko olemassa tapaa antaa jännite kuten sanottu, vaihtamatta korttia?

Kommentit

  • PS Analoginen kirjoitus käyttää PWM: ää eikä se tuota analogista jännitettä.
  • Tarkoittaako @DatHa sitä, että sitä ei voida tehdä tällä tavalla? Onko analogisella jännitteellä jotain muuta toimintoa?
  • Katso @Russellin vastaus arduino.stackexchange.com/questions/10041/…
  • @dpw en ' usko, että se toimii, koska ohjelmani on muodostettava yhteys sähköiseen kuormitukseen ulkoisen ohjelmoinnin kautta porttia ja ohjaa sitä 0-5 V: lla.
  • PWM tuottaa tietyn jännitteen tai I ' ma-merirosvon Herramme vuonna 1734. Voit ' t ylittävät 8-bittisen arvon, ja siellä ' on aina jonkin verran epätarkkuutta sen lukemisessa.

vastaus

Sinulla on periaatteessa kolme vaihtoehtoa:

  1. Vaihda Arduino Due -palveluun, jossa on sisäänrakennettu DAC joka tuottaa todellisen jännitteen.
  2. Lisää ulkoinen DAC-siru (kuten MCP4821 / 2) jännitteen luomiseksi sinulle
  3. Käytä alipäästösuodatinta (RC-verkko) PWM-tappi.

Kolmesta vaihtoehdosta käytän yleensä MCP4: tä 822, koska se antaa parhaat tulokset ja ei maksa yhtä paljon kuin Due-kortin käyttö.

kommentit

  • kiitos. Vaihtoehto 2 kuulostaa todella hyvältä, mutta aikarajoitteiden vuoksi jatkoin vaihtoehdon 3 käyttöä ja sain haluamasi tulokset.
  • tai käytä R-2R tikkaat " köyhänä miehenä ' s DAC "
  • @AndreHolzner Lasken R-2R-tikkaat, jotka ovat samanlaisia kuin DAC-sirut, mutta joissa on liian monta johtoa, jotta se olisi käytännöllinen keskimääräiselle Arduinollesi.
  • @Majenko Halusin vain lisätä, että niitä on olemassa " digitaaliset potentiometrit " tai " digipotit " jotka ovat melko paljon R-2R-tikkaita DIP-8-sirun sisällä. Ne ovat halvempia kuin DAC: t. (Esimerkiksi X9C103)
  • @FilipFranik Paitsi että ne ' eivät ole R-2R-tikkaita. Ne ' ovat vain vastusketju, jossa FET on kytketty jokaiseen vastusten väliseen liitäntään. On vain R.Monet R: t ovat samat. Kyllä, jos kirjoitat sen potentiometrin molemmilla päillä VCC: lle ja GND: lle, saat jonkinlaisen DAC: n, mutta se kärsii samanlaisista impedanssiongelmista kuin todellinen potentiometri. Se tarjoaa parin vastuksia, kun taas DAC tarjoaa jännitteen.

Vastaa

5 V: n jännitteellä a 1 ohmin vastus yrittää upottaa 1A: n ja ylittää huomattavasti 40 mA: n tiedot. Käytä nastan suojaamiseen vähintään 5 / 0,040 = 125 ohmin vastusta. Ja jos laitat kondensaattorin vastuksen ja maan väliin, kondensaattorin RC-piiri tasoittaa PWM: n analogiseksi jännitteeksi.

Kokeile ehdotettua @russell vastausta 47K: n vastuksella ja 1uF-kondensaattorilla. Saat risteyksessä analogisen jännitteen käytettäväksi sähköinen kuormasi.

Vastaa

Sikäli kuin tiedän, Arduinoilla on ADC (analogisista digitaalimuuntimiin), mutta heillä ei ole yhtään DAC (digitaalinen-analoginen muunnin). Joten et voi lähettää asetettua jännitettä mistä tahansa nastasta digitaalisen arvon perusteella.

Kommentit

  • ARM-pohjaisissa Arduinosissa on yleensä vähintään yksi DAC kanava.

Vastaa

EI .. Arduinolta ei ole mahdollista saada analogista jännitettä. Parasta, mitä voit tehdä, on käyttää Arduinoa Buck Voltage -muuntimena lineaarisessa tai boost-tilassa jännitesäätimellä, induktorilla ja mosfet-transistorilla. Saatat joutua käyttämään myös Megaa tai Dulormea, jotka tarjoavat PWM-taajuuden, joka on muu kuin tavallinen 50o Hz.

Onnea

Vastaa

Suoraa tietä ei ole.

@Majenkon lisäksi

Vaihtoehtoinen tapa: Jatkuvan tason aikaansaamiseksi voit käyttää H-siltaa, kuten L293d.Monet DIY-invertteripiirit käyttävät tätä tekniikkaa.

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

Vastaa

Mietin, antaako tämä vakaamman tuotoksen.

Mäntyankero esitettiin RC: lle. Korkki latautuu, näyte tehdään toisesta analogisesta tulosta. Kun mäntyankatappi menee matalalle, korkin tyhjennys on hidasta. Ehkä tarvitaan isoa vastusta samanaikaisesti korkin kanssa hitaaseen purkautumiseen?

Kommentit

  • Sinun on lisättävä R on yhdensuuntainen C1: n kanssa C1: n purkamiseksi.

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *