Mengenai program saya, ini adalah program yang melakukan beberapa perhitungan dan kemudian mengeluarkan tegangan berdasarkan hasil menggunakan fungsi analogWrite. Namun masalah saya adalah bahwa saya telah melakukan pemrograman berdasarkan kesalahpahaman bahwa fungsi analogWrite melalui PWM memang menghasilkan tegangan analog, di mana sebenarnya itu hanya "mensimulasikan" tegangan analog sebagai gantinya.
Berikut adalah bagian yang relevan dari kode saya:
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");
}
Sedangkan untuk sirkuit, pin keluaran 11 dihubungkan ke resistor 1 ohm dan kemudian ke GND. (Di mana saya mengukur tegangan) Saya menggunakan papan Arduino Uno.
PEMBARUAN :
Seperti yang dikatakan dalam komentar oleh @DATHa, PWM tidak menghasilkan tegangan. Apakah ada cara untuk menghasilkan tegangan seperti yang dikatakan, tanpa mengganti papan?
Jawaban:
Anda pada dasarnya memiliki tiga opsi:
Dari ketiga opsi tersebut saya biasanya menggunakan MCP4822 karena memberikan hasil terbaik dan tidak memerlukan biaya sebanyak menggunakan Due.
sumber
Pada 5V, resistor 1 ohm akan mencoba untuk tenggelam 1A dan jauh melebihi spesifikasi 40mA. Silakan gunakan setidaknya 5 / 0,040 = 125 ohm resistor untuk melindungi pin Anda. Dan jika Anda meletakkan kapasitor di antara resistor dan arde, rangkaian RC kapasitor akan memuluskan PWM menjadi tegangan analog.
Silakan coba jawaban @russell yang disarankan dengan resistor 47K dan kapasitor 1uF, Anda akan mendapatkan tegangan analog di persimpangan untuk digunakan dengan beban elektronik Anda.
sumber
Sejauh yang saya tahu Arduinos memiliki ADC (Pengonversi Analog ke Digital) tetapi tidak memiliki DAC (Pengonversi Digital ke Analog). Jadi Anda tidak bisa mengeluarkan voltase yang disetel dari pin apa pun berdasarkan nilai digital.
sumber
TIDAK .. Tidak ada cara untuk mendapatkan tegangan analog dari Arduino. Yang terbaik yang dapat Anda lakukan adalah menggunakan Arduino sebagai konverter Buck Voltage dalam mode linear atau boost menggunakan regulator tegangan, induktor dan transistor MOSFET. Anda juga mungkin perlu menggunakan Mega atau Dulorme yang menyediakan frekuensi PWM selain 50o Hz standar.
Keberuntungan terbaik
sumber
Tidak ada jalan langsung.
Selain @Majenko
Cara alternatif: Anda dapat menggunakan jembatan H seperti L293d untuk memberikan tingkat kontinu. Banyak sirkuit inverter diy menggunakan teknik ini.
http://www.instructables.com/id/How-to-Make-an-Inverter-Using-ARDUINO/?ALLSTEPS
sumber