Daftar Isi:
2025 Pengarang: John Day | [email protected]. Terakhir diubah: 2025-01-13 06:57
APA ITU PWM?
PWM STANDS FOR PULSE WIDTH MODULATION adalah teknik di mana lebar pulsa divariasikan.
Untuk memahami konsep ini dengan jelas pertimbangkan pulsa clock atau sinyal gelombang persegi apa pun yang memiliki siklus kerja 50% yang berarti periode Ton dan Toff sama, Durasi total saat sinyal tinggi dan durasi sinyal rendah disebut total jangka waktu.
Untuk gambar diatas gelombang ini memiliki duty cycle 50%
Siklus kerja = (Waktu ON / Total Waktu)*100
Waktu ON - waktu di mana sinyal tinggi
Waktu OFF - waktu musuh yang sinyalnya rendah Total waktu -Total periode waktu pulsa (waktu ON dan OFF)
Langkah 1: Memilih Mikrokontroler
Memilih mikrokontroler yang sesuai untuk proyek ini adalah bagian penting dari proyek sinyal PWM dapat dihasilkan di mikrokontroler dengan saluran PWM (register CCP). Untuk proyek ini saya berencana untuk tetap menggunakan pic16f877. Anda dapat mengunduh tautan lembar data yang diberikan di bawah ini
Lembar data PIC16F877a klik di sini
Modul CCP bertanggung jawab untuk menghasilkan sinyal PWM. CCP1 dan CCP2 dimultipleks dengan PORTC. PORTC adalah port dua arah lebar 8-bit. Register arah data yang sesuai adalah TRISC. Setting TRISC bit (=1) akan mengambil pin PORTC yang sesuai sebagai input. Menghapus bit TRISC (= 0) akan membuat pin PORTC yang sesuai menjadi output.
TRISC = 0; // Menghapus bit ini akan membuat PORTC sebagai output
Langkah 2: KONFIGURASI MODUL CCP
CCP - MODUL TANGKAP/BANDINGKAN/PWM
Setiap modul Capture/Compare/PWM (CCP) berisi register 16-bit yang dapat beroperasi sebagai:
• Register Tangkapan 16-bit
• Daftar perbandingan 16-bit
• Register Siklus Tugas Master/Slave PWM
Konfigurasikan register CCP1CON ke mode PWM
Daftar Deskripsi
CCPxCON Register ini digunakan untuk Konfigurasi modul CCP untuk operasi Capture/Compare/PWM.
CCPRxL Register ini menampung 8-Msb bit PWM, 2-bit yang lebih rendah akan menjadi bagian dari register CCPxCON.
TMR2 Free running counter yang akan dibandingkan dengan CCPR1L dan PR2 untuk menghasilkan output PWM.
Sekarang saya akan menggunakan biner untuk mewakili bit untuk mengkonfigurasi register CCP1CON.
rujuk gambar di atas.
CCP1CON = 0b00001111;
Anda juga dapat menggunakan format hex
CCP1CON = 0x0F; //mengonfigurasi register CCP1CON untuk mode PWM
Langkah 3: Mengonfigurasi Modul Timer2 (Register TMR2)
Timer2 adalah timer 8-bit dengan prescaler dan postscaler. Ini dapat digunakan sebagai basis waktu PWM untuk mode PWM modul CCP. Register TMR2 dapat dibaca dan ditulis dan dihapus pada perangkat apa pun. Reset.
Register T2CON ditampilkan
Prescale dan postscale akan menyesuaikan frekuensi keluaran gelombang PWM yang dihasilkan.
Frekuensi = frekuensi clock/(4*prescaler*(PR2-TMR2)*Postscaler*count)
Dimana Tout = 1/frekuensi
T2CON = 0b000000100;
Ini akan menghasilkan kristal 2.5 KHz @ 1Mhz atau 100KHz @ 4MHz (praktis ada batasan untuk frekuensi PWM ini, lihat lembar data tertentu untuk lebih jelasnya)
representasi heksagonal
T2CON = 0x04; // aktifkan T2CON tanpa konfigurasi Prescaler dan postscale
Langkah 4: Konfigurasi PR2 (Register Periode Timer2)
Modul Timer2 memiliki register periode 8-bit, PR2. Timer2 bertambah dari 00h hingga cocok dengan PR2 dan kemudian direset ke 00h pada siklus kenaikan berikutnya. PR2 adalah register yang dapat dibaca dan ditulis. Register PR2 diinisialisasi ke FFh setelah Reset.
Menyetel rentang yang sesuai untuk PR2 akan memungkinkan penggunaan untuk mengubah siklus kerja gelombang PWM yang dihasilkan
PR2 = 100; // Atur waktu Siklus ke 100 untuk memvariasikan siklus kerja dari 0-100
Untuk mempermudah saya menggunakan PR2=100 dengan membuat CCPR1L = 80; Siklus tugas 80% dapat dicapai.
Langkah 5: Konfigurasikan Modul CCPR1l
Karena PR2 = 100 CCPR1l dapat dikonfigurasi di mana saja antara 0-100 untuk mendapatkan siklus kerja yang diinginkan.
Langkah 6: Tulis Sketsa pada Anda MPLAB X IDE Kode Diberikan Di Bawah
#termasuk
void delay(int a) //fungsi untuk menghasilkan delay{
untuk(int i=0; i<a;i++)
{
untuk(int j=0;j<144;j++);
}
}
batal utama()
{ TRISC = 0; // Menghapus bit ini akan membuat PORTC sebagai output.
CCP1CON = 0x0F; //mengonfigurasi register CCP1CON untuk mode PWM
T2CON = 0x04; // aktifkan T2CON tanpa konfigurasi Prescaler dan postscale.
PR2 = 100; // Atur waktu Siklus ke 100 untuk memvariasikan siklus kerja dari 0-100
sementara(1){
CCPR1L = 75; //menghasilkan 75% duty cycle delay(1);
}
}
Saya juga melakukan sedikit modifikasi pada kode agar frekuensi gelombang PWM yang dihasilkan
Ini adalah kode yang disimulasikan dalam proteus dan gelombang PWM keluaran ditunjukkan di bawah ini. Untuk mengunggah ini ke papan pengembangan gambar Anda, gunakan #include dengan bit konfigurasi yang sesuai.
Terima kasih