Forum Rule: Always post complete source code & details to reproduce any issue!
Results 1 to 13 of 13

Thread: Teensy ADC resolution

  1. #1
    Junior Member
    Join Date
    Jun 2020
    Location
    Houston, Texas
    Posts
    5

    Teensy ADC resolution

    I note that:
    1) the specifications for the Teeny 3.2 state it has a ADC resolution of 16 bits in hardware and useable resolution on 13 bits
    2) the specifications for the Teeny LC state it has a ADC resolution of 16 bits in hardware and useable resolution on 12 bits

    I am told the reason for the lower "useable resolution" is noise in the least significant few bits.

    "ADC resolution commonly found on-board microcontrollers, such as the Teensy 3.2, have a full scale resolution of 12 to 16 bits, with usable resolution in the range of 10 to 13 bits. The difference between full scale resolution and usable resolution is noise in the least significant few bits. The actual signal measurement range of an ADC is a function of usable resolution and of the ADC reference voltage. A 13-bit usable ADC with 3.3V reference therefore has a resolution of 3.3V/213 or 412.5μV"
    Source: AN IMPLEMENTATION OF A HIGH ACCURACY SENSOR FOR DISTRIBUTED WIRELESS SENSOR NETWORK APPLICATIONS by JESSE CRAIG FRYE

    Three questions:
    1) Is there really a difference in the "useable resolution" between the 3.2 and the LC ?
    2) Has this difference been proven/demonstrated in testing and evaluation ?
    3) How does the "useable resolution" compare to an external 16 Bit ADC such as the Adafruit ADS1115 ?

    and yes one "silly little bit" does make a difference.

    Thank you

  2. #2
    Senior Member
    Join Date
    Aug 2019
    Location
    southwest USA
    Posts
    117
    i have never used a 3.2, have never used the a/d in the LC in a situation where i really cared about usable resolution,
    but with the 3.6 i have gotten a dynamic range of 70db which is equiv to 11.6 bits and with the 4.0 have gotten
    77 db which is equiv to 12.8 bits. in both cases had tuned for best dynamic range of a floating point fft on fast input
    signals and ended up with settings of avg 1, reso 12, very high speed conversion and sampling, and then did averaging
    of 16 measurements myself, not in the a/d subsystem.

    a few years ago with an external Linear Technology 10us 16 bit a/d hanging on a PIC i was able to get equiv >15.5 bits,
    that requiring separate analog and digital gnd planes, self calibration and zero compensation, good routing, good low
    pass filtering, averaging, and Faraday shielding. This was a time of flight done with a very nice fast integrator and the
    converter above. i had to have 15 bits to meet system rqmnts.

    so i think it is real that you pay a price all else equal of 2-3 bits for the convenience of having the converter internal
    where unavoidable ground bounce and electrostatic coupling eat your lunch.

  3. #3
    Junior Member
    Join Date
    Jun 2020
    Location
    Houston, Texas
    Posts
    5
    I really am not very concerned with speed.
    Something around 50 times per second is probably more than adequate.
    I am in the US so I want to avoid 60Hz for obvious reasons.

    I will attempting to read the resistance on of a precision multi-turn(10) potentiometer.
    I need a reliable, repeatable measurement of better than 1 part in 8000.
    With 13 bits (8192) that might be just within realm of possibility.

    Actually I plan to read both sides by applying a reference voltage (V0) to the wiper and then reading the output on both sides (V1 and V2).
    Thus X1= (V1)/(V1+V2), X2 = V2/(X1+X2), X0=X1+X2 ... looks very much like a voltage divider but it is not ... totally mechanical
    X0 is known and fixed (i.e. X always = 8000). Thus whatever value comes out, it is scaled such that X0=X.

    I may need to a 20 or 24 bit ADC to the achieve what I am looking for but the concept of being able use an internal ADC is very appealing.

  4. #4
    Senior Member
    Join Date
    May 2015
    Location
    USA
    Posts
    561
    Some suggestions for better teensy ADC resolution:

    1) over-sample as much as possible
    2) sometimes median outperforms average
    3) use differential mode
    4) turn USB is off
    5) sample for a full 60hz cycle (so 60hz noise cancels out)
    6) hardware filtering
    7) low source impedance

  5. #5
    Junior Member
    Join Date
    May 2020
    Location
    South East England
    Posts
    5
    Hi,
    I needed two ADCs to measure some sensor outputs in a Teensy3.2 based project. Although I made it work I was always fighting noise and drift. When the Teensy4 came along the speed increase was too good to ignore so I migrated the project to it without too much difficulty after a clean install of TeensyDuino and Arduino. I made a rod for my own back by moving to Visual Studio and VMicro at the same time!

    When making the Teensy upgrade I designed a new PCB with a socket for the ADS1115 module. That was such a good thing to have done. I find the ADS1115 very stable, noise free and easy to use. I'm using it in two channel differential mode.

    I have a prototype PCB in front of me and the ADS1115 is set up to display +/- 1V full scale on a TFT screen. The display indicates +0.0000V and sometimes -0.0000V. This is after about a month since I set the zero point.

    Let me know if you would like some more info.

    Stay Safe,
    RichardL

  6. #6
    Senior Member
    Join Date
    May 2015
    Location
    USA
    Posts
    561
    Just a note:

    If you have some very brief signals (eg 1 usec), you can add a sample and hold to the ADS1115 to capture it. You just can't read the signal very often.

  7. #7
    Junior Member
    Join Date
    Jun 2020
    Location
    Houston, Texas
    Posts
    5
    Hmmm ... perhaps a picture would help.
    Click image for larger version. 

Name:	ADC Example(small).png 
Views:	4 
Size:	125.0 KB 
ID:	20623
    It is a DC voltage (source from a battery for what it is worth via a shunt regulator).
    The DC voltage and/or resistor values might need to be adjusted.
    Think digital rather than analog.
    Last edited by LewTwo; 06-17-2020 at 03:41 PM.

  8. #8
    Quote Originally Posted by LewTwo View Post
    I really am not very concerned with speed.
    Something around 50 times per second is probably more than adequate.
    I am in the US so I want to avoid 60Hz for obvious reasons.

    I will attempting to read the resistance on of a precision multi-turn(10) potentiometer.
    I need a reliable, repeatable measurement of better than 1 part in 8000.
    With 13 bits (8192) that might be just within realm of possibility.

    Actually I plan to read both sides by applying a reference voltage (V0) to the wiper and then reading the output on both sides (V1 and V2).
    Thus X1= (V1)/(V1+V2), X2 = V2/(X1+X2), X0=X1+X2 ... looks very much like a voltage divider but it is not ... totally mechanical
    X0 is known and fixed (i.e. X always = 8000). Thus whatever value comes out, it is scaled such that X0=X.

    I may need to a 20 or 24 bit ADC to the achieve what I am looking for but the concept of being able use an internal ADC is very appealing.
    I think you are going to have far more difficulty with the thermal coefficients of the resistors and pot to achieve 1 part in 8,000 than the resolution.

    The heat generated by the current through the pots and resistors will not be insignificant.

  9. #9
    Senior Member
    Join Date
    Apr 2020
    Location
    DFW area in Texas
    Posts
    118
    Quote Originally Posted by LewTwo View Post
    Hmmm ... perhaps a picture would help.
    Click image for larger version. 

Name:	ADC Example(small).png 
Views:	4 
Size:	125.0 KB 
ID:	20623
    It is a DC voltage (source from a battery for what it is worth via a shunt regulator).
    The DC voltage and/or resistor values might need to be adjusted.
    Think digital rather than analog.
    Maybe I'm way off in my thinking, but I would think that your method of reading three separate analog inputs will potentially amplify rather than reduce any variations from noise. In your setup, it is not physically possible to read all three inputs at precisely the same instant in time, so the variation in the noise from your DC source (however small it might be) will not be the same across the three ADC samples at their respective instant when they are read. In contrast, if you just use the pot like a traditional pair of resistors acting as a voltage divider between the DC source & GND, & reading the voltage at the wiper, the single value that you read will reflect any & all influence of the noise as it affects all components equally at that instant & will not be dependent upon time of sampling across multiple inputs. I don't see how over complicating the setup as shown will accomplish the stabilizing effect that you seek. You'd very likely be better served by implementing a rolling average of say 5 or 10 values to smooth out any noise over time.

    Good luck & have fun !!

    Mark J Culross
    KD5RXT

  10. #10
    Junior Member
    Join Date
    Jun 2020
    Location
    Houston, Texas
    Posts
    5
    Perhaps you are correct. jonr suggested 'differential mode'. V0 would be the base of both inputs.
    I was unaware that the Teensy could perform a differential ADC measurements.
    The ADC in my Nano(s) can only do single ended measurements.

    The resistors are there only to limit the current. Perhaps the second set is overkill.
    I need to run the numbers and check voltage and current levels for the ADC inputs.

    I have decided to try the Teensy 3.2.
    There is not a significant difference in cost and the additional RAM could be useful.
    'Tis a significant step up from the Nano is either case.

    Being 'anal retentive' I have also ordered a I2C ADS1115 module for a comparison.
    Now I need to acquire a 'round-to-it'. Those seem to be in short supply.
    Last edited by LewTwo; 06-17-2020 at 10:02 PM.

  11. #11
    Quote Originally Posted by LewTwo View Post
    Perhaps you are correct. jonr suggested 'differential mode'. V0 would be the base of both inputs.
    I was unaware that the Teensy could perform a differential ADC measurements.
    The ADC in my Nano(s) can only do single ended measurements.

    The resistors are there only to limit the current. Perhaps the second set is overkill.
    I need to run the numbers and check voltage and current levels for the ADC inputs.

    I have decided to try the Teensy 3.2.
    There is not a significant difference in cost and the additional RAM could be useful.
    'Tis a significant step up from the Nano is either case.

    Being 'anal retentive' I have also ordered a I2C ADS1115 module for a comparison.
    Now I need to acquire a 'round-to-it'. Those seem to be in short supply.
    All you need is Amazon!

  12. #12
    Senior Member
    Join Date
    May 2015
    Location
    USA
    Posts
    561
    One more tip for low noise ADC. If you are reading a signal that you control, use a lock-in amplifier for amazing SNR (with a slow, high resolution ADC). You don't need the circuits they suggest here, just a square wave pulsed signal and an ADC is enough to exclude lots of noise.

    https://www.analog.com/en/analog-dia...precision.html
    Last edited by jonr; 06-21-2020 at 12:34 PM.

  13. #13
    Junior Member
    Join Date
    Jun 2020
    Location
    Houston, Texas
    Posts
    5
    Thank you Johr

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •