PIC Vietnam

PIC Vietnam (http://www.picvietnam.com/forum/index.php)
-   Những câu hỏi thường gặp (http://www.picvietnam.com/forum/forumdisplay.php?f=54)
-   -   Cấu hình mẫu cho PWM trong PIC 8-bit (http://www.picvietnam.com/forum/showthread.php?t=2623)

namqn 19-07-2008 08:17 PM

Cấu hình mẫu cho PWM trong PIC 8-bit
 
Đa số các PIC có module CCP, mà một trong những chức năng của nó là tạo ra tín hiệu PWM (pulse-width-modulation: điều chế độ rộng xung). Để thiết lập cấu hình cho module CCP, bạn có thể dùng đoạn chương trình sau làm điểm khởi đầu (ví dụ thiết lập cho module CCP2):
Code:

        TRISCbits.TRISC1 = 1;
        PR2 = 200;                //PR2 = (PWM period)*Fosc/(4*TMR2 prescale), 10 kHz
        CCP2CON = 0x0C;                //PWM mode, 2 LSBs of duty cycle are '0'
        CCPR2L = 100;                //50% duty initially
        PIR1bits.TMR2IF = 0;
        T2CON = 0x04;                //Timer 2 is on (prescale = 1:1, postscale = 1:1)
        TRISCbits.TRISC1 = 0;        //RC1 is an output (PWM output)

Một số PIC được thiết kế đặc biệt cho việc điều khiển động cơ (như PIC18Fxx31 hay PIC18Fxx30) có thêm module PCPWM, với khả năng điều chế độ rộng xung mạnh và linh hoạt hơn module CCP. Để thiết lập cấu hình cho module PCPWM, bạn có thể dùng đoạn chương trình sau làm điểm khởi đầu (ví dụ thiết lập cho PIC18F4431):
Code:

        PTCON0 = 0x04;                //postscale 1:1, prescale 1:4, free running
        PTPERH = 0;                //8 kHz @ 20 MHz
        PTPERL = 0x9B;
        PWMCON0 = 0x40;                //PWM0..5 are enabled for PWM output
        PWMCON1 = 0x01;                //postscale 1:1, output override are synchronized
                                //to the PWM time base
        DTCON = 0x05;                //0.5 us dead time @ 20 MHz
        OVDCOND = 0xFF;                //output on PWM I/O pin is controlled by duty cycle
                                //and time base
        OVDCONS = 0x00;                //PWM I/O is INACTIVE when POUT is cleared
        FLTCONFIG = 0x00;        //disable all fault pins
        SEVTCMPL = 0;
        SEVTCMPH = 0;
        PDC0H = 0;
        PDC1H = 0;
        PDC2H = 0;
        PDC3H = 0;
        PDC0L = 0x80;                //Duty cycle of 20.5% at PWM1
        PDC1L = 0xA0;                //Duty cycle of 25.6% at PWM3
        PDC2L = 0xC0;                //Duty cycle of 30.8% at PWM3
        PDC3L = 0xE0;                //Duty cycle of 35.9% at PWM7
        PTCON1bits.PTEN = 1;

Các đoạn chương trình mẫu trên được viết trong ngôn ngữ C, theo cú pháp của MPLAB C18.

Thân,


Múi giờ GMT. Hiện tại là 10:10 PM.

Tên diễn đàn: vBulletin Version 3.8.11
Được sáng lập bởi Đoàn Hiệp.
Copyright © PIC Vietnam