Practical Arduino Quench Control - Part 1

Now that I had determined how to properly structure my real-time code for the Arduino, it was time to start controlling my strobe.

The obvious first step was to be able to detect when the strobe was ready to be fired. This should be easy. The strobe raises the X line when it is ready. A digital input should do the trick. But a pure digital input may float high or low when nothing is connected. I was hesitant to resort to using the Arduino internal pull up (or pull down) resistors as I had no idea how that would affect operation of the strobe since the X signal is used for multiple purposes.

The strobe raises the X line when it is ready. To about 5 volts when the batteries are fully charged (less than that when the batteries are not at full charge). I was unsure what voltage value would be presented in a low battery situation. Would it be detected by the Arduino as a digital HIGH or a LOW? So I resorted to using an analog input to sample the voltage presented on the X line. I could then arbitrarily decide what voltage "HIGH" was.

Next step was firing the Strobe. Simple stuff, just short the X signal line to ground. I had manually done this with a paperclip so I knew it worked fine. How to short something to ground via the Arduino? A digital output should work. But there is the issue of the X line being a bi-directional signal line. Is it an input or an output? The strobe pulls it HIGH to signal ready, the camera pulls it LOW to signal fire. 2 different sources of control for the same signal line. A split personality digital line should work! I attached the X signal to a digital pin which I normally left in input mode (the strobe is in control). To fire the strobe I flipped the digital pin to output mode and set it to LOW (the camera is in control). The strobe fired! Success. Mostly. But sometimes it fired multiple times.

My trigger system was the culprit. I had wired in a pushbutton switch to another digital input to act as a manual trigger signal - no need to complicate my life with trying to hook up a camera just yet. But I failed to add debounce logic to my program. So I was reading multiple trigger switch contact closures each time I pressed the pushbutton. At low power settings the strobe was capable of firing faster than I could push and release a switch. So I went back and added debounce logic to all of my inputs - including the X analog signal from the strobe as it had some overshoot on it.

The next item to refine was how long to assert the low X? I wanted it to be as short as possible so that it would not interfere with the strobe trying to signal it was ready and so that it would not impact the cycle time. If X was permanently held low the strobe would automatically re-fire every time it recharged (my debounce issue from above). Worst case I needed to let X float before the strobe recharged. A few very rough experiments indicated that 250 microseconds of LOW assertion seemed to work fine. For the YS50 strobe. This is something that I may have to revisit for different models of strobes.

At this point I had a working Arduino controller that could trigger my strobe to perform a full dump (the YS50 does not have a power level control). Next step was to add some Quench logic so that I could control the power output of the strobe.