Software » History » Version 6

PRIETO, Matías, 03/22/2015 03:46 AM

1 1 PRIETO, Matías
h1. Software Design
2 1 PRIETO, Matías
3 2 PRIETO, Matías
{{>toc}}
4 2 PRIETO, Matías
5 1 PRIETO, Matías
System behavior is controlled by the MCU integrated in the motherboard, which communicates with other subsystems through the Cubesat Kit Bus. The MCU is programmed in C language based on the RTOS Salvos. Therefore, the stack implementation is programmed under these constraints. 
6 1 PRIETO, Matías
7 3 PRIETO, Matías
h2. Communication stack
8 3 PRIETO, Matías
9 1 PRIETO, Matías
Figure below presents the final implemented communication stack of the system as part of the communication chain design.
10 1 PRIETO, Matías
11 1 PRIETO, Matías
p=. !{width:40%}cubesat_stack.png!
12 1 PRIETO, Matías
_Communication stack._
13 1 PRIETO, Matías
14 1 PRIETO, Matías
15 1 PRIETO, Matías
16 1 PRIETO, Matías
h2. Concepts
17 1 PRIETO, Matías
18 1 PRIETO, Matías
h3. NMEA sentences
19 1 PRIETO, Matías
20 3 PRIETO, Matías
The National Marine Electronics Association (NMEA) has defined a standard intended to allow marine electronics to send navigation information to computers and to other marine equipment. Most GPS receivers communicate with other devices using this specification. And thus, most computer programs and applications which provide real time position information understand and expect data to be under NMEA specifications.
21 3 PRIETO, Matías
22 3 PRIETO, Matías
NMEA0183 is provided as a series of comma-delimited ASCII strings, each preceded with an identifying header. This set of strings are usually sent through a serial bus, which lets any microcontroller with a USART port extract data from and communicate to a GPS receiver module.
23 3 PRIETO, Matías
24 3 PRIETO, Matías
Each line of data is a sentence that is totally self contained and independent from other sentences. Each sentence begins with a '$' and ends with a carriage return/line feed sequence and can be no longer than 80 characters.
25 3 PRIETO, Matías
26 3 PRIETO, Matías
Inside a sentence, data fields are separated by commas. There is a provision for a checksum at the end of each sentence which may be used to verify the data integrity. The checksum field consists of a '*' and two hex digits representing an 8 bit exclusive OR of all characters between, but not including, the '$' and '*'.
27 3 PRIETO, Matías
28 3 PRIETO, Matías
There are standard sentences for each device category. For instance, for GPS receivers the prefix is GP.
29 3 PRIETO, Matías
Some standardized "sentences" from GPS devices are:
30 6 PRIETO, Matías
31 6 PRIETO, Matías
$GPGGA,170834,4124.8963,N,08151.6838,W,1,05,1.5,280.2,M,-34.0,M,,,<notextile>*42;75
32 6 PRIETO, Matías
33 6 PRIETO, Matías
$GPGSA,A,3,19,28,14,18,27,22,31,39,,,,,1.7,1.0,1.3<notextile>*34
34 6 PRIETO, Matías
35 6 PRIETO, Matías
$GPGSV,3,2,11,14,25,170,00,16,57,208,39,18,67,296,40,19,40,246,00<notextile>*74
36 6 PRIETO, Matías
37 6 PRIETO, Matías
$GPRMC,220516,A,5133.82,N,00042.24,W,173.8,231.8,130694,004.2,W<notextile>*70
38 3 PRIETO, Matías
39 3 PRIETO, Matías
The most important NMEA sentences include the GGA which provides the current Fix data, the RMC which provides the minimum gps sentences information, and the GSA which provides the Satellite status data.
40 3 PRIETO, Matías
41 3 PRIETO, Matías
h4. Details of a GGA NMEA sentence
42 3 PRIETO, Matías
43 3 PRIETO, Matías
GGA sentences carry essential fix data which provide 3D location and accuracy data.
44 3 PRIETO, Matías
45 3 PRIETO, Matías
_$GPGGA,123519,4807.038,N,01131.000,E,1,08,0.9,545.4,M,46.9,M,,*47_
46 3 PRIETO, Matías
47 3 PRIETO, Matías
|_.Field value				|_.Data							|
48 3 PRIETO, Matías
| GGA 					| Global Positioning System Fix Data			|
49 3 PRIETO, Matías
| 123519				| Fix taken at 12:35:19 UTC				|
50 3 PRIETO, Matías
| 4807.038,N				| Latitude 48 deg 07.038' N				|
51 3 PRIETO, Matías
| 01131.000,E				| Longitude 11 deg 31.000' E				|
52 3 PRIETO, Matías
| 1					| Fix quality:						
53 3 PRIETO, Matías
					 0 = invalid						
54 3 PRIETO, Matías
					 1 = GPS fix (SPS)					
55 3 PRIETO, Matías
					 2 = DGPS fix						
56 3 PRIETO, Matías
					 3 = PPS fix						
57 3 PRIETO, Matías
					 4 = Real Time Kinematic				
58 3 PRIETO, Matías
					 5 = Float RTK						
59 3 PRIETO, Matías
					 6 = estimated (dead reckoning) (2.3 feature)		
60 3 PRIETO, Matías
					 7 = Manual input mode					
61 3 PRIETO, Matías
					 8 = Simulation mode					|
62 3 PRIETO, Matías
| 08					| Number of satellites being tracked			|
63 3 PRIETO, Matías
| 0.9					| Horizontal dilution of position			|
64 3 PRIETO, Matías
| 545.4,M				| Altitude, Meters, above mean sea level		|
65 3 PRIETO, Matías
| 46.9,M				| Height of geoid (mean sea level) above WGS84	ellipsoid |
66 3 PRIETO, Matías
| (empty field)				| time in seconds since last DGPS update		|
67 3 PRIETO, Matías
| (empty field)				| DGPS station ID number				|
68 3 PRIETO, Matías
| *47					| the checksum data, always begins with *		|
69 3 PRIETO, Matías
70 3 PRIETO, Matías
71 3 PRIETO, Matías
72 1 PRIETO, Matías
h3. Manchester encoding
73 1 PRIETO, Matías
74 3 PRIETO, Matías
In telecommunication, Manchester coding assigns for each data bit one transition and both states last the same time. Since there is at least one transition per bit, this allows the signal to be self-clocking, and the receiver to synchronize itself with the sender clock. The main drawback is that Manchester encoding requires the double of the bandwidth compared to a simple unipolar coding scheme.
75 3 PRIETO, Matías
76 3 PRIETO, Matías
There are two opposing conventions for the representations of data. The first of these was first published by G. E. Thomas and is followed by numerous authors. It specifies that for a 0 bit the signal levels will be low-high, with a low level in the first half of the bit period, and a high level in the second half. For a 1 bit the signal levels will be high-low.
77 3 PRIETO, Matías
78 3 PRIETO, Matías
The second convention is followed by numerous authors as well as by lower speed versions of IEEE 802.3 (Ethernet) standards. It states that a logic 0 is represented by a high-low signal sequence and a logic 1 is represented by a low-high signal sequence.
79 3 PRIETO, Matías
80 3 PRIETO, Matías
Let $x(t)$ be the unmodulated binary signal, $y(t)$ the modulated binary signal and $ck(t)$ the clock signal. Where the clock signal is a square wave signal with duty cycle of 50%. If $R_b$ is the bitrate for $x(t)$, then the bit period is $T_b = 1/R_b$.
81 3 PRIETO, Matías
82 3 PRIETO, Matías
Thus, Manchester (Thomas convention) defines:
83 3 PRIETO, Matías
$$y(t) = x(t) \textbf{ xor } (\textbf{ not } ck(t))$$
84 3 PRIETO, Matías
85 3 PRIETO, Matías
In the same way, Manchester (IEEE convention) defines:
86 3 PRIETO, Matías
$$y(t) = x(t) \textbf{ xor } ck(t)$$
87 3 PRIETO, Matías
88 3 PRIETO, Matías
For Thomas convention, this means that:
89 3 PRIETO, Matías
* If $x(t) = 0$, for $t_0 < t < t_0 + T_b$, then
90 3 PRIETO, Matías
** $y(t) = 0$ for $t_0 < t < t_0 + T_b/2$
91 3 PRIETO, Matías
** $y(t) = 1$ for $t_0 + T_b/2 < t < t_0 + T_b$
92 3 PRIETO, Matías
* If $x(t) = 1$, for $t_0 < t < t_0 + T_b$, then
93 3 PRIETO, Matías
** $y(t) = 1$ for $t_0 < t < t_0 + T_b/2$
94 3 PRIETO, Matías
** $y(t) = 0$ for $t_0 + T_b/2 < t < t_0 + T_b$
95 1 PRIETO, Matías
96 1 PRIETO, Matías
h2. Overall program description
97 1 PRIETO, Matías
98 1 PRIETO, Matías
The Salvo OS is a multitask operative system, based on the definition of multiple tasks. Each task is implemented inside an infinite loop.
99 1 PRIETO, Matías
100 1 PRIETO, Matías
The system main program is composed by two tasks. One in charge of L2+L1, controlling the physical layer and the other one in charge of acquiring plus filtering data from the GPS module, and formatting it (L4). In addition, a specific function is in charge of mapping the native ASCII messages coming from L4, into Baudot alphabet (L3) to be sent to L2+L1.
101 1 PRIETO, Matías
102 1 PRIETO, Matías
h3. Tasks, functions and main data structures description
103 1 PRIETO, Matías
104 1 PRIETO, Matías
Task and functions definition:
105 1 PRIETO, Matías
* _task_gps_update()_
106 1 PRIETO, Matías
* _task_rtty_phy()_
107 1 PRIETO, Matías
* _baud_coding()_
108 1 PRIETO, Matías
* _baudTranslate()_
109 1 PRIETO, Matías
* _inc_pointer()_
110 1 PRIETO, Matías
111 1 PRIETO, Matías
Data buffers definition:
112 1 PRIETO, Matías
* _asciiCharBuf[RTTY_BUFFER_SIZE]_
113 1 PRIETO, Matías
* _rtty_buffer[2*RTTY_BUFFER_SIZE]_
114 1 PRIETO, Matías
115 1 PRIETO, Matías
Main system flags:
116 1 PRIETO, Matías
* _rts_flag_
117 1 PRIETO, Matías
* _cod_flag_
118 1 PRIETO, Matías
119 1 PRIETO, Matías
120 1 PRIETO, Matías
h3. Program workflow
121 1 PRIETO, Matías
122 1 PRIETO, Matías
Data coming from GPS is retrieved from the USART CSK_0 register. Since data is continuously sent character by character at a rate of 1 NMEA sentence per second, the _task_gps_update()_ have to filter the incoming characters waiting the right sequence which represents the start of a valid NMEA sentence. Then, characters must be stored in a buffer up to receive the end of sentence indicator character. The string stored in the ASCII buffer (_asciiCharBuf_) is the message that has be then sent to lower layers, representing the information held by the beacon. Optionally, an additional fixed messaged can be added to this buffer.
123 1 PRIETO, Matías
124 1 PRIETO, Matías
Once beacon message is defined, the task call the function _baud_coding()_, which maps the stored chars in the ASCII buffer to the Baudot alphabet. Finally, the output (the message in Baudot format) is stored in another buffer (_rtty_buffer_). This function, is supported by the function _baudTranslate()_, which is called for each character to perform a search and translation of symbols using a look-up table.
125 1 PRIETO, Matías
Once data in the Baudot buffer is ready, a ready to send flag (_rts_flag_) is set to indicate the task which manage L2-L1 that there is data available ready to be sent.
126 1 PRIETO, Matías
127 1 PRIETO, Matías
_task_rtty_phy()_ is in charge of controlling lower layers and generate the output signal (at _IO.0_) which controls the 2-FSK transmitter. This task runs continuously and has the highest priority.
128 1 PRIETO, Matías
129 1 PRIETO, Matías
Since a clock is required to generate the output signal, the task uses the OS timer. This timer is set to one tick per millisecond, this is 1000 ticks per second. Since baudrate is 125, the bit period $T_b$ is 8 msec and the task uses 8 OS ticks per bit.
130 1 PRIETO, Matías
131 1 PRIETO, Matías
Each bit period $T_b$, the task performs an iteration and retrieves the bit to be sent at L3. Then it implements Manchester by setting the output signal (at _IO.0_) at 0 (or 1) during $T_b/2$ and then switching to 1 (or 0) during other $T_b/2$.