I have built my first prototype of a PIC-based SCR controller board, and I
have started preliminary assembly coding and testing. Most of the functions
are fairly simple, but I would appreciate comments on the best way to do
the required functions and also some which are future enhancements or
special purpose variants.

This is a single phase switch used to control loads which range from
several hundred milliamps to several hundred amps, at voltages from several
volts to about 600 VAC. The load is a transformer which steps down to about
12 VAC at currents up to 50,000 amperes with an inductive load (circuit
breaker) which may interrupt the flow of current at any point on the
waveform.

To minimize DC offset, the initial phase angle is delayed about 60 to 90
degrees. It is adjusted so that all subsequent current peaks are about
equal, to produce consistent true RMS readings and breaker operation.

Some problems we have experienced with previous designs are:

(1) Loss of gate triggering to one SCR, causing huge DC currents
(2) Large initial current surges due to remanent magnetism
(3) Need for remote programmable initial phase angle due to load variations

My new design uses a PIC18F242 which has many advanced features. I have
added an RS232 port for possible diagnostics and remote programming, but
the main control inputs are INIT, ENABLE, and PULSE. There is a BCD switch
to preset a number of cycles in PULSE mode, and a pot to preset nominal
phase angle. I also have a CT to measure the SCR current, and optos to
provide external phase reference and to sense when either SCR has a voltage
on it. I also added a thermistor input for optional temperature sensing.

To solve problem #1, I will first make sure there is voltage of both
polarities across the SCRs before allowing initiation. Once gate voltage
has been applied, I will check that there is no voltage on the
corresponding SCR. An ERROR shutdown will be set if there is a problem, and
shut down before the next half-cycle. This should minimize the fault
current. No current should flow if the first gate did not cause conduction.
If the second gate is faulty, the first half cycle will still cause a large
DC surge, although it will be limited to much less than that produced by a
second half-cycle.

For problem #2, I may monitor the number of half-cycles that pass through
the SCRs, by reading current. An even number of half-cycles should not
produce much remanent magnetism, but an odd number will. If that occurs, I
might be able to initiate a brief "degaussing" cycle by phase firing both
SCRs at a reduced level. This should only occur when the load has tripped.
If the load is still connected, I will simply leave the gates on for an
additional half-cycle to make an even number.

For #3, the easiest way is to use the RS232 connection to program the phase
angle from the remote controller, which also monitors the current waveform
and can detect excessive DC offset that needs correction. However, the
existing systems have only the INIT signal available, used to turn the SCR
on or off. What I plan to do is send a pulse train on the INIT line that
will be interpreted as a programming command to preset the phase angle. It
would only need to be set from 60 to 90 degrees, and to a precision of 3
degrees, so a string of 1 to 10 pulses could simply be counted and used
directly. That may be easier than implementing an eight bit data structure
of marks and spaces that would need to be done in software, rather than a
USART, although possibly the existing USART could be parallelled to the
INIT line and used normally. An algorithm to send data in this format is
probably much simpler than to receive it. This will be a future
enhancement.

I will be using assembly code for most, if not all, of this project,
although I do have a C18 compiler that might be useful for more complex
enhancements. I am using a 14.7456 MHz crystal which divides down nicely
for standard baud rates and a 7200 per second timer interrupt which
provides 3 degrees per tick for phase angle adjustment.

My purpose in posting this is to see if anyone has any suggestions for
better ways to implement the required functions, and also if there may be
other uses for this board. It could probably be adapted easily as a
variable phase-fired controller with voltage or current feedback, and
remotely programmed via RS232. It may be useful for welding applications,
where a preset number of cycles (or time) may be programmed. The components
are not very expensive, perhaps $60 plus $25 for the board, and much of
that is the DC-DC converters I chose to use instead of larger but cheaper
transformer supplies.