Hi All,
I am looking for information regarding the best way to construct a data acquisition system. Currently I am using a DAQ 6510 from Keithley to acquire signals from a single channel. However, my future projects will require more inputs that can simultaneously measure signals from an array of sensors. I need inputs that can sample simultaneously because I want to be able to use spatiotemporal information from the array to improve my SNR (beamforming filters) as well as to obtain spatial information (direction and position) from the array.
My specifications (Please correct me if these don't add up)
- At least 8 channels. One of the main benefits I see of constructing a custom system would be the ability to incorporate more channels for different projects.
- Each channel should have a 16-bit (maybe more) ADC.
- A maximum sample rate of ~1 MSPS for each channel.
- An adjustable sample rate for each channel.
- Compatible with many different front-ends. We use custom connectors, drivers and enclosures so a flexible form factor is essential.
I have looked into commercial solutions for data acquisition systems that would meet (and usually exceed) our specifications. However, the price per channel of these systems is usually very high. The companies lock you into using their software for getting reasonable performance out the instrument and if you use their APIs with other applications (MATLAB for example) things get slowed down significantly. So right now I am trying to perform a cost/benefit analysis of developing a custom system.
A bit about meI am an electrical engineering graduate student working on unconventional sensor materials and their device integration.
I am comfortable developing and constructing analog front-ends to drive these sensors and to drive the ADCs afterwards. I am familiar with STM32 micro-controllers and their programming.
I am NOT experienced in developing high speed digital systems. I am not comfortable engineering solutions based on FPGAs (although I would like to be).
What have I done to approach the problemI understand that the system can, roughly, be broken down into a few parts. The choice of the ADC is an important parameter. To simplify things, I have chosen the AD4000 series of SAR ADCs for the task. (They fit the spec and I have multiple reference designs for them). I am comfortable replicating the front-end design in the data sheet for these devices. The next section that is important is the interface. I am not sure of the complete reasoning, but from what I have gathered, most systems of this type utilize an FPGA to interface with the ADCs. I think this is in no small part because an FPGA can have a greater number of SPI peripherals than most micro controllers can offer as well as interface to a larger amount of memory. The next big choice in the design would then be to choose how much memory is integrated along with the FPGA. I don't know how difficult it is to obtain the IP for a controller to interface with external RAM from an FPGA. Any info regarding that component would be greatly appreciated. Once we know how many SPI interfaces we need and how much memory were interfacing with, I imagine that one can choose an FPGA that suits these needs. I am inclined to use an Intel FPGA since I have poked around in Quartus a bit while I have not ever used a Xilinx tool or FPGA. If you think that there would be a strong difference in the two brands for this purpose, please let me know. For now, I am inclined to go with the Intel MAX 10 FPGA since it is relatively inexpensive and appears to have the functionality I need. I am a bit concerned that I will not be able to generate the NIOS-2 IP that I need to create the integrated microcontroller without purchasing some extremely expensive software licenses but I intend to find that out once I get some feedback from the community regarding my approach. Finally, I need a way to interface with a PC for data processing. I think that FTDI offers a variety of ICs that make it fairly easy to create USB 2.0 to UART interfaces. (488 Mbits/sec might not five me real-time info, but it should be good enough with a large enough ram buffer linked to the FPGA) I have no experience with utilizing these chips for programming or data transfer and if the community knew of some resources to help me get started that would be great.
So this approach is heavily based on the work of Trenz-electronics AnalogMax-DAQ 1 module which is one of the reference designs I am working off of. I would love to implement something like this, but my lack of knowledge on the development of high-speed digital electronics is really holding me back. I don't even know where to start on developing the FPGA data handler and integrating it with a NIOS-2 micro controller seems to be well above me head at the moment. I would love some suggestions for resources and reference designs that may help me get started and I welcome criticism of my rather dough-y approach. If you all know of other ways of implementing this type of system please let me know. I am trying to gauge my options and choose the best approach for the task.
Thanks.