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

Collapse
X
 
  • Giờ
  • Show
Clear All
new posts
  • abc5
    Thành viên mới
    • Dec 2011
    • 2

    #1

    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
  • IloveMyjob
    Thành viên chính thức
    • Mar 2010
    • 47

    #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

    • abc5
      Thành viên mới
      • Dec 2011
      • 2

      #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

      • trieuphong
        Thành viên mới
        • Nov 2011
        • 18

        #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

        • vietyen125
          Thành viên mới
          • Jan 2014
          • 113

          #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

          • anh_giau996
            Thành viên mới
            • Dec 2014
            • 1

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

            Comment

            • Đức Linh
              Thành viên mới
              • Jun 2010
              • 8

              #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

              • t10000
                Thành viên chính thức
                • May 2008
                • 40

                #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

                • trieuphong
                  Thành viên mới
                  • Nov 2011
                  • 18

                  #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

                  • t10000
                    Thành viên chính thức
                    • May 2008
                    • 40

                    #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

                    • trieuphong
                      Thành viên mới
                      • Nov 2011
                      • 18

                      #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...