Saturday 14 October 2017

The TT7F6W Flight

Date: 2017-10-15
Time: 7:00 GMT (9:00 CEST)
Place: Roznov pod Radhostem, CZ
Live Tracking: https://tracker.habhub.org, https://aprs.fi and http://wsprnet.org

APRS
Callsign: OK7DMT-8
Frequency: Geofenced local APRS frequencies
Packet: Base-91 position and telemetry, Backlogged position and telemetry in Comment section
Example: !/5KyHS)='OJ5W 1F94!5MI,S(LWHC!+=7+;0c!'|!4!-<x+S1%!(!$|

WSPR
Callsign: OK7DMT
Frequency: 14.097000-14.097200 MHz (20m band)
Packet: standard WSPR message starting at the 4th, 14th, 24th, 34th, 44th and 54th minute
6-character locator WSPR message starting at the 6th, 16th, 26th, 36th, 46th and 56th minute
Example: "OK7DMT JN99 10" and "<OK7DMT> JN99bl 30"
Note: the POWER field is used to encode altitude (0-18km - standard message, 0-1000m within the kilometre - extended message)

Initial Prediction: 2017-10-14
Power Scheme
I didn't complicate things with any special power saving schemes based on solar or supercap voltages this time. Whenever the solar cells and supercapacitor provide enough power, the tracker will try to get positional fix from the GPS module and transmit this information via an APRS packet. It then spends about 60 seconds in Wait mode before trying again. An exception to this routine comes whenever the GPS module returns a timestamp signalling the 3rd minute in every 10 minute period (e.g. 0:03, 0:13, 0:23...). At that point the tracker switches on the Si5351 module and starts polling the GPS time until the start of the 4th minute to transmit the standard WSPR message which is immediately followed by the 6-digit locator WSPR message starting at the beginning of the 6th minute.
Tracker
I decided to put this tracker together only after I was in the midst of launching the original batch of five. It is sort of a scrap parts tracker since it's built around the very first TT7F board I made and have used in testing and developing the software. As such, individual parts of the board were repeatedly soldered and de-soldered which quite possibly contributed to some of the issues I encountered later. The major difference and motivation was Adafruit's Si5351 module added to the TT7F board which provides the 20m WSPR transmissions. I had fiddled with WSPR before, so I was already familiar with the basic functionality, protocol and had the major blocks of code written. Upon looking into the power options the Si5351 offered, I had to add MIC94070 power switch in between TT7F and the module to manually cut it off the power supply. Otherwise, it would constantly consume additional 14mA. The board is supplied by four serially wired 52x38mm solar cells which are connected directly to a 4.7F supercapactitor this time. The reason is I couldn't make the LTC3105 operate reliably. It would sometimes simply refuse to output the preset voltage despite sufficient insolation on the solar cells and thus fail to start the tracker. In the current setup the four cells produce about 2.35V open circuit voltage minus the drop (~0.4V) at 1N5817 Schottky diode which blocks the current flowing back to the cells. The short circuit current was measured to be 0.46A. I also encountered the same issue that most likely caused the failure of TT7F2. There were three cases of poorly made vias en route a trace which I had to replace with a wire connection. The boards were by DirtyPCBs. The addition of the 14MHz HF transmission required rethinking the antenna setup. Following the example of other HF floaters I decided on a 20m-band dipole (5.214m each element) made from 0.118mm magnet wire weighing 1.1g. Spaced about 5cm apart is once again a 2m-band dipole for the APRS transmissions. Stripes of Kapton tape were used for the spacing itself.
Mass: 21.0g
Software
ARM_SI5351.h
ARM_SI5351.c
ARM_WSPR.h
ARM_WSPR.c
The main function running this tracker can be found in ARM_TT7F6W.c on Github. There are no power saving modes this time. As long as the tracker has enough power it transmits both APRS packets and WSPR messages. Si5351 is basically just a clock generator and doesn't have any fancy power modes, nor modulation registers. The whole WSPR transmission is arranged by simply reprogramming the module's output frequency according to the current WSPR tone and timed by the MCU. The input to the WSPR encoder is a callsign and current latitude, longitude and altitude. All the functions to encode and transmit the WSPR messages are in the two libraries above. Since this Si5351 module is equipped only with a drifty XTAL (measured difference of 60Hz between 24°C room temperature and -16°C in a freezer), I embedded a couple of countermeasures to limit the effect. Aside from insulating the actual board, I switch the module on the moment the countdown to an even minute starts, so the part has been heating itself and its surroundings for several seconds ahead of the actual transmission. The second measure deals with the fact that the WSPR receiver bandwidth is only 200Hz wide. First, it alternates between two different frequencies within this band in case the temperature variation took one of them outside of the band. Second, it offsets the frequency by 50 or 100 Hz should the MCU temperature fall below -15°C or -35°C, respectively. This behaviour is illustrated in the caption above which shows the tracker put inside a freezer. The bits in APRS telemetry bitfield should signal the GPS in Airborne mode (Nav), the GPS having fix (Fix), finished WSPR transmission (Wsp), an error in UART GPS communication (Urt), an error in TWI Si5351 communication (Twi) and an error in SPI Si4060 (Spi) communication this time. Looking over the whole thing is a 16s watchdog.
Balloon
Similar to TT7F5, I opted for the tube/cylinder shaped balloon this time. The dimensions of the flat shape were 2.33m in length and 1.33m in width before stretching. TT7F5's performance also suggests that I still overestimate the volume of the envelopes resulting in the final float altitudes being below expectation. Throughout stretching, I kept gradually increasing the gauge pressure while observing the envelope all the way to 1600Pa at which point I thought it would be reasonable to stop due to the familiar weak spots in the material. The pressurizing took about 34 hours this time. Gamma was estimated to 1.51 with my standard measuring technique. However, as mentioned, the estimates have been quite off, so I leave them here for consistency reasons only. In reality, I am looking for about 12400m float altitude.
Expected Float Altitude: 13680m (12400m)
Expected Ascent Rate: 0.68m/s
Expected Superpressure: 1520Pa (at 17°C supertemperature)
Gas: Hydrogen
Free Lift: 7.0g
Launch
I managed to fill the balloon to 7.3g free lift the evening before the launch. As time of year progresses, I had to wait quite long for the sun rays to reach the garden and start the tracker this time. While I waited, the balloon was outside in shade. When it was finally time to launch, I found out the balloon wasn't capable of lifting the tracker. After a brief panic and contemplating cutting the envelope open and adding more hydrogen, I thought it was possible that the gas inside had simply cooled down too much with respect to the quickly rising air temperature, and I placed it in the sun to heat it up. After some 45 minutes, I remeasured the lift and found it to have recovered. The problem was that all this had taken so long that the surface winds had picked up and made it quite a challenge to launch the 13m apparatus in my particular surroundings. In the end in a brief moment of calm and with an ounce of luck, it just cleared the nearby forest and set off on its journey. I managed to receive the WSPR transmissions throughout the whole first day with my loop antenna inside the house. After three days of observing the tracker, a repeated pattern of the measured temperature rising in the morning, then dropping around the local noon only to rise again as the Sun descends suggests the solar cells significantly shade the rest of the tracker from the direct radiation. That negatively impacts the stability of the Si5351's transmissions making the mid day WSPR packets prone to drifting. The times and positions of the first and the last APRS packets of the day suggest the tracker comes alive with the Sun at around 3.5° above horizon and departs when it descends below 2.0°.

Data
APRSfi_TT7F6W.txt - collected raw packets.
WSPRNETorg_TT7F6W.txt - collected raw packets.
Python parser of APRS.fi raw packet format.
Python parser of WSPRNET.org raw packet format. Second parser with receivers included.
The positional and telemetry data extracted from received APRS packets and decoded backlogs:
(APRS black, WSPR yellow)