I've been working primarily on the H/W portion of the flight computer the past two months. I started using Eagle CAD to design and lay out the 5 PCBs:
Power Supply board - Provides regulated 12V for servos, 5V for sensors, and 3.3V for the CPU. In addition it uses Vishay VO14642 optoisolated solid-state relays for the CPU to control power to the servos, CDI (ignition module), ignition solenoids, and recovery outputs. An ARM/SAFE switch provides an additional level of safing for those outputs. The 3.3 and 5V supplies use an LM2596 switching regulator and the 12V supply uses an LM1085 LDO linear regulator. Flight power is supplied by a Tenergy 31022 Li-Ion battery pack at 14.8V and 2600 mAh. This particular battery pack has a built-in protection circuit, BesTech Power HCX-D019 which appears to be based on the Seiko S-8254A protection IC. For ground power and battery charging, I found a charger (PowerStream G60-12L4) that can provide enough current for grounds ops and that won't get confused by a parasitic load. I decided to power the CDI ignition module (5V) and GOX/fuel solenoids (24V) from external power supplies. The CDI module is very noisy electrically and it only needs to run during ignition. Likewise the solenoids are also only used during ignition and since they are 24 VDC it made sense to power them externally. I could have ordered new solenoid valves with a lower voltage that could be powered entirely onboard but that would be another $500 since there is a 5 item minimum order. Even though they are powered externally, the CDI and solenoids are controlled by solid-state relays on the power supply board. For connectors, I'm using the Molex Mini-Fit Jr. (used on ATX power supplies) for the battery and external charger connections. Molex SL series connectors will be used for all other connections to PCBs. Both have locking tabs and appear to be rated for vibration. The main power switch will be a 2TC2 series aircraft circuit breaker.
CPU board - Contains the Netburner MOD54415 CPU and TM transmitter, a Digi XT09-SI RF modem (1W, 9600 baud). Optoisolators will be used for remote reset and UART connections to the ground equipment.
Servo mux board - A small board that provides a mux interface from the single CPU UART to four Dynamixel AX-12A servos controlling the fuel/LOX vents, main valve, and helium valve.
Signal Conditioning board - Provides excitation and conditioning for bridge-type sensors using 8 INA125 instrumentation amplifiers connected to two ADS1115 4-channel 16-bit ADCs over I2C. This isn't a particular fast setup (860 S/s max) but for pressure sensors, it is more than sufficient. It would have been much simpler to go with 4-20 mA or I2C pducers but the existing small and lightweight ones I already have are all bridge type. In particular, the LOX tank needs a pducer that has no organic components or seals and the chamber pressure sensor needs to have near zero dead space to keep flow in the pressure line to near zero.
Sensor board - Contains the ADIS 16364 IMU, the u-blox 6 GPS, the MS5611 I2C barometer, and a Honeywell I2C sensor for total pressure. I haven't decided yet whether to go with one of the pre-made u-blox GPS boards typically used for drones or to just put the GPS module directly on my PCB.
After learning how to use Eagle to create a schematic and board layout, I ordered a set of PCBs for the Power Supply from Advanced Circuits. They have an offer where you can get full spec 2-layer PCBs including solder mask and silkscreen in 5 days for $33 ea. The only downside is you have to order a minimum of four PCBs and you can't combine multiple designs without an extra $50 charge. I got the PCBs yesterday and installed all the power supply components last night. It was a lot of fun since it was the first "real" PCB I've ever made other than wire-wrapped breadboards, etc. I still need to make a heat sink bracket for the voltage regulators. Amazingly it worked the first time so next up will be the CPU board. I've already laid out the CPU and Servo mux boards but I want to go ahead and design the Signal Conditioning and Sensor boards before ordering anything else.
On the flight S/W, I revised the messaging architecture to make it more robust. The existing code provided no-copy writes and no-copy reads for multiple readers but I never really liked the fact that one stuck reader could stall all the others. Most of my messages are very small so I removed the no-copy writes and created a separate circular buffer for each reader so if one task gets stuck, it won't prevent any other readers from receiving the messages. While testing out the external ADC, I ran into an interesting bug that I wasted over a day on thinking it was a flaky I2C connection. I had added some printf statements to look at intermediate values but in certain cases, that task needed about 50 more bytes of stack space beyond the 4k allocated. It showed up as a data dependent bug - I guess some printf strings needed slightly more stack space. In desperation, I thought it might be a stack problem and sure enough, when I used the uCOS OSDumpTCBStacks feature, it showed the problem immediately.
The high-pressure plumbing and most of the brackets are done for the rocket. I put lots more pics on the photos page. I still need to add some clamps for the igniter check valves and run a helium line to the main LOX valve to pressurize the seal cavity. Getting all the tubes to fit and still have room for wrench access was quite a challenge. I had a heck of a time finding a 45 degree SAE o-ring to AN adapter for the fuel tank exit. Allan Aircraft quoted me $1400/ea for Qty 2 of AA67025-06D so that was not an option. I thought maybe there was an extra digit in the price but they said it's that high because it would be a small run. The $88/ea price for the Parker 6 V5OX-D is looking better already! I ended up ordering an XRP 984506 fitting for about $15 which looks like it will work. I decided to use a modified AN919-12D for the LOX pressure inlet fitting and a modified AN919-10D for the fuel and helium tanks. Next up are proof tests, water tests, LN2 tests, and then another hot fire.
I was originally planning on filling the fuel tank from a hole near the top, drilled at a 45 degree angle into the thick neck area of the re-purposed E-size cylinder. I'm wondering though if it would practical to fill it from the drain QD fitting, similar to how I will load the LOX. I would need some sort of positive displacement hand pump to precisely meter the amount pumped into the tank so I don't overfill it. When filling the LOX tank, I'll just keep filling it until it squirts out the vent but I don't really want kerosene spraying all over the place when filling the fuel tank. I suppose I could connect a tube to the fuel vent so it wouldn't make such a mess.
Before I can do the cold tests and hot fire though, I have start wiring up more of the avionics and control system. I want to use the real hardware and software for all the ground tests to exercise it as much as possible. The servos will be connected to the MOD54415 using a mux so one servo can't hold down the bus if it fails. So at a minimum, I need to wire up that much of the control and data system. I also want to use the flight transducers so I need the associated signal conditioning and ADCs. I haven't decided whether to use proto boards or dedicated PC boards. For the flight software, I added full support for Ethernet messaging so now I can monitor any internal messages from the ground station by dynamically enabling the network destination with a special command.
I'm still trying to figure out the best way to implement access panels for the various plumbing and avionics sections. The tank sections will have permanent CF skin around them but I want either hinged or easily removable sections for the other portions. I'm also trying to decide the best way to line up the rivet holes that hold the skin to the longerons. If I drill them separately, it seems unlikely that everything will line up perfectly at assembly time. But if I drill them together as an assembly, it seems unlikely that I would be able to line up the holes again if I had to replace a portion of the skin. Since I'm counting on the skin to provide torsional stiffness, I'd prefer to have as little slop as possible in the holes. For the skin over the tanks, I plan to use 1/8 inch low profile flush head pop rivets.
I got a few more pieces of the plumbing system finished - the high-pressure helium manifold, the propellant tank burst and transducer holder and the vent valve assembly used for the fuel and LOX tanks. The helium manifold has connections for an AN6287-1 strut valve (for filling), an Endevco 8511A 5000 psi pressure transducer, a 4000 psi scuba burst disc, and a -4 AN outlet. The propellant tank burst disc holder is used inline and has connections for two -4 AN fittings, a Kulite XTM-190 500 psi pressure transducer, and a 750 psi burst disc. My original burst disc idea used a cap with 6 fasteners to hold the burst disc in place but I wanted to use a design closer to what Oseco recommended. I was able to modify an AN814-8D plug to hold the burst disc in place, similar to the reference design from Oseco. Next tasks are to finish making brackets, tubes, and the rest of the fuselage frames to hold the tanks. Then I can start on the cold tests and perform a hot-fire to check everything out.
For the flight computer software, I added a state machine class that will be used to run the sequencer and keep track of events. I considered developing the state machine in Dia and using a plugin to auto-generate the code but it wasn't really doing what I wanted so I'm going to use Dia to just design the state machine and then implement it by hand. Messages from the ground station (launch, abort, deploy, self-test, etc.) will just be events to the state machine.
For the transducers, I had been looking for an external ADC because the onboard 12-bit ADC in the MCF54415 only has an ENOB of 9 (effective number of bits) and poor accuracy. I tested a TI ADS1115 4-channel 16-bit ADC with an INA125 instrumentation amplifier on the front end in single-ended mode. Using a precision voltage source to simulate a bridge transducer and after calibrating for gain, this combination had a maximum error of 0.01% which is more than adequate. The ADS1115 is I2C so I'll use two of them on the bus to get 8 high-accuracy channels and keep the onboard channels for measuring voltages, etc. that don't need as much accuracy.
The rest of the plumbing design is complete for the rocket. I couldn't figure out how to draw tubing in PRO/Engineer so the fittings are just sitting in space in the CAD model. That's fine as I was able to use the model to check clearances, etc. but it turned out to be a lot more work than expected. I ended up changing many of the fittings for the pressurization system to get it all to fit within the 6 inch body diameter without adding extra length to the vehicle. I've ordered the additional fittings so when those arrive I can continue assembling the vehicle. In the meantime, I can get started on the new manifolds for the pressure transducers and burst discs along with the new valve brackets. For the helium tank, I'm using a scuba burst disc which is rated for 2400 psi working pressure and 4000 psi burst pressure. These off-the-shelf flat discs are designed for a 60% operating ratio (working pressure / burst pressure). Since I'll be filling the helium tank up to 3000 psi (a 75% operating ratio), I expect the disc to have a lower lifespan than normal. I ordered 8 of the discs and I plan to test a few of them with the hydro tester to see how much the 75% ratio reduces the lifespan. Worst case I can replace the disc just prior to launch to make sure it doesn't pop prematurely on the pad or during flight.
One of the things I wanted to do to reduce the likelihood of FOD is to eliminate all NPT fittings on the vehicle. As part of that, I drilled out the female NPT end on an Aqua Environment 955 check valve to turn it into a -6 AN female port. The dimensions worked out just right so I plan to do the same thing to the inlet on the Aqua 1247 regulator also. The interface between the regulator and check valve will still be NPT because I'm running out of enthusiasm for custom plumbing work. However, I could machine down the male NPT end on the check valve to turn it into a -4 male end and then use a -4 female to -6 male adapter to couple it to the output of the regulator.
I was invited to give a presentation at the Space Access '15 Conference this past weekend. A copy of the presentation is located in the Media section.
I've been able to make some progress on construction of the aft end of the rocket. The engine and LOX tank brackets along with the main valve are attached to the four stringers that will run the length of the vehicle. I had to switch to right-angle fittings for the igniter to help with clearance between the igniter body and LOX fitting. The area between the engine and LOX tank looks pretty clean now but there are still a lot of parts to fit in there including: igniter tubing, igniter heat exchanger, igniter check valves, fuel filter, fuel tube, fuel drain, LOX fill valve bracket, the RC-EXL ignition module, wiring, and the igniter pressure transducer. It all should fit but it will be interesting to work out the best sequence for assembly and disassembly.
My first attempt at turning down E-size oxygen cylinders for the propellant tanks was a bit frustrating. After taking off the desired amount on the lathe, the diameter of the tanks were different at each end. It turns out the floor in my garage had shifted somewhat over the years and the lathe needed to be re-leveled. After some adjustments, I was able to get the tanks turned down essentially straight although I took a few more thousands off than I wanted to on the wall thickness. To make sure there was enough wall left over, I bought an inexpensive ultrasonic thickness gauge (GM100) and was able to measure thicknesses around 0.091 - 0.098 at various points on the tanks. For an ultimate hoop stress of 38 ksi and an outside diameter of 4.150 inches, that works out to an ultimate tank pressure of 1705 psi (about 3x factor of safety for the fuel tank, 5x for the LOX tank). The final weights for the tanks were between 4.37 and 4.49 lbm compared to an original weight of 7.75 lbm each which is a combined weight savings of 6.7 lbm. The tanks are held in place with four #10-32 dog point setscrews mating up with shallow indentions in the tank heel. I considered several options including Click-Bond fasteners, hose clamps, plastic clamps, and decided that the setscrews into the heel was the best way to go for the fuel and LOX tanks. An FEA run of the tank shows essentially no stress in the area where the setscrew indentions will be. I haven't decided yet if I'll use the same technique for the helium tank since I really don't want to take the chance of weakening it by drilling into the heel.
After staring at them for over a year, I finally got around to testing the pressure regulators for the propellant tanks. I'm using the Aqua 1247-1 which has a range of 200-1000 psi and a Cv of 0.03. They're made 6061-T6 and weigh about 0.3 lbm each. The Cv is a bit small but my flow rates (13 in^3/s at 500 psi and 17 in^3/s at 300) seem to be in the linear range for the regulator. To simulate the engine, I made some test orifices that allowed me to run the regulators at the design pressures (500, 300 psi) but match the same flow rates with water that they will see in normal operation. I tested with both nitrogen and helium and as expected, there was less droop with the helium. One thing I thought was interesting is that as the "propellant" tank emptied out, the regulator took longer to stabilize. With a full tank of water, the regulator stabilized within ~0.75 sec but when the tank was only half full, it took 2-3 seconds for it to get back on target after opening the outlet valve. That could create a feedback loop with the engine during startup (I should have compared them to my existing welding-style regulators). These spec on these claim an 8 psi drop per 1000 psi of supply pressure drop which I think is pretty low for a single stage regulator. I wasn't able to completely validate that spec because by the time I figured out what I was doing with the tests, I was down to about 1200 psi in both cylinders. After going through about 20 gallons of distilled water, I wondered whether I could have done this testing using an all-gas setup with orifices (and maybe a gas flowmeter?) but I don't think I would have observed the same dynamic behavior I saw with a tank of water.
There were two interference problems with the original injector LOX cap, one with the igniter and the other with the OD of the vehicle. In addition, a 45 degree -6 AN boss fitting was going to be $75 on special order. So, I made a new one that has a straight -6 AN male fitting machined into the part which also eliminates the need for a K-seal at that location. The only place left that I need a K-seal is at the LOX tank exit but I'm having trouble finding a distributor for small quantities of them.
Here is the current plumbing layout. The pressurization lines will use 1/4 inch and the liquid lines will use 3/8 inch 6061-T6 aluminum tubing. Igniter lines will be 1/8 inch 3003-O tubing. The LOX vent will be located between the fuel and LOX tanks to keep the cold liquid away from the regulator, pressure transducer, and burst disc. For the fuel filter, I'm considering a 40 micron Holley filter just upstream of the fuel valve. In theory I could be real careful and just filter the fuel going into the tank but on several of my test stand runs, there were unexplained thrust shifts during the runs that seemed to disappear once I put a fuel filter on the test stand. The LOX line will not have a filter onboard but will have to rely on a sintered bronze filter on the fill line.
I want to keep the avionics development going in parallel so I spent some time updating the messaging classes in the flight program to stream selected messages over UDP to the ground station for debugging. After some research, I decided to use the Qt framework for developing the ground station software that will control the rocket prior to launch and for viewing telemetry during flight. I've used Visual Studio with MFC in the past but I wanted to upgrade my skill set to something newer and also open source. In a few evenings, I was able to prototype a message viewer using a QTreeWidget control that receives altimeter data from the flight computer and displays it in a hierarchical manner. I bought Raspberry Pi 2 and BeagleBone Black modules to evaluate their use for any offboard ground equipment that may need to be controlled. The Raspberry Pi is definitely faster when using X Windows but for controlling DIO lines in a headless environment, either one should be fast enough. I'm leaning toward the BeagleBone Black mainly because it has full hardware documentation and more resources are exposed on the header pins. The flight computer is still the Netburner MOD54415.
I ran a round of cold tests with LN2 this week on the new main, vent, and fill valves. It wasn't perfect but after some adjustments, I think they will work good enough for a flight vehicle. For all the tests the sequence was as follows:
Close the main valve, then open the fill and vent valves
Fill the test stand tank through the fill valve until liquid squirts out the vent valve
Close the fill valve (manually operated) and open the valve to drain the fill hose
Close the vent (with an AX-12A servo), checking for stickiness
Pressurize the system using N2 in steps at 50, 100, 200, and 300 psi to check for leaks
Open the main valve for a couple of seconds to check for leaks on video and verify smooth operation of the servo/gear setup
Check for leaks in between cycles of the main valve
After the tank was empty, open the vent valve
On the first day of testing, I was able to perform one fill and three main valve actuations before the tank burst disc popped. I didn't have a gauge hooked up after the pressurization check valve but it shouldn't have been much over 300 psi. It had been sitting for about 10 minutes closed up so you would expect the pressure to increase somewhat. However, that particular disc had been on the test stand for several years so maybe it failed due to fatigue (it was rated for 580 psi). A few days later when I continued testing, the fill valve which had worked OK the first day started was leaking liquid like crazy out the stem during the low pressure fill. I took the valve apart and discovered some damage to the spring loaded stem seal which was likely the cause of the leak. I can't explain why the same valve worked fine a few days earlier without being disassembled in between. I also noticed the four body bolts on all the valves were not as tight as they were originally so I re-torqued them. After that they stayed tight for the rest of the testing.
Inserting the stem seal into the valve bore is very tricky because there is a small step (0.005 for the LOX valve) that the bearing sits on. So the seal has to be pushed past that step without damaging it. I had been inserting the seal at an angle to get past the step (which puts it into an oval shape) then straightening it out. I discovered this process tends to put a small kink in one of the edges which creates a leak path later. I also noticed some excessive extrusion in the ID caused by just inserting the stem into it. I experimented with using aluminum foil as a sleeve to push the seal in past the step but then it was hard to get the foil out without tearing it and leaving some in the valve. I finally made made a little plunger out of some PTFE bar stock to just push the seal in past the step (after polishing up the step edge a bit). In general, this design doesn't lend itself well to inserting the seal without damaging it.
I was using vented balls in the valves to allow any trapped cryo fluid to expand either upstream or downstream. Normally the vent is pointed upstream when the valve is closed to keep the ball pushed against the downstream seat. However, this exposes the ball cavity and stem seal to cold liquid the entire time. If the upstream seat spring is stiff enough, the ball vent can be pointed downstream but if not, there is the chance that liquid will leak past the upstream seat, through the side of the ball, then out the vent downstream. I found in my testing with the main valve vent pointed downstream that there weren't any leaks until after the first open/close cycle of the valve. And even then the leak was extremely small - with 300 psi upstream of the valve, you could just barely feel the gas coming out of the exit. Since the main valve will only be operated once in the flight vehicle, this may be acceptable. But then I got to thinking about whether the ball really needs to be vented. The only reason for the vent is to release the trapped liquid but what if there was another way to release the internal pressure? Ben Brockert mentioned a while back that these little spring loaded seals can act as check valves so I thought if the seal was installed backwards, then any trapped liquid could burp itself around the seal as it expands to a gas. Another seal in an opposing configuration would keep anything from getting out the bearing end. I had designed in #10-32 ports in the stem bore of all the cryo valves so any leaks can be sent overboard in a controlled manner through a tube. I replaced the balls in the vent and main valves with a solid ball and the idea seemed to work. This eliminated all the liquid leaks out of the stem at the expense of an extra seal in each valve. The main valve already had two opposed seals so the cavity could be pressurized as it is the only valve that will be actuated under pressure. This revised arrangement (along with the new valve bore dimensions to compensate for shrinkage) seemed to dramatically reduce the stem leakage from the fill and vent valves. Only a very small gas leak is audible from the stem instead of the liquid leaks there were last year.
I also noticed a very small gas leak from the body seals of the main valve after it had been opened and closed once under pressure. The original Swagelok design uses a regular o-ring as the body seal so it's not surprising it leaks a bit when cold. At one point, I used an air gun to blow off the frost and the leak stopped so it must have pushed some ice into the gap between the end piece and body which sealed it back up. Without a drastic redesign, a second o-ring or maybe just a tighter o-ring groove may get rid of the leak completely.
I didn't have time to fabricate new male -6 AN fittings for all of the valves so both sides of the vent and the main valve exit were using an older female -6 o-ring boss fitting I had on hand. I had thought the o-ring fittings were working fine at cryo temps but on every run there was a liquid leak around the fitting at the main valve exit. I went back and looked more closely at the 2nd camera view from the 2013-09-15 hot-fire test and saw a similar but much larger LOX leak at the injector fitting. About halfway through that video you can see LOX dripping down onto the load cell bracket. Not good but at least I caught it before having LOX spray all over the inside of the rocket. The fix will be to either weld an aluminum AN fitting to the LOX injector cap or switch back to using NPT threaded fittings. I had sworn off NPT fittings after ruining an injector on the 100 lbf engine by stripping out the threads but maybe if I'm careful, they will work. The LOX cap is easier to make than the injector so I could always make a spare or two. The problem with NPT fittings though is if you accidentally back it off at all while tightening the tube nut, then you have to pull out the whole fitting to re-tape it. And then you run the risk of FOD from the PTFE tape.
The AX-12A servos seemed to have no problem opening the main valve (3:1 gear ratio and linked to the fuel valve) and vent valve (direct connection). On the very last run, the vent valve was a bit sticky and didn't close initially. Some alternating open/close cycles eventually freed it up but I suspect condensed moisture left over from previous runs got into the bearing and froze it up. I also found a "feature" with the AX-12A where it reports that it isn't moving anymore when it gets stuck prior to reaching its destination. The control code was using that flag to decide when it was done moving and disable the servo. I changed the code to also check the position error when deciding if the move is complete or not. There were two other changes that eliminated the intermittent comm problems I saw during previous tests. A scope on the half-duplex TTL line showed that the default 1 Mbps baud rate didn't leave enough time with long cable lengths for the logic low signal to be recognized. Turning the rate down to 500 kbps seemed to be enough. There was also a logic level problem that I needed to address properly. The AX-12A is a 5V TTL part but the 74HC126 that is performing the TX/RX switching is connected to the MOD54415 runs at 3.3V. The 74HC levels at 3.3V meet the TTL spec but the reply back from the servo exceeds the 3.3 Vcc of the buffer. There are dedicated chips for this but most require +5 operation. It turns out the 74HC parts have ESD protection diodes on the inputs so with an appropriate series resistor to limit the current, the extra voltage can be safely shunted through the diode to Vcc. Certain 74HC vendors had the resistor built in but you can't count on that so I added a 470 ohm resistor on the data line in between the servo and buffer. Checks with a scope afterwards show all logic levels were met and I haven't seen any comm errors since then.
Next up will be some tests of the Aqua regulators and shop work on the flight propellant tanks.