Hasilkan Gelombang PWM Dengan Mikrokontroler PIC: 6 Langkah
Hasilkan Gelombang PWM Dengan Mikrokontroler PIC: 6 Langkah
Anonim
Hasilkan Gelombang PWM Dengan Mikrokontroler PIC
Hasilkan Gelombang PWM Dengan Mikrokontroler PIC
Hasilkan Gelombang PWM Dengan Mikrokontroler PIC
Hasilkan Gelombang PWM Dengan Mikrokontroler PIC
Hasilkan Gelombang PWM Dengan Mikrokontroler PIC
Hasilkan Gelombang PWM Dengan Mikrokontroler PIC

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
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

KONFIGURASI MODUL CCP
KONFIGURASI MODUL CCP
KONFIGURASI MODUL CCP
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)

Mengonfigurasi Modul Timer2 (Register TMR2)
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

Tulis Sketsa pada Anda MPLAB X IDE Kode Diberikan Di Bawah
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