İçindekiler:
2025 Yazar: John Day | [email protected]. Son düzenleme: 2025-01-13 06:58
PWM NEDİR?
DARBE GENİŞLİK MODÜLASYONU İÇİN PWM STANDLARI, darbe genişliğinin değiştirildiği bir tekniktir.
Bu kavramı net bir şekilde anlamak için, bir saat darbesini veya herhangi bir kare dalga sinyalini düşünün, %50 görev döngüsüne sahiptir, yani Ton ve Toff periyodu aynıdır, Sinyalin yüksek olduğu toplam süre ve sinyalin düşük olduğu süreye toplam denir. zaman dilimi.
Yukarıda gösterilen resim için bu dalganın görev döngüsü %50'dir.
Görev döngüsü = (AÇIK süre / Toplam Süre)*100
ON time - sinyalin yüksek olduğu süre
KAPALI zamanı - sinyalin düşük olduğu süre Toplam süre - Darbenin toplam süresi (hem AÇIK hem de KAPALI zamanı)
Adım 1: Mikrodenetleyici Seçimi
Projeye uygun mikrodenetleyici seçimi bu projenin temel kısmıdır. PWM kanalları (CCP kayıtları) ile mikrodenetleyicilerde PWM sinyalleri üretilebilir. Bu proje için pic16f877'ye bağlı kalmayı planlıyorum. Aşağıda verilen veri sayfası bağlantısını indirebilirsiniz
PIC16F877a veri sayfası buraya tıklayın
CCP modülü, PWM sinyalinin üretilmesinden sorumludur. CCP1 ve CCP2, PORTC ile çoğullanır. PORTC, 8 bit genişliğinde çift yönlü bir bağlantı noktasıdır. Karşılık gelen veri yönü kaydı TRISC'dir. TRISC bitinin (=1) ayarlanması, karşılık gelen PORTC pinini giriş olarak alacaktır. Bir TRISC bitini(=0) temizlemek, karşılık gelen PORTC pinini bir çıkış yapacaktır.
TRISK = 0; //Bu biti temizlemek çıktı olarak PORTC yapacak
2. Adım: CCP MODÜLÜNÜ YAPILANDIRIN
CCP - YAKALA/KARŞILAŞTIR/PWM MODÜLLERİ
Her Yakalama/Karşılaştırma/PWM (CCP) modülü aşağıdaki gibi çalışabilen 16 bitlik bir kayıt içerir:
• 16 bit Yakalama kaydı
• 16-bit Karşılaştırma kaydı
• PWM Master/Slave Görev Döngüsü kaydı
CCP1CON kaydını PWM moduna yapılandırın
Kayıt Açıklama
CCPxCON Bu kayıt, Yakalama/Karşılaştırma/PWM işlemi için CCP modülünü yapılandırmak için kullanılır.
CCPRxL Bu kayıt, PWM'nin 8 Msb bitini tutar, daha düşük 2 bit, CCPxCON kaydının parçası olacaktır.
PWM çıkışını oluşturmak için CCPR1L ve PR2 ile karşılaştırılacak olan TMR2 Serbest çalışan sayaç.
Şimdi CCP1CON kaydını yapılandırmak için bitleri temsil etmek için ikili kullanacağım.
yukarıdaki resme bakın.
CCP1CON = 0b00001111;
Ayrıca hex formatı da yapabilirsiniz
CCP1CON = 0x0F; //PWM modu için CCP1CON kaydının yapılandırılması
Adım 3: Timer2 Modülünü Yapılandırma (TMR2 Kaydı)
Timer2, ön ölçekleyici ve son ölçekleyici içeren 8 bitlik bir zamanlayıcıdır. CCP modülünün/modüllerinin PWM modu için PWM zaman tabanı olarak kullanılabilir. TMR2 kaydı okunabilir ve yazılabilirdir ve herhangi bir cihaz Sıfırlamasında silinir.
T2CON kaydı gösterilir
Ön ölçek ve son ölçek, üretilen PWM dalgasının çıkış frekansını ayarlayacaktır.
Frekans = saat frekansı/(4*ön ölçekleyici*(PR2-TMR2)*Son ölçekleyici*sayı)
Tout = 1/frekans nerede
T2CON = 0b00000100;
Bu, 2.5 KHz @ 1Mhz veya 100KHz @ 4MHz kristal üretecektir (pratikte bu PWM frekansı için bir sınırlama vardır, daha fazla ayrıntı için belirli veri sayfasına bakın)
altıgen gösterim
T2CON = 0x04; // Ön Ölçekleyici ve ölçek sonrası yapılandırma olmadan T2CON'u etkinleştirin
Adım 4: PR2'yi Yapılandırma (Zamanlayıcı2 Dönem Kaydı)
Timer2 modülünün 8 bitlik bir periyot kaydı olan PR2 vardır. Zamanlayıcı2, 00h'den PR2 ile eşleşene kadar artar ve ardından bir sonraki artış döngüsünde 00h'ye sıfırlanır. PR2, okunabilir ve yazılabilir bir kayıttır. PR2 kaydı, Sıfırlama üzerine FFh'ye başlatılır.
PR2 için uygun bir aralığın ayarlanması, oluşturulan PWM dalgasının görev döngüsünün değiştirilmesine izin verecektir.
PR2 = 100; // Görev döngüsünü 0-100 arasında değiştirmek için Döngü süresini 100'e ayarlayın
Basit olması için CCPR1L = 80 yaparak PR2=100 kullanıyorum; %80 görev döngüsü elde edilebilir.
Adım 5: CCPR1l Modülünü Yapılandırın
PR2 = 100 olduğundan CCPR1l, istenen görev döngüsünü elde etmek için 0-100 arasında herhangi bir yerde yapılandırılabilir.
Adım 6: Krokiyi Üzerinize Yazın MPLAB X IDE Kod Aşağıda Verilmiştir
#Dahil etmek
void delay(int a) //gecikme oluşturma işlevi{
for(int i=0; i<a;i++)
{
for(int j=0;j<144;j++);
}
}
geçersiz ana()
{ TRISK = 0; //Bu biti temizlemek çıktı olarak PORTC yapacak.
CCP1CON = 0x0F; //PWM modu için CCP1CON kaydının yapılandırılması
T2CON = 0x04; // Ön Ölçekleyici ve ölçek sonrası yapılandırma olmadan T2CON'u etkinleştirin.
PR2 = 100; // Görev döngüsünü 0-100 arasında değiştirmek için Döngü süresini 100'e ayarlayın
süre(1){
CCPR1L = 75; //oluşturulan %75 görev döngüsü gecikmesi(1);
}
}
Ayrıca kodda küçük bir değişiklik yaptım, böylece üretilen PWM dalgasının frekansı
Bu kod, proteus'ta simüle edilmiştir ve çıkış PWM dalgası aşağıda gösterilmiştir. Bunu resim geliştirme panolarınıza yüklemek için, uygun konfigürasyon bitleriyle #include kullanın.
Teşekkürler