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:
- Vaihda Arduino Due -palveluun, jossa on sisäänrakennettu DAC joka tuottaa todellisen jännitteen.
- Lisää ulkoinen DAC-siru (kuten MCP4821 / 2) jännitteen luomiseksi sinulle
- 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