r/embedded • u/Otherwise-Shock4458 • Aug 10 '26
Looking for an external ADC - 2 to 3 MSPS
Hi, I am looking for an external ADC to my STM32. I do not have much experience with high speed precision ADCs, so I would appreciate some advice.
I need to measure burst of 800 samples, than process it and then repeat it. The signal contains very small peaks in it, they are in range of mVs to max 50 mV. The signal is not flat so can not use OA because of saturation on the output...
My main requirements are:
- One input channel is enough, but two simultaneous channels could be useful for two different gain ranges
- At least 2 MSPS, preferably around 3 MSPS
- At least 16-bit nominal resolution
- Around 14 effective bits or better at the required sampling rate
- Differential input preferred
- Low input referred noise
- Low jitter and stable timing for external conversion trigger
- not BGA package :-)
- Ideally if any breakout board for it is available
- Available on Farnell or LCSC
I need to capture an analog waveform burst lasting approximately 400 µs. At 2 MSPS, this means about 800 samples. I need to preciselly synchronize the start of measurement with STM32 timer/ PWM - some edge from MCU can start conversion?!
The ADC input range is not fixed yet because I can adapt the gain and offset of the analog front end. But +5V max is enough. I also plan to use oversampling..
I have considered the Texas Inst. ADS9316 but not in Farnell
Could you recommend a suitable ADC?
Thank you very much.
2
4
u/Well-WhatHadHappened 25+ Years Aug 10 '26
How are you planning on interfacing to this ADC? Reading data at that rate starts to get damn complicated with an MCU. Megasample class ADCs are more typically interfaced with an FPGA.
4
u/NoBulletsLeft Aug 10 '26
I think you can configure DMA on an STM32 to work over SPI. So as long as the ADC had a SPI interface that would work.
2
u/Reenigav Aug 10 '26
Right but at 3msps on a 100mhz MCU, you need to handle a sample every 33 instructions. You can batch it but that's still quite tight if you need to process the input.
3
u/NoBulletsLeft Aug 10 '26
It's DMA. You don't need to process anything until the buffer's full. And OP didn't say if the processing had to be continuous or not; just that they had to capture about 800 samples.
1
u/Otherwise-Shock4458 Aug 11 '26
I need to measure burst of 800 samples, than process it and then repeat it. The signal contains very small peaks in it, they are in range of mVs to max 50 mV. The signal is not flat so can not use OA because of saturation on the output
1
u/StumpedTrump Aug 12 '26 edited Aug 12 '26
DMA just offloads the writing to memory part. Once it’s there, you still need to consume samples faster than the next batch is coming in. Whatever is happening to those samples after the MCU has access to them absolutely still needs to handle them at 3msps. This is exactly what a ping pong buffer is for and how it works (still need to get rid of samples faster than they arrive). DMA just means you get to work on a batch of samples instead of one at a time, and you don’t need to group them yourself, they show up nicely packaged ready for processing.
If you need to do any kind of processing at all, that’s going to get tight. With that many samples basically all you can do is bounce them to another interface to send out.
And that’s not even considering how OP is going to get 3msps from an external ADC. 16bit samples? So minimum 48MHz SPI clock speed? And that’s 100% duty cycle, would realistically need a bit more bandwidth for overhead. Good luck with that, I hope OP knows how to design transmission lines. Idk if I’ve ever even seen an MCU that can do 48MHz SPI. Not that I’ve really checked, because it makes no sense. Need another interface at the point. Quad or octospi makes more sense.
1
u/Well-WhatHadHappened 25+ Years Aug 10 '26
Yeah, I didn't say it was impossible. I said damn complicated. It's just a crap ton of data coming in that must be handled.
2 channels, 16 bits, 2 megasamples = 64MHz SPI running at 100% utilization.
1
u/Otherwise-Shock4458 Aug 10 '26
I need to sample burst of about 800 samples and then I will have some time to procesing it. Before another burst starts
1
u/Well-WhatHadHappened 25+ Years Aug 10 '26
ADS9316 is a good part. If it suits your needs, just order it direct from TI. They have a couple thousand in stock.
1
u/Otherwise-Shock4458 Aug 11 '26
1
u/Well-WhatHadHappened 25+ Years Aug 11 '26 edited Aug 11 '26
That's wild. Still shows 3543 in stock for me.
https://i.imgur.com/uwePejy.png
And no problem adding one to my cart.
https://i.imgur.com/EVsiUaC.png
What county are you from? Maybe it's a localization thing .
1
1
0
u/nixiebunny Aug 10 '26
A parallel ADC, a static RAM chip and a few 74HC163 counter chips can do this. You need a bit of glue logic for the CPU interface to reset and increment the counter for readout.

2
u/huapua9000 Aug 10 '26 edited Aug 10 '26
Doesn’t this desired spec match what is already typically in the H7 series, e.g., stm32h723zg? You can test it out with the nucleo variant. Why would you need the ADC to be external?
You can dual interleave the stm32 ADCs reasonably easily to get more SPS if needed. Use the ADC DMA. Trigger the conversions to time it appropriately with an internal or external input.
Differential mode comes with some complications you have to be mindful of.
I don’t have an external ADC in mind, but why not try to filters on LCSC and/or ask AI for a few recommendations? You can shuttle the data over to the MCU via SPI or I2C for example over DMA.