Thông báo

Collapse
No announcement yet.

Dùng dsPIC đo tần số với độ phân giải 0.004Hz.

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

  • Dùng dsPIC đo tần số với độ phân giải 0.004Hz.

    Chào các Pro e đang làm bài toán đo tần số nhưng đòi hỏi độ chính xác rất cao sử dụng dsPIC nhưng chưa tìm được phương pháp hợp lí mong các cao thủ chỉ hướng.
    |

  • #2
    dùng 1 timer lấy 1 khoảng thời gian t xác định, một ngắt ngoài nữa, bạn đếm số lần ngắt n trong khoảng thời gian tầm vài chục chu kì xung , f=n/t
    Đời không như mình nghĩ. phải tranh thủ thôi ***********

    Comment


    • #3
      có 2 dạng đếm tần số : direct counter và reciprocal counter .

      direct counter sẽ đếm số xung đưa vào trong 1s và kết quả thu được là Hz

      reciprocal counter xác định chu kỳ của 1 xung và suy ra tần số f=1/T

      nếu time base 1s ==> chính xác đến 1Hz
      nếu time base 10s ==> 0,1Hz
      .... riêng reciprocal do đo thời gian .... nên có thể nội suy

      việc đếm với thời gian quá dài có thể bất lợi do nhiễu phát sinh , sai lệch !

      Cả 2 phương pháp trên ===> kết luận :

      Nếu là được độ chính xác vậy thì mấy hãng sản xuất máy đo tần số như agilent , leader , tektronix ... sẽ mua cám về để ăn dần

      thời gian time base phụ thuộc rất nhiều vào cái thạch anh REF ( thời gian mẫu ) ... những thạch anh chuẩn xác này thì cực hiếm và đắt tiền ( thạch anh có độ chính xác rất cao , ít phụ thuộc nhiệt độ ... có bộ sinh nhiệt tự động để bù nhiệt ...)

      ngoài ra độ chính xác còn phụ thuộc nguồn điện , phần mềm ( riêng khoản lập trình firmware flash ) là đã vứt rồi ! ( chí ít gọi là tạm được cũng phải chơi CPLD hoặc những dòng PLD , FPGA

      KẾT LUẬN 2 : Không khả quan . Hết

      ( Độ phân giải khác hoàn toàn với độ chính xác ... nếu phân giải đến phần nghìn thì làm cái direct counter cũng ok ... còn độ chính xác đến phần nghìn , chục nghìn của Hz ... thì thua luôn !

      qua hãng agilent , anritsu hỏi xem có máy đo đạt chính xác đó không !
      Module RF chuyên dụng điều khiển, truyền dữ liệu, thiết kế đề tài, dự án điện tử - chuyển giao công nghệ... ĐT: 0904964977 - email: dientuqueduong@yahoo.com

      Comment


      • #4
        Độ phân giải với độ chính xác là khác nhau, dù rằng nó thường đi với nhau và tỉ lệ thuận. Ví dụ cái DMM anh em mình dùng có phân giải 2000 count, chính xác 1% (ứng với 20 count).

        f = n/t (n: số xung, t: thời gian)

        Độ phân giải 0.004 Hz tương ứng với độ phân giải khó biết us (về mặt thời gian).
        Tớ ví dụ:
        - Nếu bạn muốn đo tần số 100Hz với độ phân giải 0.004Hz, tức là bạn phải phân biệt được 100Hz và 100.004Hz.
        Giả sử mỗi phép đo được thực hiện trong thời gian khoảng 1s, tức là bạn sẽ đếm khoảng 100 xung. Trong trường hợp này t của bạn sẽ có giá trị:
        t1 = n/f1 = 100/100Hz = 1s (đương nhiên, đúng với giả thiết)
        t2 = n/f2 = 100/100.004Hz = 0.99996s
        delta_t = |t1-t2| = 1s - 0.99996s = 0.00004s = 40us
        >> 40us thì quá dễ giải quyết với vi điều khiển, dùng 98C2051 vẫn OK.
        - Nhìn ở trên tớ thấy
        delta_t = |t1-t2| = |n/f1 - n/f2| = n*|1/f1 - 1/f2|
        delta_t = n*|1/f1-1/f2|
        Nhìn vào công thức ta thấy luôn:
        + delta_t không thể quá nhỏ vì bộ xử lý của ta sẽ không phân biệt được
        + để tăng delta_t ta có thể tăng n (số xung đếm vào), cái này sẽ làm tăng chu kỳ lấy mẫu
        + với một giới hạn xử lý (delta_t nhỏ nhất có thể phân biệt) ta có thể suy ra tần số ta có thể đo được (liên quan với cả độ phân giải)
        delta_t = n*|1/f1-1/f2| = n*|1/f1-1/(f1+delta_f) ≈ n*delta_f/f12 (thử lại với ví dụ trên thấy đúng )
        >> với chip AT89S52 tớ có thể đếm thời gian chính xác cỡ 4Tcy (4 chu kỳ máy) tương ứng 4us với thạch anh 12MHz → bài toán của bạn: có thể đếm tần số tối đa
        fmax2 = n*delta_f/delta_t = Tsample*f *delta_f/delta_t (Tsample: chu kỳ đo, f: tần số vào, ở đây f=fmax)
        fmax2 = Tsample*fmax*delta_f/delta_t
        fmax = Tsample*delta_f/delta_t = 1s*0.004Hz/4us = 1000Hz
        fmax = 1000Hz

        fmin = tự tính

        (fmax = 1000Hz, phân giải 0.004Hz, bộ của bạn hơi bị chính xác cao đấy, cứ nhìn số 999.996 mà xem )

        Comment


        • #5
          >> với chip AT89S52 tớ có thể đếm thời gian chính xác cỡ 4Tcy (4 chu kỳ máy) tương ứng 4us với thạch anh 12MHz → bài toán của bạn: có thể đếm tần số tối đa
          bản thân con chip , nguồn clock ( thời gian ) đã không chính xác thì lấy gì làm chính xác đây ??? chính xác đến phần nghìn của Hz không phải chuyện dễ.

          còn độ phân giải (VD 4 số ) 1KHz 1.000 ... độ chính xác 1Hz VD 0.999 Khz , 1.000 Khz , 1.001 Khz
          Module RF chuyên dụng điều khiển, truyền dữ liệu, thiết kế đề tài, dự án điện tử - chuyển giao công nghệ... ĐT: 0904964977 - email: dientuqueduong@yahoo.com

          Comment


          • #6
            Cám ơn các bác đã cho ý kiến. Có lẽ e đưa ra dữ liệu bài toán chưa đủ. Bài toán của e cụ thể như sau.
            đo tần số nằm trong khoảng 800 đến 4000Hz với độ phân giải là 0.004Hz tức là 100Hz và 100.004Hz sẽ phải phân biệt được.
            E đã dùng input captures của dspic với Ftcy = 16M.
            ví dụ ta đo tần số f = 851.004 Hz chẳng hạn.
            đo tần số này thì 1 chu kì của f = (16.000.000/851.004) = 18801.3217 chu kì của Ftcy.
            dùng capture của dsPIC thì đo 1 chu kì của f sẽ được 18801 chu kỳ của Ftcy trong thanh ghi của PIC
            -> thời gian 1 chu kỳ của tần số f là: t = 18801/16 = 1175.0625 (us) -> f = 1/t = 851.01856 (Hz). tần số đo được này sai 0.01456 >0.04 Hz.
            nếu muốn chính xác hơn thì phải đo từ 10 chu kỳ. lúc đó ta tính được t = 1175.08125 -> f = 851.00498 (Hz) so với 851.004 thì sai số là 0.00098 < 0.004Hz coi như thỏa mãn yêu cầu đề bài. Nhưng đây là tính toán lý thuyết trên thực tế nếu dùng bộ captures của dsPIC thì timer được sử dụng là 16bit thế nếu đo 10 chu kỳ sẽ xảy ra tràn timer ít nhất là 3-4 lần. mỗi lần tràn này đều sẽ làm trễ đi một khoảng thời gian nhất định phải ko ạ.
            ai đã làm qua cách này có chỗ nào cao minh chỉ điểm giúp e với
            |

            Comment


            • #7
              Đo tần số bằng phương pháp lấy mẫu hay vậy.Với tần số 800Hz chỉ có 800 chu kì trong 1 giây.Làm sao có dạng 16M/800 chu kì xung được.Cái này lạ quá.Em kô biết.
              , , ,

              Comment


              • #8
                Cái 16M ở đây là tần số dao động e thiết lập trên dsPIC. Dùng tần số đó để lấy mẫu giả sử đo trong 1s thì 800 chu kì của f(fin) sẽ được 16.000.000 chu kì của chíp nên cái 16M/800 là tỉ lệ của 2 cái tần số này để tính toán theo lý thuyết thôi.
                |

                Comment


                • #9
                  Dùng vòng lặp kiểm tra, nếu TMRIF bật thì cộng thêm 65536.
                  Nếu mình không nhầm thì sử dụng chế độ Capture vẫn dùng được ngắt Timer (bạn xem lại trong datasheet), nếu thế thì có thể đếm 1 biến phụ trong ngắt.

                  @bác Dương: cái này chỉ nói là độ phân giải 0.004Hz chứ không nói phải chính xác đến 0.004Hz. Như bác nói, để đảm bảo độ chính xác của phép đo thì cần tần số mẫu chính xác (thạch anh đếm thời gian) - vấn đề của linh kiện. Nếu chúng ta có giải thuật xử lý đúng thì khi lắp thạch anh "chuẩn" vào sẽ chính xác, phải không bác.

                  Tiện thể, em viết nốt
                  Δt < Tsample * Δf / f
                  đây là yêu cầu độ phân giải (độ chính xác) đếm thời gian trong phương pháp đếm đồng thời thời gian và số xung.
                  với Tsample=n/f (n: số xung, f: tần số xung; Tsample không cố định)
                  Last edited by KnowMore; 25-02-2012, 01:14.

                  Comment


                  • #10
                    Bạn phải tính thêm độ trễ của ngắt.Quá trình reset timer.Đo tần số cao thì phải lấy nhiều chu kì rồi.Mà bạn đâu nói đến độ chính xác đâu nhỉ.Do đó 2 kết quả có sai nhau thì đâu vấn đề gì.800.004 và 800.001 chỉ là giá trị hiển thị thôi.Kô ai nói 800.004 chính xác còn 800.001 kô chính xác.
                    , , ,

                    Comment


                    • #11
                      Nguyên văn bởi rptdnmqs Xem bài viết
                      Bạn phải tính thêm độ trễ của ngắt.Quá trình reset timer.Đo tần số cao thì phải lấy nhiều chu kì rồi.Mà bạn đâu nói đến độ chính xác đâu nhỉ.Do đó 2 kết quả có sai nhau thì đâu vấn đề gì.800.004 và 800.001 chỉ là giá trị hiển thị thôi.Kô ai nói 800.004 chính xác còn 800.001 kô chính xác.
                      Ngay đến con thạch anh 16Mhz ... nó cũng sai cả 100Hz, 1000 hz là chuyện thường ... chưa nói nhiệt độ thay đổi , điện áp biến đổi ... nó cũng sai nữa .

                      Con dspic cũng vậy ... không phải lúc nào nó cũng chạy như lúc nào ( sẽ có lúc nhanh lúc chậm ) ... mà sự thay đổi này rất nhỏ ( do yếu tố phát sinh nhiệt hoặc nhiệt môi trường ) ...

                      Tuy thay đổi nhỏ nhưng lại là lớn trong những bài toán chính xác .
                      Module RF chuyên dụng điều khiển, truyền dữ liệu, thiết kế đề tài, dự án điện tử - chuyển giao công nghệ... ĐT: 0904964977 - email: dientuqueduong@yahoo.com

                      Comment

                      Về tác giả

                      Collapse

                      hippro NDH Mobile: 0982 36 2204 Sky : ngo_duchau Geo, intruments Tìm hiểu thêm về hippro

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

                      Collapse

                      Đang tải...
                      X