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.

Mikrodenetleyici Kullanarak PWM Sinyali Üretmek 1

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ı

Mikrodenetleyici Kullanarak PWM Sinyali Üretmek 2

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.

Mikrodenetleyici Kullanarak PWM Sinyali Üretmek 3

T_Total değeri yukardaki formüle göre hesaplandı

Mikrodenetleyici Kullanarak PWM Sinyali Üretmek 4

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ı.

Mikrodenetleyici Kullanarak PWM Sinyali Üretmek 5

Mikrodenetleyici Kullanarak PWM Sinyali Üretmek 6

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.

Mikrodenetleyici Kullanarak PWM Sinyali Üretmek 7

Potansiyometrenin durumuna göre Görev süresini hesapladık

Mikrodenetleyici Kullanarak PWM Sinyali Üretmek 8

Zamanlayıcı kullanarak 0.1 sn de bir kesme ayarladık.

Mikrodenetleyici Kullanarak PWM Sinyali Üretmek 9

Son olarak GPIO pinlerini T_on ve T_off değerlerine göre değiştirdik.

 

Mikrodenetleyici Kullanarak PWM Sinyali Üretmek 10

Circuit Diagram

Mikrodenetleyici Kullanarak PWM Sinyali Üretmek 11

Mikrodenetleyici PWM Sinyali Servo Motor

 

Mikrodenetleyici Kullanarak PWM Sinyali Üretmek 12En uygun Fiyat1pcs PIC16F877A-I/P PIC16F877A PIC16F877 16F877A-I/P MICROCHIP DIP40
 

Tam Kodlar :

Read More