I have a circuit that should operate as a voltage-controlled push-pull current driver, able to source or sink at least 2A (into a 1 ohm load). It has unexpected oscillations on the output current.
Circuit components:
U1: LM358P "rail to rail" opamp
Q1, Q2: IRL540NPBF power MOSFET, 36A max
D1: 6A10-B rectifier, 6A max avg forward current
Note: Despite the feedback loop being connected to the noninverting input, the opamp has negative feedback because Q1 and R_D form an inverting amplifier.
Quick description of circuit operation
\$V_{IN}\$ controls the current. \$V_{IN}=3.3V\$ (roughly) should give \$V_{L}=5V\$ and therefore zero current through \$R_L\$. This aspect works properly, and the circuit is stable under this condition (no oscillations). With \$V_{IN} < 3.3V\$, the circuit should sink current from \$V_2\$ through \$R_L\$, D1, and Q1, to GND. This somewhat works, in that the mean value of \$V_L\$ decreases below 5V (to 4V, etc), but as \$V_L\$ decreases there are increasingly large oscillations in \$V_L\$. The oscillations are (distorted) square waves at about 86 kHz. When the mean of \$V_L\$ is \$\approx 4V\$, the oscillation amplitude is \$\approx 1 Vpp\$.
Attempts to diagnose the oscillation
In an earlier version of the circuit I thought the oscillation might be because of delays in the feedback loop, so I followed the instructions here. I added \$C_F =\$ 100 nF to make the crossover frequency \$f = 1/(2 \pi R_{IN} C_F ) \approx\$ 500 Hz. This made no significant change to the oscillation.
I have also bypassed the power supplies with the largest capacitors (ceramic and electrolytic) that I had on hand.
Can anyone diagnose the source of the oscillation? Thanks much!
p.s. The circuit was inspired by one in Horowitz & Hill 2nd Ed. See Fig 3.75.