Thông báo

Collapse
No announcement yet.

Cần Giúp Đỡ Cảm Biến Đo Nhiệt Độ LM35 Sử Dụng Vđk PIC8F4550

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

  • Cần Giúp Đỡ Cảm Biến Đo Nhiệt Độ LM35 Sử Dụng Vđk PIC8F4550

    Click image for larger version

Name:	lm35.jpg
Views:	1
Size:	123.1 KB
ID:	1412562

    chào mọi người,mình làm mạch đo nhiệt độ sử dụng cmar biến LM35,khi test mô phỏng thì nhiệt độ ra chuẩn nhưng khi test mạch thật thì nhiệt độ hiện thị lại nhảy liên tục không ngừng (ví dụ nhiệt độ đúng là 20 thì nhiệt độ đo ra cứ nhảy liên tục quanh giá trị 20 (19-20-21) mà không ngừng)
    mình dùng nguồn từ cổng USB,điện áp tham chiếu mình lấy điện áp tham chiếu nội (nguồn nuôi cho vđk + cảm biển lấy từ cổng USB)

    công thúc mình dùng biến đổi nhiệt độ để hiện thị là : nhiệt độ= (giá trị adc * 500)/1023
    thực ra nguồn USB mình đo chỉ được 4.68=> mình thay bằng công thức nhiệt độ = (giá trị adc* 468)/1023 nhưng nhiệt độ vẫn nhảy mà không dừng

    Ai có kinh nghiệm sử dụng cảm biến LM35 giúp mình được không?
    Chân thành cảm ơn!

  • #2
    LM35 đầu ra analog nên giá trị thay đổi liên tục, thêm nữa tốc độ lấy mẫu nhanh thì giá trị nhảy lum tum là bình thường, lấy trung bình giá trị trong 1 khoảng thời gian nhất định rồi hãy xuất. LM35 hàng dỏm thì sai số thường trên 2 độ đấy nhé ^^

    Comment


    • #3
      có cách nào khắc phục không bạn

      Comment


      • #4
        Nguyên văn bởi boss9xxxx Xem bài viết
        có cách nào khắc phục không bạn
        nói rồi mà @@
        lấy trung bình nhiều giá trị trong 1 khoảng thời gian nhất định rồi hãy xuất.

        Comment


        • #5
          đã lấy thồi gian lấy mẫu tăng lên nhiệt độ đo chính xác hơn nhưng nhiệt độ vẫn nhảy
          còn cách nào khác không bạn

          Comment


          • #6
            hiểu sâu phần cứng

            Bình thường thời gian lấy mẫu tính bằng ms ( nếu nhớ không lộn thì cỡ trên 32ms) cho 1 lần chuyển đổi thành công

            giá trị được lưu vào một mảng chẳng hạn - sau đó lấy trị trung bình và xuất ra led 7 đoạn để hiển thị
            Be quan. Plz contact through email:

            Comment


            • #7
              hiểu sâu phần cứng

              Bình thường thời gian lấy mẫu tính bằng ms ( nếu nhớ không lộn thì cỡ trên 32ms) cho 1 lần chuyển đổi thành công

              giá trị được lưu vào một mảng chẳng hạn - sau đó lấy trị trung bình và xuất ra led 7 đoạn để hiển thị
              Be quan. Plz contact through email:

              Comment


              • #8
                Thêm nữa khi làm về chuyển đổi adc - bạn nên chú ý về phần cứng nhiều hơn - Không đơn giản là lấy chân ngõ ra của Lm35 rồi conect directly vào vi điều khiển đâu

                một thiết kế cần có đúng phần cứng và phần mềm
                Be quan. Plz contact through email:

                Comment


                • #9
                  Lenh Ho@ bạn có thể nói rõ hơn ko,theo bạn phần cứng phải nối như thế nào

                  Comment


                  • #10
                    Nguyên văn bởi boss9xxxx Xem bài viết
                    đã lấy thồi gian lấy mẫu tăng lên nhiệt độ đo chính xác hơn nhưng nhiệt độ vẫn nhảy
                    còn cách nào khác không bạn
                    Không phải là tăng thời gian lấy mẫu. Mà bạn lấy nhiều mẫu ( 10 mẫu chẳng hạn) sau đó tính trung bình.

                    Comment


                    • #11
                      Nguyên văn bởi duong_act Xem bài viết
                      Không phải là tăng thời gian lấy mẫu. Mà bạn lấy nhiều mẫu ( 10 mẫu chẳng hạn) sau đó tính trung bình.
                      tớ nhớ là tớ nói rõ lắm rồi mà ta @@

                      Comment


                      • #12
                        chung1680 @ duong_act @ Lenh Ho mọi người có thể cho mình ví dụ về cách lấy nhiều mẫu sau đó tính trung bình trong vi điều khiển được không?
                        Ai có code mẫu về cách làm này cho mình tham khỏa dược không?

                        Comment


                        • #13
                          int16 mau[10]; // ;lay 10 mau
                          int temp;
                          // Lay 10 mau
                          for(temp=0;temp<10;temp++)
                          {
                          mau[temp]=read_adc();
                          delay_ms(1);
                          }
                          // tinh tong
                          for(tem=1;temp<10;temp++)
                          {
                          mau[0]=mau[0]+mau[temp];
                          }

                          // chia lay trung binh
                          mau[0]=mau[0]/10;
                          ....
                          Đến đây thì cái mau[0] là giá trị trung bình của 10 cái mau[0] => mau[9]. Còn làm gì với nó là tùy bạn.
                          _________
                          @Lenh Ho : ADC nội của PIC là High Speed - tốc độ cao. Thời gian lấy mẫu của nó tính bằng us thôi bạn ạ . Mình chưa kiểm nghiệm thực tế nó là bao nhiêu nhưng chắc chắn là tốc độ lấy mẫu nhỏ hơn 20us. Chứ nếu mà 32ms thì nó gọi là Super Low Speed rồi
                          Last edited by duong_act; 24-04-2012, 12:40.

                          Comment


                          • #14
                            Bạn vào link này tham khảo nhé! có bài viết chi tiết về con PIC8f4520 tài nguyên ADC
                            ADC với Pic18f4520

                            Comment


                            • #15
                              Cac a giúp e với.
                              E đo nhiệt độ bằng LM35 và thực hiện lấy mẫu nó 10 lần như bài của a duongact hướng dẫn.
                              Nhưng khi e xuất ra thì không hiểu sao nó lại hiển thị sai hoàn toàn.
                              code e như sau:
                              void hoitiep()
                              {
                              adc[1]=adc[1]/2.048;
                              printf("%Lu",adc[1]);
                              delay_ms(50);
                              }
                              void main()
                              {
                              // Lay 10 mau
                              for(i=1;i<=10;i++)
                              {
                              adc[i]=read_adc();
                              delay_ms(10);
                              }
                              // tinh tong
                              for(i=2;i<=10;i++)
                              {
                              adc[1]=adc[1]+adc[i];
                              }
                              // chia lay trung binh
                              adc[1]=(int)(adc[1]/10);
                              }

                              Comment

                              Về tác giả

                              Collapse

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

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

                              Collapse

                              Đang tải...
                              X