My senior design project at NIU was a collaboration between myself and a Joshua Ott. Joshua is a mechanical engineer who had been designing a unique pulsejet engine design. The unique features included a twin combustion chamber design and a self starting mode. To accomplish his mission, Joshua needed a digital control system designed and implemented for this pulsejet engine. The result of our efforts were a really cool engine, new skills, and Second place senior desing awards from our college in both the mechanical and electrical departments.
This system uses an Adruino Mega interfaced with some other peripherals:
- LCD Screen
- Rotary 10k potentiometer input knobs
- momentary push button
- injectors drivers
- ignition drivers
- fuel pump relay
The control system is interrupt driven and makes use of three of the arduino mega’s timers. The pulsejet contiains no moving parts: presesnting an intersting challenge for determining the phase of the combustion cycle. I decided to overcome this problem using the following method: the timing of the system is referenced to a reoccurring portion of the combustion cycle. The pressure sensors trigger the arduino interupts upon crossing their zero refernce point. This is the begining of the control sequence for each cycle.
Control Sequnce Overview:
- Determine operation frequency of the engine and resolve the fuel delay (specified in degrees) and spark delay (also in degrees) into a time delay. This has to be done each cycle because the engine may change its operational frequncy and the spark/fuel time delays need to be dynamically recalculated.
- Set the fuel timer to interrupt the proccessor when it’s time to begin injecting fuel (based on the previously calculated delay time)and set the spark timer to interrupt the proccessor when it’s time to begin charging the coil (a static amount of time before it needs to fire; also based on the previously calculated delay time)
- The fuel delay timer has elapsed and the processor begins its fuel interrupt routine. The injector signal is asserted and a software semaphore is set to track that the injector is on. The timer is set with a new value for when the injector needs to turn off. This is based upon the amount of fuel desired.
- The fuel timer elapses again and the fuel interrupt routine checks the semaphore flag. The logic specifies that the injector now needs to close, and the injector signal is de-asserted.
- The spark delay timer elapses and the the processor begins its fuel interrupt routine. The spark signal is asserted and a software semaphore is set to track that the coil is charging.
- The spark timer elapses again and the spark interrupt routine checks the semaphore flag. The logic specifies that the coil is done charging and now needs to fire, and the spark signal is de-asserted.
That is an overview of the realtime control logic. Note that those steps are occuring for two separate combusitons chambers concurrently. Some other house keeping functions are running periodically to poll the A/D convertor to get the input positions of the knobs, update the LCD screen, and send logging data out over the USB cable.
I was looking for some way to make a sturdy aesthetically pleasing enclosure. Plastic project boxes didn’t appeal to me and I wanted somthing metal. I decided to repurpose an airbag computer module from a Toyota MR2. I stripped out the original pcb and made room for my components.