Hello all,
I'm currently in the process of building a 3-stage gauss rifle. I designed and put together a protoboard circuit and it works with one issue I just cannot seem to solve.
I am using 3 high-voltage rated SCRs as my switches for each of the 3 stages, which each have their own respective capacitor banks. These SCRs are triggered via digital output pins from my arduino. I've had no problem with a single-stage using only 1 SCR connected to 1 digital pin. However, once I add additional stages, attempting to trigger each of the stages in sequence causes them to all trigger at the same instant when the first SCR is triggered rather than independently in a delayed sequence.
At first I thought maybe the separating diodes I placed between capacitor banks were not strong enough to keep one bank from discharging into the previous one, but I've confirmed that it is not a problem with them, as charging all banks and triggering only 1 SCR with the others not connected to their respective trigger pins will only discharge the 1st stage capacitor bank.
Strangely, charging all 3 capacitor banks with the 2nd and 3rd stage trigger pins disconnected will allow the first stage to fire without causing the 2nd and 3rd to fire, and I can then reconnect the 2nd stage and trigger it and that will fire the 2nd stage with the correct timing, as is the same if I connect the 3rd pin and fire that one after the 2nd. BUT leaving the pins connected while triggering the 1st stage will cause all three to trigger, even if I am not setting the other pins to HIGH.
I've confirmed there are no shorts between the pins and SCR gates with a multimeter continuity test.
What could possibly be causing this? I've attached my schematic and code below.
I would appreciate any feedback and suggestions, thank you everyone!
EDIT: Corrected schm with SCRs rather than MOSFETs:
int buttonPin = 11;
int scrPin = 7;
int scrPin2 = 8;
int scrPin3 = 9;
void setup() {
Serial.begin(9600);
pinMode(buttonPin, INPUT_PULLUP);
pinMode(scrPin, OUTPUT);
pinMode(scrPin2, OUTPUT);
pinMode(scrPin3, OUTPUT);
}
void loop() {
if(digitalRead(buttonPin) == HIGH){
Serial.println(digitalRead(buttonPin));
digitalWrite(scrPin, HIGH);
delay(500);
digitalWrite(scrPin, LOW);
delay(500);
digitalWrite(scrPin2, HIGH);
delay(500);
digitalWrite(scrPin2, LOW);
delay(500);
digitalWrite(scrPin3, HIGH);
delay(500);
digitalWrite(scrPin3, LOW);
delay(500);
}
else {
digitalWrite(scrPin, LOW);
digitalWrite(scrPin2, LOW);
digitalWrite(scrPin3, LOW);
}
}