Universität Koblenz–Landau Name: Musterlösung Institut Naturwissenschaften Vorname: .................. Abteilung Physik Matr. Nr.: .................. Studiengang: .................. Klausur PHMJ02 SS2012 Mikrocontroller und Robotik Mittwoch 15.8.2012 Lösen Sie die Aufgaben 1 - 6! Verwenden Sie keinen Bleistift! Es sind keine Hilfsmittel zugelassen. Schalten Sie Ihr Handy aus! GUTEN ERFOLG !!! Aufgabe 1 2 3 4 5 6 max. Punkte 9 9 11 10 10 11 err. Punkte Summe Pkte.: . . . . . . . . . Note.: . . . . . . . . . . . . . . . . . . . . . . . . 2 Aufgabe 1: Diskrete Treiberschaltungen Ein Transistor verhält sich wie ein regelbarer Widerstand. Dabei muss aber mindestens eine Spannung von 0,7V zwischen Basis und Emitter anliegen, damit der Transistor überhaupt leitet. Gegeben sei folgende Treiberschaltung zur Ansteuerung eines 12V Gleichstrommotors. Der Eingang UI der Schaltung wird mit TTL Pegel betrieben. 12V UI M Doch die Schaltung funktioniert nicht wie erwartet! Zwar stoppt der Motor bei UI = 0V , allerdings dreht sich der Motor nicht oder nur sehr langsam, wenn die Schaltung mit HIGH=5V im Eingang belegt wird. a) Wo liegt der grundlegende Fehler in der Schaltung? Hinweis: Motor und Transistor bilden einen Spannungsteiler. Beginnt der Transitor zu leiten, steigt die Spannung am Motor. Sobald diese Spannung allerdings 4.3 V übersteigt, beginnt der Transistor wieder zu sperren, da die Spannungsdifferenz zwischen Basis (5V) und Emitter (4,3V) die geforderten 0,7 V unterschreitet. Das Sperren hat wiederum zur Folge, dass die Spannung am Motor ebenfalls wieder sinkt, und die 0,7 V BE Spannung wieder erreicht wird. Es stellt sich ein Gleichgewicht ein, bei der die Basis-Emitterspannung etwa die 0,7V erreicht. ( )/5 b) Mit wieviel Volt wird der Motor effektiv betrieben? Der Motor wird demnach mit etwa 4,3 Volt betrieben. ( )/1 ( )/3 c) Modifizieren Sie die Schaltung in eine funktionierende Treiberschaltung. 12V M UI 3 Aufgabe 2: DA-Wandler Digital-Analog Wandler können in Verbindung mit einem Analogeingang eines Mikrocontrollers dazu verwendet werden, mehrere digitale Schalter gleichzeitig auszuwerten. Der Vorteil dieser Vorgehensweise liegt darin, dass nur ein einziger Anschlusspin am Mikrocontroller belegt wird. Gegeben sei dazu folgende Schaltung: R R R ADC0 ATmega16 2R 2R 2R 2R 2R UA d0 d1 d3 d2 Uref Je nach Stellung der Schalter (d3 · · · d0 ) wird eine definierte Ausgangsspannung UA erzeugt, die vom AD-Wandler des Mikrocontrollers in eine 10 Bit Zahl umgewandelt wird. Aus diesem gemessenen Wert können die Schalterstellungen rekonstruiert werden. a) Wieviele verschiedene Ausgangsspannungen (UA ) können mit dem obigen DA-Wandler erzeugt werden? Es können 16 verschiedene Spannungen erzeugt werden. ( )/1 c) Welche Ergebnisse finden sich im ADC-Ergebnisregister, wenn folgende Schalterstellungen eingestellt sind (dn = 0 Schalter n auf Masse, dn = 1 Schalter n auf Uref ) d3 0 0 0 1 d2 0 0 1 1 d1 0 1 1 1 d0 1 1 1 1 Messergebniss im 10 Bit AD-Register 64 192 448 960 ( )/4 c) Tragen Sie für folgende Messergebnisse die entsprechenden Schalterstellungen in die Tabelle ein (dn = 0 Schalter n auf Masse, dn = 1 Schalter n auf Uref ) Messergebniss im 10 Bit AD-Register 704 320 896 438 d3 1 0 1 0 d2 0 1 1 1 d1 1 0 1 1 d0 1 1 0 1 ( )/4 4 Aufgabe 3: AD-Wandler Neben den parallelen AD-Wandlern werden in wenig zeitkritischen Anwendungen hauptsächlich serielle AD-Wandler verwendet. a) Erläutern Sie den prinzipiellen Unterschied zwischen paralleler und serieller Wandlung, sowie deren Vor- und Nachteile. parallel: gleichzeitiger (paralleler) Vergleich mit allen Referenzspannungen 2n − 1 Komparatoren, schnell, teuer seriell: Einzelvergleich (seriell) mit allen Referenzspannungen 1 Komparator, langsam, billig ( )/2 b) Bei der seriellen Wandlung kann ein einfaches Abzählverfahren oder eine sukzessive Approximation eingesetzt werden. Schätzen Sie mit Hilfe der O-Notation den Aufwand für eine n-Bit Wandlung für: - den günstigsten Fall (minimale Wandlungsdauer) - den Durchschnitt - den ungünstigsten Fall (maximale Wandlungsdauer) für alle drei Verfahren. Die Signalfolge sei gleichverteilt. Min φ Max paralleles Abtasten O(1) O(1) O(1) Abzählverfahren O(1) O(2n−1 ) O(2n ) sukzessive Approximation O(n) O(n) O(n) ( )/6 c) Bestimmen Sie die höchste Frequenz, die bei den drei Wandlungsverfahren sicher abgetastet werden kann. Es soll eine 8 Bit-Wandlung durchgeführt werden, der Komparator kann 1024 Vergleiche pro Sekunde durchführen. nach dem oben ermittelten Aufwand und dem Shannon’schen Abtasttheorem gilt: Parallel: 1024 Hz / 1 = 1024 Hz Abtastrate → max. 512 Hz Abtastfrequenz Approximation: 1024 Hz / 8 = 128 Hz Abtastrate → max. 64 Hz Abtastfrequenz Abzählverfahren: 1024 Hz / 256 = 4 Hz Abtastrate → max. 2 Hz Abtastfrequenz ( )/3 5 Aufgabe 4: Operatoren in C Gegeben seien zwei unsigned char Variablen a und b. Berechnen Sie die Ergebnisse folgender logischer Operationen. Stellen Sie Ihre Ergebnisse als Bitzahlen sowie als Hexadezimalzahlen dar. Der Compiler repräsentiert die Begriffe true und false mit den Werten 1 bzw. 0. unsigned char a = 0xE4; unsigend char b = 0xAA; Hinweis: es findet keine Zuweisung statt, d.h. die Inhalte der Variablen bleiben unverändert. binär hexadezimal a&b 1010 0000 0xA0 a|b 1110 1110 0xEE ˜a 0001 1011 0x1B ˜b 0101 0101 0x55 aˆb 0100 1110 0x4E a <<1 1100 1000 0xC8 a >>2 0011 1001 0x39 a && b 0000 0001 0x01 a||b 0000 0001 0x01 !a 0000 0000 0x00 ( ) / 10 6 Aufgabe 5: Schrittmotor Entwerfen Sie ein C-Programm zur Ansteuerung eines Schrittmotors. Der Schrittmotor soll im Halbschritt betrieben werden. PA0 PA1 PA3 PA2 a) Geben Sie zunächst die logische Steuerfolge (in 1/0 Notation) für den Halbschrittbetrieb in beliebiger Drehrichung an: Schritt Nr. 0 1 2 3 4 5 6 7 PA3 0 0 0 0 1 1 1 0 PA2 1 1 1 0 0 0 0 0 PA1 0 0 1 1 1 0 0 0 PA0 1 0 0 0 0 0 1 1 ( )/4 b) Schreiben Sie ein möglichst kurzes C-Programm zur Ansteuerung in beide Drehrichtungen. Verwenden Sie PortA (s. Tabelle) als Ausgabe. Die Steuerung der Drehrichtung erfolgt über PORTC am PIN0. Eine Konfiguration der Ports ist nicht gefordert, ebensowenig wie Delays zwischen den Ausgaben. void main() { unsigned char i,motor[8]=0x05,0x04,0x06,0x02,0x0A,0x08,0x09,0x01; while(1) PORTA=motor[i=(i+1-2*(PINC & 0x01))%8]; } ( )/6 7 Aufgabe 6: C - Programmierung Interpretieren Sie folgende C-Funktion: void function(int a, int b) { if(a<b) { a ^= b; b ^= a; a ^= b; } } Hinweis: ˆ ist die XOR Funktion in der C-Notation. a) Welche Inhalte haben die beiden Variablen a und b am Ende der Funktion (Herleitung)? Welche Intension verfolgt somit diese Funktion? Zuweisung 1: a = a 6≡ b Zuweisung 2: b = b 6≡ a = b 6≡ (a 6≡ b) = a Zuweisung 3: a = a 6≡ b = (a 6≡ b) 6≡ a = b Die Funktion tauscht die Inhalte der beiden Variablen sofern a < b ist. In A wird also immer die größere Zahl und in B die kleinere Zahl zurückgeliefert: Sortierfunktion ( )/6 b) Welchen Fehler hat jedoch der Programmierer gemacht? Da die Parameter call by value übergeben werden, behalten Sie im aufrufenden Program ihre Inhalte. Die Funktion ist somit nutzlos. Die Parameter müssen call by reference übergeben werden. ( )/3 ( )/2 c) Notieren Sie eine korrekte Version der Funktion. void function(int *a, int *b) { if(*a < *b) { *a ˆ= *b; *b ˆ= *a; *a ˆ= *b; } }