• Webdien.com - Cầu nối dân điện


    1. [HOT] - Webdien đang tuyển các vị trí quản lý cao cấp

      ntech.com.vn

  • Kết quả 1 đến 6 của 6

    Chủ đề: PWM với ATMEGA32

    1. #1
      Tham gia
      01-03-2012
      Bài viết
      18
      Cảm ơn
      2
      Được cảm ơn 6 lần, trong 6 bài

      Mặc định PWM với ATMEGA32

      mình đang lập trình điều khiển 2 động cớ dùng phương pháp điều chế độ rộng xung,mình đang gặp rắc rối với việc thoát ra khỏi lời gọi hàm trong PWM,lời gọi hàm này mình dùng để điều khiển led đơn và led thanh đều không sao nhưng khi dùng với PWM thì nó không thoát được
      mạch:có 4 nút START,STOP,LEFT,RIGNT,ứng với 4 chế độ chạy ,dừng rẽ trái,rẽ phải
      còn đây là code:
      /*
      * test2_motor.c
      *

      */


      #include <avr/io.h>
      #include <avr/delay.h>
      #include <math.h>
      /****** dung chay robot*/
      void stop_motor()
      {
      duty_cycle(0,0);
      _delay_ms(10);
      }
      /************ khởi tạo pwm trên chân PD4,PD5********/
      void init_pwm(void)
      {
      TCCR1A=(1<<COM1A1)|(1<<COM1B1)|(1<<WGM11);/*che do 14 fast pwm*/
      TCCR1B=(1<<WGM13)|(1<<WGM12)|(1<<CS10);
      ICR1=255;
      TIMSK=(1<<OCIE1A);
      }
      /**** hàm cấp phát độ rộng xung điều khiên động cơ với 2 tham số truyền vào là a,b****/
      void duty_cycle(uint8_t a,uint8_t b)
      {
      OCR1A=a;
      OCR1B=b;
      }
      /**** chạy hai bánh******/
      void run_motor()
      {
      duty_cycle(250,250);
      _delay_ms(1);
      }
      /*********** cho robot rẽ trái*******/
      void shift_left_motor()
      {
      duty_cycle(100,50);
      _delay_ms(2);
      }
      /**** cho robot rẽ phải****/
      void shift_right_motor()
      {
      duty_cycle(50,100);
      _delay_ms(2);
      }


      int main(void)
      { DDRC=0xF0;/* 4 nut start,stop,right,left cho độn cơ */
      PORTC=0x0F;
      DDRD|=_BV(PD5)|_BV(PD4);
      PORTD=0x00;
      init_pwm();
      while(1)
      {
      key_pad();
      }

      }
      void key_pad()
      {
      if(bit_is_clear(PINA,0))
      run_motor();
      else
      if(bit_is_clear(PINA,1))
      stop_motor();
      else
      if(bit_is_clear(PINA,2))
      shift_left_motor();/* re trai*/
      else
      if(bit_is_clear(PINA,3))
      shift_right_motor();/**re sang phai**/
      }

      --------------------------------------------------------------------------------
      Xem bài viết cùng chuyên mục:


    2. #2
      Tham gia
      16-04-2012
      Bài viết
      90
      Cảm ơn
      0
      Được cảm ơn 38 lần, trong 25 bài

      Mặc định Ðề: PWM với ATMEGA32

      Bài của bạn cần thêm vào hàm
      void stop_motor()
      {
      duty_cycle(0,0); hoặc duty_cycle(255,255) //tùy vào cấu hình ngõ ra PWM của bạn.
      _delay_ms(2); //hàm delay này khỏi cần cũng được.
      }

      Bạn thử xem thế nào?

    3. Những thành viên đã cảm ơn tantravinh vì bài viết hữu ích:


    4. #3
      Tham gia
      01-03-2012
      Bài viết
      18
      Cảm ơn
      2
      Được cảm ơn 6 lần, trong 6 bài

      Mặc định Ðề: PWM với ATMEGA32

      thank bạn,mình có hàm stop rùi với code này dùng atmega8,thì có vẻ ổn,còn với atmega32a thì nó vô tác dụng,nhiều bạn tại trường mình cũng gặp hiên tượng tương tự nhưng họ dùng PIC,mình nghĩ là PORTD của ATMEGA32A khác ATMEGA8,hoặc là chế độ PWM mình dùng này đối với ATMEGA32A còn thiếu cái gì đó,mình đang cố tìm cách khắc phục,nếu không được sẽ chọn chế độ khác và cấu trúc khác,cái hiện tượng này nhiều người bảo do win máy tính hoặc lỗi phần mền,mình đang cố tìm thêm.
      thank bạn!

    5. #4
      Tham gia
      01-03-2012
      Bài viết
      18
      Cảm ơn
      2
      Được cảm ơn 6 lần, trong 6 bài

      Mặc định Ðề: PWM với ATMEGA32

      mình thử lại với máy tính khác chạy rùi,thanhk bạn nhé,giờ chỉ làm mạch thật để test rùi tính toán sai số để thay đổi duty_cycle cho phù hợp.

    6. #5
      Tham gia
      16-12-2012
      Bài viết
      16
      Cảm ơn
      3
      Được cảm ơn 0 lần, trong 0 bài

      Mặc định Ðề: PWM với ATMEGA32

      cho em hỏi là mình dùng PWM để điều khiển động cơ xoay chiều được không mấy anh

    7. #6
      Tham gia
      01-03-2012
      Bài viết
      18
      Cảm ơn
      2
      Được cảm ơn 6 lần, trong 6 bài

      Mặc định Ðề: PWM với ATMEGA32

      theo mình là có thể trước đây mình từng thấy nhiều người dùng con TCA785 và vài con MOC và BT136,mình nghĩ có thể dùng PWM để thay đổi góc mở của BT136 để thay đổi tốc độ động cơ một chiều

    Trả lời với tài khoản Facebook

    Văn Võ Trạng Nguyên
    Hắc Hiệp Đại Chiến Thánh Bài 2
    Đặc Cảnh Diệt Ma
    Khử Ma Đạo Trưởng
    Cương Thi Diệt Tà
    Sự Hình Thành Của Đế Chế Mông Cổ
    NHỮNG KHOẢNH KHẮC ĐÁNG NHỚ CỦA GIẢI GOLF PHÚ MỸ HƯNG 2016