So my main question is, what is the best way to isolated timing
critical signals?
For an application like this I'd consider sending only one PWM signal through one opto and, at the H-bridge side, recover that signal and apply the inversion and necessary timing differences to prevent shoot-through.
Here's a circuit that can avoid shoot thru by introducing a dead-band i.e. no overlap: -
Using a small time constant RC low pass filter and schmitt trigger OR and AND gates you can manufacture two PWM signals from one - all you should need to do is invert the output from the OR gate and you have dual, complementary PWM signals with shoot-thru protection.
Seems to me you are driving the transformer with a current pulse that should turn one output transistor on and the other off, via the opposing secondaries. Then there is an 'off' period on the primary side, to give you the duty cycle control, and then you reverse the primary current to switch the output transistors in the opposite sense, then off again, and repeat ?
Q1 and Q2 need volts of drive to switch them, and that means D2 and D3 will be short-circuiting the transformer on each negative - going output pulse. If you want to protect the FETs from voltage spikes, or limit the negative gate charge to speed up switching, use 2 x 10V zener diodes back-to-back, for each of D2, D3.
That should make a dramatic improvement, but if still unsatisfactory, do you have a part number for the core, or have you measured its characteristics? The problem may be the core you have chosen. Toroids in power supplies have widely differing characteristics, depending on the frequency and circuit they are designed for. Older switching PSU may operate at 50-80kHz, and the manufacturer isn't going to fit a core that is characterised for low loss at 200kHz if it isn't needed. Worse still, if the toroid was part of a filter circuit it may be intentionally lossy at high frequencies, to dissipate energy that would otherwise be radiated or conducted out.
Toroids may also have a built-in distributed "air gap" - the equivalent of a gapped E-core, - made by binding ferromagnetic particles in a non-magnetic matrix, to prevent saturation caused by a DC component of the winding current. Such cores have a much lower permeability than a solid ferrite or iron dust type.
Finally, regarding waveform distortion, once the shunt diodes are removed the transformer load is 1K and 1300pF. That will resonate with winding inductances, so you may have ringing and voltage spikes to contend with. Core and winding design influence that, too. To limit them you may need a zener clamp or RC snubber on the primary of the transformer, but that will introduce additional losses.
Best Answer
Completely isolating the controller from both primary and secondary sounds strange.
Here are the common approaches.
Controller on the primary side. The secondary side is isolated. The output power flows through the transformer. The feedback signal is brought back to the controller on the primary side. Typically, an opto-isolator used to bring the feedback signal back to the controller across the isolation barrier.
Controller on the secondary side. The half-bridge remains, of course, on the primary side. Since both output voltage and controller are on the secondary side, the feedback signal doesn't need to cross the isolation barrier. However, the gate control signals need to cross the isolation barrier from the controller to the Half-bridge. Gate-drive transformers or opto-couplers are used for that. The controller also needs an auxiliary power supply be able to start up.
Block diagrams taken from: http://powerelectronics.com . The block diagrams show flyback converters, rather than half-bridge. But, they still represent the isolation schemes.