MCP4922 DAC Kullanımı

Onu da tersinden yapacaksın. Çıkışı tam olarak 1 V ayarlayacaksın ve sonra da picoda ne okuduğuna bakacaksın.
0.114 okuyorum abi.
O zaman sanırım 3.2 yerine 0.114 ile çarpacağım ama 1023'e bölmeyeceğim galiba?
 
ADC'den 0.114 okunmaz, dijital bir veri okunur. Diyelim çıkışı tam 1 V yaptın ve ADC den 257 okuyorsun. Bunu bir kenara yazacaksın. Sonra da ADC'den okuduğun her veriyi 257 ye böleceksin. Bu sana çıkışta kaç volt olduğunu verir.
 
ADC'den 0.114 okunmaz, dijital bir veri okunur. Diyelim çıkışı tam 1 V yaptın ve ADC den 257 okuyorsun. Bunu bir kenara yazacaksın. Sonra da ADC'den okuduğun her veriyi 257 ye böleceksin. Bu sana çıkışta kaç volt olduğunu verir.
Hatlar karıştı ya. Ben piconun analog girişini okudum.
 
Çok kilit bir soru soracağım.

DAC'ı 20V'a ayarladım. Çıkışında 2684 rakamını okudum. Bu rakamı kod ile DAC den okuyabiliyor muyum? Yani çıkış pinini herhangi bir şekilde ölçmeden vs. SD karttan veri okur gibi çıkışını okuyabiliyor muyum?

Eğer bunu yapabiliyorsam 2 tane Analog pin boşa çıkarabilirim demektir.

Konuya dönecek olursak;
Abi ben DAC tan 1v için 136 değer okuyorum, test için 20v'a ayarlıyorum ve 20v için 2684 rakamı çıkıyor.
2684/136 deyince 19.7V yapıyor. Tam 20v'a 134 rakamı ile ulaşıyorum.

Anlamadığım konu Piconun analog girişinden çıkış voltajını okuyorum ben. DAC çıkışını okumuyorum. O yüzden hesaplama karışıyor.
En yakın çıkışı şöyle buluyorum ama 2-3V fark ediyor.

Kod:
Vdata = Vdata / 350;
vOUT = (Vdata * 3.39) / 134;
 
Son düzenleme:
Senin kafa baya karışmış Gökhan :) ADC nin girişi analog çıkışı dijitaldir. Yani zaten görevi gereği dijital bir rakam okursun bundan. DAC da bunun tersi olduğuna göre DAC'tan dijital veri okunmaz. Yani yazdığını geri okursun, bu da anlamsız olur, zaten sen yazdın onu.
 
Senin kafa baya karışmış Gökhan :) ADC nin girişi analog çıkışı dijitaldir. Yani zaten görevi gereği dijital bir rakam okursun bundan. DAC da bunun tersi olduğuna göre DAC'tan dijital veri okunmaz. Yani yazdığını geri okursun, bu da anlamsız olur, zaten sen yazdın onu.
DAC yazacağıma ADC yazmışım.

Şimdi her şeyi kenara bırakıyorum.
Zaten multimetre ile ana çıkışı okuduğumda doğru değerleri aldığımı görebiliyorum. Bu kısmı geçtim.

Şimdiki işim ana çıkıştan aldığım değeri piconun analog girişinden okuyup voltaj değerini ekrana yazmak.

Çıkışta 1v varken piconun analog pininden 0.113v okuyorum. Gün içinde bu değeri ne kadar çok çarpıp böldüysem o kadar kafam karıştı. Yakın sonuçlar aldım ama bir türlü doğru veriyi alamadım.
 
Aslında voltaj ve akım ölçümünü doğrudan ADC ile yaptığın için DAC tarafını otomatik olarak da kalibre edebilirsin. Hatta güç kaynağı çalışırken belli peryotlarda (mesela 10 saniyede bir) kalibrasyonu tekrarlayabilirsin. Tabi bunun için ölçüm tarafını dikkatlice yapman lazım. Gerilim bölücüyü düşük toleranslı dirençlerle yapman lazım.
 
Aslında voltaj ve akım ölçümünü doğrudan ADC ile yaptığın için DAC tarafını otomatik olarak da kalibre edebilirsin. Hatta güç kaynağı çalışırken belli peryotlarda (mesela 10 saniyede bir) kalibrasyonu tekrarlayabilirsin. Tabi bunun için ölçüm tarafını dikkatlice yapman lazım. Gerilim bölücüyü düşük toleranslı dirençlerle yapman lazım.
Gerilim bölücü dirençler 1% toleranslı, 10K ve 1.21K abi.
Ama benim beyinin toleransı yüksek. 70% gibi :katil2:
Neden yapamadığımı bilmiyorum. Gerçekten akıl tutulması gibi. Analog pine gelen veriyi işleyip de bir sonuca varamıyorum. Daha önce yaptığım, aslında basit olan bir şey. Biraz sessiz bir ortamda kalıp sakin düşünmem lazım.
 
@taydin abi şu 82r direncin yanmasıyla ilgili fikrim geldi. Bu bizim 32vac madem triyaktan geçince direnci yakmıyor, o zaman biz de küçük bir triyak koyalım ve sürekli on olacak şekilde ayarlayalım. Olmaz mı?
 
Son düzenleme:
Orada başka birşey var Gökhan. 32 ulaştıysa 82R dirence o direnç gider, triyaktan geçsin başka şeyden geçsin farketmez.
 
Bir deneme daha yapıyorum.

1- Ana Çıkışa 1v verdim. Multimetrede 1.004v okuyorum.
2- 1V'a karşı Piconun ADC sinde üretilen bit sayısı 0.027
3- 10V'a karşı Piconun ADC sinde üretilen bit sayısı 0.27
4- 20V'a karşı Piconun ADC sinde üretilen bit sayısı 0.54
5- 30V'a karşı Piconun ADC sinde üretilen bit sayısı 0.81

Şimdi benim bu bit'i öyle bir sayıyla çarpmam lazım ki bana her daim doğru sonucu versin.
O zaman işlemi tersten yapar sayıyı bulurum.

1V için, 1.000 / 0.027= 37.037
10V için, 10.000 / 0.27 = 37.037
20V için, 20.000 / 0.54 = 37.037
30V için 30.000 / 0.81 = 37.037

Demek ki benim ADC den okuduğum bit sayısını 37.037 ile çarparsam bana her daim doğru sonucu vermeli değil mi?
Hesap makinesinde çarpınca evet istediğimi tam olarak alıyorum ama koda uyguladığımda 30v için ekranda 29.88 yazıyor, 20v için 19.92 yazıyor. Buna hiç bir mantık uyduramıyorum.

Vdata: ADC den okunan voltaj değerini tutan değişken.
4096: Pico ADC si 12 Bit olduğu için kullanılan değer.
3.241: Ana çıkış 30V olduğunda ADC pinine düşen voltaj değeri.
vOUT: ADC den okunan voltaj değerinin bit olarak arşılığının hesaplanıp atıldığı diğişken.

Kod:
int voltageSensor = A1;
float vOUT = 0.0;
static float vIN = 0.0;
float Vdata = 0.0;

for (int i = 0; i < 350; i++) // daha kararlı ortalama bir sonuç almak için 350 kez okuma yapma
  {
    Vdata = Vdata + analogRead(voltageSensor);
    delay(1);
  }

 Vdata = Vdata / 350;
  vOUT = (Vdata / 4096.0) * 3.241;
  vIN = vOUT * 37.037;
 
Son düzenleme:
analogRead yapınca sana 0.27 mi dönüyor? ADC nin dijital verisi dönmüyor mu?
 
analogRead yapınca sana 0.27 mi dönüyor? ADC nin dijital verisi dönmüyor mu?
Yok abi. 0.27 vOUT'un içindeki.
Ben yine kurcalayınca karıştırmışım.

analogRead dan okuduğum değer 30V için 1017 - 1020 arası değişen bir değer.
 
Şimdi benim anlamadığım bu Pico 12 Bit değil mi? neden 1020 sayıyor?

Mecbur bu veriye göre yeniden hesap yaptım ve 30V için 29.99V a kadar ulaştım.
Yarın biraz daha kurcalayacağım çünkü ufak rakamlarda sıkıntı var. 1v için 1.20v gösteriyor.

Kod:
Vdata = Vdata / 350;
  vOUT = (Vdata / 1023.0) * 3.240;
  vIN = vOUT * 9.288;
 
picodaki ADC/DAC 12 bit olabilir ama herhalde Arduino IDE ile uyumluluk açısından analogRead belki bunu 10 bite ölçeklendiriyor. O ADC yi 12 bit olarak okumanın bir yolu vardır.

Hesap yaparken doğrudan ADC den okuduğun değer üzerinden hesap yap. Onu float voltaja çevirdiğin anda orada zaten bir miktar kayıp yaşıyorsun. Sonra hesaplara devam ettikçe kayıp ve hata oranı artıyor. Mümkün olduğunca en az hesapla sonuca gitmen lazım.
 

Forum istatistikleri

Konular
7,285
Mesajlar
123,214
Üyeler
2,939
Son üye
Cano

Son kaynaklar

Son profil mesajları

Freemont2.0 herbokolog Freemont2.0 wrote on herbokolog's profile.
nick iniz yakıyor
:D
Freemont2.0 posta Freemont2.0 wrote on posta's profile.
Merhabalar :)
az bilgili çok meraklı
Prooffy semih_s Prooffy wrote on semih_s's profile.
Merhaba, sizden DSO2C10 hakkında bilgi rica ettim. Yanıtlarsanız sevinirim...
Unal taydin Unal wrote on taydin's profile.
Timur Bey, Arduino kontrollü bir akü şarj cihazı yapmaya çalışıyorum. Aklımdaki fikri basit bir çizim olarak konu açmıştım. Özellikle sizin fikirlerinizi çok önemsiyorum.
Back
Top