Email or username:

Password:

Forgot your password?
Top-level
niconiconi

Circuit board arrived. I found my PIC programmer is 5 V only and cannot be used on this 3.3 V chip, then I found a great project called Pickle which can do serial port bitbanging for a makeshift programmer. Just turned my LEDs on, ready to start firmware development... #electronics

Photo of a large and empty circuit board, with lots of jumper wires and probes, and with four LEDs turned on.
Oscilloscope trace of the LED driving waveform, it's a 3.3 V toggling at 20 kHz.
Low Voltage Programming with VPP at 3V3

Separate data I/O connections (only supported option)

BAITE Cp2102 module               PICMicro
===================               ========

3V3 to VDD

GND to VSS

TX (RXD) to VPP

RTS to PGC

DTR via 1000R resistor to PGD and back to CTS.
13 comments
niconiconi replied to niconiconi

Wasted an hour trying to set up a timer on the PIC microcontroller. The frequency was always wrong by an order of magnitude, I kept fiddling with the clock generators, PLLs, prescalers, and fuses. Only an hour later I found the real problem... I simply forgot that a 8-bit timer has 256 counts, not 1 count. ​:blobcatwoozy:​

"I'll just warn you now. I don't know how to use a computer."
niconiconi replied to niconiconi

Just finished the high-voltage controller firmware in 500 lines of C. It's mostly just housekeeping tasks. The actual interesting part of the circuit board is the analog circuitry under control, which I finally can start testing tomorrow... The low-voltage controller also needs a firmware, but for now I can simulate that using a stub program on the computer... #electronics

niconiconi replied to niconiconi

Now the firmware is finished, it's time to test the analog electronics. The circuit board is starting to look nice after the high-voltage supply and all surrounding analog components are soldered. Unfortunately I immediately found the entire board must be scrapped and revised (it's v0.00 for a reason...). The old prototype used a charge pump voltage doubler to bias the gate drive, which was deleted in the new design, and it was a fatal mistake.

The new high voltage's power supply is derived from an 1:2 isolation transformer and it already doubles the voltage, which was why I deleted the charge pump doubler. But it's an unregulated supply implemented by a quick and dirty push-pull driver chip. When the high-voltage is turned on, the voltage drops back to 5 V, causes the flyback chip to malfunction and stops switching. Worse, its gate drive actually get stuck on, turning the MOSFET into a permanent short circuit / dummy load. The fail-safe logic I programmed into the firmware saved everything from burning up by switching the power off after a timeout.
#electronics

Now the firmware is finished, it's time to test the analog electronics. The circuit board is starting to look nice after the high-voltage supply and all surrounding analog components are soldered. Unfortunately I immediately found the entire board must be scrapped and revised (it's v0.00 for a reason...). The old prototype used a charge pump voltage doubler to bias the gate drive, which was deleted in the new design, and it was a fatal mistake.

The new high voltage's power supply is derived from...

A large circuit board with many parts soldered on, including large transformers and capacitor banks.
Oscilloscope screenshot of the faulty waveform, it shows that, as the isolated supply voltage drops from 10 V to 5 V within 1750 microseconds, the flyback chip's gate drive stops switching and stuck on.
/*
 * High-voltage and short-circuit timer interrupt handler.
 *
 * It's used to start the short-circuit timer when the target voltage
 * is unreached, stop the timer when the target is reached, and turn
 * off the high-voltage supply when the short-circuit timer expires.
 */
static void high_voltage_isr(void)
{
        if (C1IF && C1OUT) {
                /*
                 * Rising edge. Target voltage is unreached, comparator
                 * has started high-voltage charging. Start a 10-second
                 * short-circuit protecion timer.
                 */
                TMR1H = ((65535U - 38750U + 1U) & 0xFF00U) >> 8;
                TMR1L =  (65535U - 38750U + 1U) & 0x00FFU;
                TMR1ON = 1;
                C1IF = 0;
        }
        else if (C1IF && !C1OUT) {
                /*
                 * Falling edge. Target voltage is reached, comparator
                 * has stopped high-voltage charging. Stop timer.
                 */
                TMR1ON = 0;
                C1IF = 0;

                /*
                 * The ARMED light is already on, the READY light is on
                 * when the target voltage is first reached.
                 */
                LED_READY = LED_ON;
        }
        else if (TMR1IF) {
                /*
                 * High voltage has been ON for 10 seconds yet the target
                 * voltage is still unreached. Must be a short-circuit
                 * failure!
                 */
                TMR1IF = 0;
                fault();
        }
}
niconiconi replied to niconiconi

I just figured out the failure mode of the malfunctioned flyback chip. The flyback controller turns the transistor on, wait for inductor current to ramp up, and turns off the transistor only after the peak current comparator trips. If the power supply drops out after an overload, the original peak current target is never reached, now the transistor is permanently on! It's not that the gate drive malfunctioned and stuck high, it's actually working exactly as designed. #electronics

niconiconi replied to niconiconi

Confirmed what I was worrying about. This flyback high-voltage power supply circuit I hacked together inherently uses low repetition rate but huge current to pulse the flyback transformer, creating up to 1200 V output. The I_peak is around 3-4 A, well beyond the 1 A rating of the isolation transformer (not the flyback transformer) and its driver.

Only this isolation transformer has the necessary safety rating and certification for reinforced isolation at this voltage. If I can't get away by reducing the peak current, the only solution is stepping the voltage up at the primary for more power at the same current, and stepping it down again at the seconary. Overloading the transformer is possible, since it's only momentary. But it's a critical safety component, I don't want to risk that...
#electronics

Confirmed what I was worrying about. This flyback high-voltage power supply circuit I hacked together inherently uses low repetition rate but huge current to pulse the flyback transformer, creating up to 1200 V output. The I_peak is around 3-4 A, well beyond the 1 A rating of the isolation transformer (not the flyback transformer) and its driver.

Only this isolation transformer has the necessary safety rating and certification for reinforced isolation at this voltage. If I can't get away by reducing...

niconiconi replied to niconiconi

I wonder if my fatal analog design problem can be "fixed in software" and suddenly had an idea... Instead of turning the flyback converter on continuously, I changed the firmware to run it in small 1-millisecond bursts per every 10 ms, allowing the 10 V isolated power supply to recover and recharge between pulses. Unbelievable, this hack worked! It successfully charged the capacitor bank to 1000 V... #electronics

Oscilloscope trace, one trace shows the ramp up of the 1000 V capacitor bank. Another trace shows the bursty power supply voltage due to frequency drops every time the flyback converter is started.
10 V power supply voltage waveform, showing periodic (88.65 Hz) voltage drop every 10 milliseconds, to as low as 5.28 V.
niconiconi replied to niconiconi

Voltage regulation at 500 V is even better than my expectation. 2% within theoretical 536 V set point. #electronics

Oscilloscope screenshot, showing the high-voltage trace and the input power supply drop at the time of switching.
niconiconi replied to niconiconi

Setting up the fail-safe crowbar and watchdog timer early on before debugging other parts of the high-voltage circuit turned out to be really worthwhile. Now I love how I can physically discharge the dangerous capacitor by just pressing Control-C in my Unix terminal emulator. #electronics

niconiconi replied to niconiconi

Trap for young players... If you're disabling another interrupt within an interrupt, that disabled interrupt source may have already set its flag just before you've disabled it, causing a TACTOU situation. When the ISR returns, that supposedly-disabled IRQ is immediately invoked. I just spent an hour trying to debug a strange problem because of this race condition... ​:woozy_baa:​ #electronics

niconiconi replied to niconiconi

Success. High-voltage supply and regulation are now fully functional. My fatally flawed analog power supply problem has been fixed in software. The burst-ON hack turned out to not "just a software hack" but kind of an optimal solution given the circuit components constraints. If I need a real hardware solution I'd just implement exactly the same control with RC timers and AND gates instead of an interrupt service routine. #electronics

Oscilloscope screenshots showing the ON signal and the regulated output voltage. The flyback converter is turned on in small 50 milliseconds bursts. The output voltage is a 550 V sawtooth waveform with 10 V ripple above and below the set point.
niconiconi replied to niconiconi

More progress on the high-voltage impulse generator. The huge capacitors, resistors and inductors for pulse shaping are now installed for testing. They mostly work. But this test uncovered a serious problem - each time the circuit fires, I can hear an arcing noise, the oscilloscope also shows a weird glitch, likely caused by arcing. The generator is supposed to destroy the device-under-test, not itself! Now my suspect is the isolated DC-DC module. Just ordered a better one for another try... #electronics

Photo of the same circuit board, now with huge capacitors, inductors, resistors, and huge banana socket connector installed.
niconiconi replied to niconiconi

Problem solved. The "arcing" sound during the impulse current discharge is NOT a fault. It's actually a common phenomenon in all high-current pulse circuits. The "snap" noise was caused by sudden physical deformations of the circuit board itself, due to Lorentz force from the intense current. #electronics

niconiconi replied to niconiconi

Success! My first circuit board prototype of the IEC 61000-4-5 Combination Wave Generator (aka Lightning Surge Generator, aka Impulse Generator) is working after a month of development. This PCB has greatly improved safety and usability compared to the original perfboard. #electronics

Surge waveforms are compliant to IEC 61000-4-5's 1.2/50 μs & 8/20 μs requirements.
Open-Circuit Voltage:
- 1.02 kV, Front time: 1.33 μs, Duration: 53.60 μs
Short-Circuit Current:
- 484 A, Front time: 7.53 μs, Duration: 21.51 μs

Photo of the PCB prototype.

On the left there's a 120x160 LCD screen, four pushbuttons. USB power connector, a debug header, a microcontroller.

At the middle there's an isolation barrier, separating the low-voltage side and high-voltage side by a few centimeters for reinforced isolation. An isolated optocoupler and a isolation transformer are used for signal and power transmissions.

On the right there are various subcircuits. Most visible ones are a thyristor, massive capacitors, resistors, two toroidal inductors, and two large banana connector / binding post. Other supporting components includes a microcontroller, a flyback high-voltage power supply, a normally-on high-voltage SiC FET transistor for safety discharge, a floating high-side gate driver, among other things.
Oscilloscope screenshot of the output voltage and current waveform, showing the device is in conformance to the IEC 61000-4-5 requirements.
Comparison of the old and crude hand-built perfboard prototype and the new fancy PCB prototype.
Go Up