• 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


  • Kết quả 1 đến 7 của 7
    1. #1
      Tham gia
      20-04-2011
      Bài viết
      6
      Cảm ơn
      0
      Thanked 12 Times in 1 Post

      Thumbs up Điều khiển tốc độ động cơ Dc , sử dụng PWM of AVR

      Các bác xem chương trình của em có vấn đề j? mà khi chạy mô phỏng, động cơ chỉ quay được 2s rồi protues báo lỗi. Em sử dụng Timer 1, chế độ phase correct Pwm, 5 nút bấm, 1 nút quay thuận , 1 quay ngược, 1 dừng, 1 tăng tốc, 1 giảm tốc. Mà chương trình em viết sao LCD không hiển thị j cả? Sai ở đau không biết.

      ***Chương trinh*** viết bằng codevision avr
      #include <mega16.h>
      #include <delay.h>

      // Alphanumeric LCD Module functions
      #asm
      .equ __lcd_port=0x15 ;PORTC
      #endasm
      #include <lcd.h>
      #define ipwm1 OCR1AL
      #define RELAY PORTD.6
      // 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=In Func2=In Func1=In Func0=In
      // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
      PORTB=0x00;
      DDRB=0x00;

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

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

      // Timer/Counter 0 initialization
      // Clock source: System Clock
      // Clock value: Timer 0 Stopped
      // Mode: Normal top=FFh
      // OC0 output: Disconnected
      TCCR0=0x00;
      TCNT0=0x00;
      OCR0=0x00;

      // Timer/Counter 1 initialization
      // Clock source: System Clock
      // Clock value: 3.906 kHz
      // Mode: Ph. correct PWM top=00FFh
      // OC1A output: Inverted
      // OC1B output: Discon.
      // 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=0xC1;
      TCCR1B=0x05;
      TCNT1H=0x00;
      TCNT1L=0x00;
      ICR1H=0x00;
      ICR1L=0x00;
      OCR1AH=0x00;
      OCR1AL=0x00;
      OCR1BH=0x00;
      OCR1BL=0x00;

      // Timer/Counter 2 initialization
      // Clock source: System Clock
      // Clock value: Timer 2 Stopped
      // Mode: Normal top=FFh
      // OC2 output: Disconnected
      ASSR=0x00;
      TCCR2=0x00;
      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=0x00;

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

      // LCD module initialization
      lcd_init(16);

      while (1)
      {
      // Place your code here

      if(PORTA=0x08) // nut CT1 duoc bam
      {
      delay_ms(20); // Delay 20 millisecond
      lcd_putsf("speed 50");
      delay_ms(10);
      RELAY=1;
      ipwm1=125; //Dong Co quay thuan voi toc do bang 50% toc do dinh muc
      }

      if(PORTA=0x04) //nut CT2 duoc bam
      {
      delay_ms(20);
      lcd_putsf("speed 50");
      RELAY=0; //DAO CHIEU QUAY DONG CO
      ipwm1=125;
      }
      if(PORTA=0x02) // nut CT3 duoc bam
      {
      delay_ms(20);
      lcd_putsf("Fast speed 100");
      delay_ms(10);
      RELAY=1;
      ipwm1=255; //Tang toc DC toi toc do toi da theo chieu thuan
      }
      if(PORTA=0x01) // nut CT4 duoc bam
      {
      delay_ms(10);
      RELAY=1; //Giam toc DC theo chieu thuan
      delay_ms(10);
      lcd_putsf("Slow speed 50");
      ipwm1=125;
      }
      if(PORTA=0x08) // nut CT5 duoc bam
      {
      delay_ms(20);
      lcd_putsf("stop");
      ipwm1=0;
      }


      };
      }

      đây là file mạch nguyên lý và mô phỏng, các bạn giúp mình với. đồ án sắp phải nộp rồi
      http://www.mediafire.com/?o6h1cwd4moczswd

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


    2. #2
      Tham gia
      12-11-2009
      Bài viết
      3
      Cảm ơn
      7
      Được cảm ơn 0 lần, trong 0 bài

      Mặc định Ðề: Điều khiển tốc độ động cơ Dc , sử dụng PWM of AVR

      bị lỗi rồi bạn ơi!

    3. #3
      Tham gia
      11-04-2012
      Địa chỉ
      HCM
      Bài viết
      173
      Cảm ơn
      17
      Được cảm ơn 44 lần, trong 42 bài

      Mặc định Ðề: Điều khiển tốc độ động cơ Dc , sử dụng PWM of AVR

      Bạn coi lại, tốt nhất là không nên xài hàm delay() khi không cần thiết, nên dùng timer để định thơì.
      a

    4. #4
      Tham gia
      12-05-2012
      Bài viết
      13
      Cảm ơn
      12
      Được cảm ơn 2 lần, trong 2 bài

      Mặc định Ðề: Điều khiển tốc độ động cơ Dc , sử dụng PWM of AVR

      Trích dẫn Gửi bởi dktd.vn Xem bài viết
      Bạn coi lại, tốt nhất là không nên xài hàm delay() khi không cần thiết, nên dùng timer để định thơì.
      Timer làm gì cho tốn công à bạn, nếu ko cần quá chính xác thì ta làm cái vòng for cho chạy, có phải đỡ phải tốn 1 cai timer ko
      ví dụ với tần số là 8MHz (FRE = 8)

      void DELAY_MS(unsigned int n)
      {
      unsigned int i,j;
      n = n*FRE;
      for(i=0;i<n;i++)
      for(j=0;j<52;j++);
      }

      ta được hàm trễ milisecond

    5. #5
      Tham gia
      11-04-2012
      Địa chỉ
      HCM
      Bài viết
      173
      Cảm ơn
      17
      Được cảm ơn 44 lần, trong 42 bài

      Mặc định Ðề: Điều khiển tốc độ động cơ Dc , sử dụng PWM of AVR

      +++---o0o---+++
      Trích dẫn Gửi bởi maulanhauto54 Xem bài viết
      Timer làm gì cho tốn công à bạn, nếu ko cần quá chính xác thì ta làm cái vòng for cho chạy, có phải đỡ phải tốn 1 cai timer ko
      ví dụ với tần số là 8MHz (FRE = 8)

      void DELAY_MS(unsigned int n)
      {
      unsigned int i,j;
      n = n*FRE;
      for(i=0;i<n;i++)
      for(j=0;j<52;j++);
      }

      ta được hàm trễ milisecond
      Uhm, cái này quét led hết chê nè.
      a

    6. #6
      Tham gia
      18-05-2010
      Địa chỉ
      Long Hải
      Bài viết
      1,565
      Cảm ơn
      226
      Được cảm ơn 909 lần, trong 605 bài

      Mặc định Ðề: Điều khiển tốc độ động cơ Dc , sử dụng PWM of AVR

      Trích dẫn Gửi bởi maulanhauto54 Xem bài viết
      Timer làm gì cho tốn công à bạn, nếu ko cần quá chính xác thì ta làm cái vòng for cho chạy, có phải đỡ phải tốn 1 cai timer ko
      ví dụ với tần số là 8MHz (FRE = 8)

      void DELAY_MS(unsigned int n)
      {
      unsigned int i,j;
      n = n*FRE;
      for(i=0;i<n;i++)
      for(j=0;j<52;j++);
      }

      ta được hàm trễ milisecond
      như thế này thì sử dụng luôn cái hàm delay dựng sẵn. vì thực chất hàm delay cũng là do mấy cái hàm này mà ra.
      sử dụng hàm delay bằng timer là khi muốn sử dụng 2 công việc một lúc hoạc làm cho bộ nhớ đỡ tốn dung lượng (vì timer hoạt động độc lập với chương trình chính.
      VD: khi bạn muốn chương trình chính vẫn chạy mà có 1 con led vẫn chớp theo chu kỳ thì ta phải sử dụng timer chứ không được sử dụng delay.
      Cao Văn Hưởng
      Email: vanhuongcao@gmail.com

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


    8. #7
      Tham gia
      12-05-2012
      Bài viết
      13
      Cảm ơn
      12
      Được cảm ơn 2 lần, trong 2 bài

      Mặc định Ðề: Điều khiển tốc độ động cơ Dc , sử dụng PWM of AVR

      Trích dẫn Gửi bởi caovanhuong Xem bài viết
      như thế này thì sử dụng luôn cái hàm delay dựng sẵn. vì thực chất hàm delay cũng là do mấy cái hàm này mà ra.
      sử dụng hàm delay bằng timer là khi muốn sử dụng 2 công việc một lúc hoạc làm cho bộ nhớ đỡ tốn dung lượng (vì timer hoạt động độc lập với chương trình chính.
      VD: khi bạn muốn chương trình chính vẫn chạy mà có 1 con led vẫn chớp theo chu kỳ thì ta phải sử dụng timer chứ không được sử dụng delay.
      Mình biết delay người ta cũng viết kiểu kiểu như thế, đây là góp ý cho việc dùng timer tạo trễ. Còn như bạn nói...chuẩn quá còn gì. Mình ko ý kiến gì thêm :D

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

    Các Chủ đề tương tự

    1. Trợ giúp - điều khiển động cơ điện một chiều dùng chip vi điều khiển và hiển thị tốc độ trên led 7 thanh
      Bởi hồng phượng trong diễn đàn Các vấn đề ĐK chưa phân loại
      Trả lời: 6
      Bài cuối: 12-12-2014, 14:54
    2. Trả lời: 2
      Bài cuối: 07-11-2014, 13:47
    3. Trả lời: 0
      Bài cuối: 03-06-2014, 00:31
    4. help điều khiển triac BTA12-600b bắng vi điều khiển
      Bởi lamvanmanh trong diễn đàn Điện tử cơ bản
      Trả lời: 13
      Bài cuối: 29-12-2011, 06:19
    5. Trả lời: 4
      Bài cuối: 19-07-2010, 23:43
    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