523 views
# Electronic & Microcontroller ## To Do :::info ![Uploading file..._7zbbv72j7]() | VO | Inhalt |Script |Video|Check|Gelernt| | -------- | -------- |- |---- |---- |- | | **Vorlesung 1**|Intro |01/02 | + | + | | | **Vorlesung 2**|Serial Comm. |03 | + | + | | | **Vorlesung 3**|Analog/Digital |05/06 | + | + | | | **Vorlesung 4**|Interrupts |07 | + | + | | | **Vorlesung 5**|Transistoren |08 | + | + | | ::: :::warning | VO | Inhalt |Script|Video|Code |Gelernt| | -------- | -------- |- |---- |---- |- | | **Lab 1**| Microcontroller | + | + | | | **Lab 2**| Elektronik | + | + | | | **Lab 3**| Serial Comm. | + | + | | | **Lab 4**| RC Tiefpass | + | + | | | **Lab 5**| ADC | + | + | | | **Lab 6**| Timer | + | + | | ::: #### Kann zum Test kommen * **Spannung ausgeben, einlesen** * **Mit LEDs messen und Screenshot vom Oscilloscope abgeben** * **ADC** * **PWM: Signal mit 25% ausgeben und mit LEO messen** * Erstelle eine Serienschaltung von 2 unbekannten ohmschen Widerständen. Messe die Spannung und bestimme das Verhältnis der beiden Widerstände * Schließe ein Widerstand R = 10 kOhm parallel zum Widerstand R2 und messe die Spannung an dieser Parallelschaltung -> daraus Widerstandswerte berechnen (1er Frage) * Messe die Zeitkonstante eines RC-Tiefpasses mit einem Kondensator C=10 nanoFerrat. Wie groß ist die Zeitkonstante tau? Wie groß R? * Mit USART Zeichen "B" senden, mit Datenrate 1000 Bit/Sekunde - Signal vor und nach einem RC-TP messen * Mit DAC eine Sinusschwingung (aus 10 Werten) erzeugen mit f = 10Hz - Signal vor und nach einem RC-TP messen #### Test * Testfrage: * Microcontroller Aufbau: * Skizze ![](https://i.imgur.com/63zVlFO.png) * Welche Komponenten? Peripherals sind die Komponenten * Timer * USART * ADC/DAC * IRQ/EXTI * NVIC = Interruptcontroller * GPIO * Erklären * Integriert ist ein Prozessor und ein Programmspeicher, sodass Befehle ausgeführt werden können * Peripherals können ohne die CPU arbeiten * IRQ - erkennt eine Flanke als Unerbrechungsanfrage, aufgrund eines elektsichen Signals * Timer - erhöht periodisch den Wert des Counterregister * NVIC - zuständig für die Prioritäten der Interrupts * UART - serielle Datenübertragung * ADC/DAC - wandelt Signale um, an->di, di->an * Bussystem als Verbindung aller Komponenten (Harvard/Von Neumann) * GPIO * Anschlüsse - für dig in, dig out, an in, an out; können intern mit anderen Peripherals verbunden werden (alternate funtion) * Testfrage: * Was mus getan werden, um über die USART Daten zwischen zwei Microcontrollern auszutauschen? * Sie müssen verbunden werden über 2 Kabeln (auch Grounds müssen verbundenw werden) * Man muss sich die Datenrate überlegen (bei asynchron: fixe Datenrate und Start/Stop Bit | bei synchron: 2. Leitung mit Clock) * Daten serialisieren * Wie müssen die beiden Microcontroller miteinander verbunden werden? * A9 - Transmit, A10 - Receive. Beim zweiten STM32 - umgekehrt. Gekreuzt miteinander verbinden. (The Transmit-Pin (Tx) from the Sender hast to be connected with the Receive-Pin (Rx) from the Receiver.) * Welche Parameter müssen bei beiden Microcontrollern für die Konfiguration der UART eingestellt werden? * Datenrate, Start/Stopbit * Welche Funktion erfüllt die UART selbstständig, welche Schritte nimmt die UART der CPU ab? * Selbstständig: * Nimmt der CPU ab: * Bitweise senden der Daten * Beim Empfangen seriell auf parallel umwandeln * Testfrage: * Zeitlicher Verlauf der elektrischen Spannung am tx-Pin der UART ![](https://i.imgur.com/dDrqrJA.png) * Testfrage: * Pulsweitenmodulation * Die Veränderung der Dauer eines Pulses * Puls = kurzzeitige Veränderung des Ruhepotentials auf der Leitung; kann auch unterschiedliche Weite haben * Elektrische Kenngrößen: * Kenngröße -> Pulsweite (bzw Duty cycle = wieviel der gesamten Periodendauer 'verwendet' wird. Auf dem Bild jeweils 50%, dann 80% und dann 25%) * Kenngröße -> Periode T ![](https://i.imgur.com/m7ku3Oa.png) * Testfrage: * Wie kann man ein PWM Signal durch einen General Purpose Timer erzeugen? * Systick gibt Takte vor, mit einer gewissen Frequenz, zB 80mHz * Der Couter des Timers ist ein Register, das im normalfall hoch zählt - immer um 1. ZB bei jeder steigender Flanke +1 * Irgendwann gibt es einen Overflow, also kann nicht mehr in dem Register gespeichert werden, dann wird das Register auf 0 gesetzt und es geht wieder von vorne * Wenn Overflow passiert, kann man einen Interrupt Request an die CPU schicken * Prescaler - der Takt geht über den Prescaler und er verlangsamt das Ganze * Auto-reload register - man kann einen Wert angeben, der niedriger ist und nur bis zu diesem Wert wird gezählt * GPT = hat noch einen Kanal unten mit Input und Output. Dazsichen kann es auch einen Prescaler geben. In diesem Kanal ist auch der Compare-und-Capture register. * Man kann diesen Kanal entweder als in oder output konfigurieren * Wenn input: Signal kommt rein, und Capture register nimmt den Wert von dem Counterregister zu dem Zeitpunkt * Wenn output: CCR ist als Compare register und immer wenn Counter den Wert erreicht, passiert was am Output * Das braucht man, um ein PWM Signal zu erzeugen * Über die Taktfrequenz des Prozessors, den Prescaler und CCR kann man am Output ein PWM Signal erzeugen, weil man dadurch die Pulsweite steuern kann * Timer - zählt Takte * Welche Komponente innerhalb des Timers ermöglicht die Erzeugung eines PWM Signals und direkte Ansteuerung eines Pins? * Zusätzliches Channel (kann bis zu 4 Kanälen haben) ![](https://i.imgur.com/pWPTx94.png) * Welche Register werden dafür verwendet? * Capture- und Compare Register * Testfrage: * Nach welchem Funktionsprinzip funktioniert ADC? Verfahren zur Quantisierung des Wertes * Funktionsprinzip: Successive Approximation * Sampling - Abtastrate gibt an, wie oft ein Wert abgetastet/ausgelesen wird * Dann wird es quantisiert ![](https://i.imgur.com/D6wvfBM.png) ![](https://i.imgur.com/aUPN6bO.png) ![](https://i.imgur.com/amtyhoS.png) ![](https://i.imgur.com/Dvm9LSB.png) * Testfrage: * Wie nennt man den Vorgang der zeitlichen Diskretisierung bei der AD-Wandlung? * Sampling/Abtasten ## Vorlesung 1 ### MC8 ![](https://i.imgur.com/UCzA36o.png) * Es gibt einen **Prozessor**, in welchem sich **Register** befinden. * **PC Register (Programm Counter)** beinhält die **Adresse vom nächsten Befehl**. PC zeigt immer auf den **Befehlsspeicher**. * **Stack Pointer** - zeigt in den **Datenspeicher** und zwar auf die **nächste freie Speicherstelle**. Wenn man **Daten speichern** will, tut man dies **auf die Adresse, die der SP zeigt**. * Zusätzlich: **Register A,B,C**, wo Daten **intern** vorrätig **gehalten** werden. * **ALU - das Rechenwerk - führt die Befehle aus** mit einem Operanden, der aus A kommt. Wenn ALU **mit Rechnen fertig** ist, schreibt es **zurück ins A Register**. * **IO - Externe Bausteine**, die als **Buffer an den Datenbus** angesteckt werden müssen. * Über diese Bausteine werden **Ausgänge an LEDs angesteckt -> Outputs** * **Inputs werden über Taster** eingefangen * Alles, was mit der Außenwelt zu tun hat, muss man **von dem Datenbus entkoppeln**, über den **Eingabe und Ausgabe Baustein** * **->** da werden **Taster** für einen **digitalen Eingang** angeschloßen und die **LEDs** für einen **digitalen Ausgang** - als Anzeigeinstrument. ![](https://i.imgur.com/uMaxpWS.png) ### Was ist ein Microcontroller? * µCs sind **integrierte Computersysteme** die zusätzlich zu einer CPU und Speicher noch viele andere **Komponenten** besitzen (Timer, ADC, DAC,...) um **Steuerungsaufgaben** in eingebetteten Systemen zu übernehmen. Diese Komponenten **können Aufgaben ohne Mitwirkung der CPU** erledigen! * **Mirocontroller erledigen eine Aufgabe** * Besitzt: * CPU - Brain * Memory * System Clock driven by an Oscillator * Ein Oszilloskop ist ein **elektronisches Messgerät**, das für eine oder mehrere elektrische Spannungen deren zeitlichen Verlauf auf einem Bildschirm sichtbar macht. Das Oszilloskop stellt einen Verlaufsgraphen in einem zweidimensionalen Koordinatensystem dar, wobei üblicherweise die (horizontale) x-Achse die Zeitachse ist und die (vertikale) y-Achse die Spannungsachse. Das so entstehende Bild wird als Oszillogramm bezeichnet. * Periferals - Communication between CPU and outside world * Verschiedene Hersteller * **->** Verschiedene Peripherals * **->** Verschiedene CPU -> unterschiedlicher Befehlssatz (zB. MOV, JPZ) * **->** DH in Assembler wurde nach konkreten Befehlssätzen programmiert. Beim Verwenden einer höheren Sprache (zB C) musste ein Compiler eingesetz werden und zuerst erstellt werden * **STM32 hat** * **1 mb Programmspeicher** * **128 kb Datenspeicher** * **Verbraucht daher wenig Energie** * **Osz.: 80 MHz Leistung** * **Unterschied zu einem Mikroprozessor?** * Der **Mikroprozessor** ist das **Herz und Hirn eines Computers**. Neben der **CPU** (Central Prozessing Unit – diese wird durch den Befehlssatz definiert) kann er durch das **Bussystem mit weiteren Komponenten kommunizieren**. * In einem **Mikrocontroller ist alles drinnen - ein Rechenkern, ein Prozessor, eine CPU** * **In CPU sind Programmspeicher + Datenspeicher** - mit **Bussystem** (Adressen und Daten). An dieses Bussystem sind mehrere **Periphäriegeräte angeschlossen** (Peripherals). Diese Periphäreiekomponenten machen den MC aus, sie sind in den Chip mitintegriert. * **Digitale Ein- und Ausgänge (GPIO)** sind auch an den **Bussystem** angeschloßen. Über sie kann man die **Tasten und LEDs anschließen. Auch den Bufferbaustein.** * **Mikroprozessor ist nur ein kleiner Teil (CPU) von MC**. MC ist ein vollständiges System. Dieses **vollständige System** braucht nur einen Anschluß für Batterie (+3,3 V und 0 V), um zu funktionieren. In unserem Fall wird es über den USB Kabel versorgt (5V). ![](https://i.imgur.com/63zVlFO.png) Grundlegende Funktionsweise https://www.youtube.com/watch?v=jKT4H0bstH8 https://www.youtube.com/watch?v=CmvUY4S0UbI * **A digital signal processor (DSP)** * Is a **specialized microprocessor** designed specifically for **digital signal processing**, generally in **real-time computing**. * Integration mehrerer Prozessoren, Speicher und Peripheriekomponenten in einem integrierten Schaltkreis. ### 8051 Blockdiagramm * **Erster MC** (von Intel produziert 1974) * Hat: * Prozessor * Rechenkern * CPU - Programmspeicher & Datenspeicher * GPIOs - 4 Parallele Ports mit jeweils 8 Pins, dh 16 Ein- und Ausgänge können angeschloßen werden * 2 Periphäriekomponenten sind integriert * **Timer** * **Serial Communication - Serielle Schnittstelle - UART** * **Fetch – Decode – Execute** * holen – decodieren – ausführen ![](https://i.imgur.com/Njuwe7H.png) ![](https://i.imgur.com/q72GRw7.png) ### Architekturen * #### Von Neumann Architektur ![](https://i.imgur.com/tbKo8zH.png) * Elektronischer Programmspeicher & Datenspeicher über Bussystem verbunden ![](https://i.imgur.com/hMrAhOr.png) * Computer werden immer schneller, daher müssen sie die neuen Befehle schnell kriegen. * **Timeline mit 1 microsekunde** * *blau* **Adresse, MemoryRequest, Read werden angelegt** * *rot* Aus dem **Programmspeicher** werden **Befehle geholt über Datenbus** * *blau* **Neue Adresse wird angelegt**. Ein Wert wird geholt, der in das **A Register** soll * *grün* -> **Daten werden geholt über Datenbus** * Befehl kann **intern in der CPU** verarbeitet werden. Ergebnis bleibt im A Register. * *blau* Nächster Schritt: **Adresse wird aus dem Stackpointer geholt** und über den Datenbus (*grün*) wird das Ergebnis gespeichert. * Dh: **Für einen Befehl werden 3 mal Adressen angelegt und 3 mal über Datenbus übertragen**. ![](https://i.imgur.com/o3f4V12.png) * #### Harvard Architektur * CPU - braucht Befehle * **Programmspeicher wird gekoppelt an die CPU über ein eigenes Bussystem und der Datenspeicher wird an die anderen Seite vom CPU angebunden.** * Nachteil: 2 Mal Adress- und Datenbus gebraucht. * Vorteil: während das Befehl geladen wird, können Daten geladen werden. CPU kann gleichzeitig mit Programmspeicher und Datenspeicher kommunizieren. ![](https://i.imgur.com/cWHXnh4.png) ![](https://i.imgur.com/yew9Zws.png) ![](https://i.imgur.com/oex3VrS.png) * In der CPU befinden sich **2 logische Komponenten - Leitwerk und Rechenwerk** * **Eine Komponente steuert den Ablauf - laden-dekodierern-ausführen = Leitwerk/Steuerwerk.** * Arbeitet nur mit **Programmspeicher**. Verwendet PC um zu sagen, **welchen Befehl jetzt auszuführen** und nach dem Ausführen kommt es in das Instruktionsregister. Nur PC und InstrReg haben was mit Befehlen zu tun. * **Andere Komponente macht nur die Berechnungen = Rechenwerk**. * ALU * Holt sich **Daten aus dem Datenspeicher ins A Register** (logische Verknüpfung) * Wenn was aus dem A Register weg muss, wird **SP verwendet** und eine Speicherstelle im Datenspeicher wird angeschrieben * **So können Rechenwerk und Leitwerk zeitlich versetzt gleichzeitig arbeiten -> Pipeline** * Ein Befehl besteht aus 3 Schritten * **Fetch** - Befehl Laden -> Zugriff auf **Programmspeicher** * **Decode** - Leitwerk stellt fest, **was zu tun ist** * **Execute** -> **Ergebnis berechnen** (Rechenwerk macht das) oder manchmal Daten laden -> Zugriff auf den Datenspeicher nötig * Mehrere Befehle können verschachtelt werden, weil **beide Kreisläufe über Datenbus getrennt werden** * Dh. Ein Befehl macht Fetch&Decode (Programmspeicher) und im Execute kommt Datenbus dazu. ![](https://i.imgur.com/awKzXBF.png) * Befehle können fast parallel ablaufen, weil jeweils bei Fetch und Execute anderer Speicher verwendet wird -> **wird doppelt so schnell ausgeführt**. #### Pipelining * **Pipeline - Fetch-Decode-Execute parallel** #### System On Chip - SOC * In Mobiltelefonen zu finden * **Nicht nur 1 Rechenkern, sondern mehrere (8)** * **Display geht über eigenen Kern** * 2 kleine Kerne - **PRU** - Programm Realtime Unit -> **4 K Programmspeicher, 512 byte Datenspeicher** ![](https://i.imgur.com/qZC4qF4.png) OMAP3, 4, 5 (ARM Cortex A8/ 2xA9/ 2xA15+2xM4 + Graphics Core + Image Signal Processor) L138 (ARM9 + DSP-C674x + 2xPRU) * **Programmable System on Chip** * Cypress PSoC 5LP www.cypress.com * Man kann viel mehr auf einen Chip integrieren * Digitale und analoge Logikkomponenten drinnen ![](https://i.imgur.com/y8Vp291.png) ![](https://i.imgur.com/9GQnAZn.png) ### Elektrischer Strom ![](https://i.imgur.com/IAAEfdu.png) * **Strom durch Fläche = Änderung der Ladungsträger** * ***Strom*** = **Ladungsträger bewegen sich** räumlich von einem Punkt zum anderen. **Von links nach recht**, durch die Fläche durch. * **Bewegte Ladungsträger - Elektronen**. **Übertragen Strom oder Daten**. Sie brauchen **Leiter** - leitfähige Materialien, zB Metalle: Kupfer, Silber, Gold, Eisen * Schaltsymbole: * **klein i - Veränderliche Variable**, kann aber auch konstant sein - Wechselstrom * **groß I - zeitlich Konstante Größe** - Gleichstrom ![](https://i.imgur.com/n9qOr4g.png) ### Elektrische Ladung ![](https://i.imgur.com/7omioCU.png) * Erhaltungssatz der Energie: * Dieser Grundsatz der Energieerhaltung besagt, dass die **Gesamtenergie** (Systemenergie) **eines abgeschlossenen (isolierten) Systems immer gleich ist**, sich also mit der Zeit nicht ändert. * Spannungsquelle mit Hülle rundherum -> **gleicher Strom (i) fließt raus und wieder rein**. Wenn die Hülle so eingesetzt ist wie blau. Andererseits (lila): kein Stromfluss * Kirchhofsche Regeln: * Knotenregel - einStröme = ausStröme - Summe aller Ströme ist 0 ![](https://i.imgur.com/sjxyeAh.png) ![](https://i.imgur.com/fHt6cLX.png) ### Elektrische Spannung/Feld * 2 geladene Metallkontakte, Feldlinien, die von + nach - gehen ![](https://i.imgur.com/OocQTLi.png) * Anwendung: * Ladungsträger wollen von A nach B - müssen gegen (das elektrische Feld) den anziehenden Pol arbeiten - Arbeit leisten * Man kann Ladngsträger von A nach B mit Spannung rüberdrücken * Spannungen addieren sich zusammen und ergeben in Summe 0 ![](https://i.imgur.com/3xxq43C.png) * Alle Punkte, die am selben Punkt beginnen und enden, haben die gleiche Spannung ![](https://i.imgur.com/v931UpM.png) ### Ohmsches Gesetz * Widerstand = Spannung/Strom -- R=U/I * 1 Ohm = miliVolt/miliAmpere * **U = R*I** <- Spannung = Wiederstand*Strom * Je größer der Wiederstand, desto mehr Spannung braucht man, um den Strom durchzutreiben (gehen über Luft vs gehen im Wasser) ![](https://i.imgur.com/Ik0Winq.png) * Spannung bei einer Batterie ist konstant, 1,5 Volt * Das Ohmsche Gesetz besagt, dass die Stromstärke I in einem Leiter und die Spannung U zwischen den Enden des Leiters direkt proportional sind. -> Linearer Zusammenhang zwischen Strom und Spannung ![](https://i.imgur.com/HRSqbNh.png) * Widerstandsgerade ![](https://i.imgur.com/FO6CL5D.png) * Lila Widerstand ist kleiner, weil er bei der selben Spannung mehr Strom liefert ![](https://i.imgur.com/lW9Eba2.png) * Schaltzeichen und Symbole ![](https://i.imgur.com/xqwfN3Q.png) ### Microcontroller Anwendungen * **Characterizer** * Stellt Widerstandsgeraden dar ![](https://i.imgur.com/coKaCJy.png) ### Parallelschaltung, Serienschaltung * **Parallelschaltung** * Knotenregel: * Die Summe aller eingehenden und ausgehenden Ströme muss 0 sein * Grün - metalischer Kontakt * Nucleo Board ![](https://i.imgur.com/bOTHdd3.png) ![](https://i.imgur.com/nnlmOfl.png) * Das obere geht nicht, weil MC-Pin nur 10 mA liefern kann * Was funktioniert, um 3,3 V auszugeben? Größerer Widerstand und nicht zu viel anstecken * **2 gleich große Widerstände parallel geschalten, ergeben in Summe den halb so großen Widerstand, dh 2 Widerstände 1000 und 1000 ergeben 500** ![](https://i.imgur.com/ZwHL3nE.png) ![](https://i.imgur.com/ekWYC9B.png) * **Serienschaltung** * Maschenregel: Die Summe aller Spannungen muss 0 ergeben * Strom ändert sich nicht, Spannung wird aber geteilt in der Maschenregel ![](https://i.imgur.com/snrKjLX.png) ![](https://i.imgur.com/ML9opTj.png) --- * Das Ohmsche Gesetz besagt, dass die Stromstärke I in einem Leiter und die Spannung U zwischen den Enden des Leiters direkt proportional sind. Die Formel URI ist eine mathematische Darstellung dieses Gesetzes. * Widerstand = R = Ohm = mV/mA und kOhm=V/mA * Spannng = U = Volt = kOhm * mA und mV = Ohm * mA * Strom = I = Ampere = V/Ohm und mA = V/kOhm V = 10^3 x Ohm x 10^-3 x A -> 10^3 x 10^-3 = 1 ## Vorlesung 2 ### Was ist serielle Datenleitung? * Wenn man **Daten von einem MC an einen 2. MC** übertragen will, dann legt man keine 32 Datenleitungen, sondern die Daten werden über eine Datenleitung seriell übertragen. **Somit werden diese nicht zeitgleich gesendet, sondern nacheinander - seriell.** ![](https://i.imgur.com/c9wsXml.png) * Warum nur 1 Datenleitung? * Weil es einfach mehr kostet, 32 Kabeln zu kaufen * Inside the CPU or Microcontroller data is transmitted in Parallel using Buses (8/16/32 Bit). For long distances we use a single wire and serial transmission. ![](https://i.imgur.com/1my6t2k.png) * Es gibt 2 Komponenten, die Wandlungen machen - PISO und SIPO, parallel in serial und vice versa * Wir können die digitalen Input/Output Pins dafür verwenden, um Daten von einem MC zum anderen zu schicken. Dafür müssen wir ein Programm schreiben, um 8-Bit Integer (int x=0xA5;) in 8 single-Bits zu konvertieren. * Dh, um zB 47 zu schicken, konvertieren wir diese Zahl ins Binäre -> 00101111 und sagen dem Prozessor -> wenn ich 1 habe, leg 3,3V an und wenn 0, dann 0V * Einfacher Code, um die Daten bitweise zu schicken ![](https://i.imgur.com/m1p4KVb.png) * Eigentlich verwenden wir keine Arrays, weil es umständlich wäre, jede Zahl händisch ins Binäre zu konvertieren, daher verwenden wir * modulo % und * shift << left - right >> ![](https://i.imgur.com/E4xMk18.png) ### Daten Empfangen * So siehts aus: ![](https://i.imgur.com/VA0KSlE.png) * Daten werden seriell übertragen - je nach dem, ob eine 0 oder 1 kommt, leuchtet die LED oder nicht. Beim blauen Teil verwenden wir den User Button, der geöffnet 3,3V liefert, und beim gedrückt halten 0V - bei jedem Drücken werden die 1 und 0 eingelesen ![](https://i.imgur.com/Qo4DV9b.png) ### Schwierigkeiten bei Daten Empfangen * **Welche Geschwindigkeit? Datenrate?** - zB 1 Sekunde * **Wann beginnt und endet die Datenübertragung?** - zB Start/Stopbit verwenden * Asynchrone Datenübertragung, wenn **Datenrate fix ist und Start&Stop bit sind gesetzt** * **Synchrone** Übertragung, benötigt eine **zweite Leitung** mit einem Taktsignal mit einem Clock. Start - wenn Flanke bei der zweiten Leitung runterfällt * Was ist auf dem Bild? * Blau -> nicht gedrückt - oben - 1. Gedrückt - unten - 0. * Rot - Bits pro Sekunde; Start/Stop bit * Grün - Taktsignal bei synchronen Übertragung ![](https://i.imgur.com/Jfpcubv.png) * ABER * In mbed gibt es bereits eine Funktion für die asynchrone Datenübertragung. Heißt im mbed - **Serial** und geht sogar in beide Richtungen, mit **TX und RX.** * **Wenn man den MC an PC mit USB verbindet, tunnelt man somit eine serielle Übertragung** ![](https://i.imgur.com/PcGIXSQ.png) ![](https://i.imgur.com/SUhugrA.png) ### USART - Universal synchronus/asynchronus receiver transmitter * Ein Microcontroller (aber auch ALLE elektronischen Geräte!) besitzt eine **UART-Schnittstelle**. Sie kann synchron und asynchron seriell Daten übertragen. * Wenn synchron nicht möglich ist, dann nut UART * **UART arbeitet intern mit den GPIO zusammen** * **A9 - Transmit, A10 - Receive**. Beim zweiten STM32 - umgekehrt. Gekreuzt miteinander verbinden. (The Transmit-Pin (Tx) from the Sender hast to be connected with the Receive-Pin (Rx) from the Receiver.) * **Grounds müssen auch verbunden werden, um eine gemeinsame Masse zu haben** ![](https://i.imgur.com/ta0NPCH.png) * Point2Point Connection - dh immer nur 2 können miteinander sprechen (dafür full duplex) * Asynchronus works without a clock signal that shows when the data is valid. As a result both microcontrollers need to use the **same data transmission rate** well known as the baudrate! * Typical values are 9600 (standard for mbed) // 19200 // 57600 // 115200 (standard for cube) * Anwendungen für USART: * Diagnose (für el. Geräte) * Software des konkreten Gerätes anwenden / Firmware Update * In Zeichnungen vergeht die Zeit von links nach rechts, daher muss man die Bitströme umgekehrt lesen. Dh 1010 -> 0101 ![](https://i.imgur.com/lvJLX4C.png) ## Vorlesung 3 ### Analog vs digital * Analog: kontinuierlich, mit unendlich vielen möglichen Werten (zB Temperatur). * Fürs uns: analog, wenn unendlich kleine Werte, so das wir sie nicht mehr wahrnehmen können, zB pi * Vom Video: Die Ladung eines Elektrons (1,609x10^-19) ist zwar klein, aber nicht unendlich klein, daher NICHT analog * Digital: diskrete Werte, im speziellen Fall, ganzzahlige, binäre Werte. Beschränkte Werte * Strom = Ladung/Zeit ### DAC * Funktionsweise: binäre Werte müssen zu Analogen konvertiert werden * ZB Array erstellen, das Array im Speicher haben für eine Sinusspannung und dann von dem Array mit einem Schleifenzähler einen Wert nach dem anderen ausgeben * Dh, für Sinus: * Bei 90 Grad = 1 * Bei 30 Grad und 150 Grad = 0,5 * etc ![](https://i.imgur.com/ch39zaQ.png) * Man kann sich diese Werte speichern und dann am DAC ausgeben ![](https://i.imgur.com/VWzx3MV.png) * Wenn man eine schönere Kurve haben will, muss man das Array größer machen aus mehr Werten und die Abstufung kleiner machen -> das Signal wird so immer schöner ![](https://i.imgur.com/pSAK6vn.png) * 2 Möglichkeiten, so ein Signal zu bekommen: a) Array mit Werten im Speicher b) Oder CPU den Wert berechnen lassen * Dagegen spricht: Man setzt einen MC dort ein, wo man Energie sparen will und wenn er Spannung ausgeben soll, dann wird man die CPU die ganze Zeit laufen lassen, um einen Wert nach dem anderen zu berechnen, vor allem, wenn die Periode konstant ist. * Lieber ein kleines Array mit 1000 Werten (1000 bytes=1kb, ale 1/1000 von 1 MB, das ein MC hat) und dann lässt man einen Schleifenzähler bis 1000 zählen -> auch nicht optimal * Aufbau des DAC * Widerstandsnetzwerk: Serien- und Parallelschaltung von verschiedenen Widerständen -> so kann man schnell den Ersatzwiderstand ausrechnen * 2 Widerstände von der Größe 2Ohm sind zueinander parallel geschalten. Die haben einen Pol gemeinsam am Knotenpunkt. Ein Anschluss ist gemeinsam, die zwei anderen sind jeweils mit Ground verbunden (rot im Kreis). Die 2R ergeben gemeinsam den Gesamtwiderstand R ![](https://i.imgur.com/o9a8Iys.png) * 2 Widerstände der Größe R in Serie geschalten ergeben gemeinsam 2R -> diese sind wieder zueinander parallel geschalten, dh -> R * Wenn man das mehrfach stuft, kann man die Eingangsspannung jeweils in Hälfte teilen ![](https://i.imgur.com/ewbGZrr.png) * Diese Spannung liegt nun jeweils an einem Widerstand der Größe 2R an und erzeugt einen Strom I * ZB 1R = 1kOhm -> 1V/1kOhm=1mA * 0,5V/1kOhm = 0,5mA * DH man kriegt Ströme, die genauso wie die Eingangsspannung ausschauen -> 0,5, 0,25 etc ![](https://i.imgur.com/s1Q2EzI.png) ### Operationsverstärker OpAm - Operation&Amplifier * Besteht aus 40 Transistoren * Wurde verwendet, um mathematische Operationen zu machen * Heutzutage wird er dazu verwendet, Ströme aufzusummieren, weil er dafür perfekte Eigenschaften hat * Eingangswiderstand ist nahezu unendlich = in den Operationsverstärker fließt kein Strom rein. Dh näherungsweise 0 Strom fließt rein * Spannungsverstärlung auch nahezu unendlich = Wenn man den + Pol an 0 Volt liegt, auch der andere Anschluß auf 0 Volt * Damit können Ströme as R2R kommen, nur über Rückkoppelwiderstand und rufen einen Spannungsabfall ab. Dieser Spannungsabfall ist genau das, was man hier digital zusammensetzt * Operationsverstärker und sein Widerstandsnetzwerk sind im MC drinnen und das ist die DAC * Ein Paar R, alle von der gleichen Größe R und ein Operationsverstärker * Somit kriegt man an einem Ausgangspin eine analoge Spannung, die man durch ein digitales Bitmuster setzen kann ![](https://i.imgur.com/Ed4vD2c.png) * Von den 16 I die links rein kommen, gehen über die erste Stufe 8, über die zweite 4, über die dritte 2 und über die vierte 1. 8+2=10 ### GPIO * Jeder Pin kann als Input und Output agieren * Prozessor oder einer von den Peripherals können die GPIO verwenden * MODI * Output * LED ansteuern * Transistor steuern * Input * Stellung eines Schalters einlesen und feststellen, ob die Spannung größer, als 1,7V ist - Schmitttrigger * Als receive oder transmitt konfigurieren über GPIOs * Alternate * UART * Kommunikation mit den Peripherals * Hat sowohl Input als auch Output * Analog * GPIO normalerweise 0 oder 1 (digital) * Über Analog mode kann man es analog machen ![](https://i.imgur.com/L7zV3rP.png) * Aufbau OUTPUT: * Grün: der tatsächliche Pin - da schließt man zB einen Widerstand oder Leuchtdiode an * Das Potential kommt entweder analog von DAC (Nur an 2 Pins möglich) * Im Normalfall kriegt man ein digitales Signal (blau) von den beiden Transistoren. Wird nur ein Transistor verwendet: Open drain. Beide werden verwendet: Push pull * Lila: Multiplexer - läßt auswählen, ob man den oberen oder unteren Eingang verwendet. Man muss es per SW initialisieren * Der untere Eingang (lila): alternate Function. Da kommt das Signal von einer Peripheirekomponente am Chip im MC, also von UART * Obere Eingang (rot, links): normale Ein-/Ausgabe, digital, per SW gesteuert (Pin soll 1 oder 0 sein), dann arbeitet die CPU. Die Info steht in Output Data Register * Schwarz: Output control - **aktive Logik** - setzt Spannungen an Eingängen von den Transistoren. Sie muss die Information, 'wie man die Transistoren jetzt schalten soll' von irgendeinem Register holen. Man muss elektrisch nachsehen, ob da eine 0 oder 1 gespeichert wurde - wenn 1, steuert sie die 2 Transistoren an. * Läuft mit einer gewissen Geschwindigkeit. Man kann sagen, sie aktualisiert den Ausgangspin mit einer Frequenz von 2 mHz, oder mit bis zu 80 mHz. Je nach dem, was man am Ausgang anschließt, läuft die mit einer anderen Geschwindigkeit. ZB, wenn man Daten überträgt, dann sollte die mit 80 Hz arbeiten. Wenn nur eine Leuchtdiode leuchten soll, reichen 2 Hz ![](https://i.imgur.com/fbaX5pb.png) * Steuern: ![](https://i.imgur.com/K0lTThw.png) * INPUT: * Grün - An IO Pin wird eine Signal/Spannungsquelle anschließen * Grün - Die Stützdioden schauen, dass alles was im Prozessor drinnen ist, geschützt wird. Ab einer Spannung die über 5V ist, schlägt die Schützdiode an und leitet den Strom weg. * Rot - Spannung wird analog verarbeitet - ADC * Türkis - Schmitt-Trigger: macht aus der Ausgangsspannung 2 Werte - 1 (3,3V) oder 0. Dh sobald man einen Spannungswert überschreitet, gibt der Schmitt-Triger 3,3V aus * Lila - On chip peripherie: Alternate function: zB UART Receive Pin * Grün links - Input Data Register. CPU liest diesen Register aus - was gerade reinkommt ![](https://i.imgur.com/Xpbq85c.png) * Steuern: * Mode Bits: 00 -> Input: Transistoren werden nicht angesteuert. Pull down oder pull up Widerstandt wird eingeschalten * Mode bits: 11 -> Widerstände sind ausgeschloßen * Mode bits: 10 -> Alternate function ![](https://i.imgur.com/QooCXaO.png) * Als Ganzes: ![](https://i.imgur.com/HZZELNN.png) #### Bitset und Reset * 0 - 15: Bits setzen * 16 - 31: reset * Wenn ich beides setze, hat SET Priorität * In Output Data Register hab ich 16 Pins (schwarze x unten). Wir setzen die Pins neu. Alle anderen Pins bleiben so, wie sie waren. Ganze Veränderung findet innerhalb von einer Taktflanke statt ![](https://i.imgur.com/d6Z5nKa.png) ### Kondensator * Je größer die Fläche, desto größer die Kapazität C * Je kleiner der Abstand d zwischen 2 Platten, destogrößer C * C = 1/d * Die Ladung Q, die ich im Kondensator speichern kann ist C * U ![](https://i.imgur.com/e3bIfPI.png) * Wie kommen Elektronen rein? * Man kann den Kondensator aufladen über einen const Strom I * Wenn man eine Kraft aufsetzt und Elektronen hineinschiebt in den Kondensator, dann hat man den Zusammenhang zwischen Strom und Lafdung * Strom = Ladung/Zeit, dh Ladung = Strom * Zeit * Dh man könnte einen Strom von 1 mA in 60 sec aufladen * Oder mit 60mA in 1 sec aufladen * Wenn man an den Kondensator eine LED anschließt, die leuchtet mit 2 mA, dann könnte man den Kondensator verwenden, um die LED 30 sec leuchtet ![](https://i.imgur.com/3IoqKOn.png) * Grenze: Der Kondensator wird durch eine einfache LED in längstens 30 sec entladen. LED haben aber meistens Vorwiderstand * Einfluss: Kondensator wird als Quelle genommen und entladen über ohmschen Widerstand und LED -> Verluste. Man hat zwar den Strom, mit dem die LED leuchtet, aber um den Vorwiderstand braucht man eine höhere Spannung im Kondensator. LED kann so weniger, als 30 Sekunden leuchten. * DH man muss den Kondensator auf 3,3V aufladen und verliert somit Elektronen. Das Q muss größer werden, wenn U größer wird. Aber die Kapazität gibt nur eine gewisse Anzahl von Ladungen vor - mehr geht nicht. * Für Kondensator ist der Stromfluß durch die LED schon eine große Last. Durch den Vorwiderstand ist es noch schwieriger. Andere Komponenten brauchen auch Strom. Kondensator wird bald leer. Dh der Kondensator ist ein Energeiespeicher, aber sehr klein. * Unter 5 Sekunden entladet man den Kondensator mit einer LED * Senden über UART - viel weniger Strom nötig, kann viel länger arbeiten ![](https://i.imgur.com/kDQYk3n.png) ### Energieverbrauch beim Microcontroller * CPU * Wenn NUR die CPU mit 80mHz läuft, braucht sie 10 mA * In sleep mode und 100kHz -> 0,12 mA * Low power sleep mode bei 100 kHz -> 33 microA * Man kann einen Prozessor also in einen Tiefschlafzustand setzen * UART * 4,1 microA pro MHz * GPIO 4,8 microA pro MHz * Kondensator kann den Microcontroller auch versorgen ![](https://i.imgur.com/xUWLm30.png) ## Vorlesung 4 ### Interrupts ![](https://i.imgur.com/dCKQbJ8.png) * Die CPU verwendet eine Bit Speicherstelle - **Pending bit** * **Wenn 1** ->Das laufende Programm soll **unterbrochen** werden und es soll die **Interrupt Service Routine ausgeführt werden**. Nachher kehrt man wieder zurück. Anders ausgedrückt: Zeitliche Blöcke werden hineingeführt (rot markiert auf dem unteren Bild) * Ein Programm setzt sich aus mehreren Befehlen zusammen * **Befehl laden** (Programm Counter -> Adresse des nächsten Befehls) -> Dh.: den **Programm Counter umleiten auf die ISR** * Damit ich danach weiter arbeiten kann, muss man den **PC Stand abspeichern**. ### Ablauf eines Interrupts: * **PC ladet ISR - Interrupt Service Routine. Diese wird abgearbeitet. PC muss wissen, wann ISR zu Ende ist, dann Pending Bit löschen und PC Stand vorm Interrupt wieder zurückladen.** ![](https://i.imgur.com/JWfCLOu.png) * Peripherals wollen einen Interrupt anfragen. Diese werden verwaltet vom **Interrupt Controller (NVIC)**. PC umleiten! * **SysTick** - Timer und Grund dafür, wieso STM keine Timer mehr hat. Kann **periodische Interrupts** erzeugen im Gegensatz zum Basic Timer. * Zeichnung für **Prüfung** merken! ![](https://i.imgur.com/d16zuae.png) * **Was ist hier zu sehen? Prüfung!** ![](https://i.imgur.com/y5SJ3Zz.png) * Von links nach rechts geht die Zeit, die in **Zeitzyklen** unterteilt ist * Bei einem Microcontroller, der mit 80Hz läuft, ist eine **Periode 12,5 nanosec** * In der ersten Zeile (erste Leitung) ist **ein einzelnes Signal - entweder 1 oder 0** * **2 Leitung zeigt an, das ein Interrupt jetzt stattfinden**. **Steigende Flanke** informiert darüber -> In der ersten Periode vom ersten Takt. Der Interrupt Request muss **vor der fallenden Flanke stattfinden**. Dann weiß man zu diesem Zeitpunkt - jetzt ist das **Pending Bit gesetzt** * Nächste Zeile {31:0} -> **32 Leitungen**, die können jede für sich einen Zustandwechsel machen * **HADDRS, HDATAS - 32 Bit breiter Adress- und Datenbus** * **S - Speicher** * **I - Befehle** * Was passiert auf den beiden Bussystemen? * In den ersten 3 Taktzyklen passiert **nichts - FETCH-DECODE-EXECUTE vom letzten Befehl**. Dh der letzte geholte Befehl wird ausgeführt, bevor der Interrupt bemerkt wird. Also - zuerst **Befehl abarbeiten**, dann erst Interrupt * **PC Wert wird gespeichert (nächste Adresse)**. * Die ROTE Phase heißt **Stacking -> CPU Register werden am Stack gespeichert** * **100** -> Startadresse der Interruptroutine * **0x48** -> fixe Adresse für Quelle des Interrupts * Ab Takt 13 -> **Execute für den ersten Befehl des Interrupts** * Kurze Antwort: * Interrupt tritt auf * Der letzte Befehl wird fertig abgearbeitet * Bussystem zum Speichern * Bussytsem zum Programm speichern -> DH Harvard Architektur * Register am Stack gespeichert -> Stacking * Startadresse der ISR wird geholt * Pipline wird ausgefüllt * **Latency bei Interrupt in Cortex-M -> 12 Taktzycklen, dh 150 nsec** * Priority bei Interrupts: * **Sub-Prio**. 0 ist die höchste Prio * Es wird dann direkt die 2 behandelt ![](https://i.imgur.com/IV2PdOO.png) * **Gruppen-Prio** * An eine Gruppe von Interrupts vergeben ![](https://i.imgur.com/2X2LVpx.png) ![](https://i.imgur.com/VWuK9p8.png) ![](https://i.imgur.com/NLkJ1F3.png) * **Prüfung - was passiert hier?** ![](https://i.imgur.com/ScTIbeS.png) * Wir kommen **von links, vom GPIO Pin**. Die Ladung landet im **Schaltkreis**, der eine Flanke erkennen kann * Mit einem Konfig Register kann man **Reaktionen auf Flanken bestimmen** (die ersten 2 Quadrate in der Mitte) * Wenn da eine steigende Flanke war -> **nächste Stufe -> ODER Gatter** * Signal geht weiter in die nächste Stufe, die in einem Gattersymbol endet -> **UND Gatter**. Auch hier gibt es ein Config Bit und man muss den Interrupt über das Masken Register aktivieren mit einer 1 enable. **Wenn nicht aktiviert -> kann er nicht weitergehen** * Pending Bit wird gesetzt, das anzeigt, **der Interrupt ist anstehend zum NVIC** * **Interrupt Controller** (NVIC) kümmert sich dann um die Prio ![](https://i.imgur.com/NFaHIxz.png) ## Vorlesung 5 * Halbleiter (https://vimeo.com/391944248) * Silicium - 4 Elektronen * Elektronen kommen nur bei hohen Temperaturen zusammen * Dh, in Raumtemperatur ist Silicium kein Leiter * Phosphor dazu geben und es wird auch unter Raumtemperatur gehen * Elektronen bewegen sich von rechts nach links (VO-Video 17 min) ![](https://i.imgur.com/NsbfbMm.png) * Es gibt 2 Prinzipien, wie Strom fließen kann * Drift * zB Silicium mit Phosphor, n-dottiert * Stromfluss durch den Halbleiter, wegen Elektronenbewegung. Freie Plätze bewegen sich in die gegengesetzte Richtung zu den Elektronen * Elektronen als Majoritätsladungsträger ![](https://i.imgur.com/KsGxujG.png) * p-dottiert - Freie Plätze bewegen sich gleich, wie die Elektronen ![](https://i.imgur.com/ROK5DPa.png) * Diffusion * rechts:Silicium und links: Silicium dottiert mit Phosphoratomen * Wenn man sie aneinanderbringt, werden sie sich ausbreiten -> Diffusion -> bis die Elektronen gleich verteilt sind ![](https://i.imgur.com/4ETdl84.png) * pn-Übergang * Ein Stück n-Dotiert und ein Stück p-dottiertes Halbleiter -> werden zusammengefügt ![](https://i.imgur.com/GKOa8H9.png) * Auf der linken Seite - frei bewegte Elektronen * Auf der Rechten - freie Plätze ![](https://i.imgur.com/O39PTwh.png) * Problem: die Ladungszone (Mitte) verhindert, dass sich alle Elektronen bewegen können * Um die Raumladungszone zu überwinden, muss man die Spannung in die richtige Richtung anlegen und der Raumladungszone entgegenwirken -> Diffusionsstrom. Je kleiner die Raumladungszone, desto leichter kann sie überwunden werden -> Stromfluss ![](https://i.imgur.com/PCt4kF2.png) * Hochdotierte Halbleiter haben schmale Raumladungszonen * Wenn die Spannung 'in die andere Richtung' erhöht wird, kommts zu Drift -> Elektronen können freie Plätze einnehmen, aber der Strom in die Gegenrichtung ist um viele Größen kleiner, als in Diffusion * Diodenkennlinie (grün = elektrisches Feld. Wenn reduziert bis fast 0 = Strom kann fließen) ![](https://i.imgur.com/nDtBwgz.png) * Es fließt kein Strom, bis eine gewisse Spannung erreicht wird: ch1,5 oder 1,7 V bei Dioden, bei pn-Übergang 0,7V * Wenn man zu dem Punkt kommt, wo man die Flußspannung erreicht, dann kann Strom fließen (grau = Raumladungszone) ![](https://i.imgur.com/YvuUudR.png) * blau - Elektronen. rechts - n-dottierter Halbleiter * links - p-dottiert, viele Plätze, die zur Verfügung stehen ![](https://i.imgur.com/GCaRHEH.png) * Wenn man jetzt eine negative Spannung anlegt -> Ladungszone größer * Positive Spannung (in diesem Fall über 0,6V) -> je mehr Spannung, desto schmäler die RLZ und desto mehr Fluss ![](https://i.imgur.com/RX053v1.png) ![](https://i.imgur.com/erf5yxr.png) * Wenn man positive und negative (mit zu vielen Elektronen) Kerne hat -> Spannung ![](https://i.imgur.com/tPoRqCy.png) * Spannungen werden immer in sinusförmiger Art erzeugt * Aber: Gleichspannung notwendig * GSP mit Hilfe von Brücken-Gleichrichter * Grün - Input - Eingangsspannung positiv oben, negativ unten, dh Dioden 1 und 4 leiten Strom * 2. Zeichnung - Diode 1 und 4 leiten über den Lastwiderstand Strom und dann Diode 3. Zurück über Diode 2 ![](https://i.imgur.com/Gt3Ugni.png) * Strom fließt da immer in die selbe Richung * Lastwiderstand sieht nur <rechte-Zeichnung> ![](https://i.imgur.com/57yJ820.png) ![](https://i.imgur.com/NoXAbPw.png) * Wenn man einen Kondensator hinzufügt, kann man die Spannung noch glätten. Je größer Kondensator, desto geringer die Welligkeit ![](https://i.imgur.com/bOMvlTr.png) * Über PWM Signal werden nur solche Anteile, sodass man auf eine Spannung von 5V kommt. * 4 Dioden, um Spannung gleich zurichten -> Schaltnetzteile * Wichtug, um aus einer Wechselspannung eine Gleichspannung zu machen Zum Transistor wollte er auch gerne das man die Kollektorströme einzeichnen kann und dazu sagen was man tun muss damit die Raumladungszone überwunden werden kann. * Transistor * 3 unterschiedlich dottierte Schichten N - P - N * B - Basis * E - Emitter * C - Kollektor * Strom fließt zwischen Kollektor und Emitter * Vom Emitter zum Kollektor ![](https://i.imgur.com/zVPcniM.png) * Gewöhnliche Transistoren ![](https://i.imgur.com/eKO86fO.png) ![](https://i.imgur.com/oUkksmy.png) * **Wichtig** - Zeichnung für Transistor * dunkelblaues Feld mit Pünktchen - stark dottiert * hellblau n-Si und p-Si - schwach dottiert * schwarz - Raumladungszone * legt man eine Spannung an, wird die Zone viel schmäller -> Stromfluss nun möglich -> beide Zonen können überwunden werden ![](https://i.imgur.com/L6qkDxH.png) ![](https://i.imgur.com/ZR6ICPc.png) ![](https://i.imgur.com/r6zBHoo.png) * Kollektorstrom -> Von Emitter zu Kollektor * Basis -> Steueranschluss. Energieniveau senken/erhöhen ![](https://i.imgur.com/7hrU3G5.png) ![](https://i.imgur.com/x0ITFFi.png) * Transistor in LAB ![](https://i.imgur.com/R6lVLHa.png) --- ## Labor 1 * Spannung anlegen * Spannung messes (parallele Schaltung) * Strom messen (serielle Schaltung) * Characteriser * **Strom und Spannung messen** auf einem Bauteil, bekannt als **Device Under Test (DUT)** --- ### Projekt - Blinky LED test for the ST Nucleo boards * Die grüne LED am MC blinkt ![](https://i.imgur.com/l3OEEkg.png) * Weiter gehts mit Steckbrett * 1 kOhm Widerstand jeweils in den mittleren Loch ![](https://i.imgur.com/sxrlLte.png) ### Spannung anlegen * Jetzt legen wir eine Spannung an, dh wir bilden einen elektrischen Stromkreis. Die Spannung geht an PC_0, weil wir das der Software so gesagt haben. Die gemessene Spannung (U-R) soll 3,3 V betragen. ![](https://i.imgur.com/org78P0.png) * Nun wird das weiße Board mit dem MC verbunden über Kabeln an Arduino Stifte ![](https://i.imgur.com/ElTSc36.png) ![](https://i.imgur.com/UFQ1qtV.png) ### **Spannung messen** mit Multimeter, der **parallel geschalten** ist: * Schwarz-Gelber Kabel kommt an Widerstand, auf der Seite, die mit Ground verbunden ist. Rot-Gelb kommt an die Seite, wo der rote Kabel angeschlossen ist. Der Widerstand kann so direkt gemessen werden ![](https://i.imgur.com/b2wd53D.png) ![](https://i.imgur.com/B9uIs9d.png) ### **Strom messen** mit Multimeter, der **seriell geschalten** ist: ![](https://i.imgur.com/FL4PhNP.png) * Unterer Teil ist die Serielle Schaltung. Das Obere soll entfernt werden ![](https://i.imgur.com/4CsJErs.png) ![](https://i.imgur.com/uAdQjSg.png) ![](https://i.imgur.com/yzlvGT6.png) * **Rot-schwarzer Kabel am Multimeter wird auch umgeschaltet und zwar auf mA** * **Max 20 mA** kann ein MC ausgeben * Wenn Widerstand zu klein, kommt man nicht auf 3,3 mV, sondern: ![](https://i.imgur.com/FXaa1YN.png) * Wenn U und I gegeben, wie groß muss mind R sein? ![](https://i.imgur.com/jjTDEil.png) ### *2. Teil des Labs* ### Strom und Spannung messen auf einem Bauteil, das wir als Device Under Test (DUT) bezeichnen * **Characteriser - Messgerät für Widerstandsgerade** * VA-Characteristic. Es wird angezeigt, welche Anschlüsse verwendet wurden ![](https://i.imgur.com/st00VWy.png) * **Von 1 kOhm** wollen wir **Strom und Spannung messen** auf einem Bauteil, das wir als **Device Under Test (DUT)** bezeichnen * Man kann Strom so **nicht direkt messen**, also muss man einen zweiten, **viel kleineren Widerstand einbauen** - Widerstand zum Strom messen - 33 Ohm. * **Beide Widerstände sind seriell geschalten**, also fließt **der selbe Strom** durch und die **Anwendung misst den Spannungsabfall** auf diesem Strommesswiderstand und berechnet daraus den Strom. **Strom wird aus der gemessenen Spannung berechnet, durch die angegebenen 33 Ohm.** * **Gesamtspannung** an den beiden Widerständen wird gemessen und von der Gesamtspannung wird die **Spannung am Strommesswiderstand abgezogen** -> Spannung an DUT ![](https://i.imgur.com/WgeBlNU.png) * Rot - veränderliche Spannungsquelle, kommt vom Anschluss A2. Zwischen den beiden Widerständen. Wird an A1 angeschlossen. * Gelb - Am unteren Ende vom 33 Ohm ist Ground * Grün - DUT kommt an 1kOhm Widerstand, einmal mit A0 und einmal mit A2 ![](https://i.imgur.com/vbCERDq.png) ![](https://i.imgur.com/i62Mxwh.png) ![](https://i.imgur.com/Icr4ahr.png) * Meassure drücken * Spannung wird in 20 miliVolt Schritten erhöht * Strom wird gemessen und dargestellt * Eine Kenninie von 1kOhm soll kommen - linearer Zusammenhang * -> Dh. bei 2,5V fließen 2,4 miliAmpere ![](https://i.imgur.com/VNlOWbZ.png) * **Jetzt:** statt DUT kommt eine **Leuchtdiode** * +Pol (längere) geht an Anschlüße A0 und A2 * -Pol geht an den Strommesswiderstand * Dann misst Characterizer die Linien ![](https://i.imgur.com/1HDU51Y.png) * Gelbe Leuchtdiode (blau): ![](https://i.imgur.com/SuzKg31.png) * Grüne Leuchtdiode: ![](https://i.imgur.com/bmeTi4Q.png) * Rote Leuchtdiode (grün): ![](https://i.imgur.com/qJmPrIg.png) #### **Erkenntnis:** LED leuchtet ab Flussspannung, die von LED Farbe abhängt * Led toggelt, source bleibt on ![](https://i.imgur.com/k6pDJzD.png) * Schaltbild dazu ![](https://i.imgur.com/WRVduXj.png) ## Labor 2 * Little Embedded Oscilloscope * Jede beliebige Spannung anstellen -> Ohmsches Gesetz + Kirchhofsche Regeln * Spannungsteiler * Aus einer binären Zahl, eine analoge Spannung erzeugen (Code) * Sinuswelle erzeugen (Code) --- * Der konstante Zusammenhang zwischen Strom und Spannung ergibt in dem Strom-Spannungs-Diagram eine Gerade. Der Ohmsche Widerstand ist der proportionale Faktor. ![](https://i.imgur.com/wYcaLeH.png) * STM32 kann 20 miliAmpere liefern, dh Strom wird durch Leuchtdiode automatisch begrenzt, weil der digitle Ausgangspin nur 20 miliAmpere liefert. * Wenn wir eine Serienschaltung aus dem Ohmschen Widerstand und Leuchtdiode bauen und an 3,3 V anschließen, wird der max Stromschluss begrenzt. * Typischer Widerstand von einer LED sind 330 Ohm. Wir haben entweder 3,3V oder 0V Spannung angesteuert, also: **digitale Spannung**. ![](https://i.imgur.com/c0COJNu.png) ### **Spannungsteiler** * 2 Widerstände werden in Serie geschalten * Blauer Punkt -> Hälfte der ursprünglichen Spannung * **Im Bereich 0 bis 3,3V kann man über 2 Widerstände jede beliebige Spannung herstellen durch einen Spannungsteiler**. * Dh, wenn ich zB 1V haben will, nehme ich einen Widerstand mit 2,2 kOhm und einen Widerstand von 1 kOhm - dann fallen oben 2,2V ab und unten 1V * Hacken: wenn ich was mit der ('oberen') Spannung machen will, wenn ich was (einen Lastwiderstand) anschließen will, wird ein Strom wegfließen und im unteren Widerstand wird kleinerer Strom fließen. ![](https://i.imgur.com/FuQc1YL.png) * Nun schalten wir zu einem Widerstand einen zweiten Widerstand parallel. Auf der linken Seite: konstante Quelle * **Wenn ich 2 gleich große Widerstände parallel schalte, dann ergibt sich in Summe ein Widerstand, der halb so groß ist.** * Somit kann das Problem des Spannungsteilers behoben werden: wenn ich weiß, wie groß der Lastwiderstand ist, den ich anschließe, dann pass ich an den Lastwiderstand den Spannungsteiler an. So kann er passend ausgewählt werden ![](https://i.imgur.com/Gm39bRs.png) ### Digital to analog - DAC Converter * Analog: kontinuirlicher Signal mit unendlich vielen möglichen Werten, zB Temperatur * Digital: diskrete Werte (mit Stufen), zB ganze Zahlen. Dargestellt als binäre Zahlen * Binary numbers need to be converted to analog voltage. * Wir wollen eine Sinuswelle darstellen. Je kleiner die Stufen (statt 30, machen wir 15 oder noch kleiner), desto eher sehen wir eine Sinuswelle ![](https://i.imgur.com/1q69MT4.png) * Digital to analog converter * Bei 8 bit - 1 Stufe = bei 12 bit 16 kleine Stufen ![](https://i.imgur.com/AXppWRs.png) * Wir teilen Spannung mit Hilfe von Widerständen. ![](https://i.imgur.com/yEy38TY.png) * Um eine konkrte Spannung zu erzeugen, addieren wir die nötigen Widerstände. Das macht man mit einer speziellen elektronischen Schaltung - Operationsverstärker (Operational Amplifier). ![](https://i.imgur.com/vZJ26uG.png) * Es hat 2 Eingänge: + und -. Wir schließen jeweils U- und U+ an. Ausgang: Spannung Ua ergibt sich als Differenz der beiden Spannungen mal Verstärkung A ![](https://i.imgur.com/Stzf4b6.png) * Ursache und Wirkung * Ursache: Widerstand ist unendlich groß -> Strom kann nicht hinein fließen * Wirkung: Operationsverstärker wirkt als Addierer: ![](https://i.imgur.com/pRs2Jf0.png) * Spannungsteiler: * Hat ein R2R System, um Spannung zu teilen * Hat einen Operationsverstärker, der die Spannungen addiert * Dh man erstellt mit einer elektrischen Schaltung alle Teilspannungen, kriegt somit Teilströme. Dann kommt eine zweite einfache Spannung, die nur aus dem Operationsverstärker und einem Widerstand in der so genannten Rückkopplung besteht und damit werden die Ströme addiert. ### **Implementierung auf mbed - Aus einer binären Zahl, eine analoge Spannung erzeugen** * 2 Funktionen notwendig * AnalogOut, dh auf PA_4 wollen wir eine analoge Spannung ausgeben. Dh PA_4 ist dem DAC zugeordnet * aout.write_u16, damit geben wir eine 16-Bitzahl aus. Von 0 bis 65000 * sample=Spannungswert * Mit diesem Code erzeuge ich unterschiedliche Werte ![](https://i.imgur.com/Q27q4NK.png) ![](https://i.imgur.com/GxSGPGp.png) * Auf Leo wird das Ergebnis beobachtet ![](https://i.imgur.com/pfAkdER.png) ![](https://i.imgur.com/F13ubMZ.png) * Wenn wir Datalength auf 1000 ändern: ![](https://i.imgur.com/pn7Eyr4.png) ![](https://i.imgur.com/C4z9w3z.png) * Wenn wir die Time base auf 10k ändern: richtige Stufen kommen ![](https://i.imgur.com/rCQRVsp.png) * Wenn wir bis 80 in der for-Schleife gehen: Overflow (fällt auf 0 und nicht bis 0.75, weil uint_16 nicht genug Bitstellen hat) ![](https://i.imgur.com/sVzMkqX.png) ![](https://i.imgur.com/f6iCaOn.png) ![](https://i.imgur.com/4yzLAcC.png) ![](https://i.imgur.com/61LM6Jx.png) * Schaltbild ![](https://i.imgur.com/aHXHQOv.png) ![](https://i.imgur.com/TILAmku.png) ![](https://i.imgur.com/Q5BYI6H.png) * Amplitude auf minus setzen ![](https://i.imgur.com/VEyFbYN.png) ![](https://i.imgur.com/d2hT42g.png) * Create a sin wave ![](https://i.imgur.com/PG9hK1f.png) ![](https://i.imgur.com/y0Kle5u.png) ![](https://i.imgur.com/7ifgFxf.png) ## Labor 3 * Output am PC ausgeben * Microcontroller verbinden und Daten seriell schicken * Input einlesen - Read a character from terminal * Read a character and toggle LED * Read a character and toggle LED as many times as received value --- * Serielle Kommunikation ![](https://i.imgur.com/VUUf3uE.png) * TERA TERM ![](https://i.imgur.com/2b6DezK.png) ![](https://i.imgur.com/D9jC5q7.png) * Nun wollen wir seriell Daten schicken und verbinden die beiden MCs ![](https://i.imgur.com/SYYp1m4.png) ![](https://i.imgur.com/625OsLz.png) * Kleine Änderung, damit wir auf LEO den Vorgang genauer betrachten können: wir geben nur klein a aus ![](https://i.imgur.com/kVMwtou.png) ![](https://i.imgur.com/TlMO7fT.png) ![](https://i.imgur.com/AnknSx3.png) * Nun wollen wir auch was eintippen ![](https://i.imgur.com/0Zr3uh3.png) ![](https://i.imgur.com/ISLt5bE.png) * So funktionierts drinnen: ![](https://i.imgur.com/iyxPI0i.png) ![](https://i.imgur.com/Mw03OQc.png) ![](https://i.imgur.com/FGJsod8.png) ![](https://i.imgur.com/HcTMem5.png) ![](https://i.imgur.com/IauU5ZS.png) ![](https://i.imgur.com/b8Z6iub.png) ![](https://i.imgur.com/Z2IEYS3.png) ## Labor 4 * Kondensator * RC-Tiefpass * Schaltung für RC Tiefpass * Schmitt-Trigger --- * Kondensator * Man kann einen Kondensator laden oder entladen, dh Strom zu der Platte bringen und dann wieder weg. * Kondensator in Serie: Strom kann so lange fließen, bis der Kondensator geladen ist -> wenn geladen: Stromfluß ist zu Ende. * Kein Stromfluß durch den Kondensator * Kapazität: C = kA (k=Proportionalitätsfaktor) * 2 Kondensatoren parallel schalten: Fläche vergrößert sich * Kapazität: C = k2A ![](https://i.imgur.com/kBMOKA2.png) * 2 Kondensatoren in Serie geschalten: Abstand zwischen Flächen ist vergrößert * dh. Kapazität ist kleiner ![](https://i.imgur.com/9Lb8LdJ.png) * Energiespeicher * Strom = Ladung (Q) * Zeit (t) * Ladung = Kapazität (C) * Spannung (U) ### Kondensator + Ohmscher Widerstand Schaltung = RC Tiefpas * Jedes Kabel wirkt wie ein RC Tiefpass * x = Durchmesser von Kabel * Beide Kabel durch Isolatoren getrennt * Haben Abstand d * Je länger der Kabel, desto größer Kapazität und Widerstand ![](https://i.imgur.com/qmeajM7.png) * Schaltung für RC Tiefpass ![](https://i.imgur.com/tziuAOg.png) * Zum Zeitpunk t=0 ist der Kondensator nicht geladen ![](https://i.imgur.com/DKXfj1Q.png) ![](https://i.imgur.com/LVBbMEz.png) ![](https://i.imgur.com/emXc0MO.png) * Beispiel 1 ![](https://i.imgur.com/KUMQwuR.png) * Schaltung ![](https://i.imgur.com/7RwxNmP.png) * Code ![](https://i.imgur.com/Hp6jIVN.png) ![](https://i.imgur.com/I6tCT0N.png) * Der vertikale Kursor zeigt die Differenz in der Zeit an ![](https://i.imgur.com/NLuEUFR.png) 99 microsec ![](https://i.imgur.com/9EHmUsR.png) * Nach 100 microsec ist der Kondensator mit 2,1V geladen * Nach 500 microsec ist der Kondensator mit 3,208V geladen * Über 3,3V gehts nie * 2.Kondensator wird eingesetzt: * Ganze Milisekunde wird gebraucht, um den Kondensator zu laden ![](https://i.imgur.com/UFXsEf8.png) #### GPIO Input * In STM32 gibt es den Schmitt-Trigger für einen GPIO Input * Er schaltet bei einer gewissen Spannung - 1,7V - um und macht dann eine saubere 1 oder 0 * Eingangsspannung/Ausgangsspanung ist angelegt * Wenn man die E-Spannung langsam erhöht, bleibt der Ausgang 0, bis man die Spannung von 1,7V überschreitet. Nach Überschreiten: Schmitt-Trigger gibt 3,3V aus * Wenn man mit 3,3V anfängt und runtergeht, muss man 1,6V überchreiten, damit der Schmitt-Tigger umschaltet ![](https://i.imgur.com/Vr2qMHn.png) ![](https://i.imgur.com/JQ4Afvp.png) * #### 1. Nachteil von RC Tiefpass * Die Ladung dauert lange * Zeitliche Verzögerung des Signals * Je höher Kapazitätswert, desto größer die Vergrößerung * Nun wandeln wir das Ausgangssignal des RC in ein digitales Signal um. * Code: * Das, was an D2 ankommt, wird an UA ausgegeben ![](https://i.imgur.com/a86o8EC.png) * Schaltung: * Leo kann Signale erzeugen. Er hat einen Funktionsgenerator, mit dem man ein Rechteckssignal erzeugen an. Mit Anschluss A2 (Channel 3) -> das ist die Eingangsspannung * Mit Anschluss A5 sieht man, welche Spannung man dort anlegt * Welche Ausgangsspannung am Kondensator (A4). Diese wird an den Digitalen Input von L476 D2 angeschlossen. * Es wird über den Schmitt-Träger geworfen und gibt das Signal am Anschluss A5 (PC_0) wieder aus ![](https://i.imgur.com/amDMcfH.png) * Jetzt am Leo (Startseite) Generator auswählen * Wir drücken Square und schreiben 1000 hZ -> enable ![](https://i.imgur.com/5n3PCqo.png) * Zurück zum Oscilloscope * Man sieht, dass der RC Glied sich nicht mehr ganz auflädt * Das erzeugte Rechtecksignal wird vom DAC vom STM32 mit analogem Ausgangspin (und nicht mit GPIO) erzeugt. Der hat einen höheren Widerstand, deshalb erreicht man nicht mehr 3,3V. ![](https://i.imgur.com/ykHeEOo.png) * Das grüne Channel zeigt den verschobenen Rechtecksignal (2 Kondensator haben wir entfernt) * Mit horizontalen Kursern, sieht man, bei welchen Spannungen umgeschalten wird * Von 1 auf 0 -> 1,523V * Von 0 auf 1 -> 1,6V ![](https://i.imgur.com/lZJcZTX.png) * #### 2. Nachteil von RC Tiefpass - Dämpfung * Wir setzen den 2. Kondensator wieder ein und schauen uns Leo wieder an (Kapazität = 20 NanoFerrat) * Kondensator wird nicht mehr voll aufgeladen * Restspannung bleibt über * Wir verändern die Frequenz von 1000hZ auf 2000hZ am Funktionsgenerator * Jetzt sind wir zwischen 0,75V und 2,5V. Strom fließt zu kurz, daher funktioniert das auf- und entladen nicht. Signal hat zu hohe Frequenz ![](https://i.imgur.com/JMadNU7.png) * Nun gehen wir auf 4 kHz * Spannung im Kondensator ändert sich nur noch im Bereich zwischen 1,2V bis 2,1V * Dh: je höher die Frequenz, desto größer die Zeitliche Verzögerung in der Relation zum Signal. Absolut ist die Verzögerung gleich (100 microsec) ![](https://i.imgur.com/ebZWD1P.png) * Nun 8kHz * 1,3V -1,7V Spannungsveränderung ![](https://i.imgur.com/XUykq4R.png) * Nun 15 kHz ![](https://i.imgur.com/M39u3o7.png) * Nun 50 kHz * Die Änderung ist zu klein, die Spannung liegt bei 1,6V, dh der andere MC wird das Signal nie als 0 interpretieren * Wenn die Frequenz hoch genug ist, kriegt man am Ende eine Gleichspannung raus -> 1,65 ![](https://i.imgur.com/rlx31eg.png) ![](https://i.imgur.com/SAwhDEQ.png) * Beim Funktionsgenerator den Ausgang wieder deaktivieren -> dann Einstellen, wieviel % auf 1 und wieviel auf 0 ![](https://i.imgur.com/ZVS7YoH.png) * Zb. Dutycycle 75%, Zeit: 20 microsec * 15 microsec 3,3V, 5 microsec 0V -> dh. mehr Zeit zum Aufladen, als zum Entladen * In Leo: andersrum! ![](https://i.imgur.com/CLbshr5.png) * Mittelwert, den man als Ausgangsspannung bekommt: 0,7-0,8V * Mittelwertbildung eines RC Tiefpasses * Bei hohen Frequenzen: * Keine Signale mehr, sondern Gleichspannungswert, abhängig davon, wie lange das Signal ein/ausgeschalten ist, Jede analoge Spannung zwischen 0 und 3,3V kann erzeugt werden ![](https://i.imgur.com/b2s2u5c.png) ![](https://i.imgur.com/1okO5sb.png) * Dh, RC Tiefpass wird verwendet um analoge Spannung (Mittelwertspannung!) zu kriegen (für Verstärker, Motor, etc) #### Nun zurück zum Funktionsgenerator * Disable und zurück zum Sinus Signal und 1kHz ![](https://i.imgur.com/9S8wJvE.png) ![](https://i.imgur.com/K98Mlxg.png) * Ausgangssignal ist sehr klein. RC Tiefpass umbauen * 1kOhm Widerstand und 10 Nanoferrat Kondensator werden eingebaut - bei 1 kHz ist Eingangs- und Ausgangsspannung fast gleich bei beiden * Wenn man bei Time auf 500 geht, sieht man einen kleinen Unterschied, dh zeitliche Verzögerung ![](https://i.imgur.com/8sPmRYS.png) * Nun wird nur mit 303 gearbeitet * Frequenz wird erhöht auf 5 kHz. Man sieht die Phasenverschiebung und die Amplitude des Ausgangssignal ist kleiner ![](https://i.imgur.com/i7fy5TR.png) ![](https://i.imgur.com/cwKKWR8.png) * Dort, wo sich dir rote und blaue Linie kreuzen, ist Eingangs- und Ausgangsspannung gleich und der Kondensator ladet sich neu bzw entladet sich * Frequenz: 10 kHz * Amplitude vom Ausgangssignal ist deutlich kleiner ![](https://i.imgur.com/UV5cSch.png) * Wir tauschen den Widerstand auf 10 kOhm -> dh Frequenz geht in die Höhe * 1 kHz (Funktionsgenerator) -> ist (fast) genau gleich, wie bei 10kHz und 1kOhm ![](https://i.imgur.com/RRTrs3A.png) * 5 kHz -> je höher die Frequenz, desto kleiner wird sie, sie wird gedämpft * Deshalb wird ab einer gewissen Frequenz aus einem Rechteck ein Sinus, weil die hohen Frequenzen (die man laut Fourrier Synthese braucht, um ein Rechtecksignal darzustelllen) kommen nicht mehr durch -> je höher die Frequenz, desto kleiner die Amplitude ![](https://i.imgur.com/MIbShnW.png) * Vergrößert auf 1M ![](https://i.imgur.com/spR3cz9.png) #### Relation Eingangs- vs Ausgangsspannung ![](https://i.imgur.com/gyTkXxN.png) * Bis zur Grenzfrequenz geht der Signal durch RC Tiefpass. Wenn die Frequenz größer wird, macht der Tiefpass eine Gleichspannungsmittelwert draus - Signal geht nicht durch * Je länger der Kabel, desto mehr Frequenzen werden abgeschnintten ![](https://i.imgur.com/A4QUAHq.png) ## Labor 5 * Analog to digital * Potentiometer anschließen und Spannungswert am Terminal ausgeben (Code) * Gemessenen Wert mit 4 Schwellwerten zuvergleichen, und bei überschreiten jeder Schwelle eine der 4 LEDs am Multifunction-Shiel einzuschalten * Mit dem LEO Funktionsgenerator eine Sinusspannung mit einer Frequenz von 1kHz erzeugen und diese Spannung mit 20kHz mit dem ADC einlesen (also 20 Werte für eine Periode) und in einem Array speichern. Anschließend diese Werte verwenden und mit dem DAC ausgeben. Je nachdem wie lange das Delay zwischen den einzelnen ausgegebenen Werte ist kann nun ein Sinus mit unterschiedlicher Frequenz erzeugt werden. --- * Analoge Spannung am Eingang ist wichtiger, als die am Ausgang, denn die meisten Sensoren wandeln physikalische Größen in elektrische Größen um. * ZB: Lichtstärke kommt auf ein Material - Ohmscher Widerstand verändert sich * Bei Beschleunigung und Druck ändert sich der Kapazitätswert * Beschleunigungssensoren: * MEMS: auf Grund der Massenträgheit bewegen sich die Kämme -> Änderung der Kapazität, was gemessen werden kann * Diese Veränderungen kann man in Schaltungen einbauen * Raumtemperatur: 20 Grad = 10kOhm. Je wärmer, desto größer der Widerstand -> Positiver Temperaturkoeffizient. Oder verringern -> NTC * Analoge Spannung wird in Digitalen Wert vom MC umgewandelt und der Sensor wandelt die physikalische Größe in elektrische Größe um * Von der elektrischen Spannung interessante Sachen: * Statischer Wert - Amplitude des Maximalwert der Spannung * Kapazitätsänderung - dabei ändert sich in einem RC Glied die Zeitkonstante * Wiederholung: * Beim DAC mit 12 Bit -> 4096 Stufen, dh von 0V bis 3,3V * Wenn man ein Rechtecksignal zusammensetzen möchte aus einzelnen Frequenzkomponent, braucht man einmal die Grundschwingung (1 Frequenz) und einen Frequenzanteil aus 3-Fachen Frequenz, Komponente aus der 5-Fachen Frequenz -> diese überlagert ergeben dann ein Rechteckssignal. ![](https://i.imgur.com/NKwYfRo.png) * Um den Sinus zu rekonstruieren, könnte man zB 10 Messungen pro Periode machen, das wäre aber zu aufwendig, deshalb nimmt man andere Werte -> Nullstellen und Maxima und somit kommt man auf 4 Werte pro Periode * Nyquist-Theorem: von der Sinusschwingung mit der höchst vorkommenden Frequenz braucht man 2 mal höhere Frequenzen, als die höchste Frequenz, doppelte Abtastrate -> Zeit zwischen 2 Messpunkten ist wichtig, damit man die Signale richtig erfassen kann. ![](https://i.imgur.com/rVcAYx3.png) ![](https://i.imgur.com/akG440T.png) * Wenn man das Theorem verletzt, kann man das Signal nicht mehr richtig rekonstruieren (= Aliasing). Man kriegt eine viel längere Frequenz ![](https://i.imgur.com/xPxfyR8.png) * Analog to digital: ![](https://i.imgur.com/kMJznU2.png) * Grün: Analoges zeitlich kontinuierliches Signal * Rot: digital: Wert, Zeit diskret ![](https://i.imgur.com/D6wvfBM.png) ![](https://i.imgur.com/aUPN6bO.png) * Wenn das Signal vorm Tiefpass aus einer Treppenkurve besteht, dann können die Sprünge von der Treppe abgeschwächt werden von dem Kondensator -> flüssigerer Übergang, Kondensator wird geladen * Dh, Tiefpass macht daraus wieder ein analoges Signal ![](https://i.imgur.com/7eCxfEl.png) * Messkette: * Analoges Signal wird abgetastet (Sampling), dann wird es quantisiert * Diese beiden Einheiten werden vom ADC übernommen (grün) * Dieser digitale Datenstrom (rot) kann am PC bearbeitet/gespeichert/komprimiert werden * Dann über DAC wieder zu analog wandeln ![](https://i.imgur.com/amtyhoS.png) ![](https://i.imgur.com/Dvm9LSB.png) * Schaltung ![](https://i.imgur.com/5Tc8gvC.png) * Digitalisieren ![](https://i.imgur.com/Mp0mcVy.png) * Kompletter ADC ![](https://i.imgur.com/WccszJF.png) * Wandlungsdauer ![](https://i.imgur.com/T3NmaKw.png) * L476 hat 2 Werte * 12-bit Auflösung * 5.33 Msps maximale Wandlungszeit #### Beispiele ![](https://i.imgur.com/m6A6Qvb.png) ![](https://i.imgur.com/us5SFpO.png) ![](https://i.imgur.com/xeYTXIL.png) ![](https://i.imgur.com/IFUlqtj.png) * Auf Tera Term anschauen ![](https://i.imgur.com/YxzyTrP.png) * Mit Nachkommastellen ![](https://i.imgur.com/kXVkQY8.png) ![](https://i.imgur.com/lZgbH6X.png) ![](https://i.imgur.com/OSPrRMG.png) ![](https://i.imgur.com/RQV5CqS.png) ![](https://i.imgur.com/QNcwRR0.png) ![](https://i.imgur.com/D9zXOF2.png) ![](https://i.imgur.com/twZ2Olr.png) ![](https://i.imgur.com/llm2DgQ.png) ## Labor 6 * Timer * Ticker (Code) * LEDs steuern und mit unterschiedlicher Frequenz blinken lassen (mit Multi-Funktions-Schild) --- ### Microcontroller ![](https://i.imgur.com/QYK9nmM.png) ![](https://i.imgur.com/atlbOFs.png) ### Timer * Timer * Warteschleife * Zeitgesteuerte Software * Interrupts ![](https://i.imgur.com/OX3cR7s.png) ![](https://i.imgur.com/J648kK4.png) * Basic Timer – Ticker - Interrupt * General Purpose Timer * Capture and Compare * Puls Weiten Modulation * Lichtstärke ändern * Analoge Spannung RC-Tiefpaß * Servomotor ### Timer - Counter ![](https://i.imgur.com/o5k88xR.png) ### STM32 – Basic Timer > Erzeugung periodischer Interrupts ![](https://i.imgur.com/3upNr0J.png) * Nur, wenn der Zahlenwert (39999) in PSC erreicht wird, wird ein Signal an den Counter weitergegeben. Das sind ca 0.5 milisec * Es wird nicht mehr bis zum Überlauf gezählt, sondern bis zum Wert, der in ARR gespeichert wird * Anwendungsbeispiel – mbed – Ticker * Es werden 2 Parameter übergeben: * Zeit (wann, wie oft, zB.: alle 100 milisec) * Was soll passieren alle 100 milisec? Welche Funktion wird ausgeführt? ![](https://i.imgur.com/jZTtRMa.png) * LED soll blinken ![](https://i.imgur.com/cLI9GRe.png) ![](https://i.imgur.com/8ODUJTT.png) ### General Purpose Timer * Interne Taktperioden mitzählen - Zurückrechnung auf Zeit * Prescaler * weil die Frequenzen mittlerweile zu hoch sind, der Counter würde innerhalb kürzfristiger Zeit überlaufen * Auto-reload register - period * Bei Überlauf: periodischer Interrupt ![](https://i.imgur.com/phgMm8f.png) * 2 funktionelle Möglichkeiten werden vom Channel angeboten (entweder/oder!): * Zusätzliches Compare Register: Zahlenwert kann hier gespeichert werden. Bsp 1000. Wenn der Wert im Counter mit Wert im Compare übereinstimmt, dann kann der Kanal direkt einen Anschlusspin (OC) ansteuern, ohne CPU! Kein Interrupt notwendig * Pin wird nicht als Output verwendet, sondern als Input. Von diesem Pin kann man erkennen, ob an dem Pin eine Flanke anliegt. Wenn ja, dann wird die Funktion Capture ausgeführt. Wert vom Counter (Zeitpunkt, an dem das Ereignis stattgefunden hat) wird kopiert in das Capture register ![](https://i.imgur.com/4CkUJVS.png) ### Timer Anwendungen - CC ![](https://i.imgur.com/EVccSWP.png) * Compare: ohne CPU #### Pulsweitenmodulation ![](https://i.imgur.com/DfNHgI4.png) ![](https://i.imgur.com/X6GbF5U.png) ![](https://i.imgur.com/bMmmq0t.png) #### Ansteuerung eines Servomotors ![](https://i.imgur.com/2ylDVzj.png) ## Beispiele 3. **ADC** * Messkette: * Analoges Signal wird abgetastet (Sampling), dann wird es quantisiert * Diese beiden Einheiten werden vom ADC übernommen (grün) * Dieser digitale Datenstrom (rot) kann am PC bearbeitet/gespeichert/komprimiert werden * Dann über DAC wieder zu analog wandeln ![](https://i.imgur.com/FniUY8y.png) ![](https://i.imgur.com/CO3hs7j.png) * Mögliches Beispiel: Potentiometer an ADC Pin anschliessen und den Wert über UART am Terminal ausgeben ![](https://i.imgur.com/b6PuEp1.png) ![](https://i.imgur.com/krtc35A.png) ![](https://i.imgur.com/3RLquCO.png) 4. **PWM: Signal mit 25% ausgeben und mit LEO messen** ![](https://i.imgur.com/wyop8zG.png) ### 1. Erstelle eine Serienschaltung von 2 unbekannten ohmschen Widerständen. Messe die Spannung und bestimme das Verhältnis der beiden Widerstände **Spannung ausgeben, einlesen (Lab 1)** * Jetzt legen wir eine Spannung an, dh wir bilden einen elektrischen Stromkreis. Die Spannung geht an PC_0, weil wir das der Software so gesagt haben. Die gemessene Spannung (U-R) soll 3,3 V betragen. * Spannung ausgeben: Stromkreis bilden mit den Widerständen * Einlesen: LEO 2. **Mit LEDs messen und Screenshot vom Oscilloscope abgeben** * Von 1 kOhm wollen wir Strom und Spannung messen auf einem Bauteil, das wir als Device Under Test (DUT) bezeichnen * Man kann Strom so nicht direkt messen, also muss man einen zweiten, viel kleineren Widerstand einbauen - Widerstand zum Strom messen - 33 Ohm. * Beide Widerstände sind seriell geschalten, also fließt der selbe Strom durch und die Anwendung misst den Spannungsabfall auf diesem Strommesswiderstand und berechnet daraus den Strom. Strom wird aus der gemessenen Spannung berechnet, durch die angegebenen 33 Ohm. * Gesamtspannung an den beiden Widerständen wird gemessen und von der Gesamtspannung wird die Spannung am Strommesswiderstand abgezogen -> Spannung an DUT ![](https://i.imgur.com/Ke68vTr.png) ![](https://i.imgur.com/I0Huq74.png) ### 2. Schließe ein Widerstand R = 10 kOhm parallel zum Widerstand R2 und messe die Spannung an dieser Parallelschaltung * 2 gleich große Widerstände parallel geschalten, ergeben in Summe den halb so großen Widerstand, dh 2 Widerstände 1000 und 1000 ergeben 500 ![](https://i.imgur.com/MIiBVdM.png) 7. Messe die Zeitkonstante eines RC-Tiefpasses mit einem Kondensator C=10 nanoFerrat. Wie groß ist die Zeitkonstante tau? Wie groß R? Gaelle fragen 8. Mit USART Zeichen "B" senden, mit Datenrate 1000 Bit/Sekunde - Signal vor und nach einem RC-TP messen Gaelle fragen 9. Mit DAC eine Sinusschwingung (aus 10 Werten) erzeugen mit f = 10Hz - Signal vor und nach einem RC-TP messen Gaelle fragen --- #### by Judyta Krz