- Dasar-dasar Sinyal PWM
- Penyiapan dan Persyaratan Perangkat Keras
- Diagram Sirkuit untuk Peredupan LED Mikrokontroler Nuvoton N76E003
- Pin PWM pada Mikrokontroler N76E003 Nuvoton
- Register dan Fungsi PWM pada Mikrokontroler N76E003 Nuvoton
- Mode Operasi PWM pada Mikrokontroler Nuvoton N6E003
- Pemrograman Nuvoton N76E003 untuk PWM
- Mem-flash Kode Dan Menguji Output
Pulse Width Modulation (PWM) adalah teknik yang umum digunakan di mikrokontroler untuk menghasilkan sinyal pulsa kontinu dengan frekuensi dan siklus kerja yang ditentukan. Singkatnya, PWM adalah tentang mengubah lebar pulsa sementara frekuensinya konstan.
Sinyal PWM sebagian besar digunakan dalam mengendalikan motor servo atau kecerahan LED. Juga, karena mikrokontroler hanya dapat menyediakan Logika 1 (Tinggi) atau Logika 0 (Rendah) pada pin keluarannya, mikrokontroler tidak dapat memberikan tegangan analog yang bervariasi kecuali digunakan konverter DAC atau Digital ke Analog. Dalam kasus seperti itu, mikrokontroler dapat diprogram untuk mengeluarkan PWM dengan siklus kerja yang bervariasi yang kemudian dapat diubah menjadi tegangan analog yang bervariasi. Kami sebelumnya telah menggunakan periferal PWM di banyak mikrokontroler lainnya juga.
- Tutorial PWM ARM7-LPC2148: Mengontrol Kecerahan LED
- Pulse width Modulation (PWM) menggunakan MSP430G2: Mengontrol Kecerahan LED
- Pembangkit PWM menggunakan Mikrokontroler PIC dengan MPLAB dan XC8
- Modulasi Lebar Pulsa (PWM) di STM32F103C8: Mengontrol Kecepatan Kipas DC
- Membangkitkan sinyal PWM pada pin GPIO Mikrokontroler PIC
- Tutorial PWM Raspberry Pi
- Tutorial PWM dengan ESP32
Dalam tutorial ini, kita akan menampilkan sebuah LED yang akan dikontrol menggunakan sinyal PWM ini dari unit mikrokontroler N76E003. Kami akan mengevaluasi jenis pengaturan perangkat keras yang kami butuhkan dan bagaimana kami harus memprogram mikrokontroler kami. Sebelumnya, mari kita pahami beberapa dasar dari Sinyal PWM.
Dasar-dasar Sinyal PWM
Pada gambar di bawah ini sinyal PWM konstan ditampilkan.
Gambar di atas tidak lain adalah gelombang persegi konstan dengan waktu ON yang sama dan waktu OFF yang sama. Misalkan, total periode sinyal adalah 1 Detik. Jadi waktu on dan off adalah 500ms. Jika LED disambungkan ke sinyal ini, LED akan menyala selama 500 md dan mati selama 500 md. Oleh karena itu, dalam tampilan perspektif, LED akan menyala dengan setengah dari kecerahan sebenarnya jika dihidupkan ke sinyal 5V langsung tanpa waktu mati.
Sekarang seperti yang ditunjukkan pada gambar di atas, jika duty cycle diubah, LED akan menyala dengan 25% kecerahan aktual menggunakan prinsip yang sama seperti yang dibahas sebelumnya. Jika Anda ingin mengetahui lebih lanjut dan mempelajari tentang Pulse Width Modulation (PWM), Anda dapat melihat artikel terkait.
Penyiapan dan Persyaratan Perangkat Keras
Sebagai persyaratan dari proyek ini adalah mengontrol LED menggunakan PWM. Sebuah LED harus dihubungkan dengan N76E003. Karena LED tersedia di papan pengembangan N76E003, itu akan digunakan dalam proyek ini. Tidak ada komponen lain yang dibutuhkan.
Belum lagi, kita membutuhkan development board berbasis mikrokontroler N76E003 serta Nu-Link Programmer. Unit catu daya 5V tambahan mungkin diperlukan jika pemrogram tidak digunakan sebagai sumber daya.
Diagram Sirkuit untuk Peredupan LED Mikrokontroler Nuvoton N76E003
Seperti yang dapat kita lihat pada skema di bawah ini, LED Tes tersedia di dalam papan pengembangan dan terhubung pada port 1.4. Di sisi paling kiri, koneksi antarmuka pemrograman ditampilkan.
Pin PWM pada Mikrokontroler N76E003 Nuvoton
N76E003 memiliki 20 pin di mana 10 pin dapat digunakan sebagai PWM. Gambar di bawah ini menunjukkan pin PWM yang disorot di kotak persegi merah.
Seperti yang bisa kita lihat, pin PWM yang disorot juga dapat digunakan untuk tujuan lain. Namun, tujuan pin lain ini tidak akan tersedia ketika pin dikonfigurasi untuk keluaran PWM. Pin 1.4 yang digunakan sebagai pin keluaran PWM, akan kehilangan fungsionalitas lainnya. Tapi, itu bukan masalah karena fungsionalitas lain tidak diperlukan untuk proyek ini.
Alasan di balik pemilihan pin 1.4 sebagai pin keluaran adalah karena LED Tes yang terpasang terhubung pada pin tersebut di papan pengembangan, sehingga kami tidak memerlukan LED eksternal. Namun, dalam mikrokontroler dari 20 pin ini, 10 pin dapat digunakan sebagai pin keluaran PWM dan pin PWM lainnya dapat digunakan untuk tujuan terkait keluaran.
Register dan Fungsi PWM pada Mikrokontroler N76E003 Nuvoton
N76E003 menggunakan jam sistem atau Timer 1 overflow dibagi dengan jam PWM dengan Prescaler yang dapat dipilih dari 1/1 ~ 1/128. Periode PWM dapat diatur menggunakan register periode 16-bit PWMPH dan register PWMPL.
Mikrokontroler memiliki enam register PWM individu yang menghasilkan enam sinyal PWM yang disebut PG0, PG1, PG2, PG3, PG4, dan PG5. Namun, periode yang sama untuk setiap saluran PWM karena mereka berbagi pencacah periode 16-bit yang sama tetapi siklus tugas masing-masing PWM dapat berbeda dari yang lain karena setiap PWM menggunakan register siklus tugas 16-bit yang berbeda bernama {PWM0H, PWM0L}, {PWM1H, PWM1L}, {PWM2H, PWM2L}, {PWM3H, PWM3L}, {PWM4H, PWM4L}, dan {PWM5H, PWM5L}. Jadi, di N76E003, enam keluaran PWM dapat dihasilkan secara independen dengan siklus kerja yang berbeda.
Berbeda dengan mikrokontroler lain, mengaktifkan PWM tidak mengatur pin I / O ke dalam output PWM secara otomatis. Jadi, pengguna perlu mengkonfigurasi mode keluaran I / O.
Jadi, apapun yang dibutuhkan untuk aplikasi tersebut, langkah pertama adalah menentukan atau memilih mana yang satu atau dua atau bahkan lebih dari dua pin I / O sebagai keluaran PWM. Setelah memilih salah satu, pin I / O perlu disetel sebagai mode Push-Pull atau Quasi-bidirectional untuk menghasilkan sinyal PWM. Ini dapat dipilih dengan menggunakan register PxM1 dan PxM2. Kedua register ini mengatur mode I / O di mana x adalah singkatan dari nomor Port (Misalnya, Port P1.0 register akan menjadi P1M1 dan P1M2, untuk P3.0 akan menjadi P3M1 dan P3M2, dll.)
Konfigurasi tersebut dapat dilihat pada gambar di bawah ini-
Kemudian, langkah selanjutnya adalah mengaktifkan PWM pada pin I / O tersebut. Untuk melakukan ini, pengguna perlu menyetel register PIOCON0 atau PIOCON1. Register bergantung pada pemetaan pin karena PIOCON0 dan PIOCON1 mengontrol pin yang berbeda tergantung pada sinyal PWM. Konfigurasi kedua register ini dapat dilihat pada gambar di bawah ini-
Seperti yang bisa kita lihat, register di atas mengontrol 6 konfigurasi. Selebihnya, gunakan register PIOCON1.
Jadi, register di atas mengontrol 4 konfigurasi lainnya.
Mode Operasi PWM pada Mikrokontroler Nuvoton N6E003
Langkah selanjutnya adalah memilih mode operasi PWM. Setiap PWM mendukung tiga mode operasi - mode pengaktifan Independent, Synchronous, dan Dead-Time.
Mode independen memberikan solusi di mana enam sinyal PWM dapat dihasilkan secara independen. Ini diperlukan maksimal saat operasi terkait LED atau bel perlu dihidupkan dan dikontrol.
The Synchronous modus set yang PG1 / 3/5 di output PWM di fase yang sama, sama seperti PG0 / 2/4, di mana PG0 / 2/4 memberikan sinyal output PWM independen. Ini terutama diperlukan untuk mengendalikan motor tiga fase.
The modus Mati-Time penyisipan sedikit memagut kompleks dan diterapkan dalam aplikasi motor nyata, terutama dalam aplikasi industri. Dalam aplikasi semacam itu, keluaran PWM pelengkap perlu berupa penyisipan "waktu mati" yang mencegah kerusakan perangkat pengalih daya seperti GPIB. Konfigurasi diatur dalam mode ini sedemikian rupa sehingga PG0 / 2/4 menyediakan sinyal keluaran PWM dengan cara yang sama seperti mode independen tetapi PG1 / 3/5 memberikan keluaran "sinyal PWM fase keluar" dari PG0 / 2/4 yang sesuai dan abaikan register Tugas PG1 / 3/5.
Di atas tiga mode dapat dipilih menggunakan konfigurasi register di bawah ini-
Konfigurasi selanjutnya adalah pemilihan jenis PWM menggunakan register PWMCON1.
Jadi, seperti yang bisa kita lihat, tersedia dua tipe PWM yang bisa dipilih menggunakan register di atas. Dalam garis tepi, pencacah 16-bit menggunakan operasi kemiringan tunggal dengan menghitung dari 0000H ke nilai yang ditetapkan {PWMPH, PWMPL}, lalu mulai dari 0000H. Bentuk gelombang keluaran sejajar tepi kiri.
Namun, dalam mode rata tengah, pencacah 16-bit menggunakan operasi kemiringan ganda dengan menghitung dari 0000H hingga {PWMPH, PWMPL} dan kemudian beralih dari {PWMPH, PWMPL} ke 0000H dengan menghitung mundur. Outputnya rata tengah dan berguna untuk menghasilkan bentuk gelombang yang tidak tumpang tindih. Sekarang akhirnya operasi kontrol PWM yang dapat diperiksa di register di bawah ini-
Untuk mengatur sumber jam, gunakan register kontrol jam CKCON.
Sinyal keluaran PWM juga dapat disamarkan menggunakan register PMEN. Dengan menggunakan register ini, pengguna dapat menutupi sinyal keluaran dengan 0 atau 1.
Berikutnya adalah Register Kontrol PWM-
Register di atas berguna untuk menjalankan PWM, memuat periode baru dan beban tugas, mengontrol Bendera PWM dan membersihkan Penghitung PWM.
Konfigurasi bit terkait ditunjukkan di bawah ini-
Untuk mengatur pembagi jam, gunakan register PWMCON1 untuk pembagi jam PWM. Bit ke-5 digunakan untuk mode Grup yang diaktifkan dengan PWM dan menyediakan siklus kerja yang sama untuk tiga pasangan PWM pertama.
Pemrograman Nuvoton N76E003 untuk PWM
Pengkodeannya sederhana dan kode lengkap yang digunakan untuk tutorial ini dapat ditemukan di bagian bawah halaman ini. LED dihubungkan ke pin P1.4. Dengan demikian pin P1.4 diperlukan untuk digunakan sebagai keluaran PWM.
Di program utama, pengaturan dilakukan dalam urutan masing-masing. Baris kode di bawah ini mengatur PWM dan mengkonfigurasi pin P1.4 sebagai keluaran PWM.
P14_PushPull_Mode;
Ini digunakan untuk mengatur pin P1.4 dalam mode push-pull. Ini didefinisikan di pustaka Function_define.h sebagai-
# Tentukan P14_PushPull_Mode P1M1 & = ~ SET_BIT4; P1M2- = SET_BIT4 PWM1_P14_OUTPUT_ENABLE;
Baris selanjutnya digunakan untuk mengaktifkan PWM pada pin P1.4. Ini juga didefinisikan di pustaka Function_define.h sebagai-
# tentukan 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 as Output PWM1 mengaktifkan PWM_IMDEPENDENT_MODE;
Kode di bawah ini digunakan untuk mengatur PWM dalam mode independen. Di pustaka Function_define.h , itu didefinisikan sebagai-
#tentukan PWM_IMDEPENDENT_MODE PWMCON1 & = 0x3F PWM_EDGE_TYPE;
Kemudian kita harus mengatur output PWM tipe EDGE. Di pustaka Function_define.h , itu didefinisikan sebagai-
# Tentukan PWM_EDGE_TYPE PWMCON1 & = ~ SET_BIT4 set_CLRPWM;
Selanjutnya, kita harus menghapus nilai penghitung PWM yang tersedia di SFR_Macro.h library-
# Tentukan set_CLRPWM CLRPWM = 1
Setelah itu, clock PWM dipilih sebagai clock Fsys dan faktor pembagian yang digunakan adalah 64 divisi.
PWM_CLOCK_FSYS; PWM_CLOCK_DIV_64;
Keduanya didefinisikan sebagai-
# tentukan PWM_CLOCK_FSYS CKCON & = 0xBF # tentukan PWM_CLOCK_DIV_64 PWMCON1- = 0x06; PWMCON1 & = 0xFE PWM_OUTPUT_ALL_NORMAL;
Baris kode di bawah ini digunakan untuk menutupi sinyal PWM keluaran dengan 0 yang didefinisikan sebagai-
# Tentukan PWM_OUTPUT_ALL_NORMAL PNP = 0x00 set_PWM_period (1023);
Kemudian kita harus mengatur periode waktu sinyal PWM. Fungsi ini mengatur periode dalam register PWMPL dan PWMPH. Karena ini adalah register 16-bit, fungsi tersebut menggunakan metode pergeseran bit untuk menyetel Periode PWM.
void set_PWM_period (nilai int unsigned) { PWMPL = (nilai & 0x00FF); PWMPH = ((nilai & 0xFF00) >> 8); }
Namun, selain periode 1023 dan 8-bit, pengguna juga dapat menggunakan nilai lain. Meningkatkan hasil periode dalam peredupan atau pemudaran halus.
set_PWMRUN;
Ini akan memulai PWM yang didefinisikan di pustaka SFR_Macro.h sebagai-
# Tentukan set_PWMRUN PWMRUN = 1
Selanjutnya, di while loop , LED menyala dan terus menerus memudar.
sementara (1) { untuk (nilai = 0; nilai <1024; nilai + = 10) { set_PWM1 (nilai); Timer1_Delay10ms (3); } untuk (nilai = 1023; nilai> 0; nilai - = 10) { set_PWM1 (nilai); Timer1_Delay10ms (2); } } }
Siklus kerja disetel oleh set_PWM1 ();, fungsi yang menyetel siklus kerja di register PWM1L dan PWM1H.
void set_PWM1 (nilai int unsigned) { PWM1L = (nilai & 0x00FF); PWM1H = ((nilai & 0xFF00) >> 8); set_LOAD; }
Mem-flash Kode Dan Menguji Output
Setelah kode siap, cukup kompilasi dan unggah ke pengontrol. Jika Anda baru mengenal lingkungan, lihat memulai dengan tutorial Nuvoton N76E003 untuk mempelajari dasar-dasarnya. Seperti yang Anda lihat dari hasil di bawah ini, kode mengembalikan 0 peringatan dan 0 Kesalahan dan di-flash menggunakan metode flashing default oleh Keil. Aplikasi mulai bekerja.
Rebuild dimulai: Proyek: PWM Rebuild target 'Target 1' assembling STARTUP.A51… kompilasi main.c… kompilasi Delay.c… linking… Ukuran Program: data = 35.1 xdata = 0 code = 709 pembuatan hex file dari ". \ Objects \ pwm"… ". \ Objects \ pwm" - 0 Error, 0 Peringatan. Waktu Pembuatan yang Berlalu: 00:00:05
Perangkat keras terhubung ke sumber daya dan berfungsi seperti yang diharapkan. Yaitu kecerahan LED onboard berkurang dan kemudian ditingkatkan untuk menunjukkan perubahan siklus kerja PWM.
Pengerjaan lengkap dari tutorial ini juga dapat ditemukan di video yang ditautkan di bawah ini. Semoga Anda menikmati tutorial ini dan mempelajari sesuatu yang berguna jika Anda memiliki pertanyaan, tinggalkan di bagian komentar atau Anda dapat menggunakan forum kami untuk pertanyaan teknis lainnya.