Electronics Test – Test Stand Roll Out

Test Stand Rollout

This is the fourth part in a series about UB SEDS rolling out a test stand to support our in-house propellant program. In this part we test the test stand’s electronics.

If you just want to skip to the end and see the test stand page, you can find that here.

If you want to find out more about our propellant mixing, you can find that here.

Design of the electronics and code 1.0

To measure thrust from the test stand we are using a FX-1901 Load Cell.  For data acquisition (DAQ), we originally used an Op-Amp in a differential amplifier setup being read by an analog pin on an Arduino. The Arduino would write the data to a computer over the USB serial line. This serial line also powers the Arduino which in turn powers the load cell. Unfortunately, the Op-Amp required a 10 volt difference to power it, and the Ardunio could only provide a maximum of 5 Volts. To get this 10 volt difference I hooked up a second Arduino, being powered by a 9 volt battery, to the first Arduino. By connecting the second Arduino’s 5 volt pin the first Arduino’s GND pin we now have 3 discrete voltage levels, +5 Volts, 0 Volts, and -5 Volts. Note: This is equivalent to saying 10 Volts, 5 Volts, and 0 Volts.

On the computer it would read off the data from the serial line using a MatLab script. All code mentioned in this post can be found here. A second MatLab script was also created to analyze the data, producing a thrust curve and some key stats about the burn like max thrust, burn duration, etc.

Design of the electronics and code 2.0

A while after I setup the Arduino DAQ a friend told me about PSOC’s , programmable system on a chip. They are basically a micro-controller with configurable analog components. I was able to replace the first Arduino and Op-Amp using a PSOC 5LP (A link to this PSOC on amazon). The second Arduino and 9 Volt battery were now used to power the load cell and connected to the PSOC over a common ground. This not only simplified the setup but also improved the data recording capabilities. While both the Arduino and PSOC are limited by how much data can be sent over the Serial port, the PSOC’s micro-controller is much faster, allowing me to over sample the load cell and average together more measurements. This eliminated most of the noise.

Calibrating the electronics

Before we can use the sensor we need to calibrate it. This entails taking known weights, and seeing the output of the sensor. According to the manufacturer’s data sheet, we are operating the load cell in its linear range, and therefore we can find the equation relating any weight to the sensors output (and visa versa) using the equation below.

y_{Digital \ Signal}=m x_{Weight}+b

This above equation is the equation for a line and has two unknowns, m and b. Two unknowns mean that we have to take at least two different measurements to determine them.

We can make the calibration more precise by taking more measurements. This reduces the noise but then we have to find some way to combine measurements together in some form. The best way to do that in this case is to combine them using the least squares method.

Note: I will not be going into the math of least squares estimation here. If you are interested in a rigorous explanation of different estimation techniques I highly suggest “Optimal Estimation of Dynamic Systems” by Crassidis and Junkins It’s expensive and costs what you would expect for a textbook but is a text written by two giants of the field. I don’t suggest purchasing it unless you are comfortable with linear algebra, multivariable calculus, and know that you want to go deeper into estimation. If you are interested in me doing a series on different estimation techniques, let me know in the comments below. This would most likely cover everything from least squares estimation to the Extended Kalman Filter.

Calibration GUI

I built a GUI in MatLab that will take in different measurements and combine them in an optimal fashion to determine the best values for m and b.

Thrust Curves

Below you can find two thrust curves. The one on the left is from the original Arduino setup, and the one on the right is from the new PSOC setup. These were from two different experimental motors so the two curves should not be the same. Additionally, because these are experimental motors, they have not been characterized by a known system. We estimated certain bulk parameters like max/average thrust but those had large error bars. The test stand measurements both times fit the estimated bulk parameters.

Note: The Y-Axis are not equal between the two graphs, one is in pounds and the other is in Newtons. The Arduino graph, in pounds, converted to newtons would go from 0 to ~200 newtons, twice the range that the PSOC graph displays. I scaled both graphs so that you could see similar sized curves.

ArduinoVsPSOC

Obligatory burn photo

Test stand ignition

While the thrust curves are the main focus of this post, I took an interesting burn photo during the test.  It shows the initial moments of a burn. The first thing we notice is that the neck of the flame is much longer than normal.  Additionally, we can see that the smoke given off by the flame is darker than normal. In the other flame photos we saw white smoke. In later photos from this burn, the neck of the flame moves back down to its usual place, and the smoke has returned to its normal color. If you look closely at the neck of the flame we can see several bright points in it. They are hard to see but these are shock diamonds.