PWM (Pulse Width Modulation) ve Arduino ile "RF Düşünüyorum"

    Geçen gün yazdığımız  “Analog Devre Tasarımı Ve Arduino”  yazısında PWM hakkında verdiğimiz bilgilerin eksik kaldığını hissettim ve tekrar PWM olayına dalış yapmak için bu yazıyı yazdım.

      Ömer Koman “ında dediği gibi: ” transient işlemin anlatıldğı (kodun üstündeki mavili kırmızılı -v -b başlıklı)grafikte çift fazlı pwm görüntüsü var arduinoda ise tek fazlı pwm oluşturuyoruz. kafa karıştırıcı olmuş. dac dönüşümü için transient hesaplama linkinkindeki grafik ve r-c devresi de konsa daha anlaşılır olacak.”  

   Yazıda  bir resimde çift fazlı bir PWM var.  Temsili olarak koyduğum resim kafaları karıştırmış olabilir. Bu yazı ile düzelteceğimi düşünüyorum.

  Daha  önce LTSpice programı ile Analog devre tasarladık, değişik  grafikler elde ederek bilgisayar ortamında gerçekten iyi sonuçlar elde edilebildiğini görmüş olduk.

 Şimdi düşünelim Arduino ile PWM kullanarak ürettiğimiz sinyaller ile bir servoyu çalıştırdık. Bir analog veriyi bir Arduino”dan diğerine yolladık. Fakat elimizde tek arduino var ve biz verici tarafta PWM”i kendimiz Arduino”dan bağımsız bir şekilde üretmek istiyoruz. Gelin bunu yapalım daha sonra kendimize açtığımız bu yolda istersek bunu bir RF haberleşme sisteminde kullanırız istersek de bir DC motorun hızını veya konumunu ayarlarız.

LTSpice eğitimi-1” ve “Analog Devre Tasarımı Ve Arduino”  yazılarına bu linklerden ulaşabilirsiniz. Evet bunlara baktıktan sonra işlemlerimize başlayalım.

 İki farklı devre yapalım. Birincisi Linear Technology”nin LTC6992 ile voltaj kontrollü bir modülatör olsun. Devre standart bir devre gördüğümüz gibi girişinde V1 kaynağının değeri değiştirilerek çıkıştaki PWM ayarlanabilir. V girişine koyduğumuz kaynak 3.3 V “luk dolayısıyla çıkıştaki max. değer de 3.3 V olacaktır.

arduino_pwm-1

Şekil-1

Burada (Şekil-2) ise çıkıştaki sinyali görebiliyoruz. Yaklaşık 0.5us aralıklarla 0-3.3V değerlerini almakta. Bunu istediğimiz değere göre girişteki V1 voltaj değerini değiştirerek aralıkları değiştirebiliriz.

arduino_pwm-2

Şekil-2

Arduino 3.3V “luk değerlerde kullanılanları olduğu gibi çoğunlukla 5 Volt değerinde çalışanları olduğundan onun içinde ayrı bir devre yapalım. Bunu LTSpice içerisindeki NE555 IC ile gerçekleştirebilirsiniz. Aslında bu IC bizim bildiğimiz LM555 gibi çalışmaktadır. Gerekli belgeye ulaşabilirsiniz.  LM555 datasheet. Girişe uyguladığımız 5 Volt değerini R1 ve R2 dirençlerini değiştirerek PWM aralıklarını ayarlayabiliriz. Bunlar çıkıştaki değeri değiştirmez. Çıkıştaki değer ancak girişteki kaynak değiştirilince artar veya azalır. (Şekil-3)

arduino_pwm-3

Şekil-3

Çıkıştaki sinyali görüntülediğimizde aşağıdaki gibi bir çıkış elde ettik.(Şekil-4)

arduino_pwm-4

Şekil-4

Şu an PWM olayını RF sistemler için nasıl ” kullanabiliriz  ” diye uğraşıyorum. Vericide oluşturduğumuz PWM”i alıcıya gönderdikten sonra bir filtreye sokarak kullanabilecek miyiz? Yoksa kullanılıyor da biz mi beceremeyeceğiz? Hazır  sistemler elbette vardır. Ama oturup teorisini de çıkartıp burada yazabiliriz…Hepsinin cevabını ileriki haftalarda göreceğiz. Fikirlerinizi aşağıdan ulaştırırsanız sevinirim.  Hatalarımız varsa aşağıdan yorum ile çaldırıp kapatın. Herkese iyi çalışmalar.

Yücel Çetin

İstanbul Üniversitesi Elektrik-Elektronik Mühendisliği'nde öğrenci, Arduino sevdalısı, python meraklısı bir canlı...

14 comments

  1. Ömer Koman dedi ki:

    1 bit adc ve comparator ile yapabilirsin rf örneklemeleri.

  2. gökhan dedi ki:

    öncelikle selamlar;
    Birkaç gündür bende arduino meraklısı oldum çıktım. sizin bu yazınızla karşılaşınca da dedim ki; RF sistem nasıl çalışır. Küçük bir araştırma sonrası durumu az da olsa anladım ve uygulamaya geçtim.
    şimdi sorunumuz şu;
    ben bir arduino kartımla RF transmitter’den veri veya karakter göndericem ,ve karşı arduino ya bağlı RF receiver’den de aldığım veriyi PWM olarak motor sürücüme uygulayacağım , ancak bu durumu bu kadar karmaşıklaştırmak yerine ben bir arduinodan digerine sayısal değer göndersem ve karşı arduinoda da aldığım bu sayısal değeri analogWrite(); koutu ile motor sürücüme uygularsam sanırım sizin dediğinizle aynı işi yapmış olucak.
    Ama illaki PWM sinyal göndermem gerekiyor derseniz, o kısımda pek bir bilgim yok.

    • Ömer Koman dedi ki:

      motor pwm le çalışan servo ise pwm le süreüleblir sürücüye bile gerek yok. diğer dc motorlarda ise sürücüye ihtiyaç var. bazı endüstriye motorlar ise kendi sürücüsü ile gelir serial olarak da kontrol edilebilir. bence siz projenizi parçalara bölün önce motorunuzu kontrol etmeyi öğrenin buna göre ihtiyacınınz olan komut listesini oluşturun. daha sonra bunu serial ile pcden komutları yollayarak test edin en son ise bunu rf olur wifi olur ethenrnet olur sms olur neyle yönetecekseniz yönetin adımlar böyle olursa çok güzel bir proje çıkarmış olursunuz.

  3. ertuğrul dedi ki:

    bana arduino pll frekans artımı yani 48mhz nasıl çalışır biri yardımcı olsun.

  4. Ömer Koman dedi ki:

    Arduino due ye baktinizmi onun calisma frekansi daha yuksek. Foruma gelin sorun birileri ugrasmis olabilir

  5. ertuğrul dedi ki:

    elimde arduino leonardo var atmega 32u4 ve datasheet pll 48mhz diyor acaba arduino kodu nedir? 16 mhz 48mhz yapmak için

  6. ertuğrul dedi ki:

    hocam tşk ederim bu konuda bunu tam olarak deneyip acaba olumlu sonuç elde eden varmı? birde pwm frekansı bu şekilde değişirse motor sürücü vs çalışmasında neler olabilir.

    • Ömer Koman dedi ki:

      servo motorun datasheetinde kontrol pwm frekansları için bilgi vardır gereğinden yuksek pwm frekansları servonun kontrol işlemcisi tarafında hatalı algılanabilir denemeden belli olmaz.

  7. Kadir dedi ki:

    Merhabalar,arduino ile dc motor süreceğim ama potansiyometre kontrollü olacak nasıl yapabilirim.

    • Ömer Koman dedi ki:

      motorun hızını ayarlamak için pwm çıkışını kullanacaksınız pwm çıkışına bir transistoru bağlayın transistor collektorune de motoru bağlayacaksınız. potansiyometreyi ise adc ye bağlayıp elde ettiğiniz değerin buyukluguna göre pwm sinyalini ayarlarsanız. butun bu anlattıkları sitedeki temel bağlantılar yazımda resimlerle gösterilmiş durumda…

E-posta adresiniz gösterilmeyecek. Gerekli alanlar * ile işaretlidir.

*



Sosyal Ağlar