Bitirme Projeleri STM32F429 Discovery Programlanabilir Merkezi Kontrol Ünitesi By Konuk Yazar Posted on 25 Haziran 2015 20 min read 5 0 7,278 Paylaş ! Facebook Paylaş ! Twitter Paylaş ! Google+ Paylaş ! Reddit Paylaş ! Pinterest Paylaş ! Linkedin Paylaş ! Tumblr Merhaba arkadaşlar, Programlanabilir merkezi kontrol ünitesi olarak piyasada birçok firma tarafından üretilen, çeşitli özellikte ve benzer fiyat aralığında birçok mikrodenetleyici bulunmaktadır. Bu proje için STM32F429I tercih edilmiştir. STM32F429I STMicroelectronics firması tarafından üretilmiş bir program geliştirme kitidir. Projede genel olarak 2 adet sıcaklık sensörü, 8 adet sayısal çıkış ve 4 adet zamanlayıcı bulunmaktadır. Sıcaklık sensörlerinden 1 tanesi ölçtüğü veriyi kablosuz olarak ana karta iletecektir. Bunun için kablosuz, ana sistemden bağımsız çalışan ayrı bir sistem gerekmektedir. Bu ihtiyaç doğrultusunda kendi mikrodenetleyicisi, kendi ısı sensörü ve RF modülü olan, kablosuz sıcaklık ölçen bir modül tasarımı yapılmıştır. RF haberleşme ile veri aktarımı için Nordic firmasının geliştirdiği NRF24l01 kullanılmıştır. Sıcaklık sensörü olarak Texas Instruments firmasının geliştirdiği lm35 sıcaklık sensörü kullanılmıştır. Kendine özgü tasarıma sahip olan RF modül kısmında mikrodenetleyici olarak ATMEGA328p-pu seçilmiştir. LCD Gösterimi ve Menü Tasarımı LCD ile ilgili mevcut bilgiler kullanılarak proje ihtiyaçları doğrultusunda menü tasarımı yapılması söz konusudur. Proje daha öncede belirtildiği gibi 8 ayrı dijital çıkış kontrolü, 2 adet sensör, ve 4 ayrı zamanlayıcı içermektedir. Mevcut ekranda bu kadar fazla bilgiyi ve kontrolü bir arada yapmak neredeyse mümkün değildir. Kontrol edilecek veya gösterilecek olan verilerin fazla olması sebebiyle bir menü tasarımına ihtiyaç duyulmuştur. Menü olarak ilk sayfa ana menü, ana menüden erişilebilen 3 ayrı sayfadan oluşmaktadır. Bu 3 ayrı sayfa sırasıyla Sensors, LEDs ve Timers sekmeleridir.Menü tasarımında STM32 GUI Builder kullanılmamıştır. Ana menü görünümünde bu sekmeler önce yazıyla yazılmış, daha sonra ana ekrana menü görünümü vermek amacıyla yazının arka planına içi dolu dikdörtgen alan oluşturulmuş ve bu görünümü daha şık hale getirme amacıyla bu dikdörtgen alanın çevresine de siyah bir dikdörtgen çerçeve konulmuştur. Bu kareler belirli koordinatlara yerleştirilmiştir. İlerde bu karelerin yer aldığı başlangıç ve bitiş x,y değerlerinden faydalanılarak, ekranda bu alana basıldığında şu menüye geçiş yap şeklinde sistemimizi programlayabilme olanağı bulacağız. Sahip olduğumuz ekran tek bir düzlem ve 1 sayfa olarak düşünebiliriz. Menü tasarımında da bize sayfalar gerekmektedir. Bu ihtiyacı karşılayabilmek için sayfalara değişkenler atanmıştır ve her sayfa geçişi sırasında tüm ekran temizlenmektedir. ADC VE LM35 SICAKLIK SENSÖRÜ Projede 2 adet LM35 sıcaklık sensörü bulunmaktadır. Bunlardan birisi doğrudan STM32’ye bağlı olup, bu senörden veri ADC işlemi sayesinde okunmaktadır. Projede ADC çevirme işlemi için ADC kanal 13, ADC 3 kullanılmıştır. ADC bağımsız mod şeklinde çalışmaktadır. Ön derecelendirici olarak Div2 ayarına sahiptir. Yani bağlı olduğu AHB1 veriyolunun çalışma hızının yarı hızında çalışmaktadır. Bu da 90MHz demektir. ADC işlemi örnekleme yoluyla gerçekleşir. Projede bu örnekleme süresi 3 saat çevrimi olarak belirlenmiştir ve 2 örnekleme arası bekleme süresi 5 saat çevrimi olarak atanmıştır. STM32 nin ADC çözünürlüğü 12 bit olmaktadır. Yani ADC işlemi sonucu ölçülen değeri sensörü 5V ile beslediğimiz için, 5000 ile çarpmamız gerekir. Sonucu °C cinsine çevirebilmek için #FFFH yani 4096 (212) değerine bölmemiz gerekir. Bölünen bu değeri de sensörün sahip olduğu 10mV/°C lineer skalaya bölmemiz gerekir. Bu işlemler sonucu sensörden okunan değeri °C olarak elde edilir. GPIO AYARLARI VE SAYISAL ÇIKIŞLAR GPIO ayarları genel amaçlı kullanılmak üzere atanmış giriş çıkış ayarlarını kapsamaktadır. Projede yer alan 8 adet sayısal çıkışı kontrol edebilmek için öncelikle bu ayarların yapılmış olması gerekir. STM32’de port A’ dan K’ ya kadar 164 adet farklı GPIO pin ayarı yapmak mümkündür. Bu ayarlar 5 ayrı kısımdan oluşur. GPIO_Pin: Kullanılacak olan pinler seçilir. Projede 8 adet sayısal çıkışı kontrol edebilmek için 7 ile 14 arası pinler seçilmiştir. GPIO_Mode: Ayarlanan pin modunun giriş ya da çıkış olarak belirlendiği kısımdır. Projede sayısal çıkış kontrolü yapacağımız için bu ayar çıkış olarak seçilmiştir. Ayrıca AF modu da bulunmaktadır. Bu mod SPI ya da USART haberleşmesi gibi alternatif fonksiyonlarda kullanılacak olan pinlerin ayarları içindir. GPIO_OType: İtme çekme ya da boşalan açık devre seçenekleri mevcuttur. Sayısal çıkış kontrolü için bu değer itme çekme olarak ayarlanmıştır. GPIO_PuPd: Bu ayar ile yukarı ya da aşağı çekme direnci o pin için tanımlanabilir ya da bu ayar hiç kullanılmayabilir. Projede bu kullanılmamıştır. GPIO_Speed: Pinin çalışma hızının belirlendiği kısımdır. 100MHz, 50MHz, 25MHz ve 2MHz gibi 4 ayrı değer belirlenebilir. Projede bu kısımla ilgili bir koşul olmadığı için 100MHz keyfi olarak seçilmiştir. Bu ayarlar yapıldıktan sonra GPIO_Init koduyla ayarı yapılan pinin portu tanımlanmaktadır. Projede GPIOE seçilmiştir. Böylece PE7, PE8, PE9, PE10, PE11, PE12, PE13 ve PE14 pinleri sayısal çıkış olarak kullanıma hazırdır. GPIO ayarlarından sonra sayısal çıkış kontrolü için daha önce tasarlanan menü programında bu kısım LEDs seçeneğinde kontrol edilmektedir. LEDs kısmında 8 yeşil 8 kırmızı olmak üzere 16 ayrı kare alanı bulunmaktadır. Bunlardan yeşil olanlar sayısal çıkışı açma, kırmızı olanlar sayısal çıkışları kapama düğmeleri olarak atanmıştır. Belirlenen switch/case döngüsüyle bu alanlara basıldığında açma kapama kodları aktif olmaktadır ve LED yanmaktadır. RF MODÜL VE NRF24L01 Projede 2 adet ısı sensörü yer almaktadır. Bunlardan1 tanesi kablosuz olarak veri aktarımı yapacaktır. Kablosuz olarak veri aktaracak kısımda ana karttan bağımsız çalışan bir RF Modül tasarımına ihtiyaç duyulmaktadır. Tasarlanacak olan bu RF modül hem sıcaklık ölçümü yapacak, hem de ölçülen bu değeri kablosuz olarak STM32’ye gönderecektir. RF modülün bu işlemleri yerine getirebilmesi için bir mikrodenetleyiciye sahip olması gerekmektedir. Tercih olarak Atmel firmasının 28pinli ATMEGA328p-pu mikrodenetleyicisi seçilmiştir. ATMEGA328p-pu programlaması için Atmel programlama kiti gereklidir. Bu mikrodenetleyici aynı zamanda Arduino UNO’nun sahip olduğu bir mikrodenetleyicidir. Atmel programlama kiti yerine imkanlar doğrultusunda Arduino UNO kullanılarak bu mikrodenetleyici programlanabilmektedir. ATMEGA328p-pu mikrodenetleyicisini bu şekilde kullanabilmek için önyükleyici yüklememiz gerekmektedir. LM35 ile sıcaklık ölçümü kısmı STM32’de yaptığımızın benzeridir. Burada ATMEGA328p-pu işlemcisi 10 bit çözünürlükte ADC işlemine sahip olduğu için okunan değerin °C çevrimi yaparken 4096 yerine 2^10 yani 1024’e bölmemiz gerekir. Diğer işlemler aynıdır. Kablosuz modül kısmında mikrodenetleyici ve sıcaklık ölçümünü hallettikten sonra bunu kablosuz olarak STM32’ye aktarmamız gerekir. Burada Şekil 6.3’deki nRF24l01 modülü devreye girmektedir. nRF24l01 The Nordic firmasının geliştirmiş olduğu düşük güç harcayan 2.4GHz’de çalışan RF bir modüldür. Çalışma voltajı 1.9 V- 3.6 V dur. Açık alanda haberleşme mesafesi yaklaşık 250 metredir. Bu modüller hem alıcı hem verici şeklinde çalışır. Modülde 6 ayrı veri yolu vardır. Yani 5 tane ayrı modülden 1 tane modüle veri gönderme imkanı bulunmaktadır. Bütün modüllerin 5byte uzunluğunda kendi özel adresleri vardır. Modüller arası iletişim kurulacağı zaman alıcı ya da verici modüllerinin bu adreslerinin tanımlanması ve belirlenmesi gerekmektedir. Modülde gönderilen verinin uzunluğu maksimum 32bytedir. Modülün Tx ve Rx adresleri kullanıcı tarafından belirlenebilmektedir veya varsayılan ayarlar da kullanılabilmektedir. Modül 125 ayrı kanala sahiptir. Bu kanal seçiciliği 2.4 GHz ile 2.525GHz arasında belirlenmiş 125 ayrı kanal içinde gerçekleşir. Veri aktarım hızı modülün 2Mbps, 1Mbps ve 250kbps olarak seçilebilir. Modülün çıkış gücü de 0dBm,-6dBm, -12dBm veya -18dBm olarak seçilebilir. Modülde ayrıca IQRQ pini mevcuttur, yani kesme fonksiyonuna da sahiptir. Modül SPI haberleşmesi yaparak mikrodenetleyiciyle iletişime geçer. Modülün kendisine özel veri yollama yöntemi vardır. Bu yöntemde önce Tx yükleme kaydedici adresi belirtilip, daha sonra bu adrese yazılacak olan veri seçilir, sonra bu gönderilecek olan verinin uzunluğu belirtilir. Bu işlem kodlarda daha ayrıntılı olarak gösterilmiştir. Aynı şekilde Tx modülünün kaydedicilerine kaydedilen ve gönderilen veriyi, Rx modülünün kaydedicisinden aynı yöntemle okumamız gerekir. RF Modül alıcı kısmında, yani STM32 tarafında benzer işlemler uygulanmıştır. SPI haberleşmesi yapan bu modül için SPI1 pin paketi 1 kullanılmıştır. Yani MOSI, MISO ve SCK pinleri için sırasıyla PA7, PA6, ve PA5 pinleri kullanılmıştır. CE ve CSN pinleri için PG9 ve PG10 pinleri GPIO ayarları yapılmıştır. CE ve CSN pinleri için 50MHz çıkış hızı atanmıştır. TİMERS Zamanlayıcılar belirli bir zamana programlanmış olarak çalışan çıkışlardır. Yani sayısal bir çıkışın belirlenen bir saatte açılıp belirlenen bir saatte kapanmasıdır. Projede 4 adet zamanlayıcı bulunmaktadır. Bir çıkışa zamanlayıcı özelliği kazandırabilmek için önce elimizde gerçek zamanlı çalışan bir saatin olması gerekir. STM32’ de dahili RTC (Real Time Clock) bulunur. RTC kütüphanesi sayesinde bu fonksiyon tanımlanır ve kontrol edilir. RTC’nin STM32’de ayrıca kurtarıcı niteliğinde bir kaydedicisi bulunur. Eğer kartın gücü kesilmeden STM32 yeniden başlatıldığı zaman saat başa dönmez, bu kaydedici sayesinde saat kaldığı yerden çalışmaya devam eder. RTC kütüphanesi sayesinde gerçek zamanlı sistem saati ayarlanmaktadır. Projede 4 adet zamanlayıcı bulunmaktadır. Bunlar belirlenen gün, saat ve dakikada çalışmaya başlamaya programlanmış olup yine belirlenen gün ve saatte çalışmayı bitirmektedir. Sistemin çalışma videosu aşağıdaki gibidir. Proje Keil uVision ortamında hazırlanmıştır, projeyle ilgili dosya ve linkler aşağıda mevcuttur. Proje RF Modül Arduino Kodu Bootloader (RF modülde bulunan ATMEGA328p-pu için) Sunum Datasheetler