I've recently implemented an option in my data acquisition program that allows the user to change the gain on the NI 5734 ADC.
This introduced some strange noise ripples in the signal that haven't been there before. Please see attached pictures to see exactly what I mean.
I am accessing/setting the gain using a custom VI (see attached) that is based on the example 'NI5734 - Clock Select'.
The same VI is also used to change the filter (Bypass, Elliptic, Bessel), coupling (AC,DC) and dither of the NI5734. Changing these settings does not introduce any problem and everything works as expected.
But as soon as I add the same VI and try to change the gain of even a single channel I get those noise ripples in my signal. The gain itself is changed properly, so it's really only those ripples that bother me. It is also interesting, that just invoking a gain change ('user command = 2') and setting the gain of channel 0 ('user data0 = 0') to 0dB ('user data1 = 0') also produces these ripples, even though I haven't really changed anything.
What I've tried:
I figured this could be due to synchronization errors. So i changed the 'Number of Synchronizing Registers for Read' of the I/O node that I use to access the 4 channels to 2. I only run at 50 MS/s so the execution speed is not an issue. But it didn't resolve the issue.
Thank you very much,
firstly: this ripple, is it periodic, or is is only when you change the gain?
The rest of my speculation is based on that the ripple is just when you change the gain.
The gain in an ADC comes from a PGA, a programmable gain amplifier, this is digitally controlled with a control signal, it can be any amount of bits resolution on the gain.
but when switching, you set a current or voltage or/and transistor switches to a different level in the device.
This can induce any set of different effects in a device. It might:
all in all I'm positively suprised that the spike only was about 20 counts extra peak to peak. thats only 0.03% of FS extra noise signal when switching(assuming 16bit conversion), calculation: (20/(2^16))*100
which in my opinion is good.
you should measure the innacuracy when switching on a transient, from this you could work out the distortion.
What is a little bit worrying is that it is different on the different channels. But that might be dependent upon the source impedance of what is driving it.
remember, this is my speculation, some of it might make sense, but I cannot guarantee that it is correct.
Sadly the ripples are periodic. Yet I still have to determine their frequency.
All 4 channels have been terminated using a 50 Ohms terminators for this measurement.
Other stuff that I've tried:
I've moved the FPGA + NI5734 cards into the slot that is farthest away from the PXI PC, but this did not resolve the issue.
I also removed all other modules from the PXI and it still persists.
It get's worse:
When I am actually running a signal through the ADC the spikes completely cover the signal / drive my triggering... Please see attached files.
Please note that I actually did not change the gain. Both were taken with 0dB but in the second I invoked the 'user command = 2' on the NI 5734 and explicitly set the gain to 0 dB for each indiviual channel.
It also doesn't matter if I only change one channel or all. As soon as I try to change the gain on a single channel I experience this stuff...
I notice that the signals in your images have a DC component ~1000 times larger than the AC component. I wonder if the switching process (even when nothing changes) causes some internal switch to open momentarily (even if it just closes again) and the process injects a transient due to the large amount of DC.
Do you see the same thing if you are in AC coupled mode?
I am in AC mode, so I guess you meant DC mode. I'll have a look at it ASAP.
I am using the following setup:
Chassis: NI PXIe-1082
Controller: NI PXIe-8133
FPGA: NI PXIe-7966R
ADC: NI 5734
I removed all other modules from the chassis. So I think this is all the information that matters. As you can see in the attachment, the FPGA and the ADC are currently in slot 8. But I've also tried to use different slots and it doesn't matter. The ripples are still there no matter what. It also doesn't matter if I terminate the ADC inputs or not.
Also don't mind the cable in CH0. I am currently taking data (without adjusting the gain, which works flawlessly...)
If someone wants the full Host and FPGA vis I can also upload them. Yet I think the problem has to be somewhere in how I am accessing the gain control. But that is more or less identical to the example...
If someone is using a NI 5734 and also adjusting the gain, could you please upload the vi that you use for that purpose?
Looking at "without gain real signal.png" I see a mean value of ~32000 with peak to peak variation of ~50. When I referred to DC I was talking about that mean value.
If you are AC coupled, how do you get those signals?
The NI 5734 has a resolution of 16 bit. So 2^15 = 32768 equals 0 Volts.
The DC offset is actually +/- 7.1 mV so it's not exactly 32768 but a little bit more or less, depending on the channel. So everything is centered arround 0 Volts as I would expect it.
Well, seems that we have ruled out setup-based problems, What is left is your code and the hardware.
I don't have this HW though, so it is impossible for me to replicate. Have you contacted NI support ?, and If there is any Demo-VIs doing this, maybe you should compare.