Thông báo

Collapse
No announcement yet.

Xin chỉ cách lập trình cho động cơ bước

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

  • Xin chỉ cách lập trình cho động cơ bước

    Mình đã thiết kế mạch mô phỏng và lập trình cho động cơ bước. Nhưng động cơ của mình nó chỉ biết có quay sang phải (khi bấm công tắc trên) và quay sang trái (khi bấm công tắc dưới).

    Xin các bạn chỉ giúp mình cách làm cho nó có thể quay sang phải hoặc sang trái theo đúng số bước mà mình quy định trước.

    Nếu có thể điều khiển được tốc độ của nó thì càng tốt.

    Mình đã đính kèm file mô phỏng và code bên dưới

    Mình chỉ mới bắt đầu học thôi nên mong được chỉ giáo cách lập trình và thiết kế mạch
    Attached Files

  • #2
    Mới bắt đầu mà đã lập trình mô phỏng động cơ bước rồi. Mà hãy đọc kỹ nguyên lý điều khiển động cơ bước rồi thử làm nhé.

    Comment


    • #3
      Em cần gấp lắm rồi, sắp phải thuyết trình về cái này. Xin các Pro ra tay giúp đỡ !

      Comment


      • #4
        anh có thể giúp chú , nhưng là ngôn ngữ C, anh ghét asm !!!

        #include <REGX51.H>
        #include <stdio.h>
        const sequence[8] = {0x02,0x06,0x04,0x0c,0x08,0x09,0x01,0x03};
        unsigned char i,j;
        sbit button1=P1^0;
        sbit button2=P1^1;
        unsigned int speed=50;
        void DC(unsigned char n){P2_4= n&1;n>>=1;P2_5=n&1;n>>=1;P2_6=n&1;n>>=1;P2_7=n&1 ;}
        void delay(unsigned char time){
        unsigned char temp = 121;
        while(time--){while(temp--);};}
        void forward(void){
        i=i>0 ? i-1 : 7;
        DC(sequence[i]);
        delay(speed);}
        void reverse(void){
        i=i<7 ? i+1 : 0;
        DC(sequence[i]);
        delay(speed);}
        void main (){
        while(1){
        if(!P1_0) { forward(); }
        if(!P1_1) { reverse(); }
        };}

        Comment


        • #5
          Nguyên văn bởi trieuphong Xem bài viết
          anh có thể giúp chú , nhưng là ngôn ngữ C, anh ghét asm !!!

          #include <REGX51.H>
          #include <stdio.h>
          const sequence[8] = {0x02,0x06,0x04,0x0c,0x08,0x09,0x01,0x03};
          unsigned char i,j;
          sbit button1=P1^0;
          sbit button2=P1^1;
          unsigned int speed=50;
          void DC(unsigned char n){P2_4= n&1;n>>=1;P2_5=n&1;n>>=1;P2_6=n&1;n>>=1;P2_7=n&1 ;}
          void delay(unsigned char time){
          unsigned char temp = 121;
          while(time--){while(temp--);};}
          void forward(void){
          i=i>0 ? i-1 : 7;
          DC(sequence[i]);
          delay(speed);}
          void reverse(void){
          i=i<7 ? i+1 : 0;
          DC(sequence[i]);
          delay(speed);}
          void main (){
          while(1){
          if(!P1_0) { forward(); }
          if(!P1_1) { reverse(); }
          };}
          Hay quá! nhưng bạn có thể giải thích giúp mình các mã code được không? Mình chưa hiểu về lập trình động cơ bước. Mình cũng lập trình bằng C.

          Comment


          • #6
            Giải thích giúp đi bạn

            Comment


            • #7
              Nguyên văn bởi abc5 Xem bài viết
              Mình đã thiết kế mạch mô phỏng và lập trình cho động cơ bước. Nhưng động cơ của mình nó chỉ biết có quay sang phải (khi bấm công tắc trên) và quay sang trái (khi bấm công tắc dưới).

              Xin các bạn chỉ giúp mình cách làm cho nó có thể quay sang phải hoặc sang trái theo đúng số bước mà mình quy định trước.

              Nếu có thể điều khiển được tốc độ của nó thì càng tốt.

              Mình đã đính kèm file mô phỏng và code bên dưới

              Mình chỉ mới bắt đầu học thôi nên mong được chỉ giáo cách lập trình và thiết kế mạch
              Nếu bạn hỏi như này tức là bạn chưa hiểu về động cơ bước và lập trình VDK nhiều, cái project chắc bạn lại đi cóp nhặt ở đâu về, như vậy thì khó giúp bạn lắm

              Vấn đề của bạn xử lý rất đơn gian nếu như bạn chịu khó tìm hiểu:

              Ví dụ để điều khiển tốc độ động cơ bạn chỉ cần đặt tham số trễ (delay) giữa các
              lần phát xung bước

              Để di chuyển 1 số bước xác định thì bạn phải viết code đếm số bước đặt để phát xung, cái quan trọng hơn là phải làm phần để nhập số bước đấy vào, có thể dùng bàn phím, LCD, nhưng dùng truyền thông nối tiếp gửi xuống bằng PC thì hấp dẫn hơn nhiều.

              cho bạn xem cái project của mình xem có thấy kích thích không
              Viết bằng assem + VB.NET

              Click image for larger version

Name:	Drill Control.jpg
Views:	1
Size:	142.5 KB
ID:	1400308

              Comment


              • #8
                bác TreuPhong và các bác ơi,
                em viết code để test cái đông cơ step (6 dây, 2 cực), sao mà thay đổi trị delay tốc độ không thay đổi gì cả
                drive:
                Click image for larger version

Name:	st_drive.bmp
Views:	1
Size:	452.7 KB
ID:	1400408
                code đây ạ:



                byte FORWARD[4]={0x08,0x04,0x02,0x01};

                int DL, PP=0;

                void RUN();
                ////////////////////////////////////

                void main()
                {
                // TODO: USER CODE!!
                DL=100;
                while(true)
                {
                RUN();
                }
                }
                ////////////////////////////////////

                void RUN()
                {

                iF(PP>=4) PP=0;
                output_B(FORWARD[PP]);
                PP++;
                delay_us(DL);

                }

                tốc độ sem sem 10 vòng / phút thôi, đã thay DL = 1, 10, 50, 100, 1000 mà không thấy tốc độ thay đổi
                Last edited by t10000; 19-12-2014, 15:09.

                Comment


                • #9
                  Nguyên văn bởi t10000 Xem bài viết
                  bác TreuPhong và các bác ơi,
                  em viết code để test cái đông cơ step (6 dây, 2 cực), sao mà thay đổi trị delay tốc độ không thay đổi gì cả
                  drive:
                  [ATTACH]93105[/ATTACH]
                  code đây ạ:



                  byte FORWARD[4]={0x08,0x04,0x02,0x01};

                  int DL, PP=0;

                  void RUN();
                  ////////////////////////////////////

                  void main()
                  {
                  // TODO: USER CODE!!
                  DL=100;
                  while(true)
                  {
                  RUN();
                  }
                  }
                  ////////////////////////////////////

                  void RUN()
                  {

                  iF(PP>=4) PP=0;
                  output_B(FORWARD[PP]);
                  PP++;
                  delay_us(DL);

                  }

                  tốc độ sem sem 10 vòng / phút thôi, đã thay DL = 1, 10, 50, 100, 1000 mà không thấy tốc độ thay đổi
                  tốc độ sem sem 10 vòng / phút thôi, đã thay DL = 1, 10, 50, 100, 1000 mà không thấy tốc độ thay đổi[/QUOTE]

                  1.Bạn kiểm tra lại phần cứng.Thử mô phỏng xem nó có chạy ra sao.
                  2.Mô phỏng tốt thì thử viết lại hàm DeLay dùng timer/counter nhé. Trước một lần mình dùng vòng kia, nhưng chạy ko chuẩn. Delay để cỡ 10-100 micro giây.
                  Thân

                  Comment


                  • #10
                    Nguyên văn bởi trieuphong

                    1.Bạn kiểm tra lại phần cứng.Thử mô phỏng xem nó có chạy ra sao.
                    2.Mô phỏng tốt thì thử viết lại hàm DeLay dùng timer/counter nhé. Trước một lần mình dùng vòng kia, nhưng chạy ko chuẩn. Delay để cỡ 10-100 micro giây.
                    Thân
                    Cảm ơn trieuphong
                    mình nghĩ có lẽ do phần cứng không đáp ứng với tần số cao quá, vì mình cũng đã thử với tần số thấp hẳn (delay ms) thì tốc độ thay đổi khi thay trị delay.

                    bạn cho mình giải pháp phần cứng (tự làm) để sao cho tốc độ cở 60 vòng phút là tốt rồi (hình như tốc độ tối đa của motor step cũng đến 300v/phút)

                    Comment


                    • #11
                      Nguyên văn bởi t10000 Xem bài viết
                      Cảm ơn trieuphong
                      mình nghĩ có lẽ do phần cứng không đáp ứng với tần số cao quá, vì mình cũng đã thử với tần số thấp hẳn (delay ms) thì tốc độ thay đổi khi thay trị delay.

                      bạn cho mình giải pháp phần cứng (tự làm) để sao cho tốc độ cở 60 vòng phút là tốt rồi (hình như tốc độ tối đa của motor step cũng đến 300v/phút)

                      Rất tiếc, mình ko đi sâu mảng điều khiển chính xác tốt độ, mình làm con robot quay bánh xe, tự đồng dò đường theo vạch đen, nói chung chỉ liên quan tới 1,2 mức tốc độ cố định.
                      Bạn lập trình lại delay bằng hàm timer/counter , dùng thạch anh ngoài nhé, ko dùng dao động IC, sẽ chuẩn hơn đó.

                      Thân.

                      Comment

                      Về tác giả

                      Collapse

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

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

                      Collapse

                      Đang tải...
                      X