[C8] Code mẫu Timer PWM-Capture

Discussion in 'Lớp C8' started by Manhdd, May 15, 2013.

  1. Manhdd

    Manhdd Cố Vấn CLB Staff Member

    << Folder tổng hợp tài liệu cho C8 >> (nội dung update đến 14-05-2013)
    mirror link: https://www.dropbox.com/sh/55s1lfi8wgyd2fe/exzxWn30SU


    Code mẫu của bạn zbloodelfz cho các bạn nào còn chưa chạy thành công:
    + Xuất PWM duty 10/100 tại chân TA0.1 (P1.2, P1.6)
    Code:
    /*
    * main.c
    *
    *  Created on: May 5, 2013
    *      Author: BloodElf
    */
    #include <msp430g2553.h>
     
     
     
    void main(void)
    {
        WDTCTL = WDTPW + WDTHOLD;    //Tat watchdog timer
     
     
        TA0CTL = TASSEL_2 +MC_1;    //Timer Clock = SMCLK = 1Mhz, Mode Up
        TA0CCTL1 = OUTMOD_3;        // CCR1 : xuat xung theo mode 3
     
        P1SEL |= BIT2+BIT6;            //Port 1.2 và 1.6 cung co the xung theo CCR1(TA0.1)
        P1SEL2 &=~(BIT2+BIT6);        // Xem data sheet de biet pin nao co chuc nang nay
     
        TA0CCR0 = 100;                //Chon CCR0 lam chu ky và CCR1 la nguong de thay
        TA0CCR1=10;                    //doi gia tri OUT theo mode
     
     
        _BIS_SR(LPM0_bits + GIE);    //Low-power mode
    }
     
    
    + Capture thời gian kích cạnh lên tại chân P2.1
    Code:
    /*
    * main.c
    *
    *  Created on: May 12, 2013
    *      Author: BloodElf
    */
    #include <msp430.h>
     
    int cap_value;
    void main(void)
    {
        WDTCTL = WDTPW + WDTHOLD;                //Tat watchdogtimer
        TA1CTL = TASSEL_2 + MC_2;                //Chon clocktimer = 1Mhz, Cont.up mode
        TA1CCTL1 |= CM_1+CCIS_0+CAP+CCIE;        // Config CCR1 la capture : kich canh len
                                                //Channel A, capture mode, enable ngat
        TA1R =0;
     
        P2SEL |= BIT1;                            //Config pin thanh chan capture theo ccr1
        P2SEL2 &=~BIT1;                            //Xem datasheet de biet pin nao co kha nang
        P2DIR &=~BIT1;                            //capture
     
        _BIS_SR(LPM0_bits + GIE);                //Low-power mode + enable ngat toan cuc
    }
    #pragma vector=TIMER1_A1_VECTOR
    __interrupt void TA1IV_Interrupt (void)
    {
        {
        case TA1IV_TACCR1:
        {
            cap_value = TA1CCR1;                //Lay gia tri capture vo bien cap_value
            TA1R =0;                            //Reset bo dem timer
            //CCR1+=31250;
            break;
        }
        case TA1IV_TA1CCR2:
        {
        }
        case TA1IV_TAIFG :
        {
        }
        }
     
    }
    
    Bài tập phát triển code PWM:
    - Đưa thử xung PWM vào 2 ngõ vào của module BJT, thay đổi duty và quan sát (chú ý để buzzer hoạt động cần cấp nguồn 5V cho main)
    - Dùng cả CCR1 và CCR2 của TimerA0 để tạo 2 xung PWM cho 2 LED.
    - Thay thế TimerA0 bằng TimerA1 khi xuất PWM.
    - Dùng TimerA0 để xuất PWM trên LED, TimerA1 tăng giảm duty theo chu kỳ.
    - Tạo 3 xung PWM cấp cho Led 3 màu, làm thay đổi màu sắc tùy ý theo bảng màu R-G-B. Led 3 màu thường bán 3k/con tại tiệm Led 158LTK; gồm 4 chân theo thứ tự: R-Anot-G-B, Anot là chân dài nhất. Có thể kết hợp TimerA0 và TimerA1 tạo 3 xung PWM; hoặc có thể chỉ dùng 1 TimerA (Max duty khi tràn Timer, 3 duty ứng với CCR0-1-2).
    ---
     
  2. dangkhoa913

    dangkhoa913 Trứng gà

    cho e hỏi tần cung cấp cho CCP1 là bao nhiêu để e có thể đọc được tính hiệu động cơ trả về ,vì nếu tần số nhanh quá thì MCU ko thực hiện được chuyện gì khác ngoài chuyện ngắt CCP
     
  3. zbloodelfz

    zbloodelfz Cố Vấn CLB Staff Member

    Hi dangkha913,
    Thế thì em phải tính xem tốc độ xung trả về tối đa của động cơ là bao nhiêu mà cho tần số timer thích hợp. Vd: DCMotor 2000 xung/vòng, em muốn điều khiển tối đa 3000 vòng/phút ~ 50 vòng/s ~ 100000 xung/s ~ delta T giữa 2 xung 10us, trong khi tần số MCU mặc định là 1us => vậy là vẫn đủ đáp ứng cho một số lệnh khác. Nếu các công việc khác tốn nhiều thơi gian hơn thì em nên xem xét tăng tần số MCU lên
     
  4. dangkhoa913

    dangkhoa913 Trứng gà

    vâng e đã khác phục được rồi, e cảm ơn :1cool_byebye:
     
Loading...

Share This Page