Çıkış piminde gerçek bir analog voltaj nasıl verilir


12

Programımla ilgili olarak, bazı hesaplamalar yapan ve daha sonra analogWrite işlevini kullanarak sonuca göre bir voltaj veren bir programdır. Ancak benim sorunum programlama benim PWM üzerinden analogWrite işlevi analog voltaj çıktı aslında aslında bunun yerine analog voltaj "taklit" yanlış bir anlayışa dayalı yapmıştı.

İşte kodumun ilgili bölümleri:

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

}

Devreye gelince, çıkış pimi 11 1 ohm'luk bir dirence ve daha sonra GND'ye bağlanmaktadır. (Gerilimi ölçtüğüm yerde) Arduino Uno kartını kullanıyorum.

GÜNCELLEME :

@DatHa tarafından yapılan yorumlarda belirtildiği gibi, pwm voltaj çıkışı yapmaz. Dediğimiz gibi, kartı değiştirmeden voltaj çıkışı için bir yol var mı?


PS Analog yazma PWM kullanır ve analog voltaj üretmez.
Dat Ha

@DatHa bu şekilde yapılamayacağı anlamına mı geliyor? Analog voltaj çıkışı için başka bir işlev var mı?
bytk


@dpw Programımın harici programlama portu üzerinden bir elektronik yüke bağlanması ve 0-5V kullanarak kontrol etmesi gerektiği gibi çalıştığını düşünmüyorum.
bytk

PWM belirli bir voltaj çıkarır, ya da Lord 1734'ümüzde bir korsanım. 8 bitlik bir değerin üzerine çıkamazsınız ve onu okurken her zaman bazı yanlışlıklar vardır.
user400344

Yanıtlar:


11

Temel olarak üç seçeneğiniz vardır:

  1. Gerçek bir voltaj veren dahili bir DAC'ye sahip bir Arduino Due'a geçin.
  2. Sizin için voltaj oluşturmak üzere harici bir DAC yongası (MCP4821 / 2 gibi) ekleyin
  3. PWM piminde alçak geçiren bir filtre (RC ağı) kullanın.

Üç seçenekten bir MCP4822 kullanıyorum çünkü en iyi sonuçları veriyor ve bir Due kullanmanın maliyeti kadar değil.


Teşekkür ederim. Seçenek 2 gerçekten iyi görünüyor, ancak zaman kısıtlamaları nedeniyle Seçenek 3 ile devam ettim ve istediğim sonuçları aldım.
bytk

1
ya da bir R-2R merdivenini "fakir bir adamın DAC'si" olarak kullanın
Andre Holzner

1
@AndreHolzner R-2R merdivenini DAC yongasıyla aynı sayıyorum, ancak ortalama Arduino'nuzda pratik hale getirmek için çok fazla kablo var.
Majenko

@Majenko Ben sadece bir DIP-8 çip içinde hemen hemen R-2R merdivenler "dijital potansiyometre" veya "digipots" olduğunu eklemek istedim. DAC'lardan daha ucuzdurlar. (Örneğin X9C103)
Filip Franik

1
@FilipFranik R-2R merdivenleri hariç. Bunlar sadece dirençler arasındaki her bağlantıya bir FET bağlı bir direnç zinciri. Sadece R vardır. Evet, potansiyometrenin iki ucuyla VCC ve GND'ye yazarsanız, bir tür DAC alırsınız, ancak gerçek bir potansiyometrenin yaptığı aynı empedans problemlerine maruz kalır. Bir çift direnç sağlarken, bir DAC bir voltaj sağlar.
Majenko

7

5V'de, 1 ohm'luk bir direnç 1A'yı batırmaya çalışacak ve 40mA spesifikasyonlarını aşacaktır. Piminizi korumak için lütfen en az 5 / 0.040 = 125 ohm direnç kullanın. Ve eğer kapasitörünüzü direnç ile toprak arasına koyarsanız, kapasitörün RC devresi PWM'yi analog bir voltaja yumuşatır.

Lütfen 47K direnç ve 1 uF kapasitör ile önerilen @russell cevabını deneyin, elektronik yükünüzle kullanmak için kavşakta analog voltaj elde edersiniz.


2

Bildiğim kadarıyla Arduinos'un ADC (Analog - Dijital Dönüştürücüler) var, ancak herhangi bir DAC (Dijital - Analog Dönüştürücüler) yok. Böylece dijital bir değere dayalı olarak herhangi bir pinten ayarlanan voltajı veremezsiniz.


2
ARM tabanlı Arduino'lar genellikle en az bir DAC kanalına sahiptir.
KIIV

0

HAYIR .. Arduino'dan analog voltaj almanın bir yolu yoktur. Yapabileceğiniz en iyi şey, bir voltaj regülatörü, indüktör ve mosfet transistörü kullanarak doğrusal veya güçlendirme modunda Buck Voltaj dönüştürücü olarak Arduino'yu kullanmaktır. Ayrıca standart 50o Hz'den başka bir PWM frekansı sağlayan bir Mega veya Dulorme kullanmanız gerekebilir.

İyi şanslar


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.