Bu projenin amacı nedir?
Bu projede ARM mikrodenetleyici STM32F serisini kullanarak ICM20689 sensörünün kurulumunu yapacağız. Bu projemizde daha rahat ve optimum şekilde kullanabilmek için GB306IM ve GebraBit STM32F303 olmak üzere iki adet hazır modül kullanıyoruz.
Bu iki modül, işi kolaylaştırmak için Gebra ekibi tarafından sağlanan ICM20689 sensörü ve STM32F mikrokontrolcünün gerekli minimum parçalarını içerir.
Bu eğitimde neler öğreniyoruz?
Bu projede ICM20689 sensör kurulumu ve kullanımı sırasında kısaca ICM20689 sensörünün tüm yazmaçları ile bu sensörün SPI protokolünü kullanarak kurulumu için STM32 mikrodenetleyicinin çeşitli parçalarının nasıl kurulacağı, GB6306IM modülüne özel library dosyası ve sürücü. Ayrıca Keil compiler işlevlerin nasıl çağrılacağını ve son olarak sensör verilerinin nasıl alınacağını öğreneceksiniz.
Bu projeye başlamak için neye ihtiyacımız var?
bu projeyi gerçekleştirmek için bazı donanım ve yazılımlara ihtiyacımız var. Bu donanım ve yazılımların başlıkları aşağıdaki tabloda sizlere sunulmuştur ve her birinin üzerine tıklayarak hazırlayabilir/indirebilir ve başlamaya hazırlanabilirsiniz.
GEREKLİ DONANIM | GEREKLİ YAZILIM |
---|---|
ST-LINK/V2 Programmer | Keil uVision Programmer – (Nasıl kurulur ?) |
STM32 Microcontroller – ( Gebra STM32f303 ) | STM32CubeMX Program – (Nasıl kurulur ?) |
[no related product found] |
Bunu yapmak için öncelikle yerleşik jumper’ları kullanarak SPI iletişim protokolünü seçmeliyiz. Daha sonra Gebra ICM20689 modülünün pinini Gebra STM32F303 modülünün üzerine aşağıdaki görüntüdeki gibi yerleştiriyoruz:
Not: Yukarıdaki görselin yalnızca GebraBit ICM20689 modülü pininin GebraBit STM32F303 modülüne nasıl yerleştirileceğini göstermek amaçlı olduğunu lütfen unutmayın. Bu nedenle SPI iletişim protokolünün kullanılabilmesi için iletişim protokolüne ait jumperların SPI moduna ayarlanması gerekmektedir.
Projenin sonunda Keil compiler “Debug Session” modundaki “Watch 1” penceresinde, “X, Y, Z” üç ekseni boyunca sıcaklık, ivme ve açısal hız değerlerini gerçek zamanlı olarak görebilirsiniz.
STM32CubeMX ayarları
Aşağıda GebraBit ICM20689 modülünü başlatmak için STM32F303 mikrodenetleyicideki SPI, RCC, Debug ve Clock bölümlerinin her birine ilişkin ayarları kontrol edeceğiz.
RCC / Clock ayarları
Gebra STM32F303‘de harici kristalin (External Crystal) bulunması nedeniyle “RCC” kısmında “Crystal/Ceramic Resonator”i seçiyoruz:
Daha sonra Clock Configuration sayfasından PLLCLK modunu seçiyoruz ve diğer gereklı ayarları yapıyoruz (daha fazla bilgi için tıklayınız)
Debug & Programming ayarları
bu modülde Debug&Programming sırasında pin sayısını azaltmak için “SWCLK” ve “SWDIO” pinleri için “SYS” bloğunda “Debug” kısmından “Serial Wire” seçeneğini seçiyoruz.
SPI ayarları
GebraBit STM32F303 modülü ile SPI aracılığıyla iletişim kurmak için Full Duplex Master modunu seçin ve SCK, MISO ve MOSI olarak PB3, PB4 ve PB5 pinlerini seçin ve CS olarak PC13 pinini seçin:
Sensörün veri sayfasına göre Parametre Ayarları bölümündeki SPI parametrelerinin ayarları yukarıdaki görüntüdeki gibi yapılacaktır.
Project Manager ayarları
“Project Manager” ayarları aşağıdaki gibidir, burada “MDK-ARM” versiyon “5.32” kullandık. eğer siz kodlamak için başka bir İDE kullanıyorsanız Toolchain seçeneğinden kullandığınız İDE’yi seçmeniz gerekecek
Yukarıdaki tüm ayarları tamamladıktan sonra GENERATE CODE seçeneğine tıklıyoruz.
Projenin kütüphanesi (Library)
GebraMS, çeşitli sensör ve entegrelerin modüler tasarımına ek olarak, kullanıcıların yazılım kurma ve geliştirme işlemlerini kolaylaştırmak için C dilinde çeşitli yapılandırılmış ve donanımdan bağımsız kütüphaneler (Library) sağlamaya çalışır. Bu amaçla, kullanıcılar, istedikleri modülün kütüphanesini “.h” ve “.c” dosyasını (Başlık ve Kaynak) olarak indirebilirler.
GebraMS tarafından sağlanan projenin kütüphanesini projenize ekleyerek ( projeye dosya nasıl eklenir ) kodumuzu kolayca geliştirebiliriz. ilgili dosyaları projenin sonunda veya sağ tarafta ilgili sayfalar kısmında bulabilirsiniz
Kütüphanede tanımlanan tüm fonksiyonlar tüm detaylarıyla yorumlanmakta ve fonksiyonların argümanlarında alınan tüm parametreler ve dönüş değerleri kısaca açıklanmaktadır. Kütüphaneler donanımdan bağımsız olduğundan kullanıcı istediği compiler’e kolaylıkla kütüphaneyi ekleyebilir ve istediği mikroişlemci ve geliştirme kartı ile geliştirebilir.
GebraBit_ICM20689.h header dosyası
Bu dosyada, sensörün veya ic’nin veri sayfası temel alınarak, tüm kayıt adresleri, her kaydın değerleri ENUM şeklinde tanımlanır. Ayrıca ICM20689 sensörünün gövdesi ve her bir dahili ile ilgili konfigürasyonlar tanımlanmış. ICM20689 sensörünün blokları GebraBit_ICM20689 ismiyle bir STRUCT şeklinde tanımlanır. Son olarak Debug Session ortamında her bir bloğa ilişkin tüm konfigürasyonlar gerçek zamanlı olarak görülebilir.
GebraBit_ICM20689.c kaynak dosyası
C dilinde yazılan bu dosyada tüm fonksiyonlar tüm detaylarıyla yorumlanmakta olup, fonksiyonların argümanlarında alınan tüm parametreler ve bunların dönüş değerleri net bir şekilde anlatılmaktadır. kullanıcıları doğrudan bu dosyayı incelemeye davet ediyoruz.
Keil’deki örnek program
STM32CubeMX kullanarak Keil projesini oluşturduktan ve GebraBit tarafından sağlanan GebraBit_ICM20689.c kütüphanesini ekledikten sonra, örnek eğitim projesinin ana programı olan main.c dosyasını inceleyeceğiz ve Keil programının hata ayıklama ortamındaki “watch” penceresinde GebraBit ICM20689 modülünün çıktısını gözlemleyeceğiz.
Main.c dosyasının açıklaması
Eğer main.c dosyasının başlangıcına bakarsanız, GebraBit ICM20689 modülünün yapıları, enumları ve fonksiyonlarına erişmek için GebraBit_ICM20689.h adlı başlık dosyasının eklendiğini göreceksiniz.
Daha sonra, GebraBit ICM20689 modülünü yapılandırmak için kullanılan GebraBit_ICM20689 adında bir değişken tanımlanır. Bu değişken, GebraBit_ICM20689.h başlık dosyasında tanımlanan GebraBit_ICM20689 adlı bir yapıdan oluşur. Bu yapı, GebraBit_ICM20689 kütüphanesinin dokümantasyonunda ayrıntılı olarak açıklanmıştır.
/* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN PTD */
GebraBit_ICM20689 ICM20689_Module;
/* USER CODE END PTD */
Yazılan kodun bundan sonraki kısmında GB_ICM20689_initialize() ve GB_ ICM20689_Configuration() fonksiyonları kullanılarak GebraBit ICM20689 modülünün konfigürasyonu ve ayarları yapılmaktadır:
GB_ICM20689_initialize( &ICM20689_Module );
GB_ICM20689_Configuration(&ICM20689_Module ,FIFO_ENABLE);
//GB_ICM20689_Configuration(&ICM20689_Module , FIFO_DISABLE );
Ve son olarak programın “while” kısmında GebraBit ICM20689 modülünün 3 eksende X, Y, Z ve sıcaklık değerleri sürekli olarak alınmaktadır:
GB_ICM20689_Get_Data( &ICM20689_Module , FROM_FIFO );
//GB_ICM20689_Get_Data( &ICM20689_Module , FROM_REGISTER );
GB_ ICM20689_Configuration(&ICM20689_Module , FIFO_DISABLE ); ve GB_ ICM20689_Get_Data( & ICM20689_Module , FROM_REGISTER ) fonksiyonları kaldırılarak; Veri değerleri doğrudan veri kayıtlarından okunabilir.
STLINK V2
STM32CubeMX kullanarak Keil projesini oluşturup kütüphaneyi ekledikten sonra STLINKV2 adaptörünü kullanarak STLINK V2 programlayıcıyı Gebra STM32F303‘e bağlıyoruz.
STLINK V2 programlayıcısını Gebra STM32F303’e bağladığınızda, modüle güç vermeye gerek kalmaz çünkü besleme voltajını doğrudan STLINK V2 programlayıcısından alacak.
Sonra Build (F7) a tıklayıp Build Output penceresin olası hatalar için kontrol ediyoruz.
Son olarak, “Debug” moduna girin ve “watch” penceresine “ICM20689_Module” ekleyerek ve programı çalıştırarak, sıcaklık değişimlerini ve GebraBit ICM20689 modül değerlerini 3 eksende (X, Y, Z) doğrudan veri kayıtlarından ve FIFO’dan görebiliriz:
Sensör verilerinin doğrudan veri kayıtlarından alınması:
FIFO’dan sensör verilerinin alınması: