Thông báo

Collapse
No announcement yet.

Giúp em giải thích các câu lệnh bài điều khiển động cơ bước !

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

  • Giúp em giải thích các câu lệnh bài điều khiển động cơ bước !

    Em mới học AVR , chưa hiểu được nhiều lệnh lắm, nhờ các anh giúp em hiểu nhưng câu lệnh sau nhé !
    #include<mega16.h>
    #include<delay.h>
    unsigned char stepA[] = {0xFF,0xFE,0xFD,0xFB,0xF7},
    stepB[] = {0xFF,0xEF,0xDF,0xBF,0x7F},
    stepC[] = {0xFF,0xEF,0xDF,0xBF,0x7F};
    unsigned char indexA,indexB,indexC;
    unsigned char n_data;
    unsigned char n_step=10;
    unsigned int n_step3=5000,n_i;
    void main(void)
    {
    PORTA=0xFF;
    DDRA=oxFF;

    PORTB=0xFF;
    DDRB=oxFF;

    PORTB=0xFF;
    DDRB=oxFF;

    PORTD=0xFF;
    DDRD=oxFF;

    TCCR0=0x00;
    TCNT0=0x00;
    OCR0=0x00;


    TCCR1A=0x00;
    TCCR1B=0x00;
    TCNT1H=0x00;
    TCNT1L=0x00;
    ICR1H=0x00;
    ICR1L=0x00;
    OCR1AH=0x00;
    OCR1AL=0x00;
    OCR1BH=0x00;
    OCR1BL=0x00;


    ASSR=0x00;
    TCCR2=0x00;
    TCNT2=0x00;
    OCR2=0x00;

    MCUCR=0x00;
    MCUCSR=0x00;

    TIMSK=0x00;

    ACSR=0x80;
    SFIOR=0x00;

    While (1)
    {
    if(indexA ++>3) indexA=1;
    if(indexB ++>3) indexB=1;
    if(indexC ++>3) indexC=1;
    PORTA = stepA[indexA]&stepB[indexB];
    PORTC = stepC[indexC];

    delay_ms(500);
    }}
    |

  • #2
    Sao không có ai giúp em vậy ? Tại em mới học AVR nên có rất nhiều thứ chưa biết , anh nào biết lệnh nào thì cứ nói cho em biết , không cần tất cả đâu !
    Em cảm ơn !
    |

    Comment


    • #3
      Chào bạn, mấy bữa nay ko online nên ko thấy bài post này.
      Mình xin đóng góp một chút ý kiến sau
      Code:
      unsigned char stepA[] = {0xFF,0xFE,0xFD,0xFB,0xF7},
      stepB[] = {0xFF,0xEF,0xDF,0xBF,0x7F},
      stepC[] = {0xFF,0xEF,0xDF,0xBF,0x7F};
      Đoạn code này khai báo 3 mảng cho 3 trạng thái lõi của 3 động cơ bước đơn cực
      Dùng 4 bit thấp của PORTA và C. Phương pháp điều khiển ở đây là đủ bước(full step) đơn lõi:
      1000
      0100
      0010
      0001
      Theo trạng thái trên là kích cuộn dây ở mức thấp
      0xFE : 11111110
      0xFD: 11111101
      0xFB: 11111011
      0xF7: 11110111
      Mỗi trang thái như trên sẽ làm động cơ dịch một bước
      Như vậy để động cơ quay thì ta cho các chân PORT ở trạng thái tuần tự như trên do đó vòng lập while(1) sẽ làm động cơ quay mãi
      Trong code thì trạng thái 0xFF là trạng thái dừng của động cơ, nó thường làm trạng thái khởi tại khi cấp nguồn.
      Do đó trong vòng lập while có đoạn code là
      if(indexA ++>3) indexA=1;
      if(indexB ++>3) indexB=1;
      if(indexC ++>3) indexC=1;
      Đoạn này dùng khi mảng chứa trạng thái lõi của động cơ ở giá trị index > 3(đang ở trang thái 0xF7) thì trạng thái kề bên là 0xFE(index = 1)
      Còn phần delay_ms(500); là quyết định tốc độ dịch bước của động cơ, thời gian delay càng ngắn thì động cơ quay càng nhanh nhưng moment của trục động cơ càng giảm, thời gian càng dài thì ngược lại

      Bạn xem thêm hướng dẫn Step motor của Hoàng Hiệp sẽ hiểu rõ thuật toán điều khiển hơn.
      Có gì thắc mắc hỏi thêm đi, có gì biết tui sẽ góp ý cho. Có nhiều cao thủ khác sẽ hỗ trợ bạn
      Chúc bạn thành công
      Tự động hóa hôm nay cho một thế hệ robot mai sau

      Comment

      Về tác giả

      Collapse

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

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

      Collapse

      Đang tải...
      X