PWM sinyalinin DA sinyale dönüştürülmesi.

Megatron

Yeni Üye
Katılım
10 Ocak 2022
Mesajlar
7
Merhabalar, pwm sinyalinin bir DA (doğru akım) sinyaline dönüştürülmesi için bir kaç yöntemden bir tanesi alçek geçiren R-C filtrelerdir. Bunu uygularken R-C filtrenin doğrusal (lineer) bir grafik oluşturmasını bekleriz. Örneğin arduinonun herhangi bir ayağından analogWrite(PwmPin, 51); şeklinde pwm sinyali gönderirseniz ve bu sinyali R-C filtre ile DA sinyale dönüştürürseniz bu sinyali A0 ayağından okuyunca 1 volt olarak okunması gerekir. Nitekim arduinoda bu söylediğimi yapınca beklenen değerleri alabiliyorum. (0'dan 5'e pek çok değeri denedim.) Kurduğum filtredeki R-C değerleri aşağıdaki şekilde. C noktasına giden sinyal DA sinyal.

Kurduğum filtredeki R-C değerleri. C noktasına giden sinyal DA sinyal.


Ancak ilginç bir durumla karşı karşıyayım: Elimde bir cihaz var ve pwm sinyali gönderiyor. Bu sinyali pwm olarak okuduğumda görev döngüsünü (duty cycle) %10 okuyorken R-C filtreden geçirince 0,5 volt okuyorum. Görev döngüsü %90 iken 4,5 volt okuyorum. Buraya kadar her şey normal ancak bu iki noktanın arasında okunan değerler kesinlikle doğrusal bir grafik oluşturmuyor. Örneğin görev döngüsü %50 iken okunması gereken voltaj değeri 2,5 V, ben 3V okuyorum. Benzer şekilde görev döngüsü %75 iken okunması gereken voltaj değeri 3,75 V, ancak ben 3,5 V okuyorum.

Frekans farkından kaynaklanabilir diye düşünmüştüm ancak arduino ile cihazın gönderdiği sinyalin frekansı aynı. Ayrı filtre devresinde neden farklı sonuçlar alınıyor anlamış değilim. Bu durumla ilgili bir fikri olan var mı?
 
sinyal kaynağı tam 5v ve 0v üretiyormu ona bakmak lazım osilaskopla. sinyalin yükselme düşme zamanları da önemli.
 
Evet dediğiniz şey çok mantıklı, ona bakmak lazım. Arduino tam düzgün (en azından tam düzgün kabul edilebilir) bir pwm üretiyor. PWM üretici cihaz acaba sinüs sinyaline yakın bir sinyal ürettiği için mi beklenenin üzerinde veya altında bir değer okunuyor diye düşündüm bende. Ancak buna bakabilecek bir osilaskopum yok.

Tek ölçebildiğim yöntem şu; bir IRLZ44N mosfetinin gate ayağına cihazın pwm çıkışını, drain ayağına 5 Voltu bağladım, source çıkışını R-C filtreye bağladım. %50 görev döngüsünde 3V yerine 2,8V okumamı sağladı bunu yapmak. Yani 2,5 volta daha da yaklaştı. Bu da pwm sinyalinin düzgün olmadığını düşünmeme neden olmuştu. (aslında bir schmitt triger entegrem olsa daha kolay olurdu bu ölçümü yapmak.) Ya sinyal okuma yöntemini değiştireceğim yada bir yerlerden osilaskop bulmaya çalışacağım. Teşekkür ederim yanıtınız için. :)
 
ltspice programını indirip kurun bedava ve kullanımı kolaydır. onunla deneyin.
 
Ltspice programında osilaskop gibi gerçek bir sinyali görüntülemek mümkün mü? Ben onu proteus gibi yalnızca sanal çalışıyor diye biliyordum.
 
LTSpice sadece simülasyon yapıyor. Sinyali görebilmek için osiloskopa bağlamak lazım. Düşük frekanslariçin ses kartını osiloskop olarak kullanma imkanı var ama uğraştırıyor.

Arduino bağlı değilken multimetre DC modunda kaç volt, AC modunda kaç volt gösteriyor?

Kodu buraya koyabilir misiniz?
 
Arduino bağlı değilken multimetre DC modunda kaç volt, AC modunda kaç volt gösteriyor?

Kodu buraya koyabilir misiniz?
Anlayamadım. Multimetre derken yalnızca ölçü aletim var ve o da doğru ölçmüyor. Arduinodan sinyal üretince ölçü aleti doğru ölçüyor. Ancak pwm üretici modülden üretince doğru olmuyor.

Arduino da görev döngüsü ölçtüğüm kodlar aşağıda; aynı sinyali R-C filtreden geçirerek analog olarak ölçtüğüm kodlar ise onun altında. Görev döngüsü ile voltaj değerini bu şekilde kıyaslıyorum. Arduinonun başka bir ayağından (örneğin 5'ten) analogWrite(5, x); (x, 0-255 arasında bir değer) gönderince her şey olması gerektiği gibi ancak pwm üretici modül beklediğim değerleri vermiyor.
double PwmYuksek=0;
double PwmDusuk=0;
uint32_t Frekans=0;
double GorevDongusu=0;

void setup() {
pinMode(8,INPUT);
Serial.begin(9600);
}

void loop() {
PwmYuksek=pulseIn(8,HIGH);
PwmDusuk=pulseIn(8,LOW);
Frekans=1000000/(PwmYuksek+PwmDusuk);
GorevDongusu=(PwmYuksek/(PwmYuksek+PwmDusuk))*100;
Serial.print("GD: %");
Serial.print(GorevDongusu);
Serial.print(" ");
Serial.print("Frekans: ");
Serial.println(Frekans);
Serial.println(" ");
}
/*-------------------------------------------------------------------------------------------------------------*/
/*-------------------------------------------------------------------------------------------------------------*/
double Volt=0;
double Deger=0;

void setup() {
Serial.begin(9600);
}

void loop() {
Deger=analogRead(A0);
Volt=(Deger/1023)*5;

Serial.print("Voltaj: ");
Serial.println(Volt);
}
 
Programın bastığı değerler hiç değişiyor mu?

Veya loop içine delay(1000) koysanız fark ediyor mu?
 
Programın bastığı değerler hiç değişiyor mu?
Değerler stabil kabul edilebilir durumda. Örneğin 2,5V bir değer okumam gerekirken 3 okuyorsam 3,00-3,10 arasında değişen değerler okuyorum. Yani stabillikte sorun yok da beklenmeyen değerler okuma durumu var.
Veya loop içine delay(1000) koysanız fark ediyor mu?
Değişmiyor, yine beklenmeyen sonuçlar okunuyor.

Sonuç olarak R-C filtre kullanarak okumaktan vazgeçtim, arduinoda okuduğum kodlar ile sinyal okuyacağım yalnızca. Fazlasıyla bozuk olmalı okumaya çalıştığım sinyal. Yardımcı olmaya çalışan herkese çok teşekkür ederim. :)
 
Evet dediğiniz şey çok mantıklı, ona bakmak lazım. Arduino tam düzgün (en azından tam düzgün kabul edilebilir) bir pwm üretiyor. PWM üretici cihaz acaba sinüs sinyaline yakın bir sinyal ürettiği için mi beklenenin üzerinde veya altında bir değer okunuyor diye düşündüm bende. Ancak buna bakabilecek bir osilaskopum yok.

Tek ölçebildiğim yöntem şu; bir IRLZ44N mosfetinin gate ayağına cihazın pwm çıkışını, drain ayağına 5 Voltu bağladım, source çıkışını R-C filtreye bağladım. %50 görev döngüsünde 3V yerine 2,8V okumamı sağladı bunu yapmak. Yani 2,5 volta daha da yaklaştı. Bu da pwm sinyalinin düzgün olmadığını düşünmeme neden olmuştu. (aslında bir schmitt triger entegrem olsa daha kolay olurdu bu ölçümü yapmak.) Ya sinyal okuma yöntemini değiştireceğim yada bir yerlerden osilaskop bulmaya çalışacağım. Teşekkür ederim yanıtınız için. :)
IRLZ yi kaldir at. Dogrudan PWM sinyali RC filtreye gir.

Isin icine IRLZ yi katarsan threshold degeri falan girer. Source cikisindan %50 duty icin 2.5v/1.65v dan da dusuk deger okuman lazim. Orda da terslik var.
 
Son düzenleme:

Forum istatistikleri

Konular
5,833
Mesajlar
99,486
Üyeler
2,479
Son üye
yiyehuoxing32

Son kaynaklar

Son profil mesajları

gruptaki arkadaşlara selamlar. sıteyi bu gün fark ettim. Asansör için 2x7 segment LCD gösterge üretmek istiyorum. acaba bu sayfadaki arkadaşlardan destek alabilirmiyim. LCD nin mantık açılımı ektedir.
deneyci wrote on TA3UIS's profile.
Selam.
Amatör telsiz lisansı nasıl alınıyor?
Lisansı olmayanı forumlarına almıyorlar. :)
Bilgi alamıyoruz.
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)
Back
Top