Thông báo

Collapse
No announcement yet.

tần số ADC0809.

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

  • tần số ADC0809.

    mình có 1 thắc mắc thế này.
    mình đo ADC 6 kênh sử dụng lm35 và chiết áp để hiển thi LCD và giao tiếp máy tính.chương trình mình viết mới để test LCD để đọc 6 kênh ADC, thế mà mô phỏng proteus đúng mà đưa lên mạch thực tế thì có lúc đo đúng đo sai. mình nghĩ là tần số của adc sai nên chỉnh lại là 620Khz như datasheet dùng mạch tạo xung 74hc14.mấy ngày rồi mình vẫn không thể tìm ra lỗi hiển thị sai của LCD
    các nhiệt độ của các kênh cứ hiển thị kênh thì đúng kênh thì sai.
    các bạn xem dùm mình sai sót chỗ nào với.
    http://www.mediafire.com/?meiltwzy0lv
    cám ơn

  • #2
    Mình không hiểu lắm thuật toán của bạn, nhưng về chương trình của bạn, mình xin có ý kiến thế này :

    + Bạn nói có lúc đo đúng, có lúc đo sai, như vậy có khả năng là con VXL bị nhiễu, khi lấy giá trị của ADC, bạn nên lấy mẫu nhiều lần, rồi chia trung bình, như vậy sẽ đỡ sai số hơn.

    + Trong chương trình, bạn nên đợi cho đến khi ADC chuyển đổi xong rồi mới lấy giá trị, chứ không nên dùng delay để đợi, làm như vậy sẽ mất thời gian (mình thấy bạn đợi là 100ms) lại chưa chắc ADC đã chuyển đổi xong.

    Thân ái !

    Comment


    • #3
      Nguyên văn bởi pk178 Xem bài viết
      Mình không hiểu lắm thuật toán của bạn, nhưng về chương trình của bạn, mình xin có ý kiến thế này :

      + Bạn nói có lúc đo đúng, có lúc đo sai, như vậy có khả năng là con VXL bị nhiễu, khi lấy giá trị của ADC, bạn nên lấy mẫu nhiều lần, rồi chia trung bình, như vậy sẽ đỡ sai số hơn.

      + Trong chương trình, bạn nên đợi cho đến khi ADC chuyển đổi xong rồi mới lấy giá trị, chứ không nên dùng delay để đợi, làm như vậy sẽ mất thời gian (mình thấy bạn đợi là 100ms) lại chưa chắc ADC đã chuyển đổi xong.

      Thân ái !
      tôi đọc trong đatasheet thấy có nói, nếu dùng tần số là 600Khz trở lên thì nên delay khoảng 10us, còn theo bạn lấy giá trị trung bình các mẫu như thế nào.bạn có thể nói rõ cho tôi biết với.
      cám ơn

      Comment


      • #4
        Tức là thế này :

        + Lần 1 : bạn đọc được giá trị của ADC là x1
        + Lần 2 : bạn đọc được giá trị của ADC là x2
        .....
        + Lần n : bạn đọc được giá trị của ADC là xn

        Thế thì giá trị trung bình của ADC là (x1 + x2 +... + xn)/n

        Làm như vậy, bạn sẽ giảm được sai số, nếu bạn muốn chính xác hơn thì bạn đọc trong cuốn giáo trình phương pháp tính, họ có nói về các cách khử sai số (lâu rồi mình ko dùng nên cũng chẳng nhớ ), còn nếu đơn giản thì chỉ làm như trên thôi cũng được.

        Tuy nhiên cách làm như trên có nhược điểm là làm hệ thống của bạn chậm đi, ngoài ra khi lấy giá trị trung bình, nếu giả sử xuất hiện 1 giá trị ngoại lai (giá trị lớn hoặc nhỏ hơn hẳn các giá trị khác) thì sẽ ảnh hưởng tới kết quả của bạn, do vậy, bạn cần thêm các thuật toán để loại bỏ giá trị ngoại lai này. Ví dụ như bạn có thể so sánh 1 tất cả các giá trị với nhau, nếu thấy giá trị nào khác biệt hẳn so với các giá trị còn lại thì delete nó đi

        Chúc bạn thành công !

        Comment


        • #5
          Nguyên văn bởi pk178 Xem bài viết
          Tức là thế này :

          + Lần 1 : bạn đọc được giá trị của ADC là x1
          + Lần 2 : bạn đọc được giá trị của ADC là x2
          .....
          + Lần n : bạn đọc được giá trị của ADC là xn

          Thế thì giá trị trung bình của ADC là (x1 + x2 +... + xn)/n

          Làm như vậy, bạn sẽ giảm được sai số, nếu bạn muốn chính xác hơn thì bạn đọc trong cuốn giáo trình phương pháp tính, họ có nói về các cách khử sai số (lâu rồi mình ko dùng nên cũng chẳng nhớ ), còn nếu đơn giản thì chỉ làm như trên thôi cũng được.

          Tuy nhiên cách làm như trên có nhược điểm là làm hệ thống của bạn chậm đi, ngoài ra khi lấy giá trị trung bình, nếu giả sử xuất hiện 1 giá trị ngoại lai (giá trị lớn hoặc nhỏ hơn hẳn các giá trị khác) thì sẽ ảnh hưởng tới kết quả của bạn, do vậy, bạn cần thêm các thuật toán để loại bỏ giá trị ngoại lai này. Ví dụ như bạn có thể so sánh 1 tất cả các giá trị với nhau, nếu thấy giá trị nào khác biệt hẳn so với các giá trị còn lại thì delete nó đi

          Chúc bạn thành công !
          mình dùng 74HC14 để tạo xung dao động Clk cho ADC0809 với tần số là 125Khz (C= 102 và R = 100K )
          thứ nhất mình dùng pp delay: với tần số như thế thì mình sẽ delay là khoảng 50uS (micro s) cách này thì mình đo có lúc đúng 1 số kênh có lúc lại sai
          thứ hai: mình dùng cách kiểm tra chân EOC của ADC nếu có báo 1 thì đã chuyển đổi xong với lệnh JNB EOC,$ : nhưng khi đổ vào VDK thì nó bị đứng ở chỗ đó,tức EOC không báo lên 1 , mình đo thì nó ở mức 1V???
          đây là code chuyển đổi ADC của mình:

          CH_DOI: MOV R2,#00H
          MOV R0,#20H
          MOV R3,#6

          KENH:
          CALL CONVERT
          INC R2
          CALL DELAY100ms
          INC R0
          DJNZ R3,KENH
          RET
          ;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
          ;CHUONG TRINH CON CHUYEN DOI 6 KENH
          ;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
          CONVERT:
          mov a,r2
          swap a
          mov p3,a
          setb sta
          NOP
          NOP
          NOP
          CLR STA
          NOP
          NOP
          JNB EOC,$
          setb oe
          MOV @R0,P1

          và nó bị treo của EOC :JNB EOC,$ không thoát khỏi vòng lặp này

          Comment


          • #6
            Nguyên văn bởi vankhoakmt Xem bài viết
            mình dùng 74HC14 để tạo xung dao động Clk cho ADC0809 với tần số là 125Khz (C= 102 và R = 100K )
            thứ nhất mình dùng pp delay: với tần số như thế thì mình sẽ delay là khoảng 50uS (micro s) cách này thì mình đo có lúc đúng 1 số kênh có lúc lại sai
            thứ hai: mình dùng cách kiểm tra chân EOC của ADC nếu có báo 1 thì đã chuyển đổi xong với lệnh JNB EOC,$ : nhưng khi đổ vào VDK thì nó bị đứng ở chỗ đó,tức EOC không báo lên 1 , mình đo thì nó ở mức 1V???
            đây là code chuyển đổi ADC của mình:

            CH_DOI: MOV R2,#00H
            MOV R0,#20H
            MOV R3,#6

            KENH:
            CALL CONVERT
            INC R2
            CALL DELAY100ms
            INC R0
            DJNZ R3,KENH
            RET
            ;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
            ;CHUONG TRINH CON CHUYEN DOI 6 KENH
            ;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
            CONVERT:
            mov a,r2
            swap a
            mov p3,a
            setb sta
            NOP
            NOP
            NOP
            CLR STA
            NOP
            NOP
            JNB EOC,$
            setb oe
            MOV @R0,P1

            và nó bị treo của EOC :JNB EOC,$ không thoát khỏi vòng lặp này
            sơ đồ bạn post lên mình mở ko dc, chắc bạn nên chuyển qua file hình hoặc pdf j đó.. ko thì orcad. phải xem phần cứng và soft mới bit lỗi, vì bạn chờ chỗ này. mà nếu phần cứng ko chạy, hoặc chạy lung tung thì .. nó cũng hiển thị sai thôi.

            Comment


            • #7
              Nguyên văn bởi dt_love Xem bài viết
              sơ đồ bạn post lên mình mở ko dc, chắc bạn nên chuyển qua file hình hoặc pdf j đó.. ko thì orcad. phải xem phần cứng và soft mới bit lỗi, vì bạn chờ chỗ này. mà nếu phần cứng ko chạy, hoặc chạy lung tung thì .. nó cũng hiển thị sai thôi.
              sơ đồ mình mô phỏng bằng Proteus đó bạn.

              Comment


              • #8
                Nguyên văn bởi vankhoakmt Xem bài viết
                sơ đồ mình mô phỏng bằng Proteus đó bạn.
                ặc, vậy thì pó tay.. sơ đồ mạch mà bạn đang đã làm mạch rồi ấy. có ko? nếu có thì mình chỉ cần coi cái đó thôi...nhớ chuyển sang pdf,

                Comment


                • #9
                  Nguyên văn bởi dt_love Xem bài viết
                  sơ đồ bạn post lên mình mở ko dc, chắc bạn nên chuyển qua file hình hoặc pdf j đó.. ko thì orcad. phải xem phần cứng và soft mới bit lỗi, vì bạn chờ chỗ này. mà nếu phần cứng ko chạy, hoặc chạy lung tung thì .. nó cũng hiển thị sai thôi.
                  theo các bác thì khi dùng quét đa kênh cho ADC 0809 thì tần số là khoảng bao nhiêu? các bác vui lòng chỉ giúp kinh nghiệm

                  Comment


                  • #10
                    mình dùng adc0809 để đo nhiệt độ cho 6 kênh theo phương pháp dùng mạch tạo xung bên ngoài bằng IC74HC14 có công thức tính f=1/ (0.8*R*C) như thế mình chọn R= 89K và C=22p như vậy tần số lấy mẫu theo datasheet là 640Khz và cũng theo datasheet mình dùng pp delay để đọc giá trị adc mình delay khoảng 15uS (15 chu kỳ máy).nhưng mạch đo bị sai.giá trị nhiệt độ lúc đúng lúc sai.và kênh này lại lộn giá trị với kênh kia,
                    tình trạng như vậy là sao ? mình tìm nguyên nhân nhưng chưa được

                    Comment


                    • #11
                      Nguyên văn bởi vankhoakmt Xem bài viết
                      mình dùng adc0809 để đo nhiệt độ cho 6 kênh theo phương pháp dùng mạch tạo xung bên ngoài bằng IC74HC14 có công thức tính f=1/ (0.8*R*C) như thế mình chọn R= 89K và C=22p như vậy tần số lấy mẫu theo datasheet là 640Khz và cũng theo datasheet mình dùng pp delay để đọc giá trị adc mình delay khoảng 15uS (15 chu kỳ máy).nhưng mạch đo bị sai.giá trị nhiệt độ lúc đúng lúc sai.và kênh này lại lộn giá trị với kênh kia,
                      tình trạng như vậy là sao ? mình tìm nguyên nhân nhưng chưa được
                      Thời gian chuyển đổi của adc 0809 với tần số 640K là 100uS mà, sao bạn chờ chỉ có 15uS? lúc đó đã có data đâu mà đọc.

                      Comment


                      • #12
                        Nguyên văn bởi dt_love Xem bài viết
                        Thời gian chuyển đổi của adc 0809 với tần số 640K là 100uS mà, sao bạn chờ chỉ có 15uS? lúc đó đã có data đâu mà đọc.
                        mình cũng biết thế nhưng sao trong datasheet 0809 thì lại ghi thời gian chuyển đổi hay delay của chân EOC là 8+2uS ?

                        Comment


                        • #13
                          Nguyên văn bởi vankhoakmt Xem bài viết
                          mình cũng biết thế nhưng sao trong datasheet 0809 thì lại ghi thời gian chuyển đổi hay delay của chân EOC là 8+2uS ?
                          vậy bạn hãy thử xem lại coi tEOC là j nhé
                          Click image for larger version

Name:	timechart.GIF
Views:	1
Size:	10.0 KB
ID:	1340082

                          Comment


                          • #14
                            minh muốn tạo tần số 640kHz cho ADC 0809 haotj động để đo nhiệt độ mà ko biết dùng mạch nào, mình có dùng NE555 mà nó nhảy số gê lắm,
                            ban nào có sơ đồ mạch tạo xung 640kHz up cho mình xem với nha, mình cũng đang cần gấp, thank nhiều lắm

                            Comment


                            • #15
                              Nguyên văn bởi baoitc Xem bài viết
                              minh muốn tạo tần số 640kHz cho ADC 0809 haotj động để đo nhiệt độ mà ko biết dùng mạch nào, mình có dùng NE555 mà nó nhảy số gê lắm,
                              ban nào có sơ đồ mạch tạo xung 640kHz up cho mình xem với nha, mình cũng đang cần gấp, thank nhiều lắm
                              Mạch tạo dao động cho ADC0809 dùng 4093, bạn tham khảo nhé.
                              Click image for larger version

Name:	ScreenHunter_019.gif
Views:	1
Size:	8.5 KB
ID:	1368634
                              Công ty TNHH Tự Động Hóa Đạt Lân
                              32/36, Ông Ích Khiêm, F14, Q11
                              ĐT: 08.3974 7308 - 0937.197.001
                              email:
                              Webite:

                              Comment

                              Về tác giả

                              Collapse

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

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

                              Collapse

                              Đang tải...
                              X