Teensy ADC resolution

Status
Not open for further replies.

LewTwo

Member
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
 
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.
 
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.
 
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
 
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
 
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.
 
Hmmm ... perhaps a picture would help.
ADC Example(small).png
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:
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.
 
Hmmm ... perhaps a picture would help.
View attachment 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
 
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:
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!
 
Status
Not open for further replies.
Back
Top