Looking to build an Arduino controlled current-loop transmitter for driving 4-20 mA over an ~100 Ohm non-inductive resistance with 24V power supply. Also the Arduino should drive ideally 4 independent channels like this because I have 4 separate receivers.

As far as I could understood from googling, a possible way should be if I use the PWM output from the Arduino, passed through an low-pass filter and then passing the DC through voltage-to-current converter.

Now, the vast majority of choices about "current-loop transmitter" confuses me, because I am not an electrical engineer, just an Arduino hobbyist.

So my questions are:

  • Is the described route (Arduino / PWM 1-5V / low pass filter / voltage-to-current / 4-20mA) even meaningful?

  • Is there some integrated IC with less extra parts to achieve the voltage-to-current part? (Read about XTR117 but I suppose I can't control 4 with the same micro-controller)

  • Is it achievable to supply the whole circuit - i.e. Arduino (maybe through voltage controller), the current loop transmitter or op-amp or whatever circuit and the current loop - with the same 24V power supply?

  • 1
    \$\begingroup\$ are you trying to transmit digital or analog data? \$\endgroup\$
    – jsotola
    Commented Mar 9, 2018 at 18:17
  • \$\begingroup\$ analog data only \$\endgroup\$
    – Vladimir
    Commented Mar 10, 2018 at 7:17

3 Answers 3


You could consider using four DAC161S997 chips, however the receivers would all have to be isolated from each other (quite possibly not true).


Doing this via any form of PWM is unlikely in the extreme to work.

The best solution is to use an XTR115/116/117 solution, but you have to ensure that the individual 4/20 mA sources are isolated as they should be.

There are solutions available that you could buy ...or copy (leverage with pride).

Her is one that provides the required isolation for the I2C bus used to drive it. The schematic is easy to follow so you could build your own:

enter image description here

The isolator used here appears to be the TI ISO1540

The MCP4725 DAC is a somewhat weird I2C beast..... it can provide 8 I2C addresses ..BUT the user can only select between two addresses. You can buy variants of the devices with other address groups set internally in the chip, but it's a pain.
This might mean you'd need to produce two I2C buses on the Arduino side and use the two addresses on the MCP4725 to get to 4 channels.
A kludge would be to use a single I2C bus and switch the clock lines, which would be an easy alteration to any library.

With an architecture such as this you can power your Arduino from the 25 V loop supply and have your fours channels completely isolated.

You can't power your Arduino in-loop because it draws more than 4 mA, but of course some MPU draw less operating current and might be viable.

  1. DAC: MCP4728 - the 4 channel cousin of 4725:

enter image description here (Omitted here for simplicity the decoupling capacitors - one ceramic 100n and one tantalum 10u).

  1. Software: There is a very good documented library for controlling the 4728 with Arduino on github here.

  2. V/A: The output from the 4728 goes to Voltage to Current converter with (the also quad) LM324 like this:

enter image description here (three more identical channels omitted for the sake of clarity)

A very detailed explanation is here on allaboutcircuits.

  1. PSU: The 5V comes from a TRACO 2450, maybe an overkill, but is small, needs no external parts and tolerates up to 36V input voltage.

And that's all - I was over-complicating when considering separate power supply, isolation, etc.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.