How can I fix this 4-20 mA current loop to source current that matches current sink on its input?
Building on a previous question about terminology, I am trying to arrive at a solution to connect a digital air pressure regulator that sinks current as part of its 4-20 mA current feedback loop to an ADC that also sinks current.
The pressure regulator has two 4-20 mA loops, and sinks current for both of them. The control loop (sets the desired pressure) is handled by an Analog Devices AD74413R (Datasheet) and is working without a problem. The feedback loop (reports actual pressure) is intended to be handled by an Analog Devices AD4111 (Datasheet), but since both endpoints sink current, I need to create a bridge or adapter circuit.
A colleague and I used this TI Application Note as the basis for the following schematics:
Schematic 2: (connects at right of schematic 1)
We first created a simulation in Falstad.
We have been struggling because our knowledge of opamps is a bit rusty/weak. I will explain the thinking, as well as what is happening. This circuit has been built on a prototype PCB. Initial tests indicated it would work, but connecting it to the AD4111 yielded different results.
PREG_N connects to the pressure regulator. The amount of current it sinks to effectively report pressure is measured by the voltage drop across R1. The right half of schematic 1 is based on the TI application note and is a voltage-to-current converter. The left half of schematic 1 is a current-to-voltage converter which was using the opamp as a differential amplifier with unity gain.
IIN_DP connects to a current input channel of the AD4111.
The ratio between the two voltage dividers (R21-22, R23-24) determines how much current is driven based on the input voltage.
We failed to include the load resistance in the simulation, however. There is 50 Ω load resistance internal to the AD4111, and an additional 180 Ω in series which was used based on the AD4111 evaluation board. With a 5 V source, there can only be a maximum of 250 Ω resistance and still allow 20 mA.
In troubleshooting the physical circuit, we replaced the fuse and 180 Ω resistor with 0 Ω jumpers and removed the TVS diode and capacitor to eliminate variables.
If a 50 Ω load resistor is added in the simulation, we see the same as what we observe with the physical circuit: that for a 10 mA input current, only 8 mA is driven at the output.
Changing the 26.7 Ω resistor to 20 Ω resolves this issue and appears to work for the full range of 4 to 20 mA input in simulation. However, it then becomes dependent on the load resistance, which will vary between devices, and defeats the purpose of the current source.
I'm starting to feel that this solution is the wrong approach. I've tested a variety of different component values in simulation but output current always varies by load resistance.
I'd prefer to tweak this design since we already have some PCBs that use the schematic, but if a completely new circuit is warranted, I'm open to suggestions on what to use. I've been researching current mirrors and current sources, but I don't really know if those are the hammer for this nail.
Can I modify this circuit to get the desired result or should I scrap it and start over?
I'd rather use the AD4111 as a high-side current sensor, instead of creating an "inverter" which would generate an equal and opposite current.
Each current input of the AD4111 (IINx+ and IINx-) is essentially a differential voltage input with a built-in 50 Ω resistor between them. It can work as a high-side current sensor. (In the ADAD7111 reference design it's hard-wired as a low-side current sensor, but that's not the only option.) The current sense inputs are rail-to-rail (the voltages at IINx+ and IINx- can be anywhere between AVSS and AVDD, inclusive).
So, the feedback part of the scheme could look like this:
0 comment threads
You are making this way too complicated. Go back to the basic problem definition, which is you want to get a digital reading of the current sunk by a current sink, with the valid range being 4-20 mA.
It seems you chose the A/D you did because it is advertised to be able to directly read 4-20 mA current signals. Maybe that's still a good A/D to use in this case, but not necessarily because it can read 4-20 mA directly. Most A/Ds, including this one apparently (just looked briefly at the datasheet) actually convert voltage signals. At worst, you'd need a current to voltage converter. Fortunately these are available with a wide range of values and tolerances, known as resistors.
Whether you use the built-in 50 Ω resistor in this A/D or supply your own, you're ultimately going to read the voltage across some current sense resistor. Figure 1 on page 4 of the A/D datasheet implies that the voltage across the built in 50 Ω resistor is read differentially. That's good, which means it can float within whatever the common mode range of the A/D is.
Since this is a 24 bit A/D, and I expect you don't need anywhere near that resolution, take a look at just letting the built-in 50 Ω resistor generate the voltage to read. That results in (20 mA)(50 Ω) = 1 V full scale. Even if the full scale A/D input range is 5 V, that only looses 2.3 bits of range, leaving over 21 bits. Your resolution is still over 1 part in 3,000,000, which very likely not even close to a limiting factor.
It may be as simple as using a 50 Ω channel of the A/D, tying the IN+ input to 5 V and the IN- input to the current sink output of the pressure regulator. The reason I say "may" is because I haven't read thru the A/D datasheet carefully enough to know whether that violates any constraints, like common mode range.
You also have to check what the compliance range of the pressure regulator current sink output is. Your existing circuit assumes that goes as low as 1 V. Maybe it does, but I certainly wouldn't take that for granted. Note that with a 50 Ω current sense resistor pulled up to 5 V, you are only asking for a compliance range down to 4 V. There's a much better chance the pressure regulator can actually do that.
1 comment thread