- Asas PWM Signal
- Persediaan dan Keperluan Perkakasan
- Diagram Litar untuk Peredupan LED Mikrokontroler Nuvoton N76E003
- Pin PWM pada N76E003 Nuvoton Microcontroller
- Daftar dan Fungsi PWM dalam N76E003 Nuvoton Microcontroller
- Mod Pengendalian PWM di Nuvoton N6E003 Microcontroller
- Pengaturcaraan Nuvoton N76E003 untuk PWM
- Mengedipkan Kod dan Menguji Hasilnya
Pulse Width Modulation (PWM) adalah teknik yang biasa digunakan dalam mikrokontroler untuk menghasilkan isyarat nadi berterusan dengan frekuensi dan kitaran tugas yang ditentukan. Ringkasnya, PWM adalah mengenai mengubah lebar nadi sementara frekuensi tetap.
Isyarat PWM kebanyakannya digunakan untuk mengawal motor servo atau kecerahan LED. Juga, kerana mikrokontroler hanya dapat memberikan Logik 1 (Tinggi) atau Logik 0 (Rendah) pada pin outputnya, ia tidak dapat memberikan voltan analog yang berbeza kecuali penukar DAC atau Digital ke Analog digunakan. Dalam kes seperti itu, mikrokontroler dapat diprogram untuk menghasilkan PWM dengan putaran tugas yang bervariasi yang kemudian dapat ditukar menjadi voltan analog yang berbeza-beza. Kami sebelum ini menggunakan periferal PWM di banyak pengawal mikro lain juga.
- Tutorial ARM7-LPC2148 PWM: Mengawal Kecerahan LED
- Modulasi lebar nadi (PWM) menggunakan MSP430G2: Mengawal Kecerahan LED
- Menjana PWM menggunakan PIC Microcontroller dengan MPLAB dan XC8
- Modulasi lebar nadi (PWM) dalam STM32F103C8: Mengawal Kelajuan Kipas DC
- Menghasilkan isyarat PWM pada pin GPIO MIC Microcontroller
- Tutorial Raspberry Pi PWM
- Tutorial PWM dengan ESP32
Dalam tutorial ini, kita akan menghubungkan LED yang akan dikendalikan menggunakan isyarat PWM ini dari unit mikrokontroler N76E003. Kami akan menilai jenis persediaan perkakasan yang kami perlukan dan bagaimana kami harus memprogram mikrokontroler kami. Sebelum itu, mari kita fahami beberapa asas Isyarat PWM.
Asas PWM Signal
Pada gambar di bawah ditunjukkan isyarat PWM yang tetap.
Gambar di atas tidak lain hanyalah gelombang persegi tetap dengan masa ON yang sama dan masa OFF yang sama. Katakan, tempoh keseluruhan isyarat adalah 1 Detik. Oleh itu, masa masa dan waktu rehat adalah 500ms. Sekiranya LED disambungkan melintasi isyarat ini, LED akan menyala selama 500ms dan mati selama 500ms. Oleh itu, dalam pandangan perspektif, LED akan menyala dengan separuh daripada kecerahan sebenar jika dihidupkan ke isyarat 5V langsung tanpa waktu mati.
Sekarang seperti yang ditunjukkan dalam gambar di atas, jika kitaran tugas diubah, LED akan menyala dengan kecerahan sebenar 25% menggunakan prinsip yang sama seperti yang dibincangkan sebelumnya. Sekiranya anda ingin mengetahui lebih lanjut dan mengetahui mengenai Pulse Width Modulation (PWM), anda boleh melihat artikel yang dipautkan.
Persediaan dan Keperluan Perkakasan
Sebagai keperluan projek ini adalah untuk mengawal LED menggunakan PWM. LED diperlukan untuk dihubungkan dengan N76E003. Oleh kerana LED tersedia di papan pengembangan N76E003, ia akan digunakan dalam projek ini. Tidak ada komponen lain yang diperlukan.
Tidak ketinggalan, kami memerlukan papan pengembangan berasaskan mikrokontroler N76E003 dan juga Pengaturcara Nu-Link. Unit bekalan kuasa 5V tambahan mungkin diperlukan jika pengaturcara tidak digunakan sebagai sumber kuasa.
Diagram Litar untuk Peredupan LED Mikrokontroler Nuvoton N76E003
Seperti yang dapat kita lihat dalam skema di bawah ini, LED Uji tersedia di dalam papan pengembangan dan disambungkan pada port 1.4. Di kiri paling kiri, sambungan antara muka pengaturcaraan ditunjukkan.
Pin PWM pada N76E003 Nuvoton Microcontroller
N76E003 mempunyai 20 pin di mana 10 pin boleh digunakan sebagai PWM. Gambar di bawah menunjukkan pin PWM yang diserlahkan di kotak kotak merah.
Seperti yang kita lihat, pin PWM yang disorot juga dapat digunakan untuk tujuan lain. Walau bagaimanapun, tujuan pin ini tidak akan tersedia apabila pin dikonfigurasikan untuk output PWM. Pin 1.4 yang digunakan sebagai pin output PWM, ia akan kehilangan fungsi lain. Tetapi, itu tidak menjadi masalah kerana fungsi lain tidak diperlukan untuk projek ini.
Sebab di sebalik memilih pin 1.4 sebagai pin output adalah kerana LED Uji bawaan disambungkan pada pin itu di papan pengembangan, oleh itu kita tidak memerlukan LED luaran. Walau bagaimanapun, dalam mikrokontroler ini dari 20 pin, 10 pin dapat digunakan sebagai pin output PWM dan pin PWM lain dapat digunakan untuk tujuan yang berkaitan dengan output.
Daftar dan Fungsi PWM dalam N76E003 Nuvoton Microcontroller
N76E003 menggunakan jam sistem atau limpahan Timer 1 dibahagi dengan jam PWM dengan Prescaler boleh dipilih dari 1/1 ~ 1/128. Tempoh PWM dapat ditetapkan dengan menggunakan daftar tempoh 16-bit PWMPH dan daftar PWMPL.
Mikrokontroler mempunyai enam register PWM individu yang menghasilkan enam isyarat PWM yang dipanggil PG0, PG1, PG2, PG3, PG4, dan PG5. Walau bagaimanapun, tempohnya sama untuk setiap saluran PWM kerana mereka berkongsi kaunter tempoh 16-bit yang sama tetapi kitaran tugas setiap PWM boleh berbeza dari yang lain kerana setiap PWM menggunakan daftar kitaran tugas 16-bit yang berbeza yang dinamakan sebagai {PWM0H, PWM0L}, {PWM1H, PWM1L}, {PWM2H, PWM2L}, {PWM3H, PWM3L}, {PWM4H, PWM4L}, dan {PWM5H, PWM5L}. Oleh itu, pada N76E003, enam output PWM dapat dihasilkan secara bebas dengan kitaran tugas yang berbeza.
Tidak seperti mikrokontroler lain, mengaktifkan PWM tidak menetapkan pin I / O ke output PWM mereka secara automatik. Oleh itu, pengguna perlu mengkonfigurasi mod output I / O.
Oleh itu, apa sahaja yang diperlukan untuk aplikasi, langkah pertama adalah menentukan atau memilih yang mana satu atau dua atau lebih daripada dua pin I / O sebagai output PWM. Setelah memilih satu, pin I / O perlu ditetapkan sebagai mod Push-Pull atau Quasi-bidirectional untuk menghasilkan isyarat PWM. Ini boleh dipilih menggunakan daftar PxM1 dan PxM2. Kedua-dua register ini menetapkan mod I / O di mana x bermaksud nombor Port (Sebagai contoh, Port P1.0 register akan menjadi P1M1 dan P1M2, untuk P3.0 ia akan menjadi P3M1 dan P3M2, dll.)
Konfigurasi dapat dilihat pada gambar di bawah-
Kemudian, langkah seterusnya adalah mengaktifkan PWM pada pin I / O tertentu. Untuk melakukan ini, pengguna perlu menetapkan register PIOCON0 atau PIOCON1. Daftar bergantung pada pemetaan pin kerana PIOCON0 dan PIOCON1 mengawal pin berbeza bergantung pada isyarat PWM. Konfigurasi kedua-dua register ini dapat dilihat pada gambar di bawah-
Seperti yang kita lihat, daftar di atas mengawal 6 konfigurasi. Untuk selebihnya, gunakan daftar PIOCON1.
Oleh itu, daftar di atas mengawal 4 konfigurasi selebihnya.
Mod Pengendalian PWM di Nuvoton N6E003 Microcontroller
Langkah seterusnya adalah memilih mod operasi PWM. Setiap PWM menyokong tiga mod operasi - mod pengaktifan bebas, segerak, dan mati-waktu.
Mod bebas menyediakan penyelesaian di mana enam isyarat PWM dapat dihasilkan secara bebas. Ini diperlukan maksimum ketika operasi atau buzzer berkaitan LED perlu dihidupkan dan dikawal.
The mod segerak set PG1 / 3/5 dalam output PWM dalam fasa yang sama, yang sama seperti PG0 / 2/4, di mana PG0 / 2/4 menyediakan isyarat output PWM bebas. Ini terutama diperlukan untuk mengawal motor tiga fasa.
The Dead Paras mod kemasukan hanya sedikit yang sedikit kompleks dan digunakan dalam aplikasi motor sebenar, terutama dalam aplikasi industri. Dalam aplikasi seperti itu, output PWM pelengkap perlu penyisipan "dead-time" yang mencegah kerosakan pada peranti pensuisan daya seperti GPIB. Konfigurasi diatur dalam mod ini dengan cara yang PG0 / 2/4 memberikan isyarat output PWM dengan cara yang sama seperti mod bebas tetapi PG1 / 3/5 memberikan "isyarat PWM fasa luar" keluaran PG0 / 2/4 yang sesuai dan abaikan Duty register PG1 / 3/5.
Di atas tiga mod boleh dipilih menggunakan konfigurasi daftar di bawah-
Konfigurasi seterusnya adalah pemilihan jenis PWM menggunakan register PWMCON1.
Oleh itu, seperti yang kita lihat, terdapat dua jenis PWM yang boleh dipilih menggunakan daftar di atas. Dalam penjajaran tepi, pembilang 16-bit menggunakan operasi lereng tunggal dengan mengira dari 0000H hingga nilai yang ditetapkan {PWMPH, PWMPL}, dan kemudian bermula dari 0000H. Bentuk gelombang output diselaraskan ke kiri.
Tetapi, dalam mod penjajaran tengah, pembilang 16-bit menggunakan operasi dual-slope dengan mengira dari 0000H hingga {PWMPH, PWMPL} dan sekali lagi beralih dari {PWMPH, PWMPL} ke 0000H dengan mengira. Outputnya sejajar tengah dan berguna untuk menghasilkan bentuk gelombang yang tidak bertindih. Sekarang akhirnya operasi kawalan PWM yang dapat diperiksa dalam daftar di bawah-
Untuk menetapkan sumber jam, gunakan daftar kawalan jam CKCON.
Isyarat output PWM juga dapat disamarkan menggunakan daftar PMEN. Dengan menggunakan daftar ini, pengguna dapat menutupi isyarat output dengan 0 atau 1.
Seterusnya ialah Daftar Kawalan PWM-
Daftar di atas berguna untuk menjalankan PWM, memuat tempoh baru dan beban tugas, mengawal Bendera PWM dan membersihkan Kaunter PWM.
Konfigurasi bit yang berkaitan ditunjukkan di bawah-
Untuk menetapkan pembahagi jam, gunakan daftar PWMCON1 untuk pembahagi jam PWM. Bit ke-5 digunakan untuk mod Kumpulan yang membolehkan PWM dikelompokkan dan memberikan kitaran tugas yang sama untuk tiga pasangan PWM pertama.
Pengaturcaraan Nuvoton N76E003 untuk PWM
Pengekodannya mudah dan kod lengkap yang digunakan untuk tutorial ini terdapat di bahagian bawah halaman ini. LED disambungkan ke pin P1.4. Oleh itu pin P1.4 diperlukan untuk digunakan untuk output PWM.
Dalam program utama, tetapan dilakukan mengikut urutan masing-masing. Garis kod di bawah menetapkan PWM dan mengkonfigurasi pin P1.4 sebagai output PWM.
P14_PushPull_Mode;
Ini digunakan untuk mengatur pin P1.4 dalam mod push-pull. Ini ditakrifkan di perpustakaan Function_define.h sebagai-
#tentukan P14_PushPull_Mode P1M1 & = ~ SET_BIT4; P1M2- = SET_BIT4 PWM1_P14_OUTPUT_ENABLE;
Garis seterusnya digunakan untuk mengaktifkan PWM dalam pin P1.4. Ini juga ditakrifkan dalam perpustakaan 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 = B4 = E4 = B4 Output PWM1 membolehkan PWM_IMDEPENDENT_MODE;
Kod di bawah digunakan untuk menetapkan PWM dalam mod bebas. Di perpustakaan Function_define.h , ia ditakrifkan sebagai-
#tentukan PWM_IMDEPENDENT_MODE PWMCON1 & = 0x3F PWM_EDGE_TYPE;
Maka kita harus menetapkan output PWM jenis EDGE. Di perpustakaan Function_define.h , ia ditakrifkan sebagai-
#tentukan PWM_EDGE_TYPE PWMCON1 & = ~ SET_BIT4 set_CLRPWM;
Seterusnya, kita mesti membersihkan nilai kaunter PWM yang terdapat di perpustakaan SFR_Macro.h-
#tentukan set_CLRPWM CLRPWM = 1
Selepas itu, jam PWM dipilih sebagai jam Fsys dan faktor pembahagian yang digunakan adalah pembahagian 64.
PWM_CLOCK_FSYS; PWM_CLOCK_DIV_64;
Kedua-duanya ditakrifkan sebagai-
#tentukan PWM_CLOCK_FSYS CKCON & = 0xBF #define PWM_CLOCK_DIV_64 PWMCON1- = 0x06; PWMCON1 & = 0xFE PWM_OUTPUT_ALL_NORMAL;
Garis kod bawah digunakan untuk menutupi isyarat output PWM dengan 0 yang ditakrifkan sebagai-
#tentukan PWM_OUTPUT_ALL_NORMAL PNP = 0x00 set_PWM_period (1023);
Maka kita harus menetapkan jangka masa isyarat PWM. Fungsi ini menetapkan tempoh dalam daftar PWMPL dan PWMPH. Oleh kerana ini adalah register 16-bit, fungsi menggunakan kaedah pergeseran bit untuk menetapkan Tempoh PWM.
batal set_PWM_period (nilai int yang tidak ditandatangani) { PWMPL = (nilai & 0x00FF); PWMPH = ((nilai & 0xFF00) >> 8); }
Namun, selain tempoh 1023 dan 8-bit, pengguna juga dapat menggunakan nilai lain. Meningkatkan jangka masa akan menyebabkan peredupan halus atau pudar.
set_PWMRUN;
Ini akan memulakan PWM yang ditentukan dalam perpustakaan SFR_Macro.h sebagai-
#tentukan set_PWMRUN PWMRUN = 1
Seterusnya, dalam gelung sementara , LED dihidupkan dan terus pudar.
sementara (1) { untuk (nilai = 0; nilai <1024; nilai + = 10) { set_PWM1 (nilai); Pemasa1_Delay10ms (3); } untuk (nilai = 1023; nilai> 0; nilai - = 10) { set_PWM1 (nilai); Pemasa1_Delay10ms (2); } } }
Kitaran tugas ditetapkan oleh set_PWM1 (); , fungsi yang menetapkan kitaran tugas dalam daftar PWM1L dan PWM1H.
batal set_PWM1 (nilai int yang tidak ditandatangani) { PWM1L = (nilai & 0x00FF); PWM1H = ((nilai & 0xFF00) >> 8); set_LOAD; }
Mengedipkan Kod dan Menguji Hasilnya
Setelah kodnya siap, hanya kumpulkan dan muat naik ke pengawal. Sekiranya anda baru mengenal alam sekitar, periksa memulakan tutorial Nuvoton N76E003 untuk mempelajari asas-asasnya. Seperti yang anda dapat lihat dari hasil di bawah, kod tersebut mengembalikan 0 amaran dan 0 Kesalahan dan berkelip menggunakan kaedah flashing default oleh Keil. Aplikasi mula berfungsi.
Rebuild dimulakan: Projek: PWM Rebuild target 'Target 1' memasang STARTUP.A51… menyusun main.c… menyusun Delay.c… menghubungkan… Saiz Program: data = 35.1 xdata = 0 kod = 709 membuat fail hex dari ". \ Objects \ pwm"… ". \ Objects \ pwm" - 0 Ralat, 0 Amaran. Masa Binaan Berlalu: 00:00:05
Perkakasan disambungkan ke sumber kuasa dan berfungsi seperti yang diharapkan. Itulah kecerahan LED onboard yang dikurangkan dan kemudian meningkat untuk menunjukkan perubahan kitaran tugas PWM.
Penyelesaian lengkap tutorial ini juga terdapat dalam video yang dipautkan di bawah. Semoga anda menikmati tutorial dan mempelajari sesuatu yang berguna jika anda mempunyai sebarang pertanyaan, tinggalkan di bahagian komen atau anda boleh menggunakan forum kami untuk soalan teknikal yang lain.