Veri dosyalarını da buraya koyayım sonra kaybedersem birkaç saat tekrar uğraşmam gerekmesin.
 

Ekler

  • dacout_a.txt
    60 KB · Görüntüleme: 85
  • dacout_b.txt
    60 KB · Görüntüleme: 83
DAC üstüne yeterince çalışırsak istediğimiz frekansda sinüs çıkarabilir miyiz
 
DAC üstüne yeterince çalışırsak istediğimiz frekansda sinüs çıkarabilir miyiz

Datasheet'te bu DAC için belirtilen setting time 4.5 μs. Bu durumda örnekleme hızımız 220 kHz, üretebileceğimiz en yüksek frekanslı sinüs de 110 kHz olur.
 
Datasheet'te bu DAC için belirtilen setting time 4.5 μs. Bu durumda örnekleme hızımız 220 kHz, üretebileceğimiz en yüksek frekanslı sinüs de 110 kHz olur.
O zaman bir inverter yaparken bu entegre araya tampon koymak kaydıyla sürücü olarak çalışabilir çok rahatlıkla
 
Şimdi bu ideal grafik ile gerçek grafik arasındaki farkları, DAC dijital verisi düzeltme faktörleri haline getirelim. Bunun için her bir veriyi 1000 ile çarpıp sonucu da yuvarlıyoruz. Buradaki grafik A çıkışı için.

1657053740089.png
 
Sonrasında bu faktörleri C++ programında kullanabilmek için bir array haline getiriyoruz. Bunu doğrudan MATLAB'den bir script ile yapabiliyoruz

Kod:
fid = fopen('/home/ta/corr.c', 'w');

fprintf(fid, "static int corr[] =\n");
fprintf(fid, "{\n");

for i = 1:4096
    fprintf(fid, "   %d,\n", corr(i));
end

fprintf(fid, "};\n");

fclose(fid);

Scripti çalıştırınca aşağıdaki gibi bir çıktı üretiyor

C++:
static int corr[] =
{
   -1,
   0,
   1,
   1,
   1,
   1,
   1,
   1,
   1,
   1,
   1,
   0,
   0,
   0,
   0,
   0,
   0,
   0,
   0,
   0,
   0,
   0,
   0,
   0,
   0,
   0,
   0,
   0,
   0,
   0,
   0,
   0,
   0,
   -1,
   -1,
   -1,
   -1,
   -1,
   -1,
   -1,
   -1,
   -1,
   -1,
   -1,
   -1,
   -1,
   -1,
   -1,
    *
    *
    *
};
 
Sonrasında da bu üretilen düzeltme faktörlerini picoya dahil edip testi tekrar yapıyoruz. Burada sadece A çıkışını düzeltiyoruz diğerinin tablosunu yapmadık.

C++:
    /* A ve B cikislarini yaz */
    SPI.transfer16(0x3000 | (va + corr[va]));
    SPI.transfer16(0xb000 | vb);
 
Test sonucunda hata oranının büyük ölçüde azaldığını görüyoruz. Son örneklerde taşma meydana gelmiş. Düzeltmeleri yaparken değerin 0 ın altına veya 4095 in üstüne çıkmasına izin vermemek lazım.

1657062145717.png
 
Buradan birkaç sonuç çıkarabiliriz.

1) DAC'ın lineerliği kullanım sırasında fazla bir değişim göstermiyor. O yüzden lineerlik karakteristiği tespit edildikten sonra lineerik hatalarını azaltmak mümkün.

2) Yapılan düzeltme sonrasında lineerlik hatasının ± 1 LSB seviyesine indiğini görüyoruz, bu da ± 1 mV sapmaya karşılık geliyor.

3) Sınır değerlerde düzeltme yapılırken taşma meydana gelmesine izin verilmemesi gerekiyor. Yani düzeltme sonrası, dijital değerin 0 ın altına inmemesi, 12 bit olan bu DAC için de 4095 in üzerine çıkmaması gerekiyor.
 

Forum istatistikleri

Konular
5,789
Mesajlar
99,021
Üyeler
2,464
Son üye
s4met

Son kaynaklar

Son profil mesajları

cemalettin keçeci wrote on HaydarBaris's profile.
barış kardeşim bende bu sene akıllı denizaltı projesine girdim ve sensörleri arastırıyorum tam olarak hangi sensör ve markaları kullandınız yardımcı olabilir misin?
m.white wrote on Altair's profile.
İyi akşamlar.Arabanız ne marka ve sorunu nedir.Ben araba tamircisi değilim ama tamirden anlarım.
* En mühim ve feyizli vazifelerimiz millî eğitim işleridir. Millî eğitim işlerinde mutlaka muzaffer olmak lâzımdır. Bir milletin hakikî kurtuluşu ancak bu suretle olur. (1922)
Kesici/Spindle hızı hesaplamak için SpreadSheet UDF'leri kullanın, hesap makinesi çok eski kalan bir yöntem :)
Dr. Bülent Başaran,
Elektrik ve Elektronik Mühendisi
Yonga Tasarım Özdevinimcisi
Üç güzel "çocuk" babası
Ortahisar/Ürgüp/Konya/Ankara/Pittsburgh/San Francisco/Atlanta/Alaçatı/Taşucu...

Back
Top