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ı...

18 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…

  8. Umut Can Gölbaşı dedi ki:

    İyi günler ben 7 adet powerledi ( MAX 3,4V & 0,350A ) arduino ile sürmek ve PWM sayesinde paraklık kontrolu yapmak istiyorum 12V & 8,5A bir güç kaynağım var. Buna aşşağıdaki sürücüyü bağlasam sürebilir miyim ? Yoksa sürmek için sürücünün önüne bir voltaj yükseltici mi koymam gerekiyor ? Sürücüye kaç volt ile giriş yapmalıyım ?
    https://www.roboshop.com.tr/led/led-driver/1w-led-driver-dc-dc-led-surucu

    • Ömer Koman dedi ki:

      her led için linkteki sürücüden 1 adet kullanmanız lazım. her lediin parlaklığını ayrı ayrı pwm le mi süreceksiniz bilmiyorum programınızda ona göre düzenleme yapmanız lazım. hepsinin parlaklığını aynı anda değiştirecekseniz pwm uçlarını ortak bağlayın. ledlerin 12v ları ortak arduino ve ledlerin gnd ortak bağlanması gerekiyor.

  9. Murat özdemir dedi ki:

    Arduino ile aynı anda farklı frekan değerlerine sahip servolari nasıl surebilirim

    • Ömer Koman dedi ki:

      pwm frekansı ayarı olan başka bir pwm ve servo kütüphane kullanın adafruite bakın

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

*



Sosyal AÄŸlar