Thông báo

Collapse
No announcement yet.

hỏi về DualADC và INSAMP

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

  • hỏi về DualADC và INSAMP

    Có bác nào đã làm vể Insamp 3 chưa vậy. EM có làm thử một project nhỏ về Insamp 3 và DualADC. Project của em là cho đầu vào điện áp noninv và inv vào chân p0[1] và p0[0]. sau đó cho qua Opam Insamp3 rồi qua ADC. sau đó em hiển thị lên LCD giá trị điện áp vào. ví dụ
    {
    .....
    Data = ADC_iGetData1();

    .....
    // chuyen thanh gia tri dien ap vao
    Vin = (unsigned long int) Data*2600/((unsigned long int) gain*8192);

    ltoa(str, Vin, 10);

    LCD_PrString(str);
    ......
    }
    tuy nhiên kết quả chạy thì lại rất sai lệch, ma không hiểu lý do tại sao, mong các bác xem project của em (gủi kèm theo) và cho em vài lời khuyên nhé. Rất mong sự giúp đỡ vì nó rất quan trọng với em.
    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:

  • #2
    Có một vấn đề là đầu ra của INSAMP là đơn cực (single ended) lấy AGND làm tham chiếu sao em ko dùng ADC thông thường mà lại dùng DUALADC để đo làm gì. Còn nếu dùng DUAL ADC thì có lẽ ko cần thiết dùng tới INSAMP
    Work is glory

    Comment


    • #3
      Nguyên văn bởi WinterInJuly
      Có một vấn đề là đầu ra của INSAMP là đơn cực (single ended) lấy AGND làm tham chiếu sao em ko dùng ADC thông thường mà lại dùng DUALADC để đo làm gì. Còn nếu dùng DUAL ADC thì có lẽ ko cần thiết dùng tới INSAMP
      Em dung DUAL ADC một đầu vào để đo điện áp của cặp nhiệt điện, còn một đầu vào đo nhiệt độ tiếp điểm lạnh của nó.
      Tiện thể bác cho em hỏi, điện áp chuẩn của ADC có phải được set qua Ref Mux không. Nếu em set là -BandGap/2 + BandGap/2 thì điện áp rè của nó là 2.6V còn set -Vdd/2 +Vdd/2 nó là 5V phải không.
      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


      • #4
        Nếu dùng để đo CAN thì chỉ cần INSAMP với gain 16 là đủ rồi, chạy ổn định lắm. Trên mạng có application note về cái này đó, down về mà đọc là rõ cả thôi.
        AFH

        Comment


        • #5
          Nguyên văn bởi encoder
          Có bác nào đã làm vể Insamp 3 chưa vậy. EM có làm thử một project nhỏ về Insamp 3 và DualADC. Project của em là cho đầu vào điện áp noninv và inv vào chân p0[1] và p0[0]. sau đó cho qua Opam Insamp3 rồi qua ADC. sau đó em hiển thị lên LCD giá trị điện áp vào. ví dụ
          {
          .....
          Data = ADC_iGetData1();

          .....
          // chuyen thanh gia tri dien ap vao
          Vin = (unsigned long int) Data*2600/((unsigned long int) gain*8192);

          ltoa(str, Vin, 10);

          LCD_PrString(str);
          ......
          }
          tuy nhiên kết quả chạy thì lại rất sai lệch, ma không hiểu lý do tại sao, mong các bác xem project của em (gủi kèm theo) và cho em vài lời khuyên nhé. Rất mong sự giúp đỡ vì nó rất quan trọng với em.
          Tui đã xem dự án của bạn. Bạn sai ở những điểm sau. Thứ nhất tần số để 4MHz là quá lớn. Thứ hai là không được vô hiệu hóa AGND nội của chíp nếu không có AGND ngoài. Thời gian tính toán đặt cho ADC có vẻ không hợp lý. Đầu vào Analog Input2 để Ref High là sai. Đầu đo vào của INSAMP so sánh với GND là sai. tạm thời chỉ phát hiện có thế thôi.
          AFH

          Comment


          • #6
            Nguyên văn bởi AFH
            Nếu dùng để đo CAN thì chỉ cần INSAMP với gain 16 là đủ rồi, chạy ổn định lắm. Trên mạng có application note về cái này đó, down về mà đọc là rõ cả thôi.
            AFH
            Can thi dải điện áp ra của nó theo em được biết chỉ khoảng 0-5mV. nếu dùng với Gain 16 thì chỉ được 0 - 90mV. Như vậy khi đọc ADC có chính xác không hả bác vì ADC dải cua nó bé nhất cũng là 0 - 2.6 V.
            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


            • #7
              Nguyên văn bởi AFH
              Tui đã xem dự án của bạn. Bạn sai ở những điểm sau. Thứ nhất tần số để 4MHz là quá lớn. Thứ hai là không được vô hiệu hóa AGND nội của chíp nếu không có AGND ngoài. Thời gian tính toán đặt cho ADC có vẻ không hợp lý. Đầu vào Analog Input2 để Ref High là sai. Đầu đo vào của INSAMP so sánh với GND là sai. tạm thời chỉ phát hiện có thế thôi.
              AFH
              Có một điều lạ là khi em làm với GAIN =1 thì LCD hiển thị tương đối chính xác so với em đo từ đồng hồ điện áp vào. Nhưng khi GAIN đặt giá trị khác sai lệch rất lớn. Ví dụ khi em đặt GAIN = 4 chẳng hạn. Sau khi em đọc từ ADC luu vao biến Data. em muốn hiển thị giá trị thực đ.áp vào em tính bằng công thức
              {
              .....
              AMP_SetGain(AMP_G4_00);
              .....
              Data = ADC_iGetData() + 2048; //get data from ADC and convert to unsigned
              Vin = (float) (Data+2048)*(5.0/4.0)/4095; // ADCINC12 //4.0: Gain;
              str = ftoa(Vin,0); // convert float to string
              LCD_PrString(str);
              .....
              }
              không biết công thức này có đúng không, vì khi em cho điện áp vao cớ 1V chẳng hạn thì giá trị LCD hiển thị giá trị 0,24... (khoảng 1/4V). Các bác gỡ rùm 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


              • #8
                Nguyên văn bởi encoder
                Can thi dải điện áp ra của nó theo em được biết chỉ khoảng 0-5mV. nếu dùng với Gain 16 thì chỉ được 0 - 90mV. Như vậy khi đọc ADC có chính xác không hả bác vì ADC dải cua nó bé nhất cũng là 0 - 2.6 V.
                Can loại K là 41uV/C, do vậy tối đa là khoảng hơn 50mV cơ. cho qua Gain 16 thì nó là 0,8V cơ mà. Nếu dùng áp tham chiếu của Analog là Bandgap+/-Bandgap thì giải áp vào ADC là từ 0 tới 2,6 V, AGND=1,3V. Do vậy nó hiển thị khá tốt.
                AFH

                Comment


                • #9
                  Nguyên văn bởi encoder
                  Có một điều lạ là khi em làm với GAIN =1 thì LCD hiển thị tương đối chính xác so với em đo từ đồng hồ điện áp vào. Nhưng khi GAIN đặt giá trị khác sai lệch rất lớn. Ví dụ khi em đặt GAIN = 4 chẳng hạn. Sau khi em đọc từ ADC luu vao biến Data. em muốn hiển thị giá trị thực đ.áp vào em tính bằng công thức
                  {
                  .....
                  AMP_SetGain(AMP_G4_00);
                  .....
                  Data = ADC_iGetData() + 2048; //get data from ADC and convert to unsigned
                  Vin = (float) (Data+2048)*(5.0/4.0)/4095; // ADCINC12 //4.0: Gain;
                  str = ftoa(Vin,0); // convert float to string
                  LCD_PrString(str);
                  .....
                  }
                  không biết công thức này có đúng không, vì khi em cho điện áp vao cớ 1V chẳng hạn thì giá trị LCD hiển thị giá trị 0,24... (khoảng 1/4V). Các bác gỡ rùm nhé.
                  Không hiểu vì sao bạn cứ chuyển sang kiểu float làm gì nhỉ????
                  AFH

                  Comment


                  • #10
                    Nguyên văn bởi AFH
                    Không hiểu vì sao bạn cứ chuyển sang kiểu float làm gì nhỉ????
                    AFH
                    Em muốn hiển thị số thực để xem nó có đúng với giá trị đầu vào không (để kiểm tra việc sử dụng ADC thôi), nếu chỉ hiển thị số hex thì khó quan sát. Có điều này em muốn hỏi riêng bác Sơn (bác AFH). Bác cũng làm PID số rồi, bộ PID của bác bác viết giao tiếp vơi máy tính hay chỉ dung phím và LCD vậy. nếu bác dùng phím thì khi viết mã nhập thông số, bác có sử dụng ngắt GPIO không?
                    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


                    • #11
                      Nguyên văn bởi encoder
                      Em muốn hiển thị số thực để xem nó có đúng với giá trị đầu vào không (để kiểm tra việc sử dụng ADC thôi), nếu chỉ hiển thị số hex thì khó quan sát. Có điều này em muốn hỏi riêng bác Sơn (bác AFH). Bác cũng làm PID số rồi, bộ PID của bác bác viết giao tiếp vơi máy tính hay chỉ dung phím và LCD vậy. nếu bác dùng phím thì khi viết mã nhập thông số, bác có sử dụng ngắt GPIO không?
                      Cái bộ ĐK PID số tớ làm có thể điều chỉnh thông số trên phím ấn và hiển thị trên LCD, không liên quan gì tới máy tính ở đây cả. Có máy tính thì nói làm gì, đem dao mổ trâu ra giết gà à? Hi hi... Khi nhập số thì sử dụng bàn phím 4 nút ấn thôi, chả có GPIO nào ở đây cả. Hi hi...
                      AFH

                      Comment


                      • #12
                        Tôi dùng INSAMP và set GAIN = 16; ADC là DUALADC với 13 bit để ở chế độ unsigned, đầu vào tôi cho Vdiff = 0.1V; 0.2V; thậm chí đến 0.7V mà ADC đọc được giá trị vẫn bé hơn fullscale = 2^16; không hiểu tại sao lại như vậy vì theo công thức tính thì:
                        ADC_code = (1.3 + Gain*Vdiff)*8192/2.6; như vậy đầu vào Vdiff phải nhỏ hơn 1.3/8192; tôi đặt vào 0.1V ADC vẫn đọc OK và nhận giá trị = 4516;
                        Khi đặt Gain = 4, 24, 48, 93 thì cũng vậy. Liệu có phải con PSOC của tôi có vấn đề không.
                        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


                        • #13
                          Nguyên văn bởi encoder
                          Tôi dùng INSAMP và set GAIN = 16; ADC là DUALADC với 13 bit để ở chế độ unsigned, đầu vào tôi cho Vdiff = 0.1V; 0.2V; thậm chí đến 0.7V mà ADC đọc được giá trị vẫn bé hơn fullscale = 2^16; không hiểu tại sao lại như vậy vì theo công thức tính thì:
                          ADC_code = (1.3 + Gain*Vdiff)*8192/2.6; như vậy đầu vào Vdiff phải nhỏ hơn 1.3/8192; tôi đặt vào 0.1V ADC vẫn đọc OK và nhận giá trị = 4516;
                          Khi đặt Gain = 4, 24, 48, 93 thì cũng vậy. Liệu có phải con PSOC của tôi có vấn đề không.
                          chắc chắn là do bạn làm bị sai chứ không phải do chíp.
                          Gain=16 thì khi bạn cho đầu vào so với AGND là 0,1 V thì đầu ra sẽ là 1,6V chứ. Như vậy nó vượt giá trị +/- 1.3 V mà bạn đã đặt ở Analog Ref rồi còn gì nữa. Nên sử dụng Insamp loại 2 khối đã, rồi hãy sử dụng loại 3 khối sau.
                          bạn chỉ nên cho điện áp vào khoảng 5mV tới 70mV thôi. Thử như vậy mới thấy được. Điện áp đó là so với AGND sẵn đã là 1.3 Vôn rồi đấy nhé, chứ không phải so với Vss đâu.
                          Chúc thành công
                          AFH

                          Comment


                          • #14
                            Nguyên văn bởi AFH
                            chắc chắn là do bạn làm bị sai chứ không phải do chíp.
                            Gain=16 thì khi bạn cho đầu vào so với AGND là 0,1 V thì đầu ra sẽ là 1,6V chứ. Như vậy nó vượt giá trị +/- 1.3 V mà bạn đã đặt ở Analog Ref rồi còn gì nữa. Nên sử dụng Insamp loại 2 khối đã, rồi hãy sử dụng loại 3 khối sau.
                            bạn chỉ nên cho điện áp vào khoảng 5mV tới 70mV thôi. Thử như vậy mới thấy được. Điện áp đó là so với AGND sẵn đã là 1.3 Vôn rồi đấy nhé, chứ không phải so với Vss đâu.
                            Chúc thành công
                            AFH
                            Khi em đặt Vdiff = 0.1V thì điện áp ra của INSAMP phải là
                            Vout = 16*0.1 +1.3 = 2.9 V = đây chính là điện áp đặt vào ADC. với 13 bit đặt unsigned và Vref = 0-2.6 thì điện áp trên phải vượt quá fullscale của ADC rồi chứ. nhưng của em lại chỉ cho giá trị 4516. thậm chí khi đặt áp vào là 0.7V thì nó cũng mới đến 8145 < fullscale = 8192. hệ số khuyếch đại lớn đến 94 cũng như vậy.
                            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


                            • #15
                              Nguyên văn bởi encoder
                              Khi em đặt Vdiff = 0.1V thì điện áp ra của INSAMP phải là
                              Vout = 16*0.1 +1.3 = 2.9 V = đây chính là điện áp đặt vào ADC. với 13 bit đặt unsigned và Vref = 0-2.6 thì điện áp trên phải vượt quá fullscale của ADC rồi chứ. nhưng của em lại chỉ cho giá trị 4516. thậm chí khi đặt áp vào là 0.7V thì nó cũng mới đến 8145 < fullscale = 8192. hệ số khuyếch đại lớn đến 94 cũng như vậy.
                              Vậy thì có gì sai ở phần ADC rồi, bạn thử dùng Analog_buffer đưa giá trị đầu ra của INSAMP ra chân ngoài và đo thử xem có đúng là 2,9V không đã. Nếu đúng thì tiếp tục thử ADC. Thử lại xem nhé.
                              AFH

                              Comment

                              Về tác giả

                              Collapse

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

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

                              Collapse

                              Đang tải...
                              X