işlemci kontrollü sinüs üretimi

Başlatan Hattusa, 22 Ağustos 2011, 23:01:50

Hattusa

s.a.
arkadaşlar işlemci kontrollü sinüs üretimini en basit bir şekilde nasıl elde edebiliriz? bununla ilgili  döküman veya bilgisi olan arkadaşlar paylaşımda bulunabilirler mi?
vardım ilim meclisine eyledim talep, meğer ilim en gerideymiş illa EDEP, illa EDEP <muhyiddin Arabi K.S.>

-Hasan-

DAC ile yapabilirsiniz. Aşağıda R - 2R DAC ile yapıılıyor.


askuzucu

#2
ürettiğin kare dalgayı birkaç katlı alçak geçiren filtreden süzersen sinüs elde etmiş olursun.PWM yöntemi ile de (yine filtreleme ile) üretebilirsin.
Edit; yukarıda yazılan mesajı yeni gördüm. Bu yöntemle düşük frekanslarda daha temiz sinüs üretmek mümkün. Ama yine de ek  filtre kullanılması daha iyi olur.

Tagli

Ben DAC0808 kullanarak yapmıştım, ama mutlak değer olarak. Gerçi DAC0808'e negatif referans verseydim normal bir sinüs çıkardı sanırım.

PWM ile de yapılıyor, yanlış hatırlamıyorsam onu da denemiştim. Ama bildiğim kadarıyla, yüksek frekans istiyorsan DAC kullanman gerekiyor.

Yazılım için de tablo kullanmıştım. ASM'de yazmıştım zaten kodu ama çözünürlük düşüktü, galiba 8 veya 16 parçaya bölmüştüm.
Gökçe Tağlıoğlu

-Hasan-

Alıntı YapPWM ile de yapılıyor, yanlış hatırlamıyorsam onu da denemiştim.

Tagli Hocam; bu işi PWM ' i alçak geçiren filitre ile DAC gibi kullanma yöntemiyle mi yaptınız? yoksa başka türlü mü?

Hattusa

s.a.
bu teknikle sinüs üretimi yapılabiliyor ama daha farklı nasıl olabilir? bununla ilgili şema ve yazılım olanların paylaşımını bekliyorum



buda konu ile ilgili bas dosyası ve isis şeması

http://s2.dosya.tc/server/0QGre1/YeniKlas_r.rar.html
vardım ilim meclisine eyledim talep, meğer ilim en gerideymiş illa EDEP, illa EDEP <muhyiddin Arabi K.S.>

Hattusa

bu dac ile yapılanın şeması ve yazılımı varmıdır acaba sizde?
vardım ilim meclisine eyledim talep, meğer ilim en gerideymiş illa EDEP, illa EDEP <muhyiddin Arabi K.S.>

-Hasan-



Bu sayılar arasında mutlaka bir bağıntı olmalı. Eğer bu çözülebilirse yazılımı oluşturmak kolay olur. Bilen veya çözen var mı acaba?

Tagli

Hasan Oguz, evet o şekilde yaptım. Hesap kitap işine girmeden rasgele bir direnç bir de kapasitör koymuştum yanlış hatırlamıyorsam. Zaten öylesine denemek için yapmıştım, bu sebeple ayrıntıları pek hatırlamıyorum.

pro-TR, DAC0808 için datasheet'teki şemay aynen kullandım. Proje mikrostep sürücü idi, bu sebeple kodda ve devrede konuyla ilgili olmayan bir dolu ıvır zıvır da var (74HC595'ler gibi). Zaten istediğim gibi çalıştıramadım bir türlü, bayadır da bakmadım devreye. Ama DAC kısmı doğru çalışıyordu. Olay basitçe bir retlw tablosundan ibaret. Tablodaki değerleri de Excel yardımıyla elde etmiştim.

16 parçalı tablo böyle:
SIN
	addwf	PCL,F	;PC değiştirilerek atlama yapılıyor
	dt	.1, .50, .98, .142, .180, .212, .236, .250
	dt	.255, .250, .236, .212, .180, .142, .98, .50

Gökçe Tağlıoğlu

-Hasan-

#9
Peki hocam; verdiğim resimdeki sayıların arasındaki bağıntı ne olabilir acaba? siz biliyormusunuz? Kendi kullandığınız sayıları neyi baz alarak oluşturdunuz?

iyildirim

Hasan Oguz;

Resimdeki sayılar bir tam periodluk 32 parçalı sinüs sinyalin 128 ile çarpılmış değerleri .  Her bir değer arasında 360/32 = 11.5 derece var.  Sıfır noktasıda 128 olduğundan değerler 0 - 255 arasında.


-Hasan-

Alıntı Yap11.5 derece var.

Hocam biraz daha açar mısınız? 11.5 derecenin sayı olarak karşılığı nedir?

Tagli

Sin 0'dan 90 dereceye giderken alacağı değerler 256 ile çarpılmış. Daha doğrusu ben öyle yapmıştım. Senin verdiğin resimde öteleme var. Yani 0 noktasına 128 değeri verilmiş. İlk tepe noktası da yaklaşık 90 derecede. 128 + 128 kabaca 256 olmalı ama orada 254 yazıyor. Bu hata çözünürlük sebebiyle muhtemelen. Yarı yolda ise sin45 = 0.707 -> (0.707*128) + 128 = 218. Resimde 217 yazılmış, olabilir...
Gökçe Tağlıoğlu

camby

128 X Sin ( 0 ) + 128 = Sonuç0 = 0

128 X Sin ( a ) + 128 = Sonuç1

128 X sin ( 2a ) + 128 = Sonuç2

...


a = Periyot Süresi / Örnek Sayısı

bunları sırayla hesap sonra tablo oluştur.

PWM de , sinüs Pwm olsa gerek. Tabi frekansı görsele göre çok daha yüksek , istenen sinüs genliğinde duty değişiyor.




-Hasan-

Alıntı Yap128 X Sin ( 0 ) + 128 = Sonuç0 = 0

128 X Sin ( a ) + 128 = Sonuç1

128 X sin ( 2a ) + 128 = Sonuç2

Buradan 3 tane sonuç çıkıyor. Aralardaki verileri 11.5 derece farkından mı bulacağız?

(sin 11.5 * 128) + 128)