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 nadi bervariasi.

Untuk memahami konsep ini dengan jelas mempertimbangkan denyut jam atau isyarat gelombang persegi mana pun ia mempunyai kitaran tugas 50% yang bermaksud tempoh Ton dan Toff adalah sama, Tempoh total di mana isyarat itu tinggi dan tempoh di mana isyarat rendah disebut jumlah jangka waktu.

Untuk gambar yang ditunjukkan di atas gelombang ini mempunyai kitaran tugas 50%

Kitaran tugas = (Masa ON / Jumlah Masa) * 100

Waktu ON - masa yang mana isyaratnya tinggi

Waktu OFF - masa lawan yang mana isyaratnya rendah Jumlah masa -Jumlah masa nadi (masa ON dan OFF)

Langkah 1: Memilih Mikrokontroler

Memilih Mikrokontroler
Memilih Mikrokontroler

Memilih mikrokontroler yang sesuai untuk projek ini adalah bahagian penting dari projek PWM isyarat dapat dihasilkan dalam mikrokontroler dengan saluran PWM (CCP register). Untuk projek ini saya bercadang untuk berpegang pada pic16f877. anda boleh memuat turun pautan lembaran data yang diberikan di bawah

Lembaran data PIC16F877a klik di sini

Modul CCP bertanggungjawab untuk menghasilkan isyarat PWM. CCP1 dan CCP2 digandakan dengan PORTC. PORTC adalah port dua arah lebar 8-bit. Daftar arah data yang sesuai adalah TRISC. Menetapkan TRISC bit (= 1) akan menjadikan pin PORTC yang sesuai sebagai input. Membersihkan bit TRISC (= 0) akan menjadikan pin PORTC yang sesuai sebagai output.

TRISC = 0; // Menghapus bit ini akan menjadikan PORTC sebagai output

Langkah 2: CONFIGURE CCP MODULE

MODUL CCP KONFIGURASI
MODUL CCP KONFIGURASI
MODUL CCP KONFIGURASI
MODUL CCP KONFIGURASI

CCP - MODUL CAPTURE / COMPARE / PWM

Setiap modul Capture / Bandingkan / PWM (CCP) mengandungi register 16-bit yang boleh beroperasi sebagai:

• Daftar Tangkap 16-bit

• Daftar perbandingan 16-bit

• Daftar PWM Master / Slave Duty Cycle

Konfigurasikan daftar CCP1CON ke mod PWM

Keterangan Daftar

CCPxCON Daftar ini digunakan untuk Mengkonfigurasi modul CCP untuk operasi Tangkap / Bandingkan / PWM.

CCPRxL Daftar ini menyimpan bit 8-Msb PWM, 2 bit lebih rendah akan menjadi sebahagian daripada daftar CCPxCON.

Kaunter bebas TMR2 yang akan dibandingkan dengan CCPR1L dan PR2 untuk menghasilkan output PWM.

Sekarang saya akan menggunakan binari untuk mewakili bit untuk mengkonfigurasi daftar CCP1CON.

rujuk gambar di atas.

CCP1CON = 0b00001111;

Anda juga boleh format hex

CCP1CON = 0x0F; // mengkonfigurasi daftar CCP1CON untuk mod PWM

Langkah 3: Mengkonfigurasi Modul Timer2 (Daftar TMR2)

Mengkonfigurasi Modul Timer2 (Daftar TMR2)
Mengkonfigurasi Modul Timer2 (Daftar TMR2)

Timer2 adalah pemasa 8-bit dengan prescaler dan postscaler. Ia dapat digunakan sebagai asas waktu PWM untuk mod PWM modul CCP. Daftar TMR2 boleh dibaca dan boleh ditulis dan dibersihkan di mana-mana peranti Tetapkan Semula.

Daftar T2CON ditunjukkan

Prescale dan postscale akan menyesuaikan frekuensi output gelombang PWM yang dihasilkan.

Kekerapan = frekuensi jam / (4 * prescaler * (PR2-TMR2) * Postscaler * count)

Di mana Tout = 1 / frekuensi

T2CON = 0b00000100;

Ini akan menghasilkan kristal 2.5 KHz @ 1Mhz atau 100KHz @ 4MHz (secara praktikal ada batasan untuk frekuensi PWM ini merujuk lembaran data tertentu untuk maklumat lebih lanjut)

perwakilan hex

T2CON = 0x04; // aktifkan T2CON tanpa konfigurasi Prescaler dan skala pos

Langkah 4: Mengkonfigurasi PR2 (Daftar Tempoh2 Timer2)

Modul Timer2 mempunyai daftar jangka masa 8-bit, PR2. Penambah masa Timer2 dari 00h sehingga sepadan dengan PR2 dan kemudian diset semula ke 00h pada kitaran kenaikan seterusnya. PR2 adalah daftar yang boleh dibaca dan boleh ditulis. Daftar PR2 dimulakan ke FFh setelah Reset.

Menetapkan julat yang sesuai untuk PR2 akan memungkinkan penggunaan untuk mengubah kitaran tugas gelombang PWM yang dihasilkan

PR2 = 100; // Tetapkan masa Kitaran ke 100 untuk mengubah kitaran tugas dari 0-100

Untuk kesederhanaan saya menggunakan PR2 = 100 dengan membuat CCPR1L = 80; 80% kitaran tugas dapat dicapai.

Langkah 5: Konfigurasikan Modul CCPR1l

Oleh kerana PR2 = 100 CCPR1l dapat dikonfigurasi di mana saja antara 0-100 untuk mendapatkan kitaran tugas yang diinginkan.

Langkah 6: Tulis Lakaran pada Anda MPLAB X IDE Kod Yang Diberi Di Bawah

Tulis Lakaran pada Anda MPLAB X IDE Kod Yang Diberi Di Bawah
Tulis Lakaran pada Anda MPLAB X IDE Kod Yang Diberi Di Bawah

#sertakan

void delay (int a) // fungsi untuk menjana kelewatan {

untuk (int i = 0; i <a; i ++)

{

untuk (int j = 0; j <144; j ++);

}

}

kekosongan utama ()

{TRISC = 0; // Menghapus bit ini akan menjadikan PORTC sebagai output.

CCP1CON = 0x0F; // mengkonfigurasi daftar CCP1CON untuk mod PWM

T2CON = 0x04; // aktifkan T2CON tanpa konfigurasi Prescaler dan skala pos.

PR2 = 100; // Tetapkan masa Kitaran ke 100 untuk mengubah kitaran tugas dari 0-100

semasa (1) {

CCPR1L = 75; // menjana 75% kelewatan kitaran tugas (1);

}

}

Saya juga telah membuat sedikit pengubahsuaian pada kod sehingga frekuensi gelombang PWM yang dihasilkan

Ini adalah kod yang disimulasikan dalam proteus dan gelombang output PWM ditunjukkan di bawah Untuk memuat naik ini di papan pengembangan gambar anda gunakan #sertakan dengan bit konfigurasi yang sesuai.

Terima kasih

Disyorkan: