Thông báo

Collapse
No announcement yet.

vấn đề về pwm trong avr(atmega32)

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

  • vấn đề về pwm trong avr(atmega32)

    Em muốn tạo xung pwm trong avr để điều khiển động cơ dc. Em có đoạn code sau nhưng em chưa hiểu được công dụng của các lệnh. Mong các bác giúp em với:
    /************************************************** ***
    This program was produced by the
    CodeWizardAVR V2.04.1 Evaluation
    Automatic Program Generator
    © Copyright 1998-2009 Pavel Haiduc, HP InfoTech s.r.l.
    http://www.hpinfotech.com

    Project :
    Version :
    Date : 6/12/2009
    Author : Freeware, for evaluation and non-commercial use only
    Company :
    Comments:


    Chip type : ATmega32
    Program type : Application
    AVR Core Clock frequency: 8.000000 MHz
    Memory model : Small
    External RAM size : 0
    Data Stack size : 512
    ************************************************** ***/

    #include <mega32.h>

    // Timer 0 overflow interrupt service routine
    interrupt [TIM0_OVF] void timer0_ovf_isr(void)
    {
    // Place your code here

    }

    // Timer 0 output compare interrupt service routine
    interrupt [TIM0_COMP] void timer0_comp_isr(void)
    {
    // Place your code here

    }

    // Declare your global variables here

    void main(void)
    {
    // Declare your local variables here

    // Input/Output Ports initialization
    // Port A initialization
    // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
    // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
    PORTA=0x00;
    DDRA=0x00;

    // Port B initialization
    // Func7=In Func6=In Func5=In Func4=In Func3=Out Func2=In Func1=In Func0=In
    // State7=T State6=T State5=T State4=T State3=0 State2=T State1=T State0=T
    PORTB=0x00;
    DDRB=0x08;

    // Port C initialization
    // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
    // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
    PORTC=0x00;
    DDRC=0x00;

    // Port D initialization
    // Func7=Out Func6=In Func5=Out Func4=Out Func3=In Func2=In Func1=In Func0=In
    // State7=0 State6=T State5=0 State4=0 State3=T State2=T State1=T State0=T
    PORTD=0x00;
    DDRD=0xB0;

    // Timer/Counter 0 initialization
    // Clock source: System Clock
    // Clock value: 125.000 kHz
    // Mode: Phase correct PWM top=FFh
    // OC0 output: Inverted PWM
    TCCR0=0x73;
    TCNT0=0x00;
    OCR0=0x7f;

    // Timer/Counter 1 initialization
    // Clock source: System Clock
    // Clock value: 31.250 kHz
    // Mode: Fast PWM top=03FFh
    // OC1A output: Inverted
    // OC1B output: Non-Inv.
    // Noise Canceler: Off
    // Input Capture on Falling Edge
    // Timer 1 Overflow Interrupt: Off
    // Input Capture Interrupt: Off
    // Compare A Match Interrupt: Off
    // Compare B Match Interrupt: Off
    TCCR1A=0xE3;
    TCCR1B=0x0C;
    TCNT1H=0x00;
    TCNT1L=0x00;
    ICR1H=0x00;
    ICR1L=0x00;
    OCR1AH=0x08;
    OCR1AL=0xe2;
    OCR1BH=0x0f;
    OCR1BL=0x0f;

    // Timer/Counter 2 initialization
    // Clock source: System Clock
    // Clock value: 7.813 kHz
    // Mode: Fast PWM top=FFh
    // OC2 output: Non-Inverted PWM
    ASSR=0x00;
    TCCR2=0x6F;
    TCNT2=0x00;
    OCR2=0x00;

    // External Interrupt(s) initialization
    // INT0: Off
    // INT1: Off
    // INT2: Off
    MCUCR=0x00;
    MCUCSR=0x00;

    // Timer(s)/Counter(s) Interrupt(s) initialization
    TIMSK=0x03;

    // Analog Comparator initialization
    // Analog Comparator: Off
    // Analog Comparator Input Capture by Timer/Counter 1: Off
    ACSR=0x80;
    SFIOR=0x00;

    // Global enable interrupts
    #asm("sei")

    while (1)
    {
    // Place your code here

    };
    }
    Các bác có thể hướng dẫn cho em thêm cách khởi tạo pwm trong timer0, tại nó có nhiều lựa chọn mà em lại quá gà để có thể hiểu được. Em cảm ơn các bác nhiều.

  • #2
    bạn đọc datasheet của nó ý ,khá chi tiết

    Comment


    • #3
      Nguyên văn bởi enter88 Xem bài viết
      bạn đọc datasheet của nó ý ,khá chi tiết
      mà bạn có datasheet của atmega32 bằng tiếng việt ko? chứ tiếng anh em còn tệ lắm. Thank bạn!

      Comment


      • #4
        Các thông số thiết lập trong timer0 như sau:
        -Clock source: chon clock của hệ thống hay từ pin TOSC1.
        -Clock value: giá trị cho bộ đếm timer0
        -Mode:
        *Normal mode: chế độ timer bình thường đếm từ 0-0xFF
        *Phase correct PWM top va Fast PWM: chạy timer và khởi tạo xung PWM, so sánh gia trị timer với OCR0 rồi xuất ra PWM (nếu chọn output PWM) và có thể tạo ra output compare interrupt..
        * CTC: ở chế độ này khi timer0 đếm đến giá trị cua OCR0 thì bộ đếm reset về 0 trở lại.

        -Output:
        *disconnect: ko kết nối.
        * toggle: lật
        * set, clear: lên mức 1 hoặc xuống mức 0 khi co sự kiện ngắt.
        * Non-inverted PWM: chân OCR0 xuất tín hiệu như sau: bằng 1 từ giá trị 0x00 dến gia trị OCR0, bằng 0 từ OCR0 đến 0xFF
        * Inverted PWM: ngược lại với cái ở trên

        Các thông số còn lại chắc dễ hiểu. Khuyên bạn cố gắng đọc tiếng Anh, từ từ sẽ quen,tài liệu tiếng Việt ít và ko chuẩn bằng..Nhiều khi đọc tiếng Anh dễ hiểu hơn tiếng Việt đấy

        Comment


        • #5
          Nguyên văn bởi maithuatri Xem bài viết
          mà bạn có datasheet của atmega32 bằng tiếng việt ko? chứ tiếng anh em còn tệ lắm. Thank bạn!
          DATA sheet bạn cứ tập đọc bằng tiếng anh đi dần dần mới quen chứ
          hầu hết đều là bằng tiếng anh thôi.

          Comment


          • #6
            đọc datasheet thì cũng ra vẫn đề thật nhưng mà đây là mẫu tạo ra trong phần mềm CodeWizardAVR các bác giả thích cho maithuatri đi.

            Comment


            • #7
              PMW bạn nên dùng time 1 , ok

              Comment


              • #8
                Nguyên văn bởi zinix Xem bài viết
                Các thông số thiết lập trong timer0 như sau:
                -Clock source: chon clock của hệ thống hay từ pin TOSC1.
                -Clock value: giá trị cho bộ đếm timer0
                -Mode:
                *Normal mode: chế độ timer bình thường đếm từ 0-0xFF
                *Phase correct PWM top va Fast PWM: chạy timer và khởi tạo xung PWM, so sánh gia trị timer với OCR0 rồi xuất ra PWM (nếu chọn output PWM) và có thể tạo ra output compare interrupt..
                * CTC: ở chế độ này khi timer0 đếm đến giá trị cua OCR0 thì bộ đếm reset về 0 trở lại.

                -Output:
                *disconnect: ko kết nối.
                * toggle: lật
                * set, clear: lên mức 1 hoặc xuống mức 0 khi co sự kiện ngắt.
                * Non-inverted PWM: chân OCR0 xuất tín hiệu như sau: bằng 1 từ giá trị 0x00 dến gia trị OCR0, bằng 0 từ OCR0 đến 0xFF
                * Inverted PWM: ngược lại với cái ở trên

                Các thông số còn lại chắc dễ hiểu. Khuyên bạn cố gắng đọc tiếng Anh, từ từ sẽ quen,tài liệu tiếng Việt ít và ko chuẩn bằng..Nhiều khi đọc tiếng Anh dễ hiểu hơn tiếng Việt đấy
                ok. thanhk các bạn nhiêu. Để mình cố gắng cày một thời gian xem sao. Hi vọng là mình ko còn gà nữa.....

                Comment


                • #9
                  bạn đọc tài liệu này nhe. rất dễ hiểu
                  http://www.4shared.com/file/108965086/4e5a8153/pwm.html

                  Comment

                  Về tác giả

                  Collapse

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

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

                  Collapse

                  Đang tải...
                  X