I have an analog signal from a fluid flow sensor that is buffered to the input of a BeagleBone Black ADC input line. The buffer ensures the signal does not exceed the Beagle's max input voltage of 1.8VDC.
With the Beagle, we can access the ADC using either a program running on the ARM processor under Linux or a program running on one of the programmable real-time units on the AM355x SOC from TI. On the ADC side we are using the 'off the shelf' ADC kernel driver which by default samples all 7 ADC inputs, and is set up to take average 16 readings.
On the PRU side, we set our own configuration and only read three analog lines and average 4 readings.
Everything is written in C.
We monitor this analog value using a Diligent USB1408-FS DAQ and their DAQami software.
When running the system using the ARM/Linux code, the baseline value seen in the DAQami software stays about zero.
Using the PRU code, the baseline value drifts up to a DC offset of about 300-400mv seen using the DAQami software.
I'm puzzled why a different ADC configuration would cause the actual voltage (not the ADC's output digital equivalent) to shift like this. Why would this happen?
Here is the schematic of the unity gain isolation amp circuit. This is a prototype built on a protoboard currently.
This circuit serves two purposes
- primarily, our microcontrollers ADC has a max input of 1.8V. R1 and R2 are precision 2.94k resistors that divide the voltage 50/50 resulting in a max input of 1.5V, below the max ADC input of 1.8V. We lose some resolution but in this application that is not an issue.
- As a double safety, we power the LM10 from a 1.8V regulator (U2). Thus, the output can't go above 1.8V.
R3 is 22k C1 & C2 are 0.1uF J1, J2 and J3 are Phoenix 2 position screw terminal connectors