This is not how you parallel MOSFETs in linear operation.
LM324 is also a particularly poor choice.
Tim
Can you (or anyone) elaborate on this?
Certainly,
1. You need separate source resistors. Otherwise there is no way to sense the currents of the individual transistors. (This has been fixed.)
2. Feedback needs to be to each respective op-amp. (This is a new bug that has been introduced.) As shown, you have a bistable flip-flop, which will hog as much current as possible through one transistor.
3. Your transistors are fuckoff massive, as far as most anything in this circuit is concerned, except for power dissipation. (This is the price to pay for using ancient switching transistors in linear applications.)
The "size" of a transistor refers to the gate capacitance (which the op-amp output pin must drive), its current capacity and Rds(on), the V*I capacity of its SOA, etc.
Modern transistors are about 5x smaller on gate capacitance, for the same V*I capacity (of course, they're about that many times lower in power dissipation, too).
If you've learned op-amps in school, I'm sorry to break it, but you've been lied to. There is absolutely no such thing as an ideal voltage source. No op-amp has one attached to its output pin. This isn't a terrible approximation at DC, but when things start moving, it's a preposterous error. A reminder that: a circuit is always moving, and even if your intent is to have it doing absolutely nothing, sitting statically at DC, it still must reach that operating point first, and if it spins out of control on its way there, that's your problem. There is no such thing as an "intent sensing circuit".
The circuit does precisely what it does, no matter what you wanted it to do...
Since op-amps are nonideal, we must consider the effect of the transistor's gate capacitance on its output pin. Capacitive loading is almost always a bad idea, and LM324 falls into the set of op-amps where this is true. Most likely, this circuit will oscillate, just from capacitive loading, without any other help from the transistor and load.
To prevent oscillation, we must compensate the amplifier. The first step is to add a series gate resistor Rg (which you have -- a good start). The next is to add a series resistor R to the feedback path (i.e., from shunt resistor to -in). Finally, a C or Rz+C is connected between op-amp output, and -in. The R*C time constant must be on the order of the Rg*Ciss time constant, and Rz (on the order of R) can be used to adjust damping.
It looks like this, except with an optional resistor in series with C1, and with the junction between R2 and R3 being the MOSFET (in which case, C3 represents its gate capacitance, which won't exactly be going to ground, but the shunt resistors are on the small side, so it's close).
Measure damping by making step changes to the reference potentiometer (most often, by replacing it with a square wave generator), and observing the stability of the output current (rise time, undershoot / overshoot, ringing).
Note that stability will vary with what kind of load is attached, as well as the current setting.
4. LM324 is bad. Just, in general. It's okay for slowly varying servo loops, and poor quality audio applications, but not much beyond that. It has much more noise than most op-amps, mediocre input offset, slow response, and worst of all, a class B output stage. What does that mean? The exact output voltage isn't quite equal to the voltage "intended" by the op-amp's inner workings (namely, the voltage on its internal gain node), but has some "slop", just the same way a shaft, that fits loosely in its bearing, has some slop against rotation. It can be locked to a position or angle at one end, yet is still free to move some at the other end.
The op-amp's input side eventually sees the error, and corrects for it, but this takes time. The output is the time-integral of the input, so over a short period of time (a couple microseconds), you can change the output by a quite noticeable amount (fractional volt), with very little current (indeed, this effect is strongest around 0mA output), until the op-amp corrects the error (10s or 100s of us later).
By the way, lie #2: if you were taught op-amps are infinite gain, they aren't. They have high gain at DC, but having high gain at AC would be not only absurd, but physically unrealizable, and impossible to use (if not other things, like violating causality itself!). No, an op-amp is an integrator: its output changes over time, based on an input. An integrator has infinite gain at DC (ideally), so this works identically at DC, but the gain drops smoothly with frequency, eventually dropping below 1 at a well-defined frequency (beyond which it isn't useful; for the LM324, this is a couple of MHz).
One more rub: the output pin, besides having nonzero impedance, and a really messed up impedance that depends on output current -- it can only source so much current, around 10mA. And when it's delivering a large current, it's not able to pull all the way up (only maybe 2-3V below +V), or down (maybe 1V above GND). This fundamentally limits how fast the gate voltage can be changed. This also provides a rationale for choosing Rg: it should be on the order of Rg = (+V) / (Iout(pk)). Or about 1kohm in this case. (That beefy >10nF gate will therefore have a time constant in the >10us range, which honestly isn't terrible considering that's only a little slower than the poor op-amp can go, anyway.)
Now, with enough Rg to allow the output pin voltage to move freely, and an awareness of the limitations of the LM324, and external compensation to stabilize it, you have a hope of getting useful operation out of the circuit.
Tim