Stm32

Stm32 PWM ile Servo Motor Sürme Uygulaması



Merhabalar arkadaşlar konunun başlığından da okunduğu gibi bugün pwmlere giriş yapacağız. Pwm motor sürücüler olsun encoderlar olsun(okuma) servoların kontrolü olsun elektronikte çok önemli bir detaydır şimdi lafı fazla uzatmadan hemen geçelim bakalım ne imiş bu PWM!!

PWM Nedir ??

Pulse Width Modulation yani sinyal genişlik modülasyonu İstediğimiz frekansta oluşturduğumuz kare dalganın yükselen kenar ve düşen kenar arasındaki mesafeyi ayarlamakta diyebiliriz. duty cycle oranına göre sürücümüzün yahut motorumuzun hızını kontrol etmeye yarar. Örnek vermek gerekirse PWM çıkışımızı osilaskoba bağlasak tam olarak aşağıdaki görüntüyü alırız.

pwm osc ile ilgili görsel sonucu

Gördüğünüz kare dalganın yüksek tarafı 5 düşük tarafı 0v seviyesindedir.Giriş yaptığımız cihaz bu doluluk oranına göre aslında giriş frekansımızın ortalamasıyla elde ettiği örn. 1,25 v ile belirli bir hız veya seviyeye gelerek istediğimiz işi yapmaktadır ancak biz bu işi dijital olarak yani 0v ve 5v seviyesinde yaparak analog bir duruma gerek kalmadan çözmüş oluruz. Şimdilik bu konuda sayfalarca yazmayada okumayada gerek olmadığını varsayarak uygulamamıza geçelim… ve Muhteşem CubeMX uygulamasını açalım.

Yeni Projemizi açtık mcu seçtik ve hemen sys den serial wire aktif ediyorum rcc bölümündan external crystal aktif ediyoruz ve Clock setting bölümüne geçiyoruz. Ayarlarımızı resimdeki gibi yapalım.

Şimdi ise Timer bölümünden timer2 geçip Gerekli ayarları resimdeki gibi yapalım.

Bu kısım Çok önemli gözlerimizi 4-8 yada 999999 açıp okuyalım istediğimiz pwm frekansını elde etmek için bir hesabımız var şu hesapta aşağıdaki gibi

Sistem frekansı/(prescaler*ARR(Auto reload register))

yani 72000000/(36*1000)=2000hz değerini elde ettik

Pwm Frekansımız 2KHZ olduğuna göre kodlarımızı generate edip Keil uygulamasına geçebiliriz.

Main.c bloğumuzu açtık ve while ın hemen üzerine bir yere PWM başlatmak için gerekli komutumuzu verelim.

HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_1);

Sonrasında While içine PWM Duty Cycle oranı yani doluluk oranını verebilmek için Komutumuzu girelim.

__HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_1,500);// burada doluluk oranı Cubemxte hatırlarsanız PWM ARR bölümüne 1000 yazmıştık o değer üzerinden hesaplanmaktadır. Biz Komut satırındaki son bölümde 500 yazdık yani toplam 1000 değerinin yarısı yani %50 doluluk oranı bu değeri 0 ile 1000 arası ayarlayarak Doluluk oranızımızı değiştirebiliriz.

Şimdi dilerseniz PWM çıkış yaptığımız bacağa 1k diren ve led bağlarsak PWM çıkışımızın ışığı nasıl kısım açtığını görebiliriz. Umarım yeterince açıklayıcı olabilmişimdi.Şimdilik bu kadar Görüşmek üzere. İyi Çalışmalar.



Onur NP

Arduino Stm32 gibi Mikrodenetleyici PLC Otomasyon sistemleri ve Genel elektronik projeleri üzerine örnek paylaşımlar yapmaktayım Endüstriyel ve Kişisel proejelerinize Ücretli olarak destek verebilirim.

İlgili Makaleler

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Başa dön tuşu
Call Now ButtonAra
Kapalı
Kapalı