BİR ÇUBUĞU PID KONTROL ALTINDA DENGEDE TUTMAK – Bölüm 3 (MPU6050)

Önceki bölümlerde bu işi yapmak için üç eksenli ADXL345 ivme sensörü kullanmıştım. Projeyi bu defa da MPU6050 ivme sensörü ile gerçekleştirdim. MPU6050 sensörü gyro ölçümleri de yapabilen altı eksenli tipte olduğundan motor titreşimlerinden ve sarsıntılardan etkilenmeyen bir sistem oldu.

PID kontrol prensibi öncekiyle aynı da olsa, açı hesaplamaları, kontrol parametreleri oldukça farklı.

Bundan önce bu konudaki diğer yayınlarıma göz atmanızı öneririm :

Bu projede çok küçük drone motorlarını 3055 MOSFET lerle sürüyoruz. Daha büyük motorları L298 ile hem de akım sınırlaması altında sürmek için “Akım sınırlaması altında DC motor sürmek” başlıklı yayınıma bakmanızı öneririm. Böyle bir sistemi akım sınırlaması olmadan kullanmak işi eksik yapmak anlamına gelecektir.

Continue reading “BİR ÇUBUĞU PID KONTROL ALTINDA DENGEDE TUTMAK – Bölüm 3 (MPU6050)”

BİR ÇUBUĞU PID KONTROLU İLE İSTENEN AÇIDA TUTMAK-Bölüm 2 (2 motor)

İki ucunda birer adet pervaneli drone motoru bağlı olan bir çubuğumuz var. Bunu istediğimiz eğimde tutmak için STM32F103 mikrodenetleyici ile ADXL345 ivme sensörü kullanarak PID kontrolu altında çalışan bir sistem geliştiriyoruz.

Bu projenin ilk adımı çubuğun sadece tek tarafındaki bir motor ile dengede tutulması idi, o aşamayı anlattığım yayına ulaşmak için burayı tıklayabilirsiniz. İlk yayında anlattıklarımı burada tekrarlamayacağım için önce onu okumanızı öneririm.

Continue reading “BİR ÇUBUĞU PID KONTROLU İLE İSTENEN AÇIDA TUTMAK-Bölüm 2 (2 motor)”

BİR ÇUBUĞU PID KONTROLU İLE İSTENEN AÇIDA TUTMAK

Bir eksen etrafında hareket edebilecek şekilde bağlı bir çubuğu yatay durumda ya da istediğimiz herhangi bir eğimde sabit tutmak istiyoruz. Öyle ki bağlı olduğu platformu nasıl hareket ettirirsek ettirelim aynı eğimi korumaya devam etsin, çubuğu itip pozisyonunu bozsak da hemen kendini toparlayıp önceki eğimine geri dönsün.

Bu projede ortasındaki mafsal etrafında serbestçe hareket edebilen bir çubuktan oluşan “tahtırevalli” yi istediğimiz eğimde tutmaya çalışacağız. Bunun için kontrol işlemcimiz STM32F103, eğim/ivme sensörümüz ADXL345, aktivatörümüz de çubuğumuzun iki ucundaki pervaneli drone motorları olacak. Şimdilik iki motordan birisini kullanacağız, iki motorlu çalışma bir başka projeye…

Türevsel bileşeni bu projede de devreye sokmuyorum ama ne olduğunu, ne zaman kullanılması gerekeceğini matematiğe girmeden basitçe anlatıyorum.

ADXL345 ile eğim ölçme ve PID kontrolu altında DC motor kontrolu hakkında daha önce yayınlarım olmuştu, bu projeye girişmeden önce o yayınlara göz atmakta yarar var derim:

Bu proje çubuğun tek tarafındaki tek motor ile dengede tutmayı ele alıyor. Bunun devamı olan çalışmada aynı işi çubuğun iki ucundaki iki motor ile yapıyoruz. O yayına ulaşmak için aşağıdaki linki tıklayabilirsiniz. İkisi birbirinin tamamlayıcısı olduğundan önce bu ilk yayına göz atmalısınız):

Continue reading “BİR ÇUBUĞU PID KONTROLU İLE İSTENEN AÇIDA TUTMAK”

STM32 UART DMA İLE UZUNLUĞU BİLİNMEYEN VERİ PAKETLERİNİ ALMAK

STM32 ile USART üzerinden veri alış verişi yapmanın çeşitli yöntemleri var. En basitinden yoklama (polling) yöntemi, biraz daha geliştirilmiş bir yöntem tercih ediyorsak kesme (interrupt) yöntemi kullanılabiliyor. Daha önce bu yöntemleri ve ring buffer kullanarak veri alış verişini anlattığım yayınlarım olmuştu.


Bu sefer, HAL kütüphanesinden özel bir fonksiyonu kullanarak DMA modunda alış için uyarladığım ring buffer tekniğini anlatacağım. Bu yeni algoritma UART DMA kesmelerinden yararlanarak CPU yu neredeyse hiç meşgul etmeden çalışan basit ve verimli bir çözüm. Bundan sonraki projelerimde bu kütüphaneyi kullanmayı düşünüyorum.

Continue reading “STM32 UART DMA İLE UZUNLUĞU BİLİNMEYEN VERİ PAKETLERİNİ ALMAK”

STM8 VE MAX6675 İLE SICAKLIK ÖLÇÜMÜ

Fırınlar, lehimleme aparatları ve bunların benzerleri aletlerin sıcaklık kontrollarını yapmak için birkaç yüz dereceye hatta seramik işleri için 1000oC ye çıkabilen sıcaklıkların ölçülmesi gerekiyor. Bu işler için en uygun seçenek bir K tipi termokupl oluyor. Termokupl çıkışındaki gerilimin yükseltilmesi ve sayısallaştırılması için de popüler seçenek olan Maxim’in max6675 inden yararlanıyorum.

Bu basit iş için STM8 mikro denetleyici ve bir OLED ekran kullanıyorum ama burada anlatılanlar ve kodlar rahatlıkla STM32 ye uygulanabilir.

Continue reading “STM8 VE MAX6675 İLE SICAKLIK ÖLÇÜMÜ”

STM32 İLE AÇIK ÇEVRİMDE BLDC SERVO MOTOR SÜRMEK

Daha önce fırçasız servo motor -BLDC- kontrolu konusunda iki yayınım oldu. O yayınlarda temel bilgiler verdikten sonra ST Microelectronics firmasının Nucleo64 kitini, IHM07M1 motor sürücüsünü ve STSPN7 paket yazılımını kullandığım bir uygulamayı anlatmıştım.

Bu defa, kendi MOSFET sürücümü, IR2103 MOSFET sürücü tümleşik devresini kullanarak, ama kendi geliştirdiğim kodlarla BLDC sürmeye girişiyorum. Bunun da ilk adımı burada anlatacağım gibi, motoru “açık çevrim” kontrolu altında çalıştırmak olacak.

Continue reading “STM32 İLE AÇIK ÇEVRİMDE BLDC SERVO MOTOR SÜRMEK”

STM32 İLE OV7670 KAMERA KULLANIMI

OV7670 amatör uygulamalar için kullanılabilecek yaygın ve ucuz bir kamera. STM32F103 ile kullanmak üzere yaptığım çalışmaları paylaşacağım.

Bilindiği gibi STM32F103 ün 20kB lık RAM kapasitesi en mütevazi boyutlarda bir fotoğrafı saklamaya dahi yetmiyor. Ben ise desen tanıyan bir kod geliştirmek istiyorum, bir şekilde boyut problemini aşabilir miyim bakacağım.

Bu ilk yayında kameranın SCCB protokolu ile kontrolunu ele alacağız.

Continue reading “STM32 İLE OV7670 KAMERA KULLANIMI”

STM32-UART HABERLEŞMEDE RING BUFFER KULLANIMI

STM32 ile UART haberleşmesi için yoklama (polling) ya da kesme (interrupt) tekniklerini kullanabiliyoruz. Gelen ve giden verileri “halka tampon” (ring buffer) adını verdiğimiz, sonuna ulaşılınca başa dönüp oradan kayda devam ettiğimiz türden tampon dizilere yerleştirmek verimli bir yöntem. Burada UART işlemleri için HAL kütüphanesini kullanmıyorum.

Bu yayında sürekli olarak kullanmakta olduğum bu tekniği anlatacağım.

HAL Kütüphaneleri kullanarak geliştirdiğim daha güncel bir yayınıma burayı tıklayarak ulaşabilirsiniz.

Continue reading “STM32-UART HABERLEŞMEDE RING BUFFER KULLANIMI”

STM32 TABANLI MASAÜSTÜ CNC-2 (Yeni model)

İlk yayında anlattığım (STM32 Tabanlı Masaüstü CNC – 1) masa üstü CNC yi güncelliyorum. Mekanik yapıda bir değişiklik yok. Ana değişiklik elektronik donanımdaki motor sürücüler. Buna ilaveten yazılımda, motor sürüm algoritmasında epeyi değişiklik var. Bunlardan bazılarını daha CNC ye uygulamadan önce aşağıdaki yayınlarda anlatmıştım.

Aslında diğer yayınlarımın neredeyse hepsinde CNC de kullandığım yazılım tekniklerinden bir şeyler var. Daha önce de belirttiğim gibi, bu CNC, öğrendiğim şeyleri hayata geçirdiğim bir test platformu haline geldi.

Continue reading “STM32 TABANLI MASAÜSTÜ CNC-2 (Yeni model)”

UART İLETİŞİMDE VERİ DOĞRULAMA – CHECK SUM

Mikro denetleyiciler ile diğer cihazlar arasında veri alışverişi için sıklıkla asenkron haberleşme protokoluna -UART- başvuruyoruz. Genelde parazitsiz ve kısa mesafelerde sorun yaşanmasa da, yakın çevrede çalışan motorlar gibi parazit kaynakları var ise arada bir hatalı alınan karakterler olabiliyor. Benim CNC uygulamam da bunlardan birisi. Mikro denetleyicinin burnunun dibinde çalışan 500W lık bir fırçalı DC spindle motorundan, 3 tane güçlü adım motorunun kablolarından yayılan parazitler ortamı dolduruyor.

Bu durumlarda fiziksel seviyedeki önlemler, UART haberleşmeyi RS232, ya da daha iyisi RS485 üzerinden yürütmek. Buna ilaveten protokol seviyesinde de veri doğrulama yöntemlerine başvurmak gerekiyor.

Sadece kullanıcı ile text mesaj alışverişi gibi, arada bir gelen hatalı bir karakterin felakete yol açmadığı bir durumda bütün bunlara gerek görülmeyebilir. Ama, CNC ye giden bir hatalı koordinat bilgisi ortalığı bir anda savaş meydanına çevirebilir. Bu benim başıma geldiğinden dersimi aldım ve CNC-PC haberleşmesi sırasında veri doğrulama işlemlerine erken aşamalardan itibaren yer verdim.

CNC için kullandığım iki farklı yöntemi anlatacağım.

Continue reading “UART İLETİŞİMDE VERİ DOĞRULAMA – CHECK SUM”