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
6,953
Mesajlar
118,766
Üyeler
2,824
Son üye
selocan32

Son kaynaklar

Son profil mesajları

hakan8470 wrote on Dede's profile.
1717172721760.png
Dedecim bu gul mu karanfil mi? Gerci ne farkeder onu da anlamam. Gerci bunun anlamini da bilmem :gulus2:
Lyewor_ wrote on hakan8470's profile.
Takip edilmeye başlanmışım :D ❤️
Merhaba elektronik tutsakları...
Lyewor_ wrote on taydin's profile.
Merhabalar. Elektrik laboratuvarınız varsa bunun hakkında bir konunuz var mı acaba? Sizin laboratuvarınızı merak ettim de :)
Lyewor_ wrote on taydin's profile.
Merhabalar forumda yeniyim! Bir sorum olacaktı lcr meterler hakkında. Hem bobini ölçen hemde bobin direnci ölçen bir lcr meter var mı acaba?
Back
Top