I'll preface this post by saying I am a power engineer working in the utility world and my electronics knowledge is very rusty. The last time I worked with electronics was back in undergrad (~6 years ago).

I'm working on a project to generate 60hz sine wave currents. The approach I have right now is to feed a sine-wave into a transconductance amplifier to get my desired currents, which is 0-5 amps and 0-10 amps in a future version. The compliance voltage needed is not very high (maybe 1V at most). Here is my circuit:


Everything seems to mostly work, but one issue I can't seem to resolve is an asymmetric output. Here are some oscilloscope traces with a 1ohm resistive load.

Channel 1 = yellow = voltage across the 1ohm resistor

Channel 2 = blue = sine wave input.


The circuit is currently on a PCB that I made, and the input sine wave is from a Rigol signal generator. The input sine wave, measured by the oscilloscope, is ~30mV asymmetric, but I'll chalk that up to measurement/resolution error. The gain of my circuit should be around 4, so I am not sure why I've got such a large difference between the peak values of my current (3.24V vs -2.84V).


Any suggestions on where to start troubleshooting?

  • \$\begingroup\$ get my desired currents Please edit the question to indicate what range of currents you're interested in. \$\endgroup\$ Sep 16, 2023 at 23:52
  • \$\begingroup\$ Just to be clear (ignoring schematic for now), you want something to act as a current source output into a load that won't need more than a volt, plus of minus, of compliance range. And the controlling input is to be a signal generator? I gather your currents are to be around an amp, peak? \$\endgroup\$ Sep 16, 2023 at 23:59
  • \$\begingroup\$ @Kubahasn'tforgottenMonica Updated, my desired current range for this version is 0-5 amps. \$\endgroup\$
    – Bob
    Sep 17, 2023 at 0:40
  • \$\begingroup\$ @periblepsis Yes to the first part of your question. The signal generator will eventually be replaced with a microcontroller that generates a sine wave., and my desired current range is 0-5 amps. \$\endgroup\$
    – Bob
    Sep 17, 2023 at 0:41
  • \$\begingroup\$ @Bob But you need this to handle two quadrants, right? The current source output must both sink and source current, yes? And given your 5 amps and 1 volt of compliance, this also means the resistance (this is a resistance and not an inductance or capacitance, right?) cannot be more than 200 milliOhms, right? \$\endgroup\$ Sep 17, 2023 at 1:58

2 Answers 2


You're unnecessarily using a differential amplifier. Let me guess - built with 1% resistors, right? Its CMRR will be poor, although the low gain is a saving grace. You got a very slow op-amp, and it needs to deal with up to 1V of common mode at 50Hz-60Hz. This is unnecessary, and that poor OP07 will not do well.

You should be using faster op-amps. They don't need to have much DC precision - since you need none. TL072 will work well in this rather non-critical application.

Instead, ground-reference the current shunt. Then you can use a single-ended amplifier.

You can use a DC servo instead of the potentiometer to get rid of any leftover DC offset, and for that you would use a low offset drift op-amp, like OPA206 or OPA277, or anything comparable.

PCB-layout-wise, the ground plane of the control circuit must be connected to the bottom end of the shunt only, and the supplies for the op-amps must be referenced to that ground plane.

The PCB will affect the performance as much as anything else.

If you asked me to do something like it and be sure it'll work on the first try, I'd use a source follower with a constant-current load - essentially a class-A amplifier. I'd also model the feedback loop stability in SPICE to ensure there's good enough gain and phase margin across the bandwidth.

Instead of a constant-current load, the load can keep the source (high-side) current above say 100mA. The more current the sink sinks, the more current the source will have to source, so if the source is above 100mA, the sink can be open, but as source current crosses under 100mA, the sink kicks in and maintains the source current of 100mA. That way the source will have some minimum conductance and this will stabilize the worst-case loop response.

If you at all can, use a single mosfet for the source and sink. It's much easier that way.

  • \$\begingroup\$ Thanks for responding. Yes, the PCB is mostly populated with 1% components. Question - where is the "1V of common mode" coming from? The input signal should be a pure sine wave with no DC offset. Since I am only dealing with 60hz signals, I thought the op-amp speed would not be that critical. For my PCB grounding, I have the return current on its own dedicated trace on the PCB which goes to the +/- 5V ground and there is a single connection to the +/- 12V ground. \$\endgroup\$
    – Bob
    Sep 17, 2023 at 0:45
  • \$\begingroup\$ Common mode is the voltage on the (+) input of the op amp. For OP07 it should be DC. And OP07 is really not a part anyone should design into new applications. \$\endgroup\$ Sep 18, 2023 at 11:15

The issue was poor PCB layout. I didn't connect the current sensor resistor to my diff amp correctly.



I cut the trace and added an external jumper which solved my issue:



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.