0

I have 124 sensors that sense analog signals ranging from DC to 25 kHz. Analog data is converted to digital with a resolution of 16 bits. The ADC I am using is the AD7656 with a data rate of 250 kSPS, simultaneously converting 6 analog inputs, I have two ADCs.

There is a 100 meters distance between the computer I am sending the data to and the data acquisition board. How do I know which transfer rate I need so that I could see whether I need to use Ethernet, RS485 or USB?

Added information after editing:

  • I am using 12 multiplexers that are used to scan the sensors. Each 6 multiplexer outputs are connected to one AD7656.
  • I have a pre-amplifier prior to this board that takes each pair of sensor outputs and produces one amplified output. Four of my inputs come from a digital sensor and are directly connected to the FPGA. So basically I have 60 analog inputs to the ADCs.
winny
  • 13,064
  • 6
  • 46
  • 63
Fateme
  • 103
  • 1
  • 12
  • 2
    How can you sample 124 inputs with 2 ADCs? – bobflux Jun 21 '22 at 12:07
  • I am using 12 multiplexers that are used to scan the sensors. each 6 multiplexer outputs are connected to 1 AD7656. – Fateme Jun 24 '22 at 06:44
  • 1
    So you have 12 ADC channels at 250ksps each, multiplexed to 124 inputs, that's 250k*12/124=24ksps per channel. That won't sample a 25kHz signal, unless you sample the high frequency signals more often than the DC signal... – bobflux Jun 24 '22 at 08:06
  • Actually I have a pre-amplifier prior to this board that takes each pair of sensor outputs and produces one amplified output. Four of my inputs come from a digital sensor and are directly connected to the FPGA. So basically I have 60 analog inputs to the ADCs. (Excuse me if I am adding information little by little) – Fateme Jun 24 '22 at 15:46
  • 1
    Oh, you have a FPGA? Does it have an Ethernet chip nearby? If it does, you can use it to package the data into UDP packets... Note the important thing regarding the question isn't really the number of analog inputs, it's the total data rate in bytes/second. I've tried to estimate it, but you must know it, right? – bobflux Jun 24 '22 at 18:15

3 Answers3

3

The absolute minimum sample rate to see 25 kHz is 50 kHz. 124 channels to sample times 16 bit resolution times sample rate = 99.2 MBit/s required.

The two ADCs with 6 channels each can deliver 48 MBit/s, which is not enough to cover the needed bandwidth.

  1. USB can not be used over 100m
  2. RS485 ends at 50 MBit/s
  3. 100 MBit/s Ethernet is too close to the needed bandwidth.

There remains 1 GBit/s Ethernet from the given options as solution.

There are more extra times not considered here:

  • Settling time of multiplexers
  • aquisition times of sample and hold stages.
  • Number of analog channels modulo number of ADCs is not zero

One ADC can read 5 channels, so 25 ADCs are required, 5 AD7656 are used, producing 15 MByte/s on a 16 bit parallel bus. This interface is not specified.

Jens
  • 5,598
  • 2
  • 7
  • 28
3

Without further details in the question,

6 channels @ 250ksps, 16 bits = 6x250000x2 = 3MBytes/s

2 ADCs on your board = 6 MBytes/s

124 channels (presumably 11 boards) = 62 MB/s

Unless many channels sample DC values and/or use lower sampling rates, you're looking at quite a lot of data.

So, 11 boards, each with 2 ADCs and a microcontroller that can saturate a 100Mbps ethernet connection. All of this networked to a PC through a gigabit ethernet switch.

Another solution would be USB2 board with 2-8 ADCs, and a micro with USB2. Then something with enough USB2 ports and gigabit ethernet to gather the data from USB ports and forward it to the PC.


Edit: since you're multiplexing the channels into 2 ADC chips, that's 12 channels at 250ksps 16 bit, or 6MBytes/s. It's a good match for ethernet, which will also meet your 100m requirement. On a LAN, UDP works well. You will either need:

  • A micro with 100Mbps ethernet, but you won't be able to use LWIP, it is too slow. It's possible to use the full Ethernet bandwidth on a 100MHz Cortex-M0-4 but expect to have to write your own UDP packet framer and talk to the hardware directly.

  • Or something much faster like a Pi, that is able to handle that throughput with standard drivers, without having to optimize the code. That would be much easier.

bobflux
  • 70,433
  • 3
  • 83
  • 203
2

A bandwidth of 25 kHz will require a sample rate somewhat larger than 50 kHz so, to give yourself some headroom for anti-alias filters and reconstruction filters, choose a sampling rate of 60 kHz.

Then, you say you want to encode at 16 bits so, the basic data rate per channel becomes 960 kbps. You also say you have 124 channels so, the realistic minimum data rate for all those channels with 16 bit encoding is 119.04 Mbps.

But you need header information imposed on that data so you can lock into the data stream. So, with a comfort factor I estimate you need to use a basic data rate of 120 Mbps.

Because the data will be continuous (with headers) I would say you need to scramble the data to keep the DC level average at zero and you definitely need to use bespoke drivers and receivers for this.

the ADC I am using is AD7656 with a data rate of 250 KSPS

I can't say that this device appeals to me much given that it produces three distinct data streams (ideally you want one). I would go for blocks of individual ADCs controlled by an FPGA that inserts the data header and does the scrambling. Then I would combine multiple streams using serdes components (you can get hold of 10:1 and 1:10 serdes chips last time I checked from both TI and Maxim).

Anyway, that's the route I once took and was successful in my endeavours (collecting 160, 16-bit signals from the rotor of an aero engine with simultaneous sampling at 200 kHz). Data rate was 512 Mbps and worked over 30 m of cable.

It's not a job to be undertaken lightly.

Andy aka
  • 434,556
  • 28
  • 351
  • 777