Thông báo

Collapse
No announcement yet.

HIển thị tốc độ động cơ biến đổi liên tục .

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

  • HIển thị tốc độ động cơ biến đổi liên tục .

    Em đang làm dự án về đo tốc đo tua máy RPM của xe ôtô ( xe chạy lúc nhanh lúc chậm , biến đổi liên tục chứ không ổn định) , khi tua máy quay 1 vòng thì nó vào mạch trigger 4093 và tạo ra 1 xung đưa vào chân INT0 hoặc chân ICP của AVR .
    Cái mà em đang gặp khó khăn là nếu đếm 1s bao nhiu xung rồi nhân x60 = RPM thì quả thật không chiính xác và có sự "trễ" .Giả sử trong 1s có lúc nó tăng lên 9000RPM rồi giảm xuống 5000 RPM mà LCD chỉ hiển thị trung bình khoảng 7-8000 .( em cần hiển thị RPM tức thời)
    Còn nếu đếm 1/4s hay 1/16s rồi nhân lên thì sai số lại tăng lên .

    Có anh nào đã từng đo tốc độ tức thời của động cơ giúp em với .
    Last edited by hoacucvang; 05-11-2008, 12:11.

  • #2
    Nguyên văn bởi hoacucvang Xem bài viết
    Em đang bí phần này , dùng AVR . Đo RPM của động cơ . Trong vòng 1s có khi nó tăng nhanh , có khi giảm mạnh .
    Lúc đầu em suy nghĩ đơn giảm là đếm coi có bao nhiu xung trong 1s rồi x60 thì ra RPM .
    Tuy nhiên cách trên chỉ tốt đối với động cơ chạy đều và ít thay đổi . Giả sử trong 1s có lúc nó tăng vọt lên 9000 rpm rồi giảm mạnh xuống còn 7000 rpm thì LCD hiển thị ra không chính xác .
    Ý em muốn là hiển thị thật chính xác tốc độ động cơ khi thay đổi tăng hoặc giảm ngay tức thời , chứ không phải là sau 1s .


    Em có dùng ngắt INT0 , mỗi lần ngắt là đo vận tốc giữa 2 xung liên tiếp rồi hiển thị ra LCD . Tuy nhiên có lẽ AVR ko xử lý nổi .
    Ai có phương án nào tốt hơn ko ? ( có thể dùng biến đổi áp ra tần số khá là đơn giản ,tuy nhiên em lại thích dùng TIMER và counter hơn )

    Cảm ơn mọi người
    Em dùng thử input capture.

    Khi quen rồi thì thêm tính năng lọc vào.

    Sông dài, Thuyền lớn, Biển rộng bao la.
    Tháo neo ngôn ngữ, lèo lái con thuyền kiến thức nhân loại.

    Comment


    • #3
      Nguyên văn bởi quoc_thaibk Xem bài viết
      Em dùng thử input capture.

      Khi quen rồi thì thêm tính năng lọc vào.
      Vấn đề ở đây không phải bị nhiễu hay không tính được , mà là sự "trễ" trong việc hiển thị .
      EM muốn nó hiển thị ngay tức thời giá trị RPM vì đây là động cơ có RPM thay đổi liên tục ( em đang ứng dụng trên xe hơi) . ( khi máy quay 9000RPM rồi giảm về 7000 RPM thì lúc đó LCD mới hiển thị 9000 RPM , như vậy là quá chậm)
      Anh nào đã làm 1 dự án tương tự như thế này giúp em về thuật toán với .
      Last edited by hoacucvang; 05-11-2008, 10:08.

      Comment


      • #4
        Vậy vấn đề bây giờ lại chuyển sang vấn đề hiển thị thôi đúng ko? còn việc dùng input capature là hoàn toàn được.
        nếu tốc độ hiển thị mà vượt quá 24hìnnhh/s thì có cố cũng ko dc! bạn có thể làm theo phương án sau:
        Nhận giá trị và ghi vào đâu đó <EEROM, hoặc truyền lên PC rồi ghi vào access, exel ...>

        Chúc vui.

        Comment


        • #5
          Không phải, vấn đề là cách làm. Bạn này đếm số xung trong 1s rồi mới hiển thị nên kết quả có thể chậm so với thực tế cả giây nếu tốc độ biến đổi nhanh .

          Nhưng tại sao cứ phải đếm 1s nhi? Đếm 1/2 s,1/5 hay 1/10s đi, nhân với hệ số lớn hơn là được (Sai số sẽ tăng lên!)
          ●█═██▄▄▄▄▄▄▄▄▄
          ▄▅██████▅▄▃▂
          ████████████████
          ◥⊙▲⊙▲⊙▲⊙▲⊙▲⊙▲◤

          Comment


          • #6
            Nguyên văn bởi hoacucvang Xem bài viết
            Vấn đề ở đây không phải bị nhiễu hay không tính được , mà là sự "trễ" trong việc hiển thị .
            EM muốn nó hiển thị ngay tức thời giá trị RPM vì đây là động cơ có RPM thay đổi liên tục ( em đang ứng dụng trên xe hơi) . ( khi máy quay 9000RPM rồi giảm về 7000 RPM thì lúc đó LCD mới hiển thị 9000 RPM , như vậy là quá chậm)
            Anh nào đã làm 1 dự án tương tự như thế này giúp em về thuật toán với .
            Cái này trong mấy cái OSC nó thường gọi là điều kiện trigger.
            Việc em làm là muốn bắt sự thay đổi.
            Định ra độ thay đổi như thế nào là đủ rồii dùng mức đó để bắt(trigger level)

            Sông dài, Thuyền lớn, Biển rộng bao la.
            Tháo neo ngôn ngữ, lèo lái con thuyền kiến thức nhân loại.

            Comment


            • #7
              Đúng như bạn luulinh nói , mình có đếm 1/16s hoặc 1/4s ,đôi khi 1/128s , sai số tăng lên theo .

              Comment


              • #8
                Nguyên văn bởi quoc_thaibk Xem bài viết
                Cái này trong mấy cái OSC nó thường gọi là điều kiện trigger.
                Việc em làm là muốn bắt sự thay đổi.
                Định ra độ thay đổi như thế nào là đủ rồii dùng mức đó để bắt(trigger level)
                ANh có thể nói rõ hơn được không , em mù mờ về cái OSC này . ( em dùng IC 4093 trigger)

                Comment


                • #9
                  Nguyên văn bởi hoacucvang Xem bài viết
                  ANh có thể nói rõ hơn được không , em mù mờ về cái OSC này . ( em dùng IC 4093 trigger)
                  bạn muốn hiển thị nhanh hơn (đáp ứng sự thay đổi nhanh hơn) thì bạn đừng đợi đến 1 giây hả tính, cứ 0,5s hay 0,25 giây tính là được rồi, khi này bạn sẽ thấy nó thay đổi liên tục thôi, mình làm 0,5s là OK. thêm cái nữa là bạn nên tăng số xung nhận được đi, nếu chỉ có 1 xung thì sai số lớn lắm, nên làm khoảng 4 đến 8 xung cho 1 vòng. bạn dùng 1 timer để nhận xung( chế độ counter), dùng 1 timer để đinh thời (định thời 0,5s thì ngắt), còn chương trình chính thì luôn quét led, giả sử có 4 con led 7 đoạn, bạn dùng 4 byte để chứ giá trị của các led, chương trình chính chỉ hiển thị nội dụng của các led này thôi, việc tính toán còn lại sẽ được thực hiện trong ngắt timer hết. khi ngắt timer xảy ra, bạn đọc giá trị counter nhận được rồi tính giá trị vận tốc, nạp vào các ô nhớ chứa nội dụng hiển thị thì khi đó lập tức sẽ thay đổi giá trị đó ngay, tức là sau khi tính toán thì nó sẽ hiển thị ngay thôi. chúc bạn thành công, nếu cần chi tiết thì liên hệ mail cho mình chipmickey@yahoo.com
                  hãy cố gắng dù vướn phải thất bại!!!!!!!!

                  Comment


                  • #10
                    Hic, em dùng GLCD mà . Vì 1 vòng tua máy của RPM của otô nó chỉ tạo ra 1 xung thôi . CÒn việc tính 0.5s rồi cuối cùng nhân lên cho 2 thì sai số lớn quá , lấy mẫu càng nhỏ thì sai số càng lớn .

                    Comment


                    • #11
                      Vậy đo chu kỳ xung đi, cứ khoảng 1/5 s lại đo 1 lần rồi cập nhật kết quả, mình nghĩ thế vừa nhanh vừa chính xác.
                      ●█═██▄▄▄▄▄▄▄▄▄
                      ▄▅██████▅▄▃▂
                      ████████████████
                      ◥⊙▲⊙▲⊙▲⊙▲⊙▲⊙▲◤

                      Comment


                      • #12
                        Nguyên văn bởi luulinh Xem bài viết
                        Vậy đo chu kỳ xung đi, cứ khoảng 1/5 s lại đo 1 lần rồi cập nhật kết quả, mình nghĩ thế vừa nhanh vừa chính xác.
                        Mình không hiểu ý của bạn lắm ? Bạn nói rõ hơn được không ?

                        Mà hỏi thêm câu này nha , mạch trigger của mình đây , dùng INT0 để đếm , nhưng không hiểu sao mình thử cắm vào mạng điện gia đình 220V -50Hz thì nó lại đếm tần số lúc thì 50 , lúc thì 57 , có lúc đếm 60 Hz . Không biết có sai hay không ?

                        Comment


                        • #13
                          Thì t=1/f . Bạn đo số xung trong 1s là đo tần số của nó, giờ đổi lại là đo chu kỳ.
                          VD động cơ quay 9000rpm thì 1s sẽ có 150 xung, 1 xung có chu kỳ gần 7ms, với tốc độ của AVR thì chắc là đạt yêu cầu sai số của bạn. Đo chu kỳ của 1 hay 1 vài xung rồi nhân chia cộng trừ sao đó -> kết quả.
                          ●█═██▄▄▄▄▄▄▄▄▄
                          ▄▅██████▅▄▃▂
                          ████████████████
                          ◥⊙▲⊙▲⊙▲⊙▲⊙▲⊙▲◤

                          Comment


                          • #14
                            xin hỏi bác hoacucvang đang làm việc với cảm biến trên oto loại nào thế, điện từ, quang hay hall mà một vòng quay động cơ cho ra có một xung vậy. Nếu chỉ cho một xung mà dùng cách đo tần số trong thời gian ngắn 1/n giây thì mình chắc 100% sai số sẽ rất lớn ở tốc độ thấp (dưới 1000rpm). Mình nghĩ bạn nên chuyển đổi tần số sang điện áp và dùng loại cảm biến cho ra nhiều xung/vòng quay hơn, 24xung là tạm ổn...
                            Last edited by apple; 05-11-2008, 23:18.
                            Mấy ai định nghĩa được tình yêu.
                            Có gì đâu một buổi chiều.
                            Kề dao lên cổ yêu hay chết .
                            Gật đầu cái rụp thế là yêu.

                            --------
                            Apple

                            Comment


                            • #15
                              Vậy đo chu kỳ xung đi, cứ khoảng 1/5 s lại đo 1 lần rồi cập nhật kết quả, mình nghĩ thế vừa nhanh vừa chính xác.
                              1- Cập nhật nhanh thế có kịp nhìn bằng mắt thường? ( cần thiết phải lưu giữ kết quả vào bộ nhớ để có thể xem dần dần ....!)
                              2_Lắp thêm 1 encoder với số xung/vòng thật lớn (loại 1024 xung/vòng chẳng hạn) và dùng inputcapture của VDK sẽ đảm bảo đáp ứng cực nhanh. Bạn đo khoảng thời gian xuất hiện của 1 xung, từ đó có thể suy ra tốc độ của trục. Giả sử trục quay 1vong/phút thì thời gian lấy mẫu của bạn chỉ là 1/1024 (s), rất nhanh phải không?

                              Comment

                              Về tác giả

                              Collapse

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

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

                              Collapse

                              Đang tải...
                              X