I have an AD5755 that is controlled by a computer, through a microcontroller. I am running an AD5755 in a continuous update mode. In otherwords, I have a routine that continuously updates both the output range, and the output value, regardless of if either changed. The update order is: OutputA, OutputB, OutputC, OutputD, RangeA, RangeB, RangeC, RangeD, ..etc. The update rate is approximately 450 times a second (per channel), or 3,600 SPI transactions per second. I have Packet Error Checking enabled, and I check the Status Register on every transaction. I have no reason to believe that corrupt data is causing the issue.
When I update the output, I write:
0x200000 | Channel | Data
When I update the range, I write:
0x1C4000 | Channel | 0x000100 | 0x000040 | 0x000020 | 0x000010 | Range
0x1C4170 | Channel | Range
(Channel A = 0x000000, Channel B = 0x010000, Channel C = 0x020000, Channel D = 0x030000)
I have an asynchronous task that receives inputs from a computer, that controls the output range and value.
Since I need the computer interface to be highly responsive, I simply store the requested update in the microcontroller memory, and let the background task actually update the AD5755.
I have the slew rate enabled, set to 64kHz, 128 step size. I have a function on the computer that repeatedly turns the current output on for 20mS, and off for 180mS. The output is set to 24mA, and the load is 1k.
The issue I have is when I turn the current output on, I see the output slewing at the rate expected, for about 1.5mS. At that point, the output reached about 2.4mA. Then the output drops to 0.8mA and slews to 1.6mA over the next 1.8mS. Then the output jumps up to 8.2mA and slews as expected for 0.5mS, reaching 9.4mA. It drops down to 2mA, and slews to 2.8mA over the next 1.8mS. Then it rises to 13.4mA and slews to 14.9mA over the next 0.5mS, and this pattern repeats until it finally reaches 24mS. In total, there are 4 periods were the output is unexpectedly low. The 4th pulse, and the 5th (final) high portion slew at a much faster rate than the slew-rate control should limit it to. It's as if it's trying to make up for the low periods. As a result, the current output overshoots to 26.5mS for 0.1mS before settling at 24mA. If you were to connect the top of the high pulses with a straight line, it would almost perfectly match the desired slew rate. It does it during the turn-off as well. When it slews down, it has several periods where the output drops dramatically, then recovers.
What is causing this strange behavior?
The length of these pulses correspond with the timing of my writes to the AD5755. Is there something in my update routine that is causing this? It's as if the DC-DC converter, or the output is being shut off. But why would that be, if every write sets everything on?
I originally suspected the 5VDC was sagging under load. I only have 600mA rms (900mA Peak) available at 5VDC. I reduced the step size from 256 to 128, to try to reduce the peak current demands, thinking the 5VDC supply wasn't holding up. This didn't change the timing of the pulse, and it increased the number of pulses because it was slewing for a longer time period. The pulses definitely seem related to something that I am writing to the DAC.
Channels B-D are set up for 0-5 volt range. The outputs are set to 0 volts, with a 1kohm load.
All outputs and DC-DC converters are enabled. The DC-DC External Compensation resistor is enabled (51k). The converters are clocked 90 degrees phase difference. Frequency is 250 kHz (for the attached waveforms. Normally I use 410 kHz). Compliance voltage is limited to 29.5 VDC. Voltage output short circuit limit is 8mA. I am using the internal voltage reference and the internal current sense resistor.
The voltage outputs and current outputs are tied together. The Voltage Sense - is tied to ground. The Voltage Sense + is jumpered to the output pins (to allow remote sense on voltage outputs by removing the jumper). All inductors/caps/resistors/diodes etc, follow the datasheet recommendations.
I included some waveforms of the output.