Thông báo

Collapse
No announcement yet.

Hạn chế dao động của ADC

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

  • Hạn chế dao động của ADC

    Tôi cần tìm hiểu tại sao thỉnh thoảng ADC của PSoC có giá trị dao động mạnh quá +/-150 trên giá trị đo 0 -4096 (ADCINC12). Có dùng thêm phần dồn 8 kênh trước khi về ADC. Lấy trung bình cũng ko ăn thua.
    Còn một vấn đề khác: sử dụng ext ref từ TL431 2,5V, đưa GND =0 Volts vào ADC nhưng giá trị đọc luôn là 23 đến 28 .Theo lý thuyết phải gần 0 (sau khi cộng 2048)
    Hỏi tiếp cái hàm
    void ADCINC12_GetSamples (BYTE bNumSamples)
    Giả sử bNumSamples =10 thì mục đích của nó là lấy 10 mẫu điện thế rồi mới lấy ADC hay lấy 10 lần ADC luôn rồi lần thứ 10 mới xuất giá trị. Cần chọn số như thế nào để kết quả chính xác nhất, tốc độ chậm một chút cũng được (Ko lấy mẫu liên tục)
    Con PSoC nghe thấy ADC thì rất hay ho nhưng bắt tay vô làm thì ko thấy độ chính xác cao. Như ADCINC12 có offset error = 9mV. Ko biết có module nào có độ chính xác cao hơn nữa ko?

  • #2
    Nguyên văn bởi kong Xem bài viết
    Tôi cần tìm hiểu tại sao thỉnh thoảng ADC của PSoC có giá trị dao động mạnh quá +/-150 trên giá trị đo 0 -4096 (ADCINC12). Có dùng thêm phần dồn 8 kênh trước khi về ADC. Lấy trung bình cũng ko ăn thua.
    Còn một vấn đề khác: sử dụng ext ref từ TL431 2,5V, đưa GND =0 Volts vào ADC nhưng giá trị đọc luôn là 23 đến 28 .Theo lý thuyết phải gần 0 (sau khi cộng 2048)
    Hỏi tiếp cái hàm
    void ADCINC12_GetSamples (BYTE bNumSamples)
    Giả sử bNumSamples =10 thì mục đích của nó là lấy 10 mẫu điện thế rồi mới lấy ADC hay lấy 10 lần ADC luôn rồi lần thứ 10 mới xuất giá trị. Cần chọn số như thế nào để kết quả chính xác nhất, tốc độ chậm một chút cũng được (Ko lấy mẫu liên tục)
    Con PSoC nghe thấy ADC thì rất hay ho nhưng bắt tay vô làm thì ko thấy độ chính xác cao. Như ADCINC12 có offset error = 9mV. Ko biết có module nào có độ chính xác cao hơn nữa ko?
    Bạn nâng lên dùng ADCINC14 dùng unsigned cho độ phân giải cao hơn, kết hợp lọc số (cộng trung bình) và loại trừ offset nữa sẽ ổn định.
    CUNG CẤP PSOC, MẠCH NẠP
    CHUYỂN ĐỔI USB <-> RS485 AutoBaud
    RS232 <-> RS485 MultiBaud
    MẠCH NẠP USBPPI S7-200
    Mobile: 0906076116
    Email:

    Comment


    • #3
      Bạn nói cụ thể hơn cho mọi người hiểu đi!
      Technical Institutes
      Mobile: 0983278725
      Email:

      Comment


      • #4
        Tìm ra một phần nguyên nhân

        Nâng cấp lên ADCINC14 ko giúp ích gì. Lấy trung bình cũng ko ích gì. Sau cùng tìm ra một phần nguyên nhân là vẫn để mạch nạp Type 3 chạy cùng PSoC nên điện thế vào VCC (chân 28) dao động theo tải PC chạy, ảnh hưởng đến điện thế chân LPT1, mặc dù nguồn DC cấp PSoC vẫn ổn định 5V, dẫn đến ADC có sai số lớn.

        Tháo mạch nạp ra, thì ADC ổn định hơn nhưng thỉnh thoảng, khoảng 25 -30 giây mới có 1 chu kỳ sai theo đồ thị hiển thị trên PC, có thể do chương trình sai một chỗ nào trong một chu kỳ.

        Comment


        • #5
          Sau rất nhiều năm vật vã với phần mềm cuối cùng mình thấy phần cứng là khâu quyết định, thêm mạch lọc LOW PASS vào đầu vào ADC-->excilent...
          Technical Institutes
          Mobile: 0983278725
          Email:

          Comment


          • #6
            Đấy gần như là nguyên tắc rồi, có cái bạn quên thôi

            Comment


            • #7
              Ko có gì gọi là nguyên tắc cả, tuỳ từng ứng dụng thôi, ví như trong adc ứng dụng trong radar sẽ ko có các mạch này.
              Technical Institutes
              Mobile: 0983278725
              Email:

              Comment


              • #8
                Nguyên văn bởi kong Xem bài viết
                Tôi cần tìm hiểu tại sao thỉnh thoảng ADC của PSoC có giá trị dao động mạnh quá +/-150 trên giá trị đo 0 -4096 (ADCINC12). Có dùng thêm phần dồn 8 kênh trước khi về ADC. Lấy trung bình cũng ko ăn thua.
                Còn một vấn đề khác: sử dụng ext ref từ TL431 2,5V, đưa GND =0 Volts vào ADC nhưng giá trị đọc luôn là 23 đến 28 .Theo lý thuyết phải gần 0 (sau khi cộng 2048)
                Hỏi tiếp cái hàm
                void ADCINC12_GetSamples (BYTE bNumSamples)
                Giả sử bNumSamples =10 thì mục đích của nó là lấy 10 mẫu điện thế rồi mới lấy ADC hay lấy 10 lần ADC luôn rồi lần thứ 10 mới xuất giá trị. Cần chọn số như thế nào để kết quả chính xác nhất, tốc độ chậm một chút cũng được (Ko lấy mẫu liên tục)
                Con PSoC nghe thấy ADC thì rất hay ho nhưng bắt tay vô làm thì ko thấy độ chính xác cao. Như ADCINC12 có offset error = 9mV. Ko biết có module nào có độ chính xác cao hơn nữa ko?
                Bạn nên nêu rõ các khối đang kết nối ntn, mã/part của PSOC là gì thì sẽ dễ dàng phân tích hơn.
                Vấn đề khiến giá trị ADC không ổn định, t chia làm ba thành phần chính:
                1- Nguồn cấp, VADD & VASS và Vref. Thông thường Vref chung với VADD, và thậm chí chung luôn với VCC. T ko biết PSOC của bạn là mã nào nên không kết luận dc.
                2 - Nội tại cấu tạo ADC (hay SOC). Hiểu đơn giản cho vì sao có con ADC giá cao con giá thấp.
                3 - Đường tín hiệu ngõ vào, tín hiệu tham chiếu chuẩn. Thường qua opam hoặc một con vref chuẩn nào đó.
                // Trường hợp nhiễu phát xạ từ bên ngoài phức tạp hơn, nó sẽ tác động lên cả 03 thành phần trên, nên không chia ra thành phần thứ 4.
                Tại sao các thành phần trên gây sai lệch kết quả của ADC ?
                1 - Nguồn cấp không ổn định như bạn nghĩ. Điện áp cấp từ IC nguồn không bằng phẳng ổn định như cái mặt bàn đâu, nó bằng phẳng như mặt nước hồ. Không gió thì phẳng có gió thì nó lăn tăn đấy, mà có cả sóng chứ chả chơi . Gió ở đây là tải tiêu thụ khác đó bạn. Trường hợp có các chân VADD, VREF tách riêng thì nên có mạch lọc RC, LC từ VCC vào để giảm nhiễu từ tải. Khi PSOC chạy, các chân GPIO hút dòng hoặc dừng, các khối ngoại vi chạy sẽ phát sinh dòng biến thiên làm điện áp biến thiên. Khi VADD/VREF nối chung vào, điện áp không còn ổn định để làm tham chiếu thì kết quả ADC sẽ nhảy nhót thôi. Điều kiện ở đây là tín hiệu ngõ vào lí tưởng được cố định. Nếu muốn tốt hơn, ổn định với nhiệt độ làm việc thay đổi thì có thể dùng một nguồn cấp riêng là một con Vref có sai số nhỏ, ổn định nhiệt tốt, kháng nhiễu đầu vào cao.
                2 - Cấu tạo ADC là kiểu gì SAR, Sigma-delta ? Tốc độ cao thì có Parralel nữa. Nhưng PSOC thì phần lớn là SAR giá rẻ. Dùng cho đo lường thì nên dùng Sigma-delta. Dù cùng kiểu nhưng thiết kế các hãng vẫn là khác nhau, nếu kết quả test không ổn định được thì bạn chỉ có các thay PSOC hoặc dùng thêm ADC ngoài thôi. Cái này là cố hữu rất khó thay đổi hay tác động. Các duy nhất có thể làm là ổn định nhiệt độ cho nó khỏi trôi thôi. Test cái này đơn giản thôi, bạn có thể nối thẳng ngõ vào ADC lên AVDD hoặc Vref+ và xem kết quả ADC.
                3 - Đường tín hiệu ngõ vào của bạn từ đâu, qua các khâu nào ? Nếu dùng opam nguồn không đối xứng thì luôn có offset ở ngõ ra khi tín hiệu vào là 0 thực sự. Do đó bạn phải calib thôi, nhưng giá trị offset này cũng không ổn định đâu. Có thể dùng thủ thuật là đưa offset ngõ vào để nâng offset ngõ ra cao hơn hẳn giá trị offset trôi nổi của opam. Tuy nhiên cũng làm giảm giải đo đầu vào của ADC. Điều đó lại phát sinh vì sao có con opam rẻ, con đắt . Đường tín hiệu ngõ vào của bạn còn cần cách mạch lọc để giảm nhiễu tác động từ bên ngoài, loại bỏ các tín hiệu không mong muốn, bộ lọc thường có bandwidth gần với giải của ADC.

                TL431 có ổn định thực sự không ? Với sai số cơ bản là 1%, ADC 12 bit tương ứng có 4096 mức/ step. Tính đơn giản là giá trị ADC đọc được sẽ không ổn định, giao động quanh một số bước là : 1%*4096 = ~41 steps. Bạn đang gặp sai số từ 23-28 steps là tốt đấy, không phải trường hợp xấu nhất đâu. kkk, Các đơn giản là tìm con Vref xịn hơn với sai số cơ bản 0.1% hoặc 0.01%. Còn chưa kể trôi nhiệt sau một thời gian hoạt động. Tại sao đưa GND = 0V vào mà vẫn thấy giá trị ? Bạn lấy GND đó ở đâu ? Ai cũng biết dây dẫn có điện trở, và khi có dòng chạy qua sẽ có rơi áp. Nếu bạn lấy GND khác với GND ngay tại ADC thì sẽ có một chênh áp nhất định. Chênh áp này còn thay đổi thep dòng tải chạy qua đó. Bạn hãy thử lấy GND ngay chân cấp vào ADC và đo thử lại xem.

                ADC có nhiều kênh, và thường dùng bộ MUX/trộn. Loại rẻ tiền thì thường có một bộ Sample & hold thôi. Vấn đề xảy ra nữa là cross talk - nhiễu chéo giữa các kênh. Một kênh có tín hiệu vào ở mức cao hơn, một kênh có tín hiệu mức vào thấp hơn sẽ ảnh hưởng lẫn nhau. Điều này sẽ nghiêm trọng hơn khi trở kháng của nguồn tín hiệu lớn (kiểu tín hiệu lấy trực tiếp không qua opam đệm).

                Định nghĩa độ chính xác cao là ntn nào ? ADC còn có 16, 18, 20,24,32,40 bit nữa cơ mà. 12bit chỉ là hàng phổ thông thôi.
                Và nhớ rằng ADC có 12 bit thì chỉ tin tưởng được số bit ít hơn mà thôi, 11bit. Đừng cố đòi đầy đủ 12bit làm gì.


                Đam mê là sức mạnh vượt qua tất cả, mỗi ngày ...

                Comment

                Về tác giả

                Collapse

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

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

                Collapse

                Đang tải...
                X