diff options
Diffstat (limited to 'doc')
| -rw-r--r-- | doc/telemetry.xsl | 499 | 
1 files changed, 459 insertions, 40 deletions
| diff --git a/doc/telemetry.xsl b/doc/telemetry.xsl index e4101507..2e0b3ea1 100644 --- a/doc/telemetry.xsl +++ b/doc/telemetry.xsl @@ -110,7 +110,7 @@        </para>      </section>      <section> -      <title>Sensor Data</title> +      <title>TeleMetrum v1.x, TeleMini and TeleNano Sensor Data</title>        <informaltable frame='none' label='' tocentry='0'>  	<tgroup cols='2' align='center' colsep='1' rowsep='1'>  	  <colspec align='center' colwidth='*' colname='Offset'/> @@ -124,7 +124,7 @@  	  <tbody>  	    <row>  	      <entry>0x01</entry> -	      <entry>TeleMetrum Sensor Data</entry> +	      <entry>TeleMetrum v1.x Sensor Data</entry>  	    </row>  	    <row>  	      <entry>0x02</entry> @@ -138,7 +138,7 @@  	</tgroup>        </informaltable>        <para> -	TeleMetrum, TeleMini and TeleNano share this same packet +	TeleMetrum v1.x, TeleMini and TeleNano share this same packet  	format for sensor data. Each uses a distinct packet type so  	that the receiver knows which data values are valid and which  	are undefined. @@ -214,6 +214,316 @@        </table>      </section>      <section> +      <title>TeleMega Sensor  Data</title> +      <informaltable frame='none' label='' tocentry='0'> +	<tgroup cols='2' align='center' colsep='1' rowsep='1'> +	  <colspec align='center' colwidth='*' colname='Offset'/> +	  <colspec align='left' colwidth='3*' colname='Description'/> +	  <thead> +	    <row> +	      <entry>Type</entry> +	      <entry>Description</entry> +	    </row> +	  </thead> +	  <tbody> +	    <row> +	      <entry>0x08</entry> +	      <entry>TeleMega IMU Sensor Data</entry> +	    </row> +	    <row> +	      <entry>0x09</entry> +	      <entry>TeleMega Kalman and Voltage Data</entry> +	    </row> +	  </tbody> +	</tgroup> +      </informaltable> +      <para> +	TeleMega has a lot of sensors, and so it splits the sensor +	data into two packets. The raw IMU data are sent more often; +	the voltage values don't change very fast, and the Kalman +	values can be reconstructed from the IMU data. +      </para> +      <para> +	IMU Sensor Data packets are transmitted once per second on the +	ground, 10 times per second during ascent and once per second +	during descent and landing +      </para> +      <para> +	Kalman and Voltage Data packets are transmitted once per second on the +	ground, 5 times per second during ascent and once per second +	during descent and landing +      </para> +      <para> +	The high-g accelerometer is reported separately from the data +	for the 9-axis IMU (accel/gyro/mag). The 9-axis IMU is mounted +	so that the X axis is "across" the board (along the short +	axis0, the Y axis is "along" the board (along the long axis, +	with the high-g accelerometer) and the Z axis is "through" the +	board (perpendicular to the board). Rotation measurements are +	around the respective axis, so Y rotation measures the spin +	rate of the rocket while X and Z rotation measure the tilt +	rate. +      </para> +      <para> +	The overall tilt angle of the rocket is computed by first +	measuring the orientation of the rocket on the pad using the 3 +	axis accelerometer, and then integrating the overall tilt rate +	from the 3 axis gyroscope to compute the total orientation +	change of the airframe since liftoff. +      </para> +      <table frame='all'> +	<title>TeleMega IMU Sensor Packet Contents</title> +	<tgroup cols='4' align='center' colsep='1' rowsep='1'> +	  <colspec align='center' colwidth='*' colname='Offset'/> +	  <colspec align='center' colwidth='3*' colname='Data Type'/> +	  <colspec align='left' colwidth='3*' colname='Name'/> +	  <colspec align='left' colwidth='9*' colname='Description'/> +	  <thead> +	    <row> +	      <entry align='center'>Offset</entry> +	      <entry align='center'>Data Type</entry> +	      <entry align='center'>Name</entry> +	      <entry align='center'>Description</entry> +	    </row> +	  </thead> +	  <tbody> +	    <row> +	      <entry>5</entry><entry>uint8_t</entry><entry>orient</entry><entry>Angle from vertical in degrees</entry> +	    </row> +	    <row> +	      <entry>6</entry><entry>int16_t</entry><entry>accel</entry><entry>High G accelerometer</entry> +	    </row> +	    <row> +	      <entry>8</entry><entry>int32_t</entry><entry>pres</entry><entry>pressure (Pa * 10)</entry> +	    </row> +	    <row> +	      <entry>12</entry><entry>int16_t</entry><entry>temp</entry><entry>temperature (°C * 100)</entry> +	    </row> +	    <row> +	      <entry>14</entry><entry>int16_t</entry><entry>accel_x</entry><entry>X axis acceleration (across)</entry> +	    </row> +	    <row> +	      <entry>16</entry><entry>int16_t</entry><entry>accel_y</entry><entry>Y axis acceleration (along)</entry> +	    </row> +	    <row> +	      <entry>18</entry><entry>int16_t</entry><entry>accel_z</entry><entry>Z axis acceleration (through)</entry> +	    </row> +	    <row> +	      <entry>20</entry><entry>int16_t</entry><entry>gyro_x</entry><entry>X axis rotation (across)</entry> +	    </row> +	    <row> +	      <entry>22</entry><entry>int16_t</entry><entry>gyro_y</entry><entry>Y axis rotation (along)</entry> +	    </row> +	    <row> +	      <entry>24</entry><entry>int16_t</entry><entry>gyro_z</entry><entry>Z axis rotation (through)</entry> +	    </row> +	    <row> +	      <entry>26</entry><entry>int16_t</entry><entry>mag_x</entry><entry>X field strength (across)</entry> +	    </row> +	    <row> +	      <entry>28</entry><entry>int16_t</entry><entry>mag_y</entry><entry>Y field strength (along)</entry> +	    </row> +	    <row> +	      <entry>30</entry><entry>int16_t</entry><entry>mag_z</entry><entry>Z field strength (through)</entry> +	    </row> +	    <row> +	      <entry>32</entry> +	    </row> +	  </tbody> +	</tgroup> +      </table> +      <table frame='all'> +	<title>TeleMega Kalman and Voltage Data Packet Contents</title> +	<tgroup cols='4' align='center' colsep='1' rowsep='1'> +	  <colspec align='center' colwidth='*' colname='Offset'/> +	  <colspec align='center' colwidth='3*' colname='Data Type'/> +	  <colspec align='left' colwidth='3*' colname='Name'/> +	  <colspec align='left' colwidth='9*' colname='Description'/> +	  <thead> +	    <row> +	      <entry align='center'>Offset</entry> +	      <entry align='center'>Data Type</entry> +	      <entry align='center'>Name</entry> +	      <entry align='center'>Description</entry> +	    </row> +	  </thead> +	  <tbody> +	    <row> +	      <entry>5</entry><entry>uint8_t</entry><entry>state</entry><entry>Flight state</entry> +	    </row> +	    <row> +	      <entry>6</entry><entry>int16_t</entry><entry>v_batt</entry><entry>battery voltage</entry> +	    </row> +	    <row> +	      <entry>8</entry><entry>int16_t</entry><entry>v_pyro</entry><entry>pyro battery voltage</entry> +	    </row> +	    <row> +	      <entry>10</entry><entry>int8_t[6]</entry><entry>sense</entry><entry>pyro continuity sense</entry> +	    </row> +	    <row> +	      <entry>16</entry><entry>int32_t</entry><entry>ground_pres</entry><entry>Average barometer reading on ground</entry> +	    </row> +	    <row> +	      <entry>20</entry><entry>int16_t</entry><entry>ground_accel</entry><entry>Average accelerometer reading on ground</entry> +	    </row> +	    <row> +	      <entry>22</entry><entry>int16_t</entry><entry>accel_plus_g</entry><entry>Accel calibration at +1g</entry> +	    </row> +	    <row> +	      <entry>24</entry><entry>int16_t</entry><entry>accel_minus_g</entry><entry>Accel calibration at -1g</entry> +	    </row> +	    <row> +	      <entry>26</entry><entry>int16_t</entry><entry>acceleration</entry><entry>m/s² * 16</entry> +	    </row> +	    <row> +	      <entry>28</entry><entry>int16_t</entry><entry>speed</entry><entry>m/s * 16</entry> +	    </row> +	    <row> +	      <entry>30</entry><entry>int16_t</entry><entry>height</entry><entry>m</entry> +	    </row> +	    <row> +	      <entry>32</entry> +	    </row> +	  </tbody> +	</tgroup> +      </table> +    </section> +    <section> +      <title>TeleMetrum v2 Sensor  Data</title> +      <informaltable frame='none' label='' tocentry='0'> +	<tgroup cols='2' align='center' colsep='1' rowsep='1'> +	  <colspec align='center' colwidth='*' colname='Offset'/> +	  <colspec align='left' colwidth='3*' colname='Description'/> +	  <thead> +	    <row> +	      <entry>Type</entry> +	      <entry>Description</entry> +	    </row> +	  </thead> +	  <tbody> +	    <row> +	      <entry>0x0A</entry> +	      <entry>TeleMetrum v2 Sensor Data</entry> +	    </row> +	    <row> +	      <entry>0x0B</entry> +	      <entry>TeleMetrum v2 Calibration Data</entry> +	    </row> +	  </tbody> +	</tgroup> +      </informaltable> +      <para> +	TeleMetrum v2 has higher resolution barometric data than +	TeleMetrum v1, and so the constant calibration data is +	split out into a separate packet. +      </para> +      <para> +	TeleMetrum v2 Sensor Data packets are transmitted once per second on the +	ground, 10 times per second during ascent and once per second +	during descent and landing +      </para> +      <para> +	TeleMetrum v2 Calibration Data packets are always transmitted once per second. +      </para> +      <table frame='all'> +	<title>TeleMetrum v2 Sensor Packet Contents</title> +	<tgroup cols='4' align='center' colsep='1' rowsep='1'> +	  <colspec align='center' colwidth='*' colname='Offset'/> +	  <colspec align='center' colwidth='3*' colname='Data Type'/> +	  <colspec align='left' colwidth='3*' colname='Name'/> +	  <colspec align='left' colwidth='9*' colname='Description'/> +	  <thead> +	    <row> +	      <entry align='center'>Offset</entry> +	      <entry align='center'>Data Type</entry> +	      <entry align='center'>Name</entry> +	      <entry align='center'>Description</entry> +	    </row> +	  </thead> +	  <tbody> +	    <row> +	      <entry>5</entry><entry>uint8_t</entry><entry>state</entry><entry>Flight state</entry> +	    </row> +	    <row> +	      <entry>6</entry><entry>int16_t</entry><entry>accel</entry><entry>accelerometer</entry> +	    </row> +	    <row> +	      <entry>8</entry><entry>int32_t</entry><entry>pres</entry><entry>pressure sensor (Pa * 10)</entry> +	    </row> +	    <row> +	      <entry>12</entry><entry>int16_t</entry><entry>temp</entry><entry>temperature sensor (°C * 100)</entry> +	    </row> + +	    <row> +	      <entry>14</entry><entry>int16_t</entry><entry>acceleration</entry><entry>m/s² * 16</entry> +	    </row> +	    <row> +	      <entry>16</entry><entry>int16_t</entry><entry>speed</entry><entry>m/s * 16</entry> +	    </row> +	    <row> +	      <entry>18</entry><entry>int16_t</entry><entry>height</entry><entry>m</entry> +	    </row> + +	    <row> +	      <entry>20</entry><entry>int16_t</entry><entry>v_batt</entry><entry>battery voltage</entry> +	    </row> +	    <row> +	      <entry>22</entry><entry>int16_t</entry><entry>sense_d</entry><entry>drogue continuity sense</entry> +	    </row> +	    <row> +	      <entry>24</entry><entry>int16_t</entry><entry>sense_m</entry><entry>main continuity sense</entry> +	    </row> +	    <row> +	      <entry>26</entry><entry>pad[6]</entry><entry>pad bytes</entry><entry></entry> +	    </row> +	    <row> +	      <entry>32</entry> +	    </row> +	  </tbody> +	</tgroup> +      </table> +      <table frame='all'> +	<title>TeleMetrum v2 Calibration Data Packet Contents</title> +	<tgroup cols='4' align='center' colsep='1' rowsep='1'> +	  <colspec align='center' colwidth='*' colname='Offset'/> +	  <colspec align='center' colwidth='3*' colname='Data Type'/> +	  <colspec align='left' colwidth='3*' colname='Name'/> +	  <colspec align='left' colwidth='9*' colname='Description'/> +	  <thead> +	    <row> +	      <entry align='center'>Offset</entry> +	      <entry align='center'>Data Type</entry> +	      <entry align='center'>Name</entry> +	      <entry align='center'>Description</entry> +	    </row> +	  </thead> +	  <tbody> +	    <row> +	      <entry>5</entry><entry>pad[3]</entry><entry>pad bytes</entry><entry></entry> +	    </row> +	    <row> +	      <entry>8</entry><entry>int32_t</entry><entry>ground_pres</entry><entry>Average barometer reading on ground</entry> +	    </row> +	    <row> +	      <entry>12</entry><entry>int16_t</entry><entry>ground_accel</entry><entry>Average accelerometer reading on ground</entry> +	    </row> +	    <row> +	      <entry>14</entry><entry>int16_t</entry><entry>accel_plus_g</entry><entry>Accel calibration at +1g</entry> +	    </row> +	    <row> +	      <entry>16</entry><entry>int16_t</entry><entry>accel_minus_g</entry><entry>Accel calibration at -1g</entry> +	    </row> +	    <row> +	      <entry>18</entry><entry>pad[14]</entry><entry>pad bytes</entry><entry></entry> +	    </row> +	    <row> +	      <entry>32</entry> +	    </row> +	  </tbody> +	</tgroup> +      </table> +    </section> +    <section>        <title>Configuration Data</title>        <informaltable frame='none' label='' tocentry='0'>  	<tgroup cols='2' align='center' colsep='1' rowsep='1'> @@ -315,7 +625,7 @@        </informaltable>        <para>  	This packet provides all of the information available from the -	Venus SkyTraq GPS receiver—position, time, speed and precision +	GPS receiver—position, time, speed and precision  	estimates.         </para>        <para> @@ -604,62 +914,169 @@  	</tgroup>        </table>      </section> +    <section> +      <title>Companion Data Data</title> +      <informaltable frame='none' label='' tocentry='0'> +	<tgroup cols='2' align='center' colsep='1' rowsep='1'> +	  <colspec align='center' colwidth='*' colname='Offset'/> +	  <colspec align='left' colwidth='3*' colname='Description'/> +	  <thead> +	    <row> +	      <entry>Type</entry> +	      <entry>Description</entry> +	    </row> +	  </thead> +	  <tbody> +	    <row> +	      <entry>0x07</entry> +	      <entry>Companion Data Data</entry> +	    </row> +	  </tbody> +	</tgroup> +      </informaltable> +      <para> +	When a companion board is attached to TeleMega or TeleMetrum, +	it can provide telemetry data to be included in the +	downlink. The companion board can provide up to 12 16-bit data +	values. +      </para> +      <para> +	The companion board itself specifies the transmission rate. On +	the ground and during descent, that rate is limited to one +	packet per second. During ascent, that rate is limited to 10 +	packets per second. +      </para> +      <table frame='all'> +	<title>Companion Data Contents</title> +	<tgroup cols='4' align='center' colsep='1' rowsep='1'> +	  <colspec align='right' colwidth='*' colname='Offset'/> +	  <colspec align='center' colwidth='3*' colname='Data Type'/> +	  <colspec align='left' colwidth='3*' colname='Name'/> +	  <colspec align='left' colwidth='9*' colname='Description'/> +	  <thead> +	    <row> +	      <entry align='center'>Offset</entry> +	      <entry align='center'>Data Type</entry> +	      <entry align='center'>Name</entry> +	      <entry align='center'>Description</entry> +	    </row> +	  </thead> +	  <tbody> +	    <row> +	      <entry>5</entry><entry>uint8_t</entry><entry>board_id</entry> +	      <entry>Type of companion board attached</entry> +	    </row> +	    <row> +	      <entry>6</entry><entry>uint8_t</entry><entry>update_period</entry> +	      <entry>How often telemetry is sent, in 1/100ths of a second</entry> +	    </row> +	    <row> +	      <entry>7</entry><entry>uint8_t</entry><entry>channels</entry> +	      <entry>Number of data channels supplied</entry> +	    </row> +	    <row> +	      <entry>8</entry><entry>uint16_t[12]</entry><entry>companion_data</entry> +	      <entry>Up to 12 channels of 16-bit companion data</entry> +	    </row> +	    <row> +	      <entry>32</entry> +	    </row> +	  </tbody> +	</tgroup> +      </table> +    </section>    </section>    <section>      <title>Data Transmission</title>      <para> -      Altus Metrum devices use the Texas Instruments CC1111 -      microcontroller which includes an integrated sub-GHz digital -      transceiver. This transceiver is used to both transmit and -      receive the telemetry packets. This section discusses what -      modulation scheme is used and how this device is configured. +      Altus Metrum devices use Texas Instruments sub-GHz digital radio +      products. Ground stations use parts with HW FEC while some +      flight computers perform FEC in software. TeleGPS is +      transmit-only.      </para> +    <table> +      <title>Altus Metrum Radio Parts</title> +      <tgroup cols='3'> +	<colspec align="center" colwidth="*" colname="Part Number"/> +	<colspec align="center" colwidth="*" colname="Description"/> +	<colspec align="left" colwidth="*" colname="Used in"/> +	<thead> +	  <row> +	    <entry align="center">Part Number</entry> +	    <entry align="center">Description</entry> +	    <entry align="center">Used in</entry> +	  </row> +	</thead> +	<tbody> +	  <row> +	    <entry>CC1111</entry><entry>10mW transceiver with integrated SoC</entry> +	    <entry>TeleDongle v0.2, TeleBT v1.0, TeleMetrum v1.x, TeleMini</entry> +	  </row> +	  <row> +	    <entry>CC1120</entry><entry>35mW transceiver with SW FEC</entry> +	    <entry>TeleMetrum v2, TeleMega</entry> +	  </row> +	  <row> +	    <entry>CC1200</entry><entry>35mW transceiver with HW FEC</entry> +	    <entry>TeleDongle v3.0, TeleBT v3.0</entry> +	  </row> +	  <row> +	    <entry>CC115L</entry><entry>14mW transmitter with SW FEC</entry> +	    <entry>TeleGPS</entry> +	  </row> +	</tbody> +      </tgroup> +    </table>      <section>        <title>Modulation Scheme</title>        <para>  	Texas Instruments provides a tool for computing modulation  	parameters given a desired modulation format and basic bit -	rate. For AltOS, the basic bit rate was specified as 38 kBaud, -	resulting in the following signal parmeters: +	rate. + +	While we might like to use something with better low-signal +	performance like BPSK, the radios we use don't support that, +	but do support Gaussian frequency shift keying (GFSK). Regular +	frequency shift keying (FSK) encodes the signal by switching +	the carrier between two frequencies. The Gaussian version is +	essentially the same, but the shift between frequencies gently +	follows a gaussian curve, rather than switching +	immediately. This tames the bandwidth of the signal without +	affecting the ability to transmit data. + +	For AltOS, there are three available bit rates, 38.4kBaud, +	9.6kBaud and 2.4kBaud resulting in the following signal +	parmeters: +        </para>        <table>  	<title>Modulation Scheme</title>  	<tgroup cols='3'> -	  <colspec align="center" colwidth="*" colname="parameter"/> -	  <colspec align="center" colwidth="*" colname="value"/> -	  <colspec align="center" colwidth="*" colname="description"/> +	  <colspec align="center" colwidth="*" colname="rate"/> +	  <colspec align="center" colwidth="*" colname="deviation"/> +	  <colspec align="center" colwidth="*" colname="bandwidth"/>  	  <thead>  	    <row> -	      <entry align='center'>Parameter</entry> -	      <entry align='center'>Value</entry> -	      <entry align='center'>Description</entry> +	      <entry align='center'>Rate</entry> +	      <entry align='center'>Deviation</entry> +	      <entry align='center'>Receiver Bandwidth</entry>  	    </row>  	  </thead>  	  <tbody>  	    <row> -	      <entry>Modulation</entry> -	      <entry>GFSK</entry> -	      <entry>Gaussian Frequency Shift Keying</entry> -	    </row> -	    <row> -	      <entry>Deviation</entry> -	      <entry>20.507812 kHz</entry> -	      <entry>Frequency modulation</entry> -	    </row> -	    <row> -	      <entry>Data rate</entry> -	      <entry>38.360596 kBaud</entry> -	      <entry>Raw bit rate</entry> +	      <entry>38.4kBaud</entry> +	      <entry>20.5kHz</entry> +	      <entry>100kHz</entry>  	    </row>  	    <row> -	      <entry>RX Filter Bandwidth</entry> -	      <entry>93.75 kHz</entry> -	      <entry>Receiver Band pass filter bandwidth</entry> +	      <entry>9.6kBaud</entry> +	      <entry>5.125kHz</entry> +	      <entry>25kHz</entry>  	    </row>  	    <row> -	      <entry>IF Frequency</entry> -	      <entry>140.62 kHz</entry> -	      <entry>Receiver intermediate frequency</entry> +	      <entry>2.4kBaud</entry> +	      <entry>1.5kHz</entry> +	      <entry>5kHz</entry>  	    </row>  	  </tbody>  	</tgroup> @@ -668,10 +1085,12 @@      <section>        <title>Error Correction</title>        <para> -	The cc1111 provides forward error correction in hardware, -	which AltOS uses to improve reception of weak signals. The -	overall effect of this is to halve the available bandwidth for -	data from 38 kBaud to 19 kBaud. +	The cc1111 and cc1200 provide forward error correction in +	hardware; on the cc1120 and cc115l that's done in +	software. AltOS uses this to improve reception of weak +	signals. As it's a rate 1/2 encoding, each bit of data takes +	two bits when transmitted, so the effective data rate is half +	of the raw transmitted bit rate.        </para>        <table>  	<title>Error Correction</title> | 
