Probeklausur 6 - Lösungen

Zurück zu den Aufgaben · Formelsammlung

Alle Werte sind exakt durchgerechnet. Der rote Faden: MCK = 84 MHz (A1) -> f_s = 42 MHz / 952 = 44117,647 Hz (A2) -> alle weiteren Aufgaben. Wer mit gerundeten Zwischenwerten rechnet, driftet ab.


Aufgabe 1 - Taktbaum (10 P) [Kap. 2]

1.1 fPLL=12MHz13+11=1214=168 MHzf_{PLL} = 12\,\text{MHz} \cdot \dfrac{13 + 1}{1} = 12 \cdot 14 = \mathbf{168\ MHz}. MCK=168MHz2=84 MHzMCK = \dfrac{168\,\text{MHz}}{2} = \mathbf{84\ MHz}.

1.2 Der Kommilitone hat das "+1" im Zähler vergessen und mit 1213=156MHz12 \cdot 13 = 156\,\text{MHz} gerechnet, also 156/2=78MHz156/2 = 78\,\text{MHz}. Der PLLA multipliziert laut Datenblatt mit (MULA + 1), weil das Register den Wert 0 als "mal 1" interpretiert. Korrekt ist 1214=168MHz12 \cdot 14 = 168\,\text{MHz}, MCK=84MHzMCK = 84\,\text{MHz} (dies ist auch die reale MCK des Arduino Due).

Falle: Das fehlende +1 ist der klassische PLL-Fehler. Er würde jede folgende Aufgabe verfälschen.

Aufgabe 2 - Abtast-Timer und Quantisierungsfehler (16 P) [Kap. 5]

2.1 RC=round(fQuelle/44100)RC = \text{round}(f_{Quelle} / 44100), tatsächliche Rate =fQuelle/RC= f_{Quelle}/RC:

Quellef_QuelleRC (gerundet)tatsächliche f_sFehler
TCLK1 = MCK/242 MHz95242e6/952 = 44117,65 Hz+400 ppm
TCLK2 = MCK/810,5 MHz23810,5e6/238 = 44117,65 Hz+400 ppm
TCLK3 = MCK/322,625 MHz602,625e6/60 = 43750,00 Hz-7937 ppm
TCLK4 = MCK/1280,65625 MHz150,65625e6/15 = 43750,00 Hz-7937 ppm

2.2 TCLK1 und TCLK2 liefern denselben kleinsten Fehler von +400 ppm (+0,040 %); TCLK3/TCLK4 sind mit -0,79 % rund 20-mal schlechter. Man wählt daher TCLK1 (MCK/2, RC = 952) - das höhere RC bietet die feinste Zeitauflösung (TCLK2 wäre energetisch minimal günstiger, ist frequenzgleich).

2.3 Exakt wäre RC=42000000/44100=952,380RC = 42\,000\,000 / 44\,100 = 952{,}380\ldots - keine ganze Zahl. Da RC ganzzahlig sein muss, ist 44,1 kHz nicht exakt erreichbar. Es gilt

fs=42MHz952=42000000952=44117,647 Hz (exakt 42e6/952).f_s = \frac{42\,\text{MHz}}{952} = \frac{42\,000\,000}{952} = \mathbf{44117{,}647\ Hz} \ (\text{exakt } 42\text{e}6/952).

Falle: Wer RC = 952,38 stehen lässt oder auf 44,1 kHz "rundet", rechnet ab hier mit einer falschen Rate.

Aufgabe 3 - Aliasing mit realer Abtastrate (14 P) [Kap. 7]

Mit fs=44117,647Hzf_s = 44117{,}647\,\text{Hz}.

3.1 Nyquist =fs/2=22058,82 Hz= f_s/2 = \mathbf{22058{,}82\ Hz}.

3.2 Eine Linie über der Nyquist-Frequenz (aber unter fsf_s) faltet auf fsff_s - f:

LinieLageErgebnis
8 kHz< Nyquistkorrekt erfasst, kein Alias
19 kHz< Nyquist (knapp)korrekt erfasst, kein Alias
27 kHz> NyquistAlias =44117,6527000=17117,65 Hz= 44117{,}65 - 27000 = \mathbf{17117{,}65\ Hz}
40 kHz> NyquistAlias =44117,6540000=4117,65 Hz= 44117{,}65 - 40000 = \mathbf{4117{,}65\ Hz}

3.3 Ein Alias fällt genau dann ins Nutzband [0;20kHz][0; 20\,\text{kHz}], wenn fsf20kHzf_s - f \le 20\,\text{kHz}, also ffs20kHz=44117,6520000=24117,65 Hzf \ge f_s - 20\,\text{kHz} = 44117{,}65 - 20000 = \mathbf{24117{,}65\ Hz}. Der Filter muss also ab ca. 24,12 kHz wirksam dämpfen - nicht erst ab der Nyquist-Frequenz (22,06 kHz) und erst recht nicht erst ab fsf_s.

3.4 Die 27-kHz-Linie faltet auf 17117 Hz - mitten ins Nutzband und in die Nähe einer eventuell echten 17-kHz-Komponente. Das Alias ist dann von einem echten Signal nicht mehr unterscheidbar und nicht rückgängig zu machen. (Die 40-kHz-Linie stört bei 4,1 kHz ebenso, liegt aber isolierter.)

Falle: 19 kHz liegt trotz Nähe zur Bandgrenze noch unter Nyquist und ist damit sauber; gefährlich sind die scheinbar "hohen, egalen" 27 und 40 kHz.

Aufgabe 4 - ADC-Puffer und DMA (12 P) [Kap. 6]

4.1 n=round(fs10ms)=round(44117,6470,010)=round(441,18)=441n = \text{round}(f_s \cdot 10\,\text{ms}) = \text{round}(44117{,}647 \cdot 0{,}010) = \text{round}(441{,}18) = \mathbf{441} Werte.

4.2 12-Bit-Werte in 16-Bit-Worten = 2 Byte je Wert. Doppelpuffer (2 Halbpuffer): 24412Byte=1764 Byte2 \cdot 441 \cdot 2\,\text{Byte} = \mathbf{1764\ Byte}.

4.3 PDC-Zähler je Halbpuffer: US_RCR = 441. ENDRX feuert bei jedem vollen Halbpuffer: fENDRX=fs/n=44117,647/441=100,04 Hz100/sf_{ENDRX} = f_s / n = 44117{,}647 / 441 = \mathbf{100{,}04\ Hz} \approx 100/\text{s}.

4.4 Reale Dauer =n/fs=441/44117,647=9,996 ms= n / f_s = 441 / 44117{,}647 = \mathbf{9{,}996\ ms}. Nicht exakt 10 ms, weil nn von 441,18 auf 441 abgerundet wurde - die Rundung aus 4.1 verkürzt den Puffer minimal.

Hinweis: 12 Bit in 16 Bit verschenkt 25 % Speicher; gepackt (3 Byte je 2 Werte) wären es nur 1323 Byte - im Datenstrom später relevant.

Aufgabe 5 - USART-Durchsatz: Engpassanalyse (16 P) [Kap. 4]

5.1 Nutz-Datenrate =2Bytefs=244117,647=88235,3 Byte/s= 2\,\text{Byte} \cdot f_s = 2 \cdot 44117{,}647 = \mathbf{88235{,}3\ Byte/s}. 8N1 = 1 Start + 8 Daten + 1 Stopp = 10 Bit/Byte -> minimale Baudrate =88235,310=882353 baud= 88235{,}3 \cdot 10 = \mathbf{882353\ baud}.

5.2 BRGR=MCK16baud=84e616882353=5,95BRGR = \dfrac{MCK}{16 \cdot \text{baud}} = \dfrac{84\text{e}6}{16 \cdot 882353} = 5{,}95. Kaufmännisch gerundet: BRGR = 6. Echte Baudrate =84e6166=84e696=875000 baud= \dfrac{84\text{e}6}{16 \cdot 6} = \dfrac{84\text{e}6}{96} = \mathbf{875000\ baud}. Maximale Byte-Rate =875000/10=87500 Byte/s= 875000 / 10 = \mathbf{87500\ Byte/s}.

5.3 Bedarf 88235,3 Byte/s, Angebot nur 87500 Byte/s:

Defizit=88235,387500=735,3 Byte/s.\text{Defizit} = 88235{,}3 - 87500 = \mathbf{735{,}3\ Byte/s}.

Der Sendepuffer läuft also pro Sekunde um ~735 Byte über -> Datenverlust. Mit dem Sequenzbyte + CRC aus Aufgabe 6 (Zusatz-Overhead je Halbpuffer) wird das Defizit sogar noch größer. BRGR = 6 ist unbrauchbar.

5.4 Man muss BRGR abrunden, denn ein kleinerer Teiler ergibt eine höhere Baudrate: BRGR=5baud=84e680=1050000 baud105000 Byte/s88235,3BRGR = 5 \Rightarrow \text{baud} = \dfrac{84\text{e}6}{80} = \mathbf{1\,050\,000\ baud} \Rightarrow 105000\ \text{Byte/s} \ge 88235{,}3 -> ausreichend. Entscheidend ist die Rundungsrichtung: Für garantierten Durchsatz rundet man den Teiler nach unten (Baudrate nach oben), nie kaufmännisch. Die "Abweichung" der Baudrate von einem Wunschwert ist hier kein Kriterium: Sender und Empfänger werden beide auf 1,05 Mbaud eingestellt; UART verlangt nur gleiche Taktung auf beiden Seiten, keine Standard-Baudrate. Maßgeblich ist allein Angebot >= Bedarf.

Falle: Kaufmännisches Runden ist bei Baudraten-Teilern falsch - es kann den Datenstrom lautlos abschneiden.

Aufgabe 6 - CRC-Sicherung (10 P) [Kap. 10]

6.1 Sequenzbyte =nmod256=441mod256=185=0xB9=10111001= n \bmod 256 = 441 \bmod 256 = 185 = \text{0xB9} = \mathbf{10111001}.

6.2 g(x)=x4+x+1g(x) = x^4 + x + 1 \Rightarrow Generator 10011 (Grad 4). Nachricht + 4 Nullen = 101110010000, Modulo-2-Division:

1 0 1 1 1 0 0 1 0 0 0 0   : 10011
1 0 0 1 1
---------
0 0 1 0 0 0 0 1 0 0 0 0
      1 0 0 1 1
      ---------
0 0 0 0 0 1 1 1 0 0 0 0
          1 0 0 1 1
          ---------
0 0 0 0 0 0 1 1 1 1 0 0
            1 0 0 1 1
            ---------
0 0 0 0 0 0 0 1 1 0 1 0
              1 0 0 1 1
              ---------
0 0 0 0 0 0 0 0 1 0 0 1   -> Rest (4 Bit) = 1001

Prüfbits (FCS) = 1001.

6.3 Gesendetes Codewort = Daten + FCS = 10111001 + 1001 = 101110011001. Der Empfänger dividiert das komplette Codewort durch 10011; Rest 0000 -> fehlerfrei, jeder andere Rest -> Fehler erkannt.

Aufgabe 7 - Echtzeit: Deadline und Shared Data (12 P) [Kap. 6]

7.1 Ts=1/fs=952/42e6=22,667μsT_s = 1/f_s = 952 / 42\text{e}6 = 22{,}667\,\mu\text{s}. In Takten: TsMCK=22,667μs84MHz=1904 ZyklenT_s \cdot MCK = 22{,}667\,\mu\text{s} \cdot 84\,\text{MHz} = \mathbf{1904\ Zyklen}.

7.2 Worst Case: die niederpriore Task hat gerade Interrupts gesperrt (kritischer Abschnitt), wenn der Abtast-Trigger kommt. Die ISR wird erst blockiert und läuft dann selbst:

tWC=1400+60084e6=200084e6=23,81μs.t_{WC} = \frac{1400 + 600}{84\text{e}6} = \frac{2000}{84\text{e}6} = 23{,}81\,\mu\text{s}.

Das ist größer als Ts=22,667μsT_s = 22{,}667\,\mu\text{s} -> die ISR wird nicht rechtzeitig fertig, der nächste Abtastwert geht verloren -> Deadline verletzt.

7.3 Die mittlere CPU-Auslastung (32%\approx 32\,\%: fs600+fs1001500f_s \cdot 600 + \frac{f_s}{100}\cdot 1500 Zyklen/s bei 84e6) sagt nur, dass die CPU im Mittel viel Leerlauf hat. Für Echtzeit zählt aber der schlechteste Einzelfall: eine einzige zu lange Interrupt-Sperre blockiert die hochpriore ISR über ihre Deadline hinaus. Auslastung ist nicht gleich Planbarkeit (Schedulability) - Blockierung durch kritische Abschnitte kann die Deadline sprengen, obwohl die CPU zu zwei Dritteln idle ist.

7.4 Zulässig ist nur eine Blockierung von TsMCKCISR=1904600=1304 ZyklenT_s \cdot MCK - C_{ISR} = 1904 - 600 = \mathbf{1304\ Zyklen} (15,5μs\approx 15{,}5\,\mu\text{s}). Bessere Lösung des Shared-Data-Problems ohne Interrupt-Sperre: doppelt gepufferter, sperrfreier Zugriff (Ping-Pong mit atomarem Umschalten eines Puffer-Index) - der die ISR nie blockiert -, alternativ nur eine sehr kurze atomare Zeigeroperation statt eines langen gesperrten Abschnitts.

Aufgabe 8 - Regelung: PI-Regler mit Windup (10 P) [Kap. 8]

8.1 Tc=100Ts=10022,667μs=2266,7μs=2,2667 msT_c = 100 \cdot T_s = 100 \cdot 22{,}667\,\mu\text{s} = 2266{,}7\,\mu\text{s} = \mathbf{2{,}2667\ ms}. KiTc=502,2667e-3=0,11333K_i \cdot T_c = 50 \cdot 2{,}2667\text{e-}3 = \mathbf{0{,}11333} (je Einheit Regeldifferenz).

8.2 e[k]=wy[k]e[k] = w - y[k], I[k]=I[k1]+0,11333e[k]I[k] = I[k-1] + 0{,}11333 \cdot e[k], uraw=2e[k]+I[k]u_{raw} = 2 \cdot e[k] + I[k], danach auf [0;100][0;100] begrenzen:

ky[k]e[k]I[k]u_raw[k]u[k]
001000 + 0,11333·100 = 11,333200 + 11,333 = 211,33100 (Sättigung)
1208011,333 + 0,11333·80 = 20,400160 + 20,400 = 180,40100 (Sättigung)
2356520,400 + 0,11333·65 = 27,767130 + 27,767 = 157,77100 (Sättigung)

8.3 Windup-Erkennung: Der Ausgang ist ab k=0 in der Sättigung (u_raw weit über 100), trotzdem wächst der Integrator ungebremst weiter: 11,320,427,811{,}3 \to 20{,}4 \to 27{,}8. Folge: Sobald yy den Sollwert erreicht und ee das Vorzeichen wechselt, muss dieser aufgeblähte I-Anteil erst wieder abgebaut werden - der Regler hält die Stellgröße zu lange auf Maximum -> starkes Überschwingen / träges Zurückregeln. Gegenmaßnahme: Anti-Windup, z. B. bedingte Integration (Integrator anhalten, solange die Stellgröße gesättigt ist) oder Back-Calculation. Wirkung: I[k]I[k] bleibt während der Sättigung auf 11,333 stehen (statt auf 27,8 zu klettern), sodass der Regler beim Erreichen des Sollwerts sofort reagieren kann.

Falle: Der ganze Verlauf hängt an TcT_c und damit an fsf_s aus Aufgabe 2. Ein falsches KiTcK_i \cdot T_c verschiebt alle drei Schritte.


Zurück zu den Aufgaben · Probeklausur 5 · Startseite