Ana içeriğe atla

Keil ile Arm Programlama - 2 ( ADC )

ARM Tabanlı Mikrodenetleyiciler
ile
Analog Digital Converter İşlemi

      Merhaba. Arm programlama hakkındaki yazılara devam ediyoruz. Bugünkü yazıda Keil ile arm programlama yaparken nasıl ADC ( Analog Digital Converter ) işlemi yapıyoruz, onu göstermeye çalışacağım.

     Öncelikle ADC nedir ? Ne işe yarar ? Hangi amaçla biz bu modülü kullanıyoruz, bu kavramları açıklamak istiyorum.

      Analog Digital Converter : Zamanın her anında değer alan sinyallere analog sinyal, zamanın belirli anlarında değer alan sinyallere ise dijital sinyal denir. Isı, ışık, nem, basınç gibi sinyaller her an değer aldığı için analog sinyallerdir. Esasen bütün dünya analogdur. 

      Bilgisayarların, cep telefonlarının ve elektronik sistemlerin beyni olan işlemci ise bu analog değerleri algılayamaz. Bilgisayarlar için sadece 1 yada 0 değeri vardır. Ya evet yada hayır gibi düşünebiliriz bunu. Burada ADC ihtiyaçlar sonucu ortaya çıkmış bir sistemdir. Diyelim ki biz sıcaklık 25 dereceyi geçtiği  zaman otomatik olarak klimayı açacak bir sistem yapmak istiyoruz. Ama bunun için öncelikle sistemimiz sıcaklık değerlerini karşılaştırabilecek özelliğe sahip olmalıdır. İşte bu gibi anlarda analog değerleri manipüle edip kendi amaçlarımıza uygun olarak kullanmak için ADC olaya dahil oluyor.


       

    
        Yukarıdaki grafikte gözüktüğü gibi analog sinyal ( burada sinüs kullanılmış ) zamanın belirli aralıklarına bölünerek o an ki değerleri alınır. Bu aralıklar o kadar küçüktür ki insan duyuları bu zaman aralıklarını algılayamaz. Bu işleme örnekleme denir. Örnekleme işleminden sonra sinyal hala analog sinyaldir. Bu sinyalin 1 ve 0'larla ifade edilmesi gerekir. 

      Mikroişlemcilerin ADC modülleri genelde 8, 10, 12 bitlik olurlar. 10 bitlik bir modül ( 2 ^ 10 = 1024 ) defa örnekleme işlemi yapar. 1024 değeri aynı zamanda ADC modülünün çözünürlüğüdür. Bu değer ne kadar artarsa mikroişlemci o kadar hassas Analog Digital Converter işlemi yapacaktır. Mikroişlemciler genelde 5 V ile çalışır. 5 % 1024 = 48 mV sensörün algıladığı her bir adımda işlemcide değişecek gerilim miktarıdır.

      Şimdi kuantalama işleminde ;
      0.00 mV = 0000000000
        48mV*1 = 0000000001
.
.
.
      48mV*4 = 0000000100
.
.
.
  48mV*1023 = 1111111111

    değerleri 1 ve 0'lar olarak ifade edildikten sonra ADC işlemi tamamlanmış olur. Bilgisayarlar bu şekilde analog değerleri kullanarak karşılaştırma yaparlar ve insanların kullanımına sunarlar. 

      Şimdi ADC'nin ne olduğunu anlayabildiysek Arm'da bu işlemin nasıl yapıldığına geçebiliriz. Projemiz oldukça basit ; potansiyometreden alınan analog değerlere göre STM üzerinde bulunan ledleri yakacağız. 




     1 ) uint16_t Read_ADC ( void ) fonksiyonu analog digital converter işlemi için gereklidir. Hangi portun, hangi kanalın kullanılacağı bu fonksiyon içerisinde belirlenir. Yazılımsal olarak ADC işlemi bu fonksiyon içerisinde başlatılır. return ADC_GetConversionValue(ADC1); komutu ile analog veriler alınmaya başlar. Bu fonksiyon arm'da adc işlemi gerçekleştirmek için her zaman şarttır. Kopyalanıp yapıştırılabilir. 

     2 ) int main () fonksiyonu altında GPIO ve ADC modüllerinin komutlarını kullanmak için InitTypeDef'ler çağırılıyor. 

     3 ) Veri göndermek için kullanılacak D portunun clock bus'ı aktif ediliyor, veri almak için kullanılacak A portunun clock bus'ı aktif ediliyor. Ayrıca ADC modülünün de clock bus'ı da aktif ediliyor. Bu clock bus'ları aktif ediyoruz çünkü hem GPIO hem de ADC modülleri zamana bağlı olarak çalışıyor. 

     4 ) Daha önceki yazımızda paylaştığımız gibi sırasıyla veri gönderilecek bacağın ve veri alınacak bacağın konfigürasyonları yapılıyor.  Bu konfigürasyonlar sırasıyla D ve A portuna atılıyor. Bu hafızaya atma işlemi yapılmalıdır. Aksi taktirde komutlar çalışmaz. 

     5 ) GPIO'nun konfigürasyonları yapıldığı gibi ADC modülünün de konfigürasyonları yapılmalıdır. Bu konfigürasyonların yanına açıklamalarını yazdım. Burada bu bilgilerin GPIO_Init ve ADC_Init fonksiyonları ile haberleşme portlarına atılması önemlidir. Kodların çalışması için bu fonksiyonların kullanılması zorunludur. ADC_InitStructure.ADC_Resolution = ADC_Resolution_12b ; komutu ile adc işleminin 12 bitlik çözünürlükle yapılacağı belirtilmiştir. ADC_Cmd( ADC1, ENABLE ) ; komutu ile Adc modülü aktif hale getirilir. 

      6 ) ADC_Data = Read_ADC () ; komutu ile analog veriler okunmaya başlar. Verilere göre ledler yakılır veya söndürülür. 

Yorumlar

  1. semih hocam merhaba, stm32f407de dc motor hız kontrol uygulaması için yardımcı olurmusunuz. bu uygulamanında kodunu verirmisiniz. iremkilic922@gmail.com

    YanıtlaSil

Yorum Gönder

En çok okunanlar ;

PLC Zamanlayıcı ( Timer ) Komutu Uygulamaları ve Simülasyonu

SIEMENS S7 - 200  PLC TİMER KOMUTU UYGULAMALARI ve SİMÜLASYONU      Merhaba, bugünkü yazıda PLC'de timer komutunun kullanımını öğreneceğiz ve bu komutun simülasyon üzerinde uygulamalarını gerçekleştireceğiz. Timerler PLC'de oldukça öneme sahip komutlardır. S7 - 200 PLC'de 3 çeşit zamanlayacı bulunmaktadır ;      1 ) Çekmede Gecikmeli Zaman Rölesi ( TON ) : Bu zamanlayıcı '' enable '' girişine ait komutlar doğru ise zamanlayıcı zaman süresini saymaya başlar. Bu anda zamanlayıcının zaman biti 0'dır. Zamanlayıcı'nın saydığı zaman değeri '' Present Value '' değerine eşit olduğu zaman, zamanlayıcı biti 1 olur. Enable girişi 0 olduğunda ise zaman rölesi sıfırlanır.         T32 - T96                                            >>> 1 ms        T33 - .... - T36 ve T97 - ... - T100      >>> 10 ms        T37 - .... - T63 ve T101 - .... - T255   >>> 100ms         Present Time ( PT ) değeri ola

PLC Mühürleme, Set - Reset Komutları ve Elektronik Kilitleme

SIEMENS S7 - 200 PLC  STEP 7 MICROWIN 4.0 PROGRAMI İLE MÜHÜRLEME,SET-RESET,ELEKTRONİK KİLİTLEME UYGULAMALARI ve SİMÜLASYONU      Merhaba, bugün daha önce anlattığımız konulardan daha temel ve kolay olan mühürleme, set - reset , elektronik kilitleme gibi konulara kısaca değineceğiz. Öğrenilmesi her ne kadar daha basit olsa da içerdiği önem oldukça fazladır. Bu yüzden bu konuları öğrenmeden PLC eğitimi gerçekleştirilmiş olamaz.       İlk olarak mühürleme işleminin ne olduğu ile başlayalım. Örnek verecek olursak siz start butonuna basıldığı zaman herhangi bir devre elemanının ( lamba, motor, kompresör vb. ) çalışmasını istiyorsunuz. Start butonu olarak ise normalde açık ( NO ) buton kullanmanız gerekir. Bu yüzden sizin sürekli çıkışı aktif hale getirebilmek için butona sürekli basmanız gerekir. Bu ise pek mümkün olabilecek bir şey değil. İşte bu noktada mühürleme işlemine gerek duyarız. Gelin önce mühürlemenin ladder diyagramını çizelim ve diyagram üzerinde konuyu kav

3 Fazlı ASM'lere Yıldız / Üçgen Yol Verme Kumanda Devresi ve Simülasyonu

3 FAZLI ASENKRON MOTORLARA YILDIZ / ÜÇGEN YOL VERME KUMANDA DEVRESİ SİEMENS S7 -200 LADDER DİYAGRAMI VE SİMÜLASYONU      Merhaba, bu yazıda sanayide en çok kullanılan elektrikli motor olan 3 fazlı asenkron motorlara yıldız/üçgen yol verme yöntemi ile yol verilmesini STEP 7 MicroWİN programında gerçekleştirmeyi öğreneceğiz. PLC komutlarına geçmeden önce neden yol verme yöntemlerine ihtiyaç duyuyoruz, yıldız/üçgen yol vermek ne demektir, bize ne faydası olur gibi soruları cevaplamak gerektiğini düşünüyorum. Bu yüzden ilk olarak bu soruları cevaplamaya çalışacağız.         3 fazlı asenkron motorlar kalkış anında normal çalışma durumuna göre 5 ila 7 kat arasında daha fazla akım çeker. Bu durum ise pano elemanlarının ( kondaktör, termik röle, sigorta vb. ) daha çabuk yıpranmasına sebep olur. Bu yıpranmayı önlemek için ilk kalkış anında bazı yol verme yöntemleri geliştirilmiştir. Bunlardan en çok kullanılanı ise yıldız / üçgen yol verme yöntemidir.      Yıldız/Üçgen yol verm