- PWM Sinyalinin Temelleri
- Donanım Kurulumu ve Gereksinimi
- Nuvoton N76E003 Mikrodenetleyici LED Karartma için Devre Şeması
- N76E003 Nuvoton Mikrodenetleyicideki PWM Pinleri
- N76E003 Nuvoton Mikrodenetleyicisindeki PWM Kayıtları ve Fonksiyonları
- Nuvoton N6E003 Mikrodenetleyicide PWM Çalışma Modları
- PWM için Nuvoton N76E003'ün Programlanması
- Kodun Yanıp Sönmesi ve Çıktının Test Edilmesi
Darbe Genişlik Modülasyonu (PWM), mikro denetleyicilerde tanımlanmış bir frekans ve görev döngüsü ile sürekli bir darbe sinyali üretmek için yaygın olarak kullanılan bir tekniktir. Kısacası, PWM, frekans sabitken bir darbenin genişliğini değiştirmekle ilgilidir.
PWM sinyali çoğunlukla bir servo motoru veya bir LED'in parlaklığını kontrol etmek için kullanılır. Ayrıca, mikrodenetleyiciler çıkış pinlerinde sadece Mantık 1 (Yüksek) veya Mantık 0 (Düşük) sağlayabildiğinden, bir DAC veya Dijitalden Analog'a dönüştürücü kullanılmadıkça değişen bir analog voltaj sağlayamaz. Böyle bir durumda, mikro denetleyici, daha sonra değişen analog voltaja dönüştürülebilen çeşitli görev döngüsüne sahip bir PWM çıkışı verecek şekilde programlanabilir. Daha önce birçok mikrodenetleyicide de PWM çevre birimi kullandık.
- ARM7-LPC2148 PWM Eğitimi: LED'in Parlaklığını Kontrol Etme
- MSP430G2 kullanarak Darbe Genişliği Modülasyonu (PWM): LED'in Parlaklığını Kontrol Etme
- MPLAB ve XC8 ile PIC Mikrodenetleyiciyi kullanarak PWM oluşturma
- STM32F103C8'de Darbe Genişliği Modülasyonu (PWM): DC Fan Hızını Kontrol Etme
- PIC Mikrodenetleyicinin GPIO pinlerinde PWM sinyalleri oluşturma
- Raspberry Pi PWM Eğitimi
- ESP32 ile PWM Eğitimi
Bu eğitimde, N76E003 mikro denetleyici ünitesinden gelen bu PWM sinyalini kullanarak kontrol edilecek bir LED ile arayüz oluşturacağız. Ne tür bir donanım kurulumuna ihtiyacımız olduğunu ve mikrodenetleyicimizi nasıl programlamamız gerektiğini değerlendireceğiz. Bundan önce, bir PWM Sinyalinin bazı temellerini anlayalım.
PWM Sinyalinin Temelleri
Aşağıdaki resimde sabit bir PWM sinyali gösterilmektedir.
Yukarıdaki görüntü, aynı ON zamanı ve aynı OFF zamanı olan sabit bir kare dalgadan başka bir şey değildir. Farz edelim ki, sinyalin toplam süresi 1 Saniye. Böylece açma ve kapama süresi 500ms'dir. Bu sinyale bir LED bağlanırsa, LED 500 ms için yanar ve 500 ms için söner. Bu nedenle, perspektif görünümde LED, herhangi bir kapanma süresi olmadan doğrudan 5V sinyale açılırsa gerçek parlaklığın yarısı kadar yanacaktır.
Şimdi yukarıdaki resimde gösterildiği gibi, görev döngüsü değiştirilirse, LED daha önce tartışılan aynı prensibi kullanarak gerçek parlaklığın% 25'i ile yanacaktır. Daha fazla bilgi edinmek ve Darbe Genişlik Modülasyonu (PWM) hakkında bilgi edinmek istiyorsanız bağlantılı makaleye göz atabilirsiniz.
Donanım Kurulumu ve Gereksinimi
Bu projenin gereği, LED'i PWM kullanarak kontrol etmektir. N76E003 ile arayüz olması için bir LED gereklidir. N76E003 geliştirme kartında bir LED mevcut olduğundan, bu projede kullanılacaktır. Başka hiçbir bileşene gerek yoktur.
Bahsetmiyorum bile, N76E003 mikro denetleyici tabanlı geliştirme panosuna ve Nu-Link Programlayıcısına ihtiyacımız var. Programlayıcı bir güç kaynağı olarak kullanılmıyorsa, ek bir 5V güç kaynağı ünitesi gerekebilir.
Nuvoton N76E003 Mikrodenetleyici LED Karartma için Devre Şeması
Aşağıdaki şemada görebileceğimiz gibi, Test LED'i geliştirme kartının içinde mevcuttur ve 1.4 numaralı bağlantı noktasına bağlanır. En solda, programlama arayüzü bağlantısı gösterilmektedir.
N76E003 Nuvoton Mikrodenetleyicideki PWM Pinleri
N76E003, 10 pini PWM olarak kullanılabilen 20 pime sahiptir. Aşağıdaki resimler kırmızı kare kutuda vurgulanan PWM pimlerini göstermektedir.
Gördüğümüz gibi, vurgulanan PWM pinleri başka amaçlar için de kullanılabilir. Bununla birlikte, pinlerin bu diğer amacı, pinler PWM çıkışı için yapılandırıldığında kullanılamayacaktır. PWM çıkış pini olarak kullanılan Pin 1.4, diğer işlevselliğini kaybedecektir. Ancak, bu proje için başka bir işlev gerekmediğinden bu bir sorun değildir.
Çıkış pini olarak 1.4 pini seçmenin nedeni, yerleşik Test LED'inin geliştirme kartındaki o pime bağlı olmasıdır, bu nedenle harici LED'lere ihtiyaç duymayız. Ancak bu mikrodenetleyicide 20 pinden 10 pim PWM çıkış pini olarak kullanılabilir ve diğer PWM pimleri çıkışla ilgili amaçlar için kullanılabilir.
N76E003 Nuvoton Mikrodenetleyicisindeki PWM Kayıtları ve Fonksiyonları
N76E003, 1/1 ~ 1/128 arasında seçilebilen Ön Ölçekleyici ile bir PWM saatine bölünen sistem saati veya Zamanlayıcı 1 taşmasını kullanır. PWM süresi, 16 bitlik dönem kaydı PWMPH ve PWMPL kaydı kullanılarak ayarlanabilir.
Mikrodenetleyici, PG0, PG1, PG2, PG3, PG4 ve PG5 olarak adlandırılan altı PWM sinyali üreten altı ayrı PWM kaydına sahiptir. Bununla birlikte, dönem her PWM kanalı için aynıdır çünkü aynı 16 bitlik periyot sayacını paylaşırlar ancak her PWM'nin {PWM0H, PWM0L} olarak adlandırılan farklı 16 bitlik görev döngüsü kaydı kullandığı için her PWM'nin görev döngüsü diğerlerinden farklı olabilir., {PWM1H, PWM1L}, {PWM2H, PWM2L}, {PWM3H, PWM3L}, {PWM4H, PWM4L} ve {PWM5H, PWM5L}. Böylece, N76E003'te, farklı görev döngüleriyle bağımsız olarak altı PWM çıkışı oluşturulabilir.
Diğer mikro denetleyicilerden farklı olarak, PWM'nin etkinleştirilmesi, I / O pinlerini otomatik olarak PWM çıkışlarına ayarlamaz. Bu nedenle, kullanıcının G / Ç çıkış modunu yapılandırması gerekir.
Bu nedenle, uygulama için gerekli olan ne olursa olsun, ilk adım PWM çıkışı olarak hangi bir veya iki veya hatta ikiden fazla I / O pinini belirlemek veya seçmektir. Birini seçtikten sonra, PWM sinyali oluşturmak için I / O pinlerinin Push-Pull modu veya Quasi-çift yönlü olarak ayarlanması gerekir. Bu, PxM1 ve PxM2 kaydı kullanılarak seçilebilir. Bu iki kayıt, x'in Port numarası anlamına geldiği G / Ç modlarını ayarlar (Örneğin, Port P1.0, kayıt P1M1 ve P1M2, P3.0 için P3M1 ve P3M2 vb.)
Yapılandırma aşağıdaki resimde görülebilir.
Ardından, bir sonraki adım, söz konusu G / Ç pimlerinde PWM'yi etkinleştirmektir. Bunu yapmak için, kullanıcının PIOCON0 veya PIOCON1 kayıtlarını ayarlaması gerekir. PIOCON0 ve PIOCON1, PWM sinyallerine bağlı olarak farklı pinleri kontrol ettiğinden kayıt, pin eşlemesine bağlıdır. Bu iki kaydın konfigürasyonu aşağıdaki resimde görülebilir.
Gördüğümüz gibi, yukarıdaki kayıt 6 konfigürasyonu kontrol etmektedir. Geri kalanı için PIOCON1 kaydını kullanın.
Bu nedenle, yukarıdaki kayıt, geri kalan 4 konfigürasyonu kontrol eder.
Nuvoton N6E003 Mikrodenetleyicide PWM Çalışma Modları
Sonraki adım, PWM çalışma modlarını seçmektir. Her PWM üç işlem modunu destekler - Bağımsız, Senkronize ve Ölü Zaman etkinleştirme modu.
Bağımsız mod, altı PWM sinyalinin bağımsız olarak üretilebildiği bir çözüm sağlar. Bu, LED ile ilgili işlemlerin veya sesli uyarıcıların açılması ve kontrol edilmesi gerektiğinde maksimum kez gereklidir.
Senkron modunda setleri PG1 aynı faz-içi PWM çıkış / 3/5, PG0 / 2/4 bağımsız PWM çıkış sinyalleri sağlar PG0 / 2/4, aynı. Bu, esas olarak üç fazlı motorları kontrol etmek için gereklidir.
Ölü zaman yerleştirme modu biraz daha karmaşık ve özellikle sınai uygulamalarda, gerçek motor uygulamaları uygulanan parçasıdır. Bu tür uygulamalarda, tamamlayıcı bir PWM çıktısının, GPIB'ler gibi güç anahtarlama cihazlarının hasar görmesini önleyen "ölü zaman" girişi olması gerekir. Yapılandırmalar, bu modda, PG0 / 2 / 4'ün bağımsız modla aynı şekilde PWM çıkış sinyalleri sağlaması, ancak PG1 / 3 / 5'in buna karşılık olarak PG0 / 2 / 4'ün "faz dışı PWM sinyalleri" çıkışını sağladığı şekilde ayarlanır. ve PG1 / 3/5 Görev kaydını göz ardı edin.
Aşağıdaki kayıt yapılandırması kullanılarak üçten fazla mod seçilebilir.
Bir sonraki yapılandırma, PWMCON1 kaydı kullanılarak PWM türlerinin seçimidir.
Gördüğümüz gibi, yukarıdaki kayıt kullanılarak seçilebilen iki PWM tipi mevcuttur. Kenar hizalı olarak 16 bitlik sayaç, 0000H'den {PWMPH, PWMPL} ayar değerine kadar sayarak ve sonra 0000H'den başlayarak tek eğimli işlemi kullanır. Çıktı dalga formu sol kenara hizalıdır.
Ancak, ortaya hizalanmış modda, 16 bitlik sayaç 0000H'den {PWMPH, PWMPL} 'ye kadar sayarak çift eğimli işlemi kullanır ve ardından geri sayarak tekrar {PWMPH, PWMPL}' den 0000H'ye gider. Çıktı merkez hizalıdır ve örtüşmeyen dalga biçimleri oluşturmak için kullanışlıdır. Şimdi nihayet aşağıdaki kayıtlarda kontrol edilebilen PWM kontrol işlemleri-
Saat kaynağını ayarlamak için CKCON saat kontrol kaydını kullanın.
PWM çıkış sinyali, PMEN kaydı kullanılarak da maskelenebilir. Kullanıcı bu kaydı kullanarak çıkış sinyalini 0 veya 1 ile maskeleyebilir.
Sırada PWM Kontrol Kaydı var-
Yukarıdaki kayıt, PWM'yi çalıştırmak, yeni periyot ve görev yükünü yüklemek, PWM Bayrağını kontrol etmek ve PWM Sayacını temizlemek için kullanışlıdır.
İlişkili bit konfigürasyonları aşağıda gösterilmiştir.
Saat bölücüyü ayarlamak için, PWM saat ayırıcısı için PWMCON1 kaydını kullanın. 5. bit, Grup modu etkinleştirilmiş gruplanmış PWM için kullanılır ve ilk üç PWM çifti için aynı görev döngüsünü sağlar.
PWM için Nuvoton N76E003'ün Programlanması
Kodlama basittir ve bu eğitimde kullanılan kodun tamamı bu sayfanın alt kısmında bulunabilir. LED, P1.4 pinine bağlanır. Bu nedenle P1.4 pininin PWM çıkışı için kullanılması gerekir.
Ana programda ayarlar ilgili sıraya göre yapılır. Aşağıdaki kod satırları PWM'yi ayarlar ve P1.4 pinini PWM çıkışı olarak yapılandırır.
P14_PushPull_Mode;
Bu, P1.4 pimini itme-çekme moduna ayarlamak için kullanılır. Bu, Function_define.h kitaplığında şu şekilde tanımlanır:
# tanımla P14_PushPull_Mode P1M1 & = ~ SET_BIT4; P1M2- = SET_BIT4 PWM1_P14_OUTPUT_ENABLE;
Sonraki satırlar P1.4 pininde PWM'yi etkinleştirmek için kullanılır. Bu aynı zamanda Function_define.h kitaplığında şu şekilde tanımlanır:
#define PWM1_P14_OUTPUT_ENABLE BIT_TMP = EA; EA = 0; TA = 0xAA; TA = 0x55; SFRS- = 0x01; PIOCON1- = 0x02; TA = 0xAA; TA = 0x55; SFRS & = 0xFE; EA = BIT_TMP //P1.4 olarak PWM1 çıkışı PWM_IMDEPENDENT_MODE'u etkinleştirir ;
Aşağıdaki kod, PWM'yi bağımsız moda ayarlamak için kullanılır. In Function_define.h kütüphanesinde, bu yönerge- tanımlanır
# tanımla PWM_IMDEPENDENT_MODE PWMCON1 & = 0x3F PWM_EDGE_TYPE;
Sonra EDGE tipi PWM çıktısını ayarlamamız gerekir. In Function_define.h kütüphanesinde, bu yönerge- tanımlanır
# tanımla PWM_EDGE_TYPE PWMCON1 & = ~ SET_BIT4 set_CLRPWM;
Sonra, mevcuttur PWM sayaç değerini temizlemek zorunda SFR_Macro.h kütüphane
#define set_CLRPWM CLRPWM = 1
Bundan sonra, PWM saati Fsys saati olarak seçilir ve kullanılan bölme faktörü 64 bölmedir.
PWM_CLOCK_FSYS; PWM_CLOCK_DIV_64;
Her ikisi de şu şekilde tanımlanır:
# tanımla PWM_CLOCK_FSYS CKCON & = 0xBF #define PWM_CLOCK_DIV_64 PWMCON1- = 0x06; PWMCON1 & = 0xFE PWM_OUTPUT_ALL_NORMAL;
Aşağıdaki kod satırı, çıkış PWM sinyalini aşağıdaki şekilde tanımlanan 0 ile maskelemek için kullanılır:
# tanımla PWM_OUTPUT_ALL_NORMAL PNP = 0x00 set_PWM_period (1023);
Sonra PWM sinyalinin periyot süresini ayarlamamız gerekir. Bu işlev, PWMPL ve PWMPH yazmacındaki süreyi ayarlar. Bu 16 bitlik bir kayıt olduğundan, işlev PWM Periyodunu ayarlamak için bir bit kaydırma yöntemi kullanır.
void set_PWM_period (işaretsiz int değeri) { PWMPL = (değer & 0x00FF); PWMPH = ((değer & 0xFF00) >> 8); }
Ancak 1023 ve 8 bitlik dönem dışında kullanıcılar başka değerler de kullanabilir. Sürenin uzatılması, yumuşak kısma veya solmaya neden olur.
set_PWMRUN;
Bu, SFR_Macro.h kitaplığında tanımlanan PWM'yi
#define set_PWMRUN PWMRUN = 1
Daha sonra, while döngüsünde , LED sürekli yanar ve söner.
while (1) { for (değer = 0; değer <1024; değer + = 10) { set_PWM1 (değer); Timer1_Delay10ms (3); } for (değer = 1023; değer> 0; değer - = 10) { set_PWM1 (değer); Timer1_Delay10ms (2); } } }
Görev döngüsü, PWM1L ve PWM1H yazmacındaki görev döngüsünü ayarlayan bir fonksiyon olan set_PWM1 (); tarafından ayarlanır.
void set_PWM1 (işaretsiz int değeri) { PWM1L = (değer & 0x00FF); PWM1H = ((değer & 0xFF00) >> 8); set_LOAD; }
Kodun Yanıp Sönmesi ve Çıktının Test Edilmesi
Kod hazır olduğunda derleyin ve denetleyiciye yükleyin. Çevre konusunda yeniyseniz, temel bilgileri öğrenmek için Nuvoton N76E003 eğitimine başlama konusuna bakın. Aşağıdaki sonuçtan da görebileceğiniz gibi, kod 0 uyarı ve 0 Hata döndürdü ve Keil tarafından varsayılan yanıp sönme yöntemi kullanılarak yanıp söndü. Uygulama çalışmaya başlar.
Yeniden oluşturma başladı: Proje: PWM Yeniden oluşturma hedefi 'Hedef 1' STARTUP.A51'i birleştiriyor… main.c derleniyor … derleniyor Delay.c… bağlanıyor… Program Boyutu: veri = 35.1 xdata = 0 kod = 709 oluşturuluyor onaltılık dosya ". \ Objects \ pwm"… ". \ Objects \ pwm" - 0 Hata, 0 Uyarı (lar). Geçen Derleme Süresi: 00:00:05
Donanım güç kaynağına bağlı ve beklendiği gibi çalışıyordu. Bu, yerleşik LED'in parlaklığı azaltılmış ve ardından PWM görev döngüsünün değişimini belirtmek için artırılmıştır.
Bu eğiticinin tam çalışması, aşağıda bağlantısı verilen videoda da bulunabilir. Öğreticiden keyif aldığınızı ve herhangi bir sorunuz varsa faydalı bir şeyler öğrendiğinizi umuyoruz, bunları yorum bölümünde bırakın veya diğer teknik sorular için forumlarımızı kullanabilirsiniz.