Thông báo

Collapse
No announcement yet.

LM35 + ATMEGA16 nhảy loạn xạ

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

  • LM35 + ATMEGA16 nhảy loạn xạ

    Mình có lắp 1 mạch đơn giản là đo nhiệt độ bằng LM35 hiển thị ra LCD. Chân Vout của LM35 mình xuất thẳng vào kênh ADC0 của atmega16. Mình lắp như sau:
    Vcc: được đưa lên nguồn khá ổn định (nguồn này mình đo thì luôn thấy dao động từ 5 - 5,15V)
    AVcc: đưa lên nguồn chung với Vcc nhưng có mắc song song thêm tụ 100nF. Thằng này cũng khá ổn định sai số ko quá 0.3 với Vcc.
    Vref: mình bỏ trống vì sử dụng điện áp nội 2,56V
    Sử dụng 8bit, như vậy mỗi oC ứng với 10mV (dải nhiệt độ từ 0 - 255oC)

    Kết quả là thằng LCD nó nhảy tùm lum. Mình có 2 câu hỏi:

    1. Khi có điện áp từ Vout của LM35 đưa vào ADC0 thì nó cứ nhảy loạn xạ (dù điện áp mình đo được giữa 2 chân Vout và Mass của LM35 là cỡ 0.3V thì lẽ ra nó phải hiển thị cỡ 30 độ chứ). Code mình mô phỏng trên proteus chạy tốt.
    2. Kỳ lạ hơn nữa là khi mình rút chân Vout của LM35 ra thì thằng LCD nó nhảy dữ hơn nữa. Lúc này mình đo điện áp giữa chân 40 (ADC0) với mass thì thấy nó có điện áp biến đổi liên tục. Vậy điện áp này đâu ra nhỉ?

    Bạn nào có kinh nghiệm vụ này ko giúp mình với? Mình muốn biết nguyên nhân mà nghĩ hoài ko ra.

  • #2
    Nguyên văn bởi heobeobungbu Xem bài viết
    Mình có lắp 1 mạch đơn giản là đo nhiệt độ bằng LM35 hiển thị ra LCD. Chân Vout của LM35 mình xuất thẳng vào kênh ADC0 của atmega16. Mình lắp như sau:
    Vcc: được đưa lên nguồn khá ổn định (nguồn này mình đo thì luôn thấy dao động từ 5 - 5,15V)
    AVcc: đưa lên nguồn chung với Vcc nhưng có mắc song song thêm tụ 100nF. Thằng này cũng khá ổn định sai số ko quá 0.3 với Vcc.
    Vref: mình bỏ trống vì sử dụng điện áp nội 2,56V
    Sử dụng 8bit, như vậy mỗi oC ứng với 10mV (dải nhiệt độ từ 0 - 255oC)

    Kết quả là thằng LCD nó nhảy tùm lum. Mình có 2 câu hỏi:

    1. Khi có điện áp từ Vout của LM35 đưa vào ADC0 thì nó cứ nhảy loạn xạ (dù điện áp mình đo được giữa 2 chân Vout và Mass của LM35 là cỡ 0.3V thì lẽ ra nó phải hiển thị cỡ 30 độ chứ). Code mình mô phỏng trên proteus chạy tốt.
    2. Kỳ lạ hơn nữa là khi mình rút chân Vout của LM35 ra thì thằng LCD nó nhảy dữ hơn nữa. Lúc này mình đo điện áp giữa chân 40 (ADC0) với mass thì thấy nó có điện áp biến đổi liên tục. Vậy điện áp này đâu ra nhỉ?

    Bạn nào có kinh nghiệm vụ này ko giúp mình với? Mình muốn biết nguyên nhân mà nghĩ hoài ko ra.
    thứ 1, ADC giá trị phụ thuộc rất nhiều yếu tố như thời tiết, thời gian hoạt động của các phần tử mạch, chất lượng linh kiện vì thế mỗi giá trị ADC đọc về trên thực tế đều khác nhau ko như mô phỏng cũng như vận tốc đều chỉ có trong lý thuyết, thực tế phải tính vận tốc trung bình.
    thứ 2, vì chân ADC cũng tích hợp thêm khả năng là chân I/O nên phần cứng I/O ảnh hưởng lên phần cứng ADC

    Comment


    • #3
      con atmega16 của bạn có vấn đề vs các chân ADC rồi. bạn thay con mới nó sẽ chạy ngon lành thôi.
      Nguyễn Huy Biên - 01649 802 694
      gmail :

      Comment


      • #4
        Theo mình nguyên nhân là do áp ra từ LM35 không ổn định, bạn nên làm thêm 1 mạch ổn định áp (dùng op-am chẳng hạn) và tính giá trị trung bình trước khi đưa ra hiển thị.
        Cảm ơn đời mỗi sớm mai thức dậy
        Cho ta thêm ngày nữa để yêu thương.

        Comment


        • #5
          cậu thử đưa code lên xem..có thể tần số lấy mẫu của ADC cậu lấy nhanh quá hoặc không lấy giá trị trung bình của ADC mà xử lý luôn nên nó vậy.

          Comment


          • #6
            Nguyên văn bởi tan0710 Xem bài viết
            cậu thử đưa code lên xem..có thể tần số lấy mẫu của ADC cậu lấy nhanh quá hoặc không lấy giá trị trung bình của ADC mà xử lý luôn nên nó vậy.
            Cảm ơn các bạn đã giúp đỡ. Giờ mạch mình đã chạy ngon lành rồi nhưng ko biết sai số là bao nhiêu. Mấu chốt chắc là tại AVcc. Mình đã mắc theo như cách datasheet hướng dẫn thì thấy nó ổn định (chưa biết chạy đúng hay sai). Mà sẵn đây mình hỏi bạn là tần số lấy mẫu tính thế nào? Cách chỉnh tần số lấy mẫu ra sao? Mình cho clock của ADC là 125 kz vậy có phải là tần số lấy mẫu ko?

            Comment


            • #7
              Clock ADC là 125kHz không phải tần số lấy mẫu đâu, nhưng nó có liên quan đến tần số lấy mẫu. Với CLKadc = 125kHz, tần số lấy mẫu có têể đạt cực đại là 125/13 (Khz) với chế độ Free Running. Để xác định tần số lấy mẫu thực tế, bác phải xem khoảng thời gian giữa các lần thực hiện lệnh khởi tạo ADC: (ADCSRA|=0x40

              Comment


              • #8
                Nguyên văn bởi thanhdatgtvt Xem bài viết
                Theo mình nguyên nhân là do áp ra từ LM35 không ổn định, bạn nên làm thêm 1 mạch ổn định áp (dùng op-am chẳng hạn) và tính giá trị trung bình trước khi đưa ra hiển thị.
                cho mình hỏi tính giá trị trung ình tính sao bạn?

                Comment


                • #9
                  Nguyên văn bởi heobeobungbu Xem bài viết
                  Cảm ơn các bạn đã giúp đỡ. Giờ mạch mình đã chạy ngon lành rồi nhưng ko biết sai số là bao nhiêu. Mấu chốt chắc là tại AVcc. Mình đã mắc theo như cách datasheet hướng dẫn thì thấy nó ổn định (chưa biết chạy đúng hay sai). Mà sẵn đây mình hỏi bạn là tần số lấy mẫu tính thế nào? Cách chỉnh tần số lấy mẫu ra sao? Mình cho clock của ADC là 125 kz vậy có phải là tần số lấy mẫu ko?
                  Bạn ơi, bạn làm sao cho nó chạy ổn định đc zậy, mình là hiển thị bằng led 7doan mà nó cứ nhảy lên nhảy xuống a`, bạn giúp mình nha

                  Comment


                  • #10
                    cũng đang bị hiện tượng tương tự , dù cho đã dùng một cuộn cảm nối tiếp với chân Vref trước khi kéo lên Vcc

                    Comment

                    Về tác giả

                    Collapse

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

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

                    Collapse

                    Đang tải...
                    X