2
\$\begingroup\$

For a future project I'd like to use the ADS8598S from Texas Instruments, which is a "higher speed" 8 Channel simultanously sampling ADC with 18 Bits and a max. Sample rate of 200 kSPS per Channel. Until now, I just used low speed devices like DACs running at 5 or 10 kHz or ADCs with Sample Rates up to 20 kHz together with STM32F4, F7 or G4 MCUs. However, I never used something really fast with a high(er) channel count. So I am wondering "how to I get this amount of data into a Microcontroller?".

The whole DAQ chain would be: sample the voltages with the ADC, transfer it into a Microcontroller / Microprocessor, convert the data into voltages, eventually scale and calibrate the voltages and send it out via high speed USB or Ethernet (e.g. 100 Mbit Ethernet).

That’s the plan, but it has a lot of issues: When I run that ADC at the maximum sample Rate of 200 kS per channel, I get (at least) 18 x 200k x 8 = 28.8 MBit per second of Data, if I would use the SPI interface. But that is no option anyway, because the SPI on the ADC only supports SPI clock rates up to 20 MHz. This means: I have to use the parallel output, if I want to use the full sample rate and here the trouble starts. Let’s assume I use a STM32H7 MCU with 550 MHz Master Clock, I had to set up a Timer generating a clock with a decent speed (> 1 MHz) and an interrupt to read the GPIO lines. Most probably even such a fast MCU would be completely busy with this job, leaving no room for other tasks like scaling and data transfer. Overall that sounds like a bad idea to me – even without almost no know how in this area.

The STM32H7 has OctoSPI, which – theoretically – would fit to the “parallel Byte” output of the ADC. But I could not find any application notes or application examples using the OctoSPI in that way. Furthermore OctoSPI seems to be more or less be designed for connections to Flash memory.

So the question is: Generally, which architecture is used to approach such a task? Connect the ADC to a DSP, which shifts the data into a (shared) RAM and use a MCU to read the data from the RAM (e.g. OctoSPI via DMA), process them and send them out? Something like that?

I have no idea, so any recommendation, how I can get into this topic, or any general advice how to setup such a system would be highly appreciated!

\$\endgroup\$
4
  • \$\begingroup\$ Welcome what an interesting project. You say "200 kSPS", is that your intended rate? Datasheeet says "18-Bit 500kSPS 8-Channel Simultaneous-Sampling ADC With Bipolar Inputs on a Single Supply" \$\endgroup\$
    – jonathanjo
    Oct 22, 2022 at 10:33
  • \$\begingroup\$ Next question: where is the data going? If it's going to say a PC over ether, have you chosen and ethernet interface yet? Or if it's just "burst capture" like an oscilloscope, do you know how much you want to capture? \$\endgroup\$
    – jonathanjo
    Oct 22, 2022 at 10:36
  • \$\begingroup\$ why do you need an example for something clearly designed to be used as an 8-bit parallel bus to be used as 8-bit parallel bus? \$\endgroup\$ Oct 22, 2022 at 11:10
  • \$\begingroup\$ @jonathanjo: there are 2 Versions of the ADS8598, one with 200 kS and one with 500 kS per Second. For my project the slower version with 200 kS (ADS8598S) is more then sufficient. And yes, even if I don't need the full sample rate in the first step, I'd definitively would like to design it in a way, that is capable of using it. The data are continously sampled and transfered for a PC for scaling, futher calculations and visualisation. Nope, it's no "burst capture", but virtualy DAQ "forever" and a constant data stream to a PC. \$\endgroup\$
    – pm4812
    Oct 22, 2022 at 12:47

1 Answer 1

2
\$\begingroup\$

The CPU has "Parallel synchronous slave interface (PSSI)" with a 16-bit bus, and the ADC has a matching 16-bit mode. It looks as though this would be the fastest and possibly the simplest way to get the data across at speed.

My suggestion is to look into this interface.

  • It looks like 60 ns x 8 channels = 480 ns / sample + overheads to transmit from device to CPU.
  • Which is approximately 2 MS/S

Basic timing of ADC transfer enter image description here

Overview of PSSI mechanism

enter image description here

Networking

If you're doing continuous sampling, my suggestion would be Static IP address, UDP broadcasts with raw samples as this is the easiest thing to do. It's just a "data blaster": you plug it in, it samples everything, and broadcasts. Which means on the client (laptop) you can just run tcpdump/wireshark and you'll see the packets.

Ie, just get the bytes off the ADC, into the ethernet device as simple UDP packets to some fixed port. Then use a private network (ie, direct cable between Nucleo and laptop).

Once you have that working, then

  • DHCP / ARP etc
  • Some method to control target IP address
  • Some method for selecting which channels if necessary
  • Some method to do scaling, timestamping etc.

There are lots of Nucleo H7 evaluation boards with various differences but which include 10/100 ethernet; available around 20-30 euro.

Materials

\$\endgroup\$
3
  • \$\begingroup\$ thanks a lot! this looks like the hint I was looking for. \$\endgroup\$
    – pm4812
    Oct 22, 2022 at 12:49
  • 1
    \$\begingroup\$ hey, and there is even a Nucleo Board with a STM32H723 on it plus Ethernet! Thanks again, this really was the right anwser! Which brought me from "i have no idea where to go?" to "hmm, interesting, let's try it this way, it looks promising". Of course it's a long road to archive this, but now I know a way. \$\endgroup\$
    – pm4812
    Oct 22, 2022 at 13:00
  • \$\begingroup\$ BTW: here is the Nucleo Board: st.force.com/community/s/article/… \$\endgroup\$
    – pm4812
    Oct 22, 2022 at 13:07

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.