Programlanabilir Sinyal Jeneratörü

John_Ahmet

Üye
Katılım
13 Kas 2018
Mesajlar
64
Puanları
1
Yaş
35
AD9833'ün fonksiyonunu yerine getirebilecek kare dalga yada sinüs 0-25Mhz aralığında sinyal jeneratörü işlevini yerine getirecek bir yöntem arıyorum.

Bunun için Arduino'nun yada Raspberry Pi'nin PWM çıkışı kullanılabilir mi? Ben hangi frekansta sinyal ürettiğimi biliyor olmalıyım. PWM bunun için kullanılabilir mi?

Yada başka ne gibi önerileriniz olabilir?

https://www.direnc.net/ad9833-sinyal-jeneratoru-entegre-modulu
 
AD9833'ün fonksiyonunu yerine getirebilecek kare dalga yada sinüs 0-25Mhz aralığında sinyal jeneratörü işlevini yerine getirecek bir yöntem arıyorum.

Bunun için Arduino'nun yada Raspberry pi'nin PWM çıkışı kullanılabilir mi? Ben hangi frekansta sinyal ürettiğimi biliyor olmalıyım. PWM bunun için kullanılabilir mi?

Yada başka ne gibi önerileriniz olabilir?

https://www.direnc.net/ad9833-sinyal-jeneratoru-entegre-modulu
Neden ad9833 kullanmıyorsunuz . Ne amaçla kullanacaksınız. Pwm ile kare dalga üretilebilir fakat sinüs üretmek daha zordur. Bu amaç için üretilen entegre kullanmak daha uygun.
https://m.tr.aliexpress.com/item/32...d=8857amp-Vcs91P73UAQ2ZHsSjda4HQ1542194979477
Sinyal jeneratörü yapmak istiyorsanız indikatörlü hazır olanı var.
 
Son düzenleme:
Neden ad9833 kullanmıyorsunuz . Ne amaçla kullanacaksınız. Pwm ile kare dalga üretilebilir fakat sinüs üretmek daha zordur. Bu amaç için üretilen entegre kullanmak daha uygun.

Soru gayet basit işte bu modüllere para vermeden sinyal üretimini programatik olarak oluşturup bir projemde kullanmak istiyorum. Dediğim gibi Arduino'nun yada Raspberry pi'nin PWM çıkışı ile elbette kare dalga üreterek bu ihtiyacımı karşılayabilir miyim? Bu yöntemle Arduino ile yada Raspberry pi ile hangi frekansa kadar hangi çözünürlükte sinyal üretilebilir? Bunun için bildiğiniz bir kod parçası yada library var mı? Burada önemli olan hangi frekansta sinyal ürettiğimden emin olmalıyım. Belirli bir aralıktaki tüm frekansları denemek istiyorum. Bunun sınırlarını öğrenmek istiyorum.

https://m.tr.aliexpress.com/item/32...d=8857amp-Vcs91P73UAQ2ZHsSjda4HQ1542194979477
Sinyal jeneratörü yapmak istiyorsanız indikatörlü hazır olanı var.

Amacım sinyal jeneratörü yapmak değil sinyal üretimini programatik olarak kullanabilmek.

Anladıysanız ve bu modüller olmadan bildiğiniz bir çözüm varsa yazın. Zaten son çare bu AD9833 modülünü satın almaktır.
 
kütüphaneye ve pwmye gerek yok. dijital çıkışlardan birini periypdik olarak sırayla high ve low yapıp istediğiniz frekansı kare dalga olarak alabilirsiniz. sinüs alamazsınız.

f= 1 / T dir.

f frekans (Hertz), T periyot (saniye), 1 sabit sayı.

Örneğin dijital çıkışlardan birini sırayla 500'er ms ara ile high ve low yaparsanız toplam periyot 1000ms (1saniye) olacağından bu değeri formülde yerine koyarsanız frekans 1 herz olacaktır. Bu şekilde bütün frekansları üretebilirsiniz. Max. hangi frekans üretilebiliyor bunu denersiniz bir skopla ya da frekansmetre ile sinyali inceleyip görürsünüz.
 
kütüphaneye ve pwmye gerek yok. dijital çıkışlardan birini periypdik olarak sırayla high ve low yapıp istediğiniz frekansı kare dalga olarak alabilirsiniz. sinüs alamazsınız.

f= 1 / T dir.

f frekans (Hertz), T periyot (saniye), 1 sabit sayı.

Örneğin dijital çıkışlardan birini sırayla 500'er ms ara ile high ve low yaparsanız toplam periyot 1000ms (1saniye) olacağından bu değeri formülde yerine koyarsanız frekans 1 herz olacaktır. Bu şekilde bütün frekansları üretebilirsiniz. Max. hangi frekans üretilebiliyor bunu denersiniz bir skopla ya da frekansmetre ile sinyali inceleyip görürsünüz.

Çok teşekkür ederim. Çok yeterli bilgiler. Şimdi anlamaya başladım. Bu hertz ve frekans konusunu fakat negatif tarafta da sinyal üretebilsem daha iyi olurdu. Bunun için nasıl bir yol izlemeliyim bunun için ne önerirsiniz? +5V ve -5V ile milisaniye, microsaniye ve nanosaniye aralıklarla sinyaller üretmeyi deneyeceğim fakat low yerine -5V üretsem daha bir sinüse benzer öyle değil mi bunun için nasıl bir devre hazırlamam gerekir? Bunun için iki pin mi kullanmak gerekir? Bir pinden -5V sinyal nasıl elde ederim?

Bunları gerçekten bilmiyorum. Yazılım konusunda oldukça deneyimliyim fakat elektronik bilgim çok yeterli değil yardımcı olursanız çok sevinirim.
 
Örneğin 1 kHz için kodlama yapalım.

f= 1kHz (1000 Hz)

f = 1 / Tden

T= 1 / f

T = 1 / 1000 = 0,001 saniye = 1 msn = 1000 mikrosaniye eder.

O halde 1 kHzlik sinyal elde etmek için delay sürelerini aşağıdaki kodlamada olduğu gibi 500 mikrosaniye yapmamız gerekir.

Kod:
int osilator = 9;   // DIGITAL 9 PINI OSILATOR CIKISI OLUYOR

void setup()
{
  pinMode(osilator, OUTPUT);
}
void loop() {
  digitalWrite(osilator, HIGH);   
  delayMicroseconds(500);          
  digitalWrite(osilator, LOW);   
  delayMicroseconds(500);         
}

T= 1000 mikrosaniye olduğuna göre

f= 1 / (1000 x 1000000) = 1000 Herz = 1 kHz eder.

Bu şekilde bütün frekansları elde edebilirsin. Kodlamaki delayMicroseconds değişkeni max 16383 değerini alabilir buna dikkat et. Daha büyük değer yazman gerekirse örneğin 20000 değeri için aşağıdaki gibi peşpeşe 10000 değerini yazarsın. Küçük frekanslar için delayMicroseconds yerine delay kullanabilirsin.

Kod:
int osilator = 9;   // DIGITAL 9 PINI OSILATOR CIKISI OLUYOR

void setup()
{
  pinMode(osilator, OUTPUT);
}
void loop() {
  digitalWrite(osilator, HIGH);   
  delayMicroseconds(10000);   
  delayMicroseconds(10000);       
  digitalWrite(osilator, LOW);   
  delayMicroseconds(10000);     
  delayMicroseconds(10000);       
}
 
Bu şekilde bütün frekansları elde edebilirsin. Kodlamaki delayMicroseconds değişkeni max 16383 değerini alabilir buna dikkat et. Daha büyük değer yazman gerekirse örneğin 20000 değeri için aşağıdaki gibi peşpeşe 10000 değerini yazarsın. Küçük frekanslar için delayMicroseconds yerine delay kullanabilirsin.

Kod için çok teşekkür ederim sınırlar dışında kalan sayılar için tekrarlı bekleme fonksiyonu yazmak benim için hiç sorun olmaz fakat sınırları doğru şekilde keşfetmem gerekiyor. Örneğin Uno'da 16Mhz saat hızında bu bekleme süresi minumum 62.5 ns olabiliyormuş fakat burada merak ettiğim digitalWrite fonksiyonu görevini ne kadar sürede tamamlıyor. Çünkü özellikle uğraşmak istediğim frekanslar 1-5 Mhz arasındadır. Dolayısıyla bu sınırları keşfetmek osiloskopum olmadığı için çok zor olacak.

Örneğin digitalWrite fonksiyonu görevini 100ns altında asenkron olarak tamamlayabiliyorsa ve ben 100 ns yazdığımda tam olarak 5 Mhz elde etmiş olurum öyle değil mi? Nano saniye için de delay fonksiyonu var mıdır? Yoksa onu kendim mi yamak zorundayım?

Gerçek frekansları doğru şekilde üretebilmek için işlemlerin süresini de hesaba katmak durumundayım öyle değil mi? (digitalWrite/High/Low)

Sonuç olarak 4 fonksiyon yazmalıyım.

CreateHertzSignal(number) => 1-1000 (double)

CreateKiloHertzSignal(number) => 1-1000 (double)

CreateMegaHertzSignal(number) => 1-1000 (double) fakat Arduinoda sanırım maksimum 5 verebilirim.

EnableSignal(boolean)

ve tekrarlı delaylar için private fonksiyonlarım da var tabi

Gerçek amacım trafonun rezonans frekansını bu sinyaller ile yakalamaya çalışmak. Bunun için bu rezonans konusu için bir formül var mıdır? Sarım sayısını ve kablo kalınlıklarını bildiğim herhangi bir özel tasarım trafom için bunun rezonans frekansını nasıl hesaplarım? İkinci olarak projem için öğrenmem gereken konu budur. Yardımcı olursanız sevinirim.
 
Analog çıkış kullanarak genliği ve süreyi ayarlayıp sadece pozitif olmak kaydıyla sinüs sinyali elde edebilirsiniz. Bu pwm sinyali adını alıyor hatırladığım kadarıyla. Süre vb. konular içinde arduinoda millis komutu sanırım delay konutundan daha gerçek sonuçlar verecektir.
 
Çıkışın high olduğu zamanlat +5V, low olduğu zamanlar -5Volt alabilmek için ekteki devreyi kullanabilirsin. digitalwrite komutu verildikten sonra arduino buna ne kadar sürede tepki veriyor bunu görmek için osiloskop kullanıp görmelisin. Geçenlerde youtubede bir video görmüştüm bu konu hakkında bilgiler vardı ne kadar sürede tepki verdiğini anlatıyordu. Tepki verme süresini kısaltmak için de bir yöntemden bahsediyordu. tekrar görürsem linkini paylaşırım. Gecikme vermek için delay ya da delayMicrosecond bu ikisinden birini kullanmalısınız. Alternatif olarak delay yerine millis komutu kullanabilirsiniz. Kodların kullanımı hakkında arduino.cc sitesindeki örneklere bakınız. Söylebileceklerim bunlardan ibaret. Kolay gelsin.
 

Ekli dosyalar

  • Ekran Alıntısı.PNG
    Ekran Alıntısı.PNG
    35 KB · Görüntüleme: 30
Analog çıkış kullanarak genliği ve süreyi ayarlayıp sadece pozitif olmak kaydıyla sinüs sinyali elde edebilirsiniz. Bu pwm sinyali adını alıyor hatırladığım kadarıyla. Süre vb. konular içinde arduinoda millis komutu sanırım delay konutundan daha gerçek sonuçlar verecektir.
Arduino hiçbir zaman analog çıkış vermez. pwm denilen olay yine dijital bir çıkıştır. Bildiğimiz kare dalgadır. pwm analog sinyali çıkışa verilen güç bakımından taklit eder fakat hiçbir zaman analog sinyal olarak değerlendirilmemelidir.
pwm.gif
 

Forum istatistikleri

Konular
128,163
Mesajlar
915,578
Kullanıcılar
449,922
Son üye
11akif

Yeni konular

Çevrimiçi üyeler

Geri
Üst