I'm trying to come up with a solution to use the analog output of a DAC to drive the X-Y axis control of a commercially available laser 'closed-loop moving magnet' driver.

I found an explanation on how to use an op-amp to create a differential amplifier here and a calculator here, but I can't get that to work without a 2.5V reference voltage.

I also found a simpler design for such a circuit here, but when I try that in a simulator (I use iCircuit on my iPad) it doesn't swing from -10V to 10V but from -8V to 12V (approximately). This is the circuit:

enter image description here

This is my testing in iCircuit:

enter image description here

Tried it with the included circuit simulator, don't know how it works exactly:


simulate this circuit – Schematic created using CircuitLab

My question is, is this simpler design the way to go, but are my resistor values wrong? Or do I need to go with the first circuit design but need to add something to get a 2.5V reference?

I have very little information on the exact electrical requirements of the scanner, but I'm assuming it's a product designed to be used in an ILDA laser device and fairly compatible to that standard.

UPDATE In iCircuit, I replaced the lower 10K resistor with 20K and the feedback resistor from 15K to 30K, and it looks like I'm getting the desired output now. Still, I don't know if this is trustworthy or not.

Bonus question: I have an ST LM324N opamp lying around from an old lab kit. Do you consider this device suitable for this task, if I supply +12V/-12V to it?

  • \$\begingroup\$ What is the reference voltage? Are you measuring everything against the ground? \$\endgroup\$ Commented Jan 13, 2014 at 11:09
  • \$\begingroup\$ Yes, I believe in iCircuit, I measure against ground. Perhaps I should try and include the iCircuit circuit here. \$\endgroup\$ Commented Jan 13, 2014 at 11:13
  • \$\begingroup\$ Why not use a 4-quadrant DAC in the first place? \$\endgroup\$ Commented Jan 13, 2014 at 11:26
  • \$\begingroup\$ @IgnacioVazquez-Abrams because I have no idea what that is. I'm a binary guy grin. I want a 12-bit SPI DAC that I can control from my Arduino at high speed, and that's commonly available on a breakout board or in a DIP package (for prototyping). I don't even know if such a device exists. \$\endgroup\$ Commented Jan 13, 2014 at 11:29
  • \$\begingroup\$ The MicroChip MCP4921 is a 12 bit DAC with an SPI interface, and available in DIP-8 packages. \$\endgroup\$ Commented Jan 13, 2014 at 12:42

2 Answers 2


Your circuit is incorrect. What you are trying to do is a gain+offset (negative offset) so you want to gain it up and offset the virtual ground point. You don't need that 10k/10k voltage divider as you've drawn it to provide a 2.5V reference.

Since your full scale output from the DAC is 5V, and you want a full scale output from the opamp of 20V (-10 to +10) then you need to have a gain of 4 in the opamp. That gives you 0-20V. So you want (DAC x Gain) - Offset.

In a non-inverting op-amp, the + input has a gain set by the (feedback resistor/input resistor)+1. However, the negative input has a gain of simply the (feedback resistor/input resistor). So a non-inverting input with a gain of 4 will have a a gain of 3 from the negative input. You can use the negative input to offset the fullscale 20V to -10 to +10. So you want 10/3 = 3.33 volts at the negative input.


simulate this circuit – Schematic created using CircuitLab

At the point I marked 3.333V, for a standard non-inverting op-amp configuration, that point would be GND. But you want to add the negative input's gain to the output too, so you need 3.333V there.

The LM324 will work fine,but it's not a precision opamp and has some significant input offsets itself, and you might lose precision of the DAC input, but it can be trimmed out if you need to. If you don't want to trim anything then you can use a precision opamp with good DC characteristics.

  • \$\begingroup\$ Thank you. I'll try to simulate that. Would you care to answer my bonus question? Can I try this on my LM324N? \$\endgroup\$ Commented Jan 13, 2014 at 12:44
  • \$\begingroup\$ I just edited to add that. \$\endgroup\$
    – Brian Onn
    Commented Jan 13, 2014 at 12:46
  • \$\begingroup\$ Also note that the LM324 can only go to 1.5V below the top rail, and can get close to the bottom rail, so you need to use at least -10.5 to +11.5V on the LM324. \$\endgroup\$
    – Brian Onn
    Commented Jan 13, 2014 at 12:52
  • \$\begingroup\$ This circuit will not work. The current through R1 will make your 3.33V reference not 3.33V. In simulation, the output goes down to about -8V, and clips against the positive rail. \$\endgroup\$
    – Phil Frost
    Commented Jan 13, 2014 at 13:07
  • \$\begingroup\$ Yes, that 3.333 needs to be low impedance, i.e. a buffered reference.I've updated the circuit drawing, thanks! \$\endgroup\$
    – Brian Onn
    Commented Jan 13, 2014 at 13:12

this is the best circuit to rescale the DAC output volt from 0:5 v to -10:10 v using ad8033aks op-amp which has a high fast response up to 80mhz , high accuracy and without any offset

the rv1 potentiometer simulate the DAC output
when DAC output reach the 5v the output changed to +10v

when DAC output reach the 0v the output changed to -10v

when DAC output reach the 2.5v the output changed to 0v


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.