altos/micropeak: Increase boost detect to 30m
authorKeith Packard <keithp@keithp.com>
Mon, 14 Oct 2013 05:05:20 +0000 (22:05 -0700)
committerKeith Packard <keithp@keithp.com>
Mon, 14 Oct 2013 05:05:20 +0000 (22:05 -0700)
This meant increasing the data buffering as well so that we could
reliably capture the flight data back to the ground, even for slow
flights.

And, with the buffer extra large, we work backwards from the current
buffer location to find the last ground location rather than working
forwards from the first buffered location. This ensures that we don't
capture noise before boost and instead capture a nice flight curve instead.

Signed-off-by: Keith Packard <keithp@keithp.com>
src/core/ao_microflight.c
src/product/ao_micropeak.h

index 714bb90a946b6dd9cee6d4b99dc9a5765b8115e5..f680e4005c98a5cf9be432ed61509f79d1239863 100644 (file)
@@ -33,7 +33,7 @@ ao_microsample(void)
        ao_microkalman_correct();
 }
 
-#define NUM_PA_HIST    16
+#define NUM_PA_HIST    (GROUND_AVG)
 
 #define SKIP_PA_HIST(i,j)      (((i) + (j)) & (NUM_PA_HIST - 1))
 
@@ -60,11 +60,11 @@ ao_microflight(void)
        h = 0;
        for (;;) {
                time += SAMPLE_SLEEP;
-               if (sample_count == 0)
+               if ((sample_count & 0x1f) == 0)
                        ao_led_on(AO_LED_REPORT);
                ao_delay_until(time);
                ao_microsample();
-               if (sample_count == 0)
+               if ((sample_count & 0x1f) == 0)
                        ao_led_off(AO_LED_REPORT);
                pa_hist[h] = pa;
                h = SKIP_PA_HIST(h,1);
@@ -85,10 +85,10 @@ ao_microflight(void)
                }
        }
 
-       /* Go back and find the first sample a decent interval above the ground */
+       /* Go back and find the last sample close to the ground */
        pa_min = pa_ground - LAND_DETECT;
-       for (i = SKIP_PA_HIST(h,2); i != h; i = SKIP_PA_HIST(i,2)) {
-               if (pa_hist[i] < pa_min)
+       for (i = SKIP_PA_HIST(h,-2); i != SKIP_PA_HIST(h,2); i = SKIP_PA_HIST(i,-2)) {
+               if (pa_hist[i] >= pa_min)
                        break;
        }
 
index 3e3dec1527a5d804d13d77700002d6f69fd039ab..0cefca6f0ea3408319477ab6dca1d2c79670fa2e 100644 (file)
 
 #define SAMPLE_SLEEP           AO_MS_TO_TICKS(96)
 
-/* 16 sample, or about two seconds worth */
-#define GROUND_AVG_SHIFT       4
+/* 64 sample, or about six seconds worth */
+#define GROUND_AVG_SHIFT       6
 #define GROUND_AVG             (1 << GROUND_AVG_SHIFT)
 
 /* Pressure change (in Pa) to detect boost */
-#define BOOST_DETECT           120     /* 10m at sea level, 12m at 2000m */
+#define BOOST_DETECT           360     /* 30m at sea level, 36m at 2000m */
 
 /* Wait after power on before doing anything to give the user time to assemble the rocket */
 #define BOOST_DELAY            AO_SEC_TO_TICKS(60)