Thông báo

Collapse
No announcement yet.

Đo tốc độ dùng cảm biến quang, giúp mình với

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

  • Đo tốc độ dùng cảm biến quang, giúp mình với

    Mình đang thử làm một mạch đo tốc độ quay của động cơ dùng cảm biến quang hiển thị ra LED thanh.
    Vấn đề mình gặp phải là việc đếm xung ( tần số đóng cắt của cảm biến) trong một khoản thời gian đồng thời tính toán mà vẫn đảm bảo quét LED. Ai có kinh nghiệm làm ơn chỉ giúp mình với. Thanks!

  • #2
    Neu dùng vi xử lý bạn thử một trong hai cách hoặc là đếm số xung trong 1 giây roi quy ra số vòng trên phút rồi hiển thị bằng cách chốt led hoặc đo thời gian của một xung rồi quy ra tốc độ. Hiển thị tự động cập nhật sau 1 giây hoặc nửa giay tuỳ bạn.

    Comment


    • #3
      Nguyên văn bởi congthanhtn Xem bài viết
      Mình đang thử làm một mạch đo tốc độ quay của động cơ dùng cảm biến quang hiển thị ra LED thanh.
      Vấn đề mình gặp phải là việc đếm xung ( tần số đóng cắt của cảm biến) trong một khoản thời gian đồng thời tính toán mà vẫn đảm bảo quét LED. Ai có kinh nghiệm làm ơn chỉ giúp mình với. Thanks!
      /*
      bạn tạo một hàm ngắt theo thời gian. ví dụ hàm ngắt Timer của bạn là 1ms chẳng hạn ( vì động cơ thường quay khoảng vài chục ngàn vòng/ phút trở lại, nếu một vòng cảm biến đưa ra nhiều xung thì bạn điều chỉnh ngắt cho thời gian nhỏ đi cho phù hợp)
      dùng VDK 89C51. giả sử 1 vòng động cơ quay, cảm biến quang đưa ra 2 xung Hight và 2 xung Low. cách tính số vòng trên phút

      so_vong_phut = so_xung/2 * 60 ;

      */



      unsigned long int so_xung=0; // so xung trong 1 giay
      unsigned long int so_vong_phut=0; //so vong quay trong mot phut
      unsinged long int tick=0; //đếm thời gian
      #define xung_vao P1_0 //xung từ cảm biến nối vào chân này
      #define Hight 1
      #define Low 0
      char Trang_thai_cu=0;

      void Hien_thi(unsigned long int xung)
      {
      //bạn tự viết hàm hiển thị ở đây
      // với giá trị cần hiển thị số vòng/ phút là biến "xung"


      }

      //ban tự khởi tạo hàm ngắt 1ms
      void Interrupt_Timer1(void) interrupt TF1_VECTOR /* Timer 1 ngắt tràn 1ms/
      {
      tick++; //đếm số milisecond
      if((xung_vao==Hight)&&(Trang_thai_cu==Low))
      {
      so_xung++; //tăng số xung đếm lên 1 đơn vị
      Trang_thai_cu = Hight;
      }
      else if(xung_vao==Low)
      Trang_thai_cu = Low;

      if(tick>=1000) // nếu trong 1 giây
      {

      so_vong_phut = so_xung/2 * 60 ; //tính số vòng/phút
      Hien_thi(so_vong_phut); // cứ 1 giây gọi hàm hiển thị số vòng/phút
      tick=0;
      so_xung=0;
      so_vong_phut = 0;
      }
      }
      Last edited by minhhieu; 12-05-2007, 02:37.
      n
      ĐT: 0986 492 489

      Tham khảo:

      Comment


      • #4
        Thanks cac ban! Minh se thu xem sao.
        Doan ctrinh hien thi ra LED 7 thanh minh viet the nay co duoc k, dung tre nhu vay co anh huong gi k?

        ....
        void hthi(unsigned int ht);
        void hthi(unsigned int ht)
        {

        switch(ht)
        {
        case 0: {P2=0x5f;break;}
        case 1: {P2=0x06;break;}
        case 2: {P2=0x3b;break;}
        case 3: {P2=0x2f;break;}
        case 4: {P2=0x66;break;}
        case 5: {P2=0x6d;break;}
        case 6: {P2=0x7d;break;}
        case 7: {P2=0x07;break;}
        case 8: {P2=0xef;break;}
        case 9: {P2=0x6f;break;}
        }

        //Cac lenh khac

        //Hien thi

        P3=0x00;
        hthi(tr); //Hien thi hang tram
        P3=0x01;
        delay(80);


        P3=0x00;
        hthi(ch); // Hien thi hang chuc
        P3=0x02;
        delay(80);


        P3=0x00;
        hthi(dv); //Hien thi hang DVi
        P3=0x04;
        delay(80);
        ....

        Comment


        • #5
          Nguyên văn bởi congthanhtn Xem bài viết
          Mình đang thử làm một mạch đo tốc độ quay của động cơ dùng cảm biến quang hiển thị ra LED thanh.
          Vấn đề mình gặp phải là việc đếm xung ( tần số đóng cắt của cảm biến) trong một khoản thời gian đồng thời tính toán mà vẫn đảm bảo quét LED. Ai có kinh nghiệm làm ơn chỉ giúp mình với. Thanks!
          Có một cách này nữa nhé! bạn dùng tiemrA ở chế độ đếm xung bên ngoài và dùng ngắt định thời hoặc chả cần, có thể hỏi vòng cờ timer tại tiemerB (timerA và tiemrB đỗi với mỗi VDK một khác, tùy vào bạn sử dụng loại VDK nào) để đọc giá trị của timerA, và căn cứ vào thời gian, số vòng để tính ra vận tốc và hiển thị raled 7 đoạn, timer là modun cứng nên trong lúc bạn ra lện hiển thị thì nó vẫn cứ làm việc của mình giúp bạn xác định vận tốc chính xác hơn.
          |

          Comment


          • #6
            Nếu có tiền đầu tư cái encode mà các đội robocon hay dùng thì chính xác hơn nữa , cũng theo nguyên lý quang nhưng có thể đếm được nhiều xung trên 1 vòng quay của động cơ, cằng đắt tiền thì càng đếm được nhiều xung trên 1 vòng .!
            |

            Comment


            • #7
              Nguyên văn bởi congthanhtn Xem bài viết
              Mình đang thử làm một mạch đo tốc độ quay của động cơ dùng cảm biến quang hiển thị ra LED thanh.
              Vấn đề mình gặp phải là việc đếm xung ( tần số đóng cắt của cảm biến) trong một khoản thời gian đồng thời tính toán mà vẫn đảm bảo quét LED. Ai có kinh nghiệm làm ơn chỉ giúp mình với. Thanks!
              Để đo tốc độ độ đông cơ thì bạn nên dùng counter của 89 để nó tự đếm và dùng timer để cập nhật kết quả đếm sau 1 khoảng thời gian nào đó( ví dụ 1 ms ). còn LED 7 vạch thì cứ để quét trong vòng chính thôi. Cẩn thận những lúc tràn counter.
              Quét led 7 vạch như bạn là có thể chạy rùi, làm dần dần bạn sẽ quen và tự rút gọn được chương trình đi thôi.
              chúc bạn thành công.

              Comment


              • #8
                Bạn đang đo số lượng xung trong 1 giây. Sau đó nhân với 60 để ra tốc độ (tính bằng vòng/phút).
                Với cách làm như vậy, số hiển thị ra của bạn sẽ luôn là bội số của 60 hoặc 30. Như vậy độ chính xác sẽ rất kém. Sai số sẽ là ± 60 hoặc ± 30 vòng/ phút.

                Muốn đạt được độ chính xác cao hơn, (có thể sai số đến từng vòng/ phút), bạn thử 1 trong 2 cách sau đây:
                1/. Thay vì trên trục có 1 đểm phản quang, bạn vẽ hoặc dán 60 điểm phản quang. Như vậy số xung đếm được trong 1 giây sẽ bằng với tốc độ tính bằng vòng/ phút.

                2/. Đo khoảng thời gian giữa 2 xung, và đùng thuật toán chia để tính ra.

                Comment


                • #9
                  Nguyên văn bởi congthanhtn Xem bài viết
                  Mình đang thử làm một mạch đo tốc độ quay của động cơ dùng cảm biến quang hiển thị ra LED thanh.
                  Vấn đề mình gặp phải là việc đếm xung ( tần số đóng cắt của cảm biến) trong một khoản thời gian đồng thời tính toán mà vẫn đảm bảo quét LED. Ai có kinh nghiệm làm ơn chỉ giúp mình với. Thanks!
                  mình có cách này nhé, bạn dùng timer0 ở chế độ Counter, timer1 ở chế độ định thời, như vậy timer0 dùng để đếm số xung nhận được từ cảm biến quang, nếu muốn chính xác hơn thì bạn phải cho nhiều miếng phản quang như bạn quocthai nói, nói cách khác đó là làm tăng độ phân giải của encoder nếu độ phân giải càng cao thì chính xác càng cao, nhưng có một điểm cần lưu ý là tốc độ của động cơ nếu quá cao thì bản thân AT89 sẽ không đáp ứng kịp như vậy sẽ gây ra sai số, bạn nên tính toán cẩn thận về vấn đề này để quyết định sử dụng encoder có độ phân giải bao nhiêu, và cả thời gian ngắt để tính toán tốc độ, nếu tốc độ thấp, thì ta có thể cho phân giải cao và thời gian ngắt của timer1 lâu hơn. một vấn đề nữa là việc đơn vị hiển thị của bạn là gì, vòng/phút hay vòng/giây... còn chương trình chính thì bạn chỉ thực hiện việc quét các led mà thôi, các thao tác tính toán đều thực hiện trong ngắt cả, bạn cần tính toán hợp lý nhé nếu không thì việc tính toán logic bên trong AT89 sẽ mất rất nhiều thời gian làm cho công việc quét led bị dừng lại gây nên tình trạng led bị nhấp nháy. giả sử bạn định ngắt sau mỗi 10ms mà trong ngắt bạn mất đến 5ms cho việc tính toán kết quả thì không tốt chút bằng việc ngắt sau 1s. tùy tình huống mà bạn quyết định lấy!
                  mạch này mình đã làm cách đây mấy năm rồi, lúc đó không biết viết C nên việc tính toán trên ASM rất cực khổ, mình mất cả tháng trời cho mạch này đấy! . còn một điều nữa mà mình muốn nói là mạch này dù có làm hay đến mấy, tính toán chính xác đến mấy vẫn có sai số nhất định của nó, vì ngắt của AT89 dựa trên tốc độ thạch anh mà thạch anh thì cũng có sai số nên ... nhưng mạch này nó giúp chúng ta có rất nhiều kinh nghiệm khi làm việc với 89 sau này. một vài kinh nghiệm, chút bạn thành công
                  hãy cố gắng dù vướn phải thất bại!!!!!!!!

                  Comment


                  • #10
                    dùng encoder là tiện nhất rồi. Mình cũng đang bắt đầu làm. Mình muốn được chỉ giáo.
                    Các bạn có sơ đồ mạch của nó không. post lên để mọi người cùng tham khảo nha.

                    Comment


                    • #11
                      em la dua dang hoc viec.cac bac oi.em dang tim hieu ve timer, bac nao co sach huong dan ko cho em voi.cam on cac bac nhieu

                      Comment


                      • #12
                        Timer

                        Bạn vào trang của bon 89XX mà lấy datasheet về là có timer ngay thôi.
                        Quan trọng là bạn ứng dụng nó để làm gì mà thôi.

                        Comment


                        • #13
                          http://www.rigelcorp.com/8051soft.htmhttp://www.rigelcorp.com/8051soft.htm

                          Comment


                          • #14
                            ban co the cho toi hoi dung vi dieu khien cho thang may the nao nhi?
                            gui cho toi phan mem toi cam on rat nhieu.

                            Comment


                            • #15
                              hi các bác! Em thấy topic này hay quá. EM cũng đang nghiên cứu về phần này nhưng cũng chưa biết được j nhiều. Bác nào pro rùi thì hướng dẫn cho anh em nhé! Có thêm cả phần sơ đồ nữa thì hay quá!
                              Thanks các bác rất nhiều. Chúc một ngày tốt lành

                              Comment

                              Về tác giả

                              Collapse

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

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

                              Collapse

                              Đang tải...
                              X