211 lines
9.6 KiB
PHP
211 lines
9.6 KiB
PHP
[appendix]
|
|
== Example Pyro Channel Configurations
|
|
|
|
Programming configurable pyro channels on Altus Metrum products that
|
|
include them isn't difficult, but in an attempt to aid understanding
|
|
of the configuration interface and help "keep simple things simple",
|
|
we offer the following examples of the simplest configurations for
|
|
common situations, along with some hints on avoiding unexpected
|
|
results.
|
|
|
|
The rich set of conditions provided can be used to configure almost
|
|
any pyro event you can imagine, for a wide variety of objectives.
|
|
But don't be fooled! Typical events need only one or a few simple
|
|
conditions to be configured for success. A key thing to remember is
|
|
that *all* configured conditions must be true to allow a pyro channel
|
|
to fire. Trying to include too many conditions often results in
|
|
conflicting rules that never allow a channel to fire. The most
|
|
important advice we can offer is, therefore, to try and find the
|
|
simplest set of conditions that will do what you need for a given
|
|
project.
|
|
|
|
=== Two-Stage Flights
|
|
|
|
Successful completion of a two-stage flight often involves
|
|
programming of two events. The first is firing a separation
|
|
charge, the second is igniting the sustainer's (primary)
|
|
motor.
|
|
|
|
Separation charges are best fired as soon as possible after
|
|
the previous stage has completed providing acceleration, to
|
|
minimize drag of the sustainer's coast phase before ignition.
|
|
Recovery, whether the remainder of the flight is nominal or
|
|
not, usually works best when the stages are separated. So,
|
|
the "best" way to configure a pyro channel for a separation
|
|
charge is to just set "after motor number". For a 2-stage
|
|
project, set this to "1". This will cause the pyro channel
|
|
to fire as soon as the firmware's flight state machine
|
|
determines the first motor has burned out.
|
|
|
|
Safe ignition of a sustainer (primary) motor requires that
|
|
it happen after the previous stage burns out, while the
|
|
airframe remains mostly vertical, and typically after the
|
|
sustainer has coasted away from the booster a bit. A good
|
|
starting point is thus "after motor number" set the same as
|
|
the separation charge, which is "1" for a 2-stage rocket.
|
|
Then "angle from vertical less than" set to some
|
|
reasonably vertical amount, perhaps 20 degrees. Then "delay
|
|
after other conditions" set for the desired duration of coast.
|
|
Use simulations to figure out what a reasonable value here is,
|
|
but for typical high power rocketry sport flights that aren't
|
|
trying to set records, something like 2 seconds is usually a
|
|
good place to start.
|
|
|
|
=== Triggered Clusters and Air Starts
|
|
|
|
When an airframe has a cluster of motors, one of which is
|
|
"primary" and centered, surrounding by a ring of "secondary"
|
|
motors, you may want to use the launch control system to fire the primary motor and use onboard electronics to light
|
|
the rest of the cluster as soon as launch is detected. This
|
|
is particularly true if the primary motor is significantly
|
|
different in geometry and may take longer to come up to
|
|
pressure than the secondary motors. In this case, a simple
|
|
configuration to light secondary motors is is "time since
|
|
boost greater than" enabled and set to "0". There's
|
|
really no point in setting an angle limit since no time has
|
|
transpired for the airframe to change orientation.
|
|
|
|
Air starts can use the same simple configuration, but with
|
|
the time set to a non-zero value. However, if air starts
|
|
are going to light after the airframe leaves the launch rail
|
|
or tower, add an "angle from vertical less than"
|
|
condition just you would for a 2-stage sustainer to stay safe.
|
|
|
|
=== Redundant Apogee
|
|
|
|
When flying a board like TeleMega or EasyMega, it's easy to
|
|
configure a programmable channel to fire a redundant apogee
|
|
charge. This is of course not *fully* redundant, since it's
|
|
always possible that the board itself or its battery could
|
|
the the failure source, but far more often, pyro events fail
|
|
due to broken wires, bad connectors, or bad e-matches... so
|
|
firing two charges from one board can add useful redundancy.
|
|
|
|
The simplest configuration for redundant apogee is "flight
|
|
state after" set to "drogue", and then "delay after other
|
|
conditions" set to a second or two.
|
|
|
|
=== Redundant Main
|
|
|
|
Similarly to apogee, configuring a redundant main charge can
|
|
provide useful redundancy. What we want is to configure an
|
|
altitude for deployment lower than the primary main deploy
|
|
altitude, and then ensure we only trigger on that condition
|
|
while descending.
|
|
|
|
The simplest configuration for redundant main is "flight
|
|
state after" set to "drogue", which will ensure we're in to
|
|
the descent phase, then "height less than" set to a number
|
|
lower than you've chosen for the primary main channel
|
|
deployment height.
|
|
|
|
=== Apogee Above Baro Sensor Limit
|
|
|
|
A question we've seen increasingly often is "How does the
|
|
Telemega/Easymega detect apogee for flights above 100,000
|
|
feet?" Flights above that height are a bit outside
|
|
our original design envelope, but can be made to work...
|
|
This is *not* a simple flight, and the configuration for it
|
|
is also not simple, but we think including this information
|
|
is important for anyone contemplating such a project with our
|
|
electronics!
|
|
|
|
Our flight computers use a Kalman sensor-fusing filter to
|
|
estimate the flight state, which consists of three values:
|
|
|
|
1. Height above ground
|
|
2. Vertical speed
|
|
3. Vertical acceleration
|
|
|
|
Apogee is assumed to be where vertical speed crosses zero.
|
|
|
|
Below 30km altitude (about 100k'), we use both the barometer
|
|
and the accelerometer to update the flight state, along with
|
|
a basic Newtonian model of motion. That works well, pegging
|
|
apogee within a few sensor samples essentially every time.
|
|
|
|
Above 30km, the barometric sensor doesn't provide useful data,
|
|
so we can't use it to update the flight state. Instead, the
|
|
Kalman filter falls back to a single sensor mode, using only
|
|
the accelerometer.
|
|
|
|
At all altitudes, we de-sense the barometric data when we
|
|
estimate the speed is near or above mach as the sensor is
|
|
often subjected to significant transients, which would
|
|
otherwise push the flight state estimates too fast and could
|
|
trigger a false apogee event.
|
|
|
|
That means the filter is no longer getting the benefit of two
|
|
sensors, and relies on just the accelerometer. The trouble
|
|
with accelerometers is they're measuring the derivative of
|
|
speed, so you have to integrate their values to compute speed.
|
|
Any offset error in acceleration measurement gets constantly
|
|
added to that speed.
|
|
|
|
In addition, we assume the axial acceleration is actually
|
|
vertical acceleration; our tilt measurements have enough
|
|
integration error during coast that we can't usefully use
|
|
that to get vertical acceleration. Because we don't live in
|
|
an inertial frame, that means we're mis-computing the total
|
|
acceleration acting on the airframe as we have to add gravity
|
|
into the mix, and simply adding that to the axial acceleration
|
|
value doesn't generate the right value.
|
|
|
|
The effect of this is to under-estimate apogee when you base
|
|
the computation purely on acceleration as the rocket flies a
|
|
parabolic path.
|
|
|
|
For flights *near* 100k', all of this works pretty well -
|
|
you've got the flight state estimates adjusted using the
|
|
barometric sensor up to 30km, then you're flying on inertial
|
|
data to apogee.
|
|
|
|
For flights well above 100k', it's not great; you're usually
|
|
going fast enough through 100k' that the baro sensor is still
|
|
de-sensed through the end of its useful range, so the flight
|
|
state estimates are not as close. After that, as you're flying
|
|
purely on accelerometer data, there's no way to re-correct the
|
|
state, so the apogee estimates can be off by quite a bit.
|
|
|
|
In the worst cases we have seen, the baro sensor data was
|
|
wildly incorrect above mach due to poor static port design,
|
|
leaving the state estimate of speed across the 30km boundary
|
|
way off and causing the apogee detection to happen far from
|
|
the correct time.
|
|
|
|
The good news is that correctly determining apogee is not
|
|
really all that important at high altitudes; there's so little
|
|
density that a drogue will have almost no drag anyways. Data
|
|
from customer flights shows a very parabolic path down to
|
|
about 50-60k feet, even with a recovery system deployed.
|
|
|
|
So, what we recommend is to set up two apogee plans:
|
|
|
|
1. Use the built-in apogee detection, but add a
|
|
significant delay (as much as 30 seconds). This
|
|
will probably fire near enough to apogee to not
|
|
have a significant impact on the maximum height
|
|
achieved.
|
|
|
|
2. Add a back-up apogee which fires after apogee
|
|
*when the height is below about 20-25km*. This
|
|
way, if the flight isn't nominal, and the sustainer
|
|
ends up reaching apogee in dense air, you aren't
|
|
hoping the chutes come out before it gets going
|
|
too fast. And, you get a second pyro channel firing
|
|
at that altitude even if it reached a higher
|
|
altitude before.
|
|
|
|
You can wire these two pyro channels to the same pyro device;
|
|
you just need to make sure they're wired + to + and - to -
|
|
(the manual shows which screw terminals are which).
|
|
|
|
The bottom line is that flights to altitudes modestly above
|
|
the range of the baro sensor with Altus Metrum products can
|
|
be accomplished safely, but flying "way high" (like 300k')
|
|
demands a deployment mechanism which doesn't solely rely on
|
|
altimeters (like ours) which are designed for modest altitude
|
|
rocketry. Flights to those altitudes also probably need
|
|
active stabilization to make sure they follow the prescribed
|
|
trajectory and stay inside their waiver.
|