Thông báo

Collapse
No announcement yet.

PIC30F4012 và 6 chân PWM độc lập

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • PIC30F4012 và 6 chân PWM độc lập

    Chào các anh chị e trên dientuvietnam.net, hiện tại em có khó khăn 1 số khó khăn khi làm việc với PIC30F4012. Em muốn tạo 6 xung PWM độc lập phụ thuộc 6 đầu vào ADC AN0-AN5. E đã sử dụng code của anh namqn bên picvietnam và tạo ra được 3 xung PWM ở các chân mức cao (3 xung này giống nhau và chỉ phụ thuộc vào ADC AN0). Rất mong anh chị giúp đỡ e khó khăn này!
    Đây là code anh Nam viết:
    /************************************************** *****************************
    ; Vidu5-1.c la chuong trinh viet bang C30 de chay tren mot dsPIC *
    ; Chuong trinh thuc hien viec sau: Doc tin hieu analog vao tu AN0, dieu *
    ; chinh do rong xung ra tai chan RE0, RE2, va RE4 mot cach tuong ung. *
    ;************************************************* ******************************

    ; Tac gia : Nguyen Quang Nam *

    ; Don vi : PIC Viet Nam *

    ; Ten tap tin : Vidu5-1.c *

    ; Ngay : 27/08/2006 *

    ; Phien ban : 0.01 *

    ; Nhung tap tin can thiet khac: p30F4012.gld, p30f4012.h *

    ; Cong cu duoc dung: MPLAB 7.31 *
    ; C30 2.02 SE *
    ; ASM30 2.14 *
    ; LNK30 2.14 *
    ------------------------------------------------------------------------------*/
    #include <p30f4012.h>

    _FOSC(CSW_FSCM_OFF & FRC_PLL4);
    _FWDT(WDT_OFF);
    _FBORPOR(PBOR_OFF & MCLR_EN);
    _FGS(CODE_PROT_OFF);

    //------------------------------------------------------------------------------
    //Cac hang so cua chuong trinh (gia tri tuc thoi dung trong chuong trinh)
    #define PWM_PORT PORTE //Cac tin hieu PWM nam o cong E
    #define PWM_TRIS TRISE //Thanh ghi 3 trang thai cho cac tin hieu PWM
    #define PWM_LAT LATE //Thanh ghi chot cac tin hieu PWM
    #define Fcy 8000000 //Tan so thuc thi lenh
    #define Fpwm 40000 //Tan so PWM = 40 kHz

    //Cac prototype cho cac chuong trinh con
    void Init_PORTS(void);
    void Init_MCPWM(void);
    void Init_ADC10(void);

    //Cac bien toan cuc
    unsigned int ADCValue;

    //------------------------------------------------------------------------------
    //Chuong trinh chinh
    int main(void) {
    Init_PORTS(); //Khoi tao cac cong I/O
    Init_MCPWM(); //Khoi tao module PWM
    Init_ADC10(); //Khoi tao module ADC
    while (1) Nop();
    }

    //Chuong trinh con khoi tao cac cong I/O, de xuat cac tin hieu PWM, va doc tin
    //hieu dieu chinh cua bien tro tai AN0
    void Init_PORTS(void) {
    PWM_LAT = 0; //Xoa thanh ghi chot cac tin hieu PWM
    PWM_TRIS = 0xFFC0; //Cac tin hieu PWM nam tai RE0..RE5
    TRISB = 0x0001; //Chan RB0 la ngo vao analog AN0, cac chan khac
    //la ngo ra
    }

    //Chuong trinh con khoi tao module chuyen doi A/D, doc ngo vao AN0
    void Init_ADC10(void) {
    ADPCFG = 0xFFFE; //Cac chan khac la digital, chan AN0/RB0 la analog
    ADCON1 = 0x0060; //Module PWM cham dut lay mau va kich hoat
    //viec chuyen doi A/D
    // ADCON1 = 0x0040; //Timer 3 cham dut lay mau va kich hoat
    //viec chuyen doi A/D
    ADCON2 = 0;
    ADCHS = 0; //Kenh 0 doc tin hieu giua AN0 va AVss
    ADCSSL = 0; //Khong quet cac ngo vao
    ADCON3 = 0x0103; //Dung 1 TAD cho lay mau, dung clock he thong,
    //TAD = 2xTcy = 250 ns
    /* TMR3 = 0; //Xoa thanh ghi dem cua Timer 3
    PR3 = 0x03E8; //Nguong delay cho TMR3 la khoang 1 ms
    T2CON = 0x8010; //Prescale = 1:8, bat cho TMR3 chay
    */
    _ADIF = 0; //Xoa co ngat ADC
    _ADIE = 1; //Cho phep ngat ADC
    _ADON = 1; //Bat module ADC
    _ASAM = 1; //Khoi dong che do tu dong lay mau
    }

    //Chuong trinh con khoi tao module PWM
    void Init_MCPWM(void) {
    PTPER = Fcy/Fpwm - 1; //Dat thanh ghi chu ky voi tan so PWM = 40 kHz
    SEVTCMP = PTPER;
    PWMCON1 = 0x070F; //Chi dung cac chan PxL, mot cach doc lap
    OVDCON = 0xFF00; //Khong dung overdrive
    PDC1 = 0x0064; //Khoi tao PWM1, 2, va 3 la 25%
    PDC2 = 0x0064;
    PDC3 = 0x0064;
    PWMCON2 = 0x0F00; //Postscale = 1:16
    PTCON = 0x8000; //Kich hoat module PWM
    }

    //Trinh phuc vu ngat cho ADC
    void _ISR _ADCInterrupt(void)
    {
    ADCValue = ADCBUF0 >> 1; //Chi lay 9-bit cao nhat cua ket qua ADC
    PDC1 = ADCValue; //Cap nhat cac thanh ghi dem chu ky nhiem vu
    PDC2 = ADCValue;
    PDC3 = ADCValue;
    _ADIF = 0;
    }
    pham quoc viet

  • #2
    datasheet pic 16F877A

    mấy bạn cho mình xin 35 tập lệnh pic 16f877a được dịch ra tiếng việt chuẩn nhé. thanks nhiều và chux vui !

    Comment


    • #3
      hix! Chưa có bác nào quan tâm tới đề tài của e à?
      pham quoc viet

      Comment


      • #4
        Không được đâu bạn.
        Nó sử dụng chung counter và chung cả chọn tần số.
        Mục đích thiết kế này của chip là để dùng cho các ứng dụng ví dụ như BLDC , inverter...
        Còn bạn muốn thêm 3 kênh PWM nữa thì có thể dùng output compare của chip.

        Sông dài, Thuyền lớn, Biển rộng bao la.
        Tháo neo ngôn ngữ, lèo lái con thuyền kiến thức nhân loại.

        Comment


        • #5
          Còn bạn muốn thêm 3 kênh PWM nữa thì có thể dùng output compare của chip.
          Bạn quoc_thaibk có thể nói rõ thêm cho mình dùng output compare thế nào ko?
          Mình đọc trong datasheet, nó nói các chân PWM có thể hoạt động 2 chế độ
          + Chế độ bù ( Complementary)
          +Chế độ độc lập ( Independent)
          Theo mình hiểu thì ở chế độ 1, 6 Xung PWm này sẽ chia làm 3 cặp cao thấp ( ngược nhau) dùng điều khiển động cơ có đảo chiều.
          Còn chế độ thứ 2 thì 6 cái đó là độc lập có phải không bạn? hay mình phải hiểu nghĩa độc lập theo 1 cách khác?
          ở đây mình cũng chỉ thấy có 3 thanh ghi thiết lập duty cycle cho 3 PWM là PDC1, PDC2, PDC3 nên ko biết nó thiết lập 6 xung PWM độc lập ra làm sao nữa?
          Bạn có thể nói chi tiết hơn cho mình về những điều trên được không? Cảm ơn bạn rất nhiều!
          pham quoc viet

          Comment


          • #6
            Output compare thì bạn đọc data sheet của chip là xài được.
            Chế độ độc lập và chế độ bù của nó dùng để tùy topology của mạch kích mình là gì.
            Có 1 số mạch lái FET,IGBT thì yêu cầu bù có 1 số mạhc yêu cầu độc lập

            Sông dài, Thuyền lớn, Biển rộng bao la.
            Tháo neo ngôn ngữ, lèo lái con thuyền kiến thức nhân loại.

            Comment

            Về tác giả

            Collapse

            vietbkhn Tìm hiểu thêm về vietbkhn

            Bài viết mới nhất

            Collapse

            Đang tải...
            X