Here's the active clamp circuit I came up with. I entered it into Circuitlab so that I could simulate it and verify its performance.
Whenever the input tries to swing beyond either clamping threshold, which are determined by the ±Vclamp sources in conjunction with the resistors, the corresponding precision rectifier produces a signal that offsets the overvoltage, holding the output constant at the clamping threshold. With the resistor values shown, the value of ±Vclamp needs to be 2/3 of the desired clamping level.
Note that if the thresholds are not symmetrical, the output will have a DC offset.
Note that the output is inverted relative to the input. This is required because the inverting input of OA3 needs to be a "virtual ground" for the mixing to work correctly. An inverting buffer can be added at the output if needed.
Note that R1, R2, R3 and R4 need to be the same value. Also, R5, R6, R7 and R8 need to be the same value, but not necessarily the same value as the first group. However, keep in mind that R5 and R6 affect the relationship between ±Vclamp and the actual clamping threshold. The 2/3 relationship only holds if all 8 resistors have the same value.
The following graph shows three input sinewaves of 200, 300 and 400 mV (blue, brown, gray, respectively) and the corresponding inverted output waves that are clamped to ±250 mV (red, blue and purple, respectively). I also show the waveforms for V1 and V2 for the 400 mV case (the two funky waveforms running across the middle).
My theory (although I wasn't able to get the simulation running properly to verify) is that when the differential input voltage rises too high, the current mirror load on the differential pair (Q4 and Q5) cuts off altogether, and it won't restart until the input voltage drops below the feedback voltage.
It would be interesting to see whether putting a resistor between the collectors of Q1 and Q2 would provide a path to keep the mirror running. This would also have the effect of reducing the gain of that stage somewhat.
[Kaz] Dave Tweed's hypothesis is right. However, instead of using a resistor between the collectors of Q1, I put in diodes, which only become active when they have to and do not affect the circuit very much when the closed loop is functional.
The modification to the circuit looks like this:
simulate this circuit – Schematic created using CircuitLab
The choice of three diodes is empirical, based on observing the voltage difference between those collectors, which is about a little over a volt. Two diodes are too close to the margin and "leak", causing a gaping DC offset in the output of about five volts. Three diodes have no noticeable effect on the non-clipped test case.
However, here are simulation results from the clipped test case, including a new plot showing difference between Q2 and Q1 collector voltages:
Looks great! A a little assymetric, which is fine.
Out of curiosity, I tried replacing the diodes with a BJT-based servo:
simulate this circuit
The diode D10 prevents reverse base-emitter breakdown. There seems to be no real advantage to this. The part count is greater and the clipping seems to show a more pronounced "meniscus", though some of that perception could be the difference in vertical scales between the graphs. Perhaps that can be fine-tuned with the resistor values, though.
Best Answer
Does this make sense to you: -
Or do you need more clarification?
Note- Ideal diode assumed