Mikrodenetleyici Kullanarak PWM Sinyali Üretmek
Mikrodenetleyici PIC16F877A, CCP modüllerini kullanırsak, sadece RC1 ve RC2 pimleri üzerinde PWM sinyalleri üretebiliriz. Ancak PWM sinyaline ihtiyacımız olan bir çok durumla karşılaşabiliriz ve bu sinyal için diğer pimlerden yararlanmamız gerekebilir. Bu durumda, zamanlayıcı modüllerini kullanarak PWM sinyalleri üretmek için GPIO pimlerini programlayabiliriz. Bu şekilde, GPIO pinleri ile birçok PWM sinyali üretebiliriz. Bu projemizde bir potansiyometre kullanarak servo motorumuzu kontrol edeceğiz.
PWM Sinyali Nedir?
Proje detaylarına girmeden önce, PWM Sinyallerinin ne olduğunu biraz inceleyelim. Darbe Genişliği Modülasyonu (PWM), kontrol devrelerinde en sık kullanılan dijital bir sinyaldir. Bu sinyal önceden tanımlanmış bir zaman aralığında ve hızda yüksek (5v) ve düşük (0v) olarak ayarlanır. Sinyalin yüksek kaldığı süre “açık süre”, sinyalin düşük kaldığı süre “kapalı süre” olarak adlandırılır.
PWM için Duty Cycle Hesapı
Bir GPIO pininde PWM sinyali üretmek için önceden tanımlanmış bir süre için onu açıp kapatmak zorundayız. Ama göründüğü kadar basit değildir. Bu açık ve kapalı zaman her döngü için doğru zamanda olmalıdır, bu nedenle gecikme fonksiyonlarını kullanamayız, bu nedenle zamanlayıcı modülünü kullanarak zamanlayıcı kesmesinden yararlanabiliriz. Ayrıca ürettiğimiz PWM sinyalinin görev döngüsünü ve sıklığını da göz önünde bulundurmalıyız. Parametreleri tanımlamak için aşağıdaki değişken isimleri programda kullanılır.
PWM_Frequency = PWM Sinyalinin Frekansı
T_TOTAL = Bir tam PWM döngüsü için harcanan toplam süre
T_ON = PWM sinyalinin açık kalma süresi
T_OFF = PWM sinyalinin kapalı kalma süresi
Duty_cycle = Görev döngüsü
T_TOTAL = (1/PWM_Frequency)
T_ON = (Duty_Cycle*T_TOTAL)/100
T_OFF = T_TOTAL – T_ON
Mikrodenetleyici GPIO Pimleri Üzerinde PWM Üretmek İçin Programlama
Kodların tamamı sayfanın altındandır. Kodların açıklamaları
Gerekli ayarlamaları yaptıktan sonra aşağıda bir hobi RC servo motoru kontrol etmek için Frekans değeri olarak 0.05KHz’i ayarlandı. Bunu uygulama gereksinimlerinize göre değiştirebilirsiniz.
T_Total değeri yukardaki formüle göre hesaplandı
Ana fonksiyonun içinde zamanlayıcı modülünü yapılandırırız. Burada Timer modülünü her 0.1ms için yapılandırıldı.
Ardından Giriş ve Çıkış yapılandırmasını ayarlamalıyız. Burada ADC değerini okumak için AN0 pimini ve PWM sinyallerini vermek için PORTD pimlerini kullanıyoruz. Bu nedenle, bunları çıkış pimleri ayarlayın ve aşağıdaki kod satırlarını kullanarak bunları düşük kenarlı yapınız.
Potansiyometrenin durumuna göre Görev süresini hesapladık
Zamanlayıcı kullanarak 0.1 sn de bir kesme ayarladık.
Son olarak GPIO pinlerini T_on ve T_off değerlerine göre değiştirdik.
Circuit Diagram
En uygun Fiyat1pcs PIC16F877A-I/P PIC16F877A PIC16F877 16F877A-I/P MICROCHIP DIP40
Tam Kodlar :