DAQ
So, now that I have a ton of signals that need capture, I need to tackle the data acquisition problem. I could use an off the shelf solution, but in looking for something that can do 24+ channels of 12 bit 1000hz capture, plus some digital mode capture, I am looking at $5-6k. AIM, Traq, RacePaq, Motec, etc. Sure those are well engineered solutions, but this is kids play in the data acquisition world. I worked on a system for aircraft engine controls 30 years ago that was much faster and more accurate than this needs to be.
I have a previous design that I can make work, but it is kludgy.
Here is what I am thinking: In the past I have used a variety of microcontrollers for the primary capture. It works well, but in the modern era is seems dated. There are so many choices in platform that have so much more processing power. My previous capture system used a TI ARM based processor which had plenty of horsepower but the system dev tools were convoluted. TI-RTOS works, but I really don’t need a system like that. For this design I’m thinking of using something much faster and simpler to develop for: A Beaglebone Black. The Beaglebone Black has a 1GHz ARM processor, 512MBs of RAM, and a plethora of peripherals. Best of all, it runs Linux, so many of the interfacing and use problems are already solved. I can have Wifi and Bluetooth for automatic data downloads, display interfaces, wireless development, tablet and phone interfaces, and more. I wouldn’t use the Beaglebone Black’s built in ADCs, but since it has plenty of SPI interface capability I would use external ADCs. The Beaglebone supports external boards called capes, but I’m thinking of making a larger board that would hold the Beaglebone, sort of a reverse cape. On that board I would put the analog interface circuitry, power regulation, connectors, etc.
For the ADCs I’m thinking of either the MCP3208s or the MAX146s. Both have 8 channels (So I would use 4x of them), SPI interface, 12 bit resolution, and in the case of the MAX146 a built in 2.5V reference. For the analog input section I’ll use a divider with schottky diodes for protection fed into an MCP601 single supply opamp configured as a Sallen-Key active low pass filter with unity gain. (test schematic attached) That would provide the needed input impedance from the sensors, as well as the output impedance for the ADCs. One nice thing about this setup is the diode protection doesn’t cause linearity problems in the sampling because the ADC reference is 0-2.5V, while the diode protection is from -.6V to about 3.8Vs.
I was worried a little about using the Beaglebone for the SPI communications, since the timing of those packets determines to timing of the actual analog sampling. With 32 channels at 1000hz I need 3 SPI transfer cycles per sample which would be 96000 transfers per second, which is easy over SPI. These ADCs are both capable of sample times of less than 10us, which could net about 90 sequential channel grabs per 1ms (1000hz). In reality I could run some things in parallel, and get better performance, but I don’t think it is needed.
The Beaglebone processor also as 2 PRU cores integrated into the die. These are like small 32 bit microcontrollers that can be use for offloading time sensitive interface problems. I might use one of these to do the SPI interfacing and timing, since that could enable a continuous stream to the main processor regardless of what the OS is doing.
Since I have a Beaglebone Black as well as one of the ADCs already, I’ll put together a prototype and see how well it works. I would love to hear any comments/concerns/refinements from my fellow engineers and the like.