În ceea ce privește programul meu, este un program care face câteva calcule și apoi emite o tensiune pe baza rezultatului funcția analogWrite. Cu toate acestea, problema mea este că am făcut programarea pe baza unei concepții greșite că funcția analogWrite prin PWM produce o tensiune analogică, unde de fapt „simulează” doar tensiunea analogică.
Iată părțile relevante din codul meu:
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 ceea ce privește circuitele, pinul de ieșire 11 este conectat la un rezistor de 1 ohm și apoi la GND. (Unde am măsurat tensiunea) folosesc placa Arduino Uno.
UPDATE :
După cum sa spus în comentariile de @DatHa, pwm nu produce tensiune. Există o modalitate de a ieși tensiunea așa cum sa spus, fără a schimba placa?
Comentarii
- PS Scrierea analogică utilizează PWM și NU produce o tensiune analogică.
- @DatHa înseamnă că nu se poate face în acest fel? Există o altă funcție de ieșire a tensiunii analogice?
- Consultați răspunsul @Russell pe arduino.stackexchange.com/questions/10041/…
- @dpw Nu ' cred că funcționează deoarece programul meu trebuie să se conecteze la o încărcare electronică prin programarea sa externă portați și controlați-l folosind 0-5V.
- PWM produce o tensiune specifică, sau eu ' ma pirat în anul Domnului nostru 1734. Puteți ' nu depășește o valoare de 8 biți și există ' întotdeauna o anumită inexactitate în citirea acestuia.
Răspuns
Practic aveți trei opțiuni:
- Treceți la un Arduino Due care are un DAC încorporat care generează o tensiune reală.
- Adăugați un cip DAC extern (cum ar fi MCP4821 / 2) pentru a crea tensiunea pentru dvs.
- Utilizați un filtru low-pass (rețea RC) pe un pin PWM.
Dintre cele trei opțiuni folosesc de obicei un MCP4 822, deoarece oferă cele mai bune rezultate și nu costă la fel de mult ca utilizarea unui Due.
Comentarii
- Vă mulțumim. Opțiunea 2 sună foarte bine, dar din cauza constrângerilor de timp, am continuat cu opțiunea 3 și am obținut rezultatele dorite.
- sau folosesc un R-2R scară ca " om sărac ' s DAC "
- @AndreHolzner Număr o scară R-2R la fel ca un cip DAC, dar cu prea multe fire pentru a o face practică pe media Arduino.
- @Majenko Am vrut doar să adaug că există " potențiometre digitale " sau " digipots " care sunt destul de mult scări R-2R în interiorul unui cip DIP-8. Sunt mai ieftine decât DAC-urile. (De exemplu X9C103)
- @FilipFranik Cu excepția faptului că ' nu sunt scări R-2R. Ei ' sunt doar un lanț de rezistențe cu un FET conectat la fiecare conexiune între rezistențe. Există doar R. Multe R-uri la fel. Da, dacă îl scrieți cu cele două capete ale potențiometrului la VCC și GND veți obține un fel de DAC, dar suferă același tip de probleme de impedanță pe care le are un potențiometru real. Oferă o pereche de rezistențe, în timp ce un DAC oferă o tensiune.
Răspuns
La 5V, un 1 ohm rezistor va încerca să scufunde 1A și să depășească cu mult specificațiile de 40mA. Vă rugăm să utilizați cel puțin un rezistor 5 / 0,040 = 125 ohm pentru a vă proteja pinul. Și dacă puneți un condensator între rezistor și masă, circuitul RC al condensatorului va netezi PWM într-o tensiune analogică.
Vă rugăm să încercați @russell răspuns sugerat cu un rezistor de 47K și un condensator 1uF, veți obține o tensiune analogică la joncțiune pe care să o utilizați încărcarea electronică a dvs. DAC (convertoare digital-analog). Deci, nu puteți emite o tensiune setată de la niciun pin pe baza unei valori digitale.
Comentarii
- Arduino-urile bazate pe ARM au de obicei cel puțin un DAC canal.
Răspuns
NU .. Nu există nicio modalitate de a obține o tensiune analogică de la Arduino. Cel mai bun lucru pe care îl puteți face este să utilizați Arduino ca convertor de tensiune Buck în modul liniar sau boost folosind un regulator de tensiune, inductor și tranzistorul mosfet. De asemenea, va trebui să utilizați un Mega sau Dulorme care oferă o frecvență PWM diferită de cea standard de 50o Hz.
Cel mai bun noroc
Răspuns
Nu există cale directă.
În plus față de @Majenko
Mod alternativ: puteți utiliza bridge H ca L293d pentru a oferi un nivel continuu.Multe circuite inverter DIY folosesc această tehnică.
http://www.instructables.com/id/How-to-Make-an-Inverter-Using-ARDUINO/?ALLSTEPS