|
| 1 | +<!-- |
| 2 | +
|
| 3 | +author: Sebastian Zug & André Dietrich & Fabian Bär |
| 4 | +email: sebastian.zug@informatik.tu-freiberg.de & andre.dietrich@informatik.tu-freiberg.de & fabian.baer@student.tu-freiberg.de |
| 5 | +version: 0.0.5 |
| 6 | +language: de |
| 7 | +narrator: Deutsch Female |
| 8 | +
|
| 9 | +import: https://raw.githubusercontent.com/liascript-templates/plantUML/master/README.md |
| 10 | + https://github.com/LiaTemplates/Pyodide |
| 11 | + https://fjangfaragesh.github.io/AVR8js-mem/INCLUDE.md |
| 12 | +
|
| 13 | +script: https://cdn.jsdelivr.net/chartist.js/latest/chartist.min.js |
| 14 | + link: https://cdn.jsdelivr.net/chartist.js/latest/chartist.min.css |
| 15 | + link: https://cdnjs.cloudflare.com/ajax/libs/animate.css/3.7.0/animate.min.css |
| 16 | +
|
| 17 | +
|
| 18 | +mark: <span style="background-color: @0; |
| 19 | + display: flex; |
| 20 | + width: calc(100% + 32px); |
| 21 | + margin: -16px; |
| 22 | + padding: 6px 16px 6px 16px; |
| 23 | + ">@1</span> |
| 24 | +red: @mark(#FF888888,@0) |
| 25 | +blue: @mark(#898AE3,@0) |
| 26 | +gray: @mark(gray,@0) |
| 27 | +--> |
| 28 | + |
| 29 | +[](https://liascript.github.io/course/?https://raw.githubusercontent.com/TUBAF-IfI-LiaScript/VL_EingebetteteSysteme/master/16_Aktoren.md) |
| 30 | + |
| 31 | +# Ansteuerung von peripheren Komponenten |
| 32 | + |
| 33 | +| Parameter | Kursinformationen | |
| 34 | +| -------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | |
| 35 | +| **Veranstaltung:** | `Eingebettete Systeme` | |
| 36 | +| **Semester** | `Wintersemester 2021/22` | |
| 37 | +| **Hochschule:** | `Technische Universität Freiberg` | |
| 38 | +| **Inhalte:** | `Konzepte und Nutzung von Timern und Interrupts` | |
| 39 | +| **Link auf GitHub:** | [https://github.com/TUBAF-IfI-LiaScript/VL_Softwareentwicklung/blob/master/16_Aktoren.md](https://github.com/TUBAF-IfI-LiaScript/VL_EingebetteteSysteme/blob/master/16_Aktoren.md) | |
| 40 | +| **Autoren** | @author | |
| 41 | + |
| 42 | + |
| 43 | + |
| 44 | +--------------------------------------------------------------------- |
| 45 | + |
| 46 | +** Fragen an die Veranstaltung** |
| 47 | + |
| 48 | ++ Charakterisieren Sie die Merkmale eines eingebetteten Systems! |
| 49 | ++ Beschreiben Sie aktuelle Entwicklungstendenzen eingebetteter Systeme. |
| 50 | ++ Erklären Sie an einem Beispiel die Notwendigkeit für die interdisziplinäre Arbeit bei der Entwicklung von Sensor-Aktor-Systemen! |
| 51 | + |
| 52 | +<!-- |
| 53 | +style="width: 80%; min-width: 420px; max-width: 720px;" |
| 54 | +--> |
| 55 | +```ascii |
| 56 | +
|
| 57 | + Abstraktionsebenen |
| 58 | +
|
| 59 | + +----------------------------+ -. |
| 60 | + Ebene 6 | Problemorientierte Sprache | | |
| 61 | + +----------------------------+ | |
| 62 | + ⎬ Anwendungssoftware |
| 63 | + +----------------------------+ | ╔═══════════════╗ |
| 64 | + Ebene 5 | Assemblersprache | | ◀══║ HIER SIND WIR!║ |
| 65 | + +----------------------------+ -. ╚═══════════════╝ |
| 66 | +
|
| 67 | + +----------------------------+ |
| 68 | + Ebene 4 | Betriebssystem | Systemsoftware |
| 69 | + +----------------------------+ |
| 70 | +
|
| 71 | + +----------------------------+ |
| 72 | + Ebene 3 | Istruktionsset | Maschinensprache |
| 73 | + +----------------------------+ |
| 74 | +
|
| 75 | + +----------------------------+ -. |
| 76 | + Ebene 2 | Mikroarchitektur | | |
| 77 | + +----------------------------+ | |
| 78 | + ⎬ Automaten, Speicher, Logik |
| 79 | + +----------------------------+ | |
| 80 | + Ebene 1 | Digitale Logik | | |
| 81 | + +----------------------------+ -. |
| 82 | +
|
| 83 | + +----------------------------+ |
| 84 | + Ebene 0 | E-Technik, Physik | Analoge Phänomene |
| 85 | + +----------------------------+ . |
| 86 | +``` |
| 87 | + |
| 88 | +--------------------------------------------------------------------- |
| 89 | + |
| 90 | +## Motivation |
| 91 | + |
| 92 | +Bislang haben wir uns allein mit dem Controller beschäftigt, wie aber nutzen |
| 93 | +wir nun die Funktionalität in einem eingebetetten System. Damit gehen wir in |
| 94 | +unser Betrachtung von Mikrocontrollern noch einen weiteren Schritt zurück und integrieren nun auch die extern angeschlossene Elemente. |
| 95 | + |
| 96 | +**Eingebettete Systeme ...** |
| 97 | + |
| 98 | +> _... sind informationsverarbeitende Systeme, die in ein größeres Produkt integriert sind, und die normalerweise nicht direkt vom Benutzer wahrgenommen werden._ [Marwedel] |
| 99 | +
|
| 100 | +> _... bezeichnet einen elektronischen Rechner oder auch Computer, der in einen technischen Kontext eingebunden (eingebettet) ist. Dabei übernimmt der Rechner entweder Überwachungs-, Steuerungs- oder Regelfunktionen oder ist für eine Form der Daten- bzw. Signalverarbeitung zuständig _ [Wikipedia] |
| 101 | +
|
| 102 | +Dabei spielt die Größe des Systems keine Rolle. Die Implementierungsvarianten reichen von Mikrorobotern und _Smart Dust_ bis hin zu zusammengesetzten _Systems-of-Systems_ wie einem autonomen Automobil. |
| 103 | + |
| 104 | +Als zentrale Merkmale folgen daraus: |
| 105 | + |
| 106 | +1. Interaktion mit der Umgebung (Sensor/Aktor Systeme) |
| 107 | +2. ggf. hohe Anforderungen an die Verlässlichkeit (u.a. Zuverlässigkeit und Verfügbarkeit) |
| 108 | + |
| 109 | +<!-- style="width: 75%; max-width: 1000px" --> |
| 110 | + |
| 111 | +3. Schwerpunktentwicklungsziel Effizienz (Energieverbrauch, Speicher, Ausführungsdauer) |
| 112 | + |
| 113 | +4. explizite Berücksichtigung der Ausführungs- und Reaktionsdauer (Reaktive Systeme, Echtzeitsysteme) |
| 114 | + |
| 115 | +5. Spezifischer Zuschnitt einer Lösung |
| 116 | + |
| 117 | +> Ein eingebettetes System: |
| 118 | +> |
| 119 | +> + erfüllt eine spezielle Aufgabe mit |
| 120 | +> + problemangepasste Hardware und Software |
| 121 | +> + einer spezifischen Benutzerschnittstelle |
| 122 | +> + ist häufig konkreten Zeitanforderungen unterworfen |
| 123 | +> + garantiert ein angepassten Grad an Verlässlichkeit und |
| 124 | +> + setzt die Aufgabenstellung effektiv und kostengünstig um. |
| 125 | +
|
| 126 | +Der Versuch einer Zukunftsperspektive ist unter anderem auf folgender Webseite versucht worden [Link](https://www.grandviewresearch.com/industry-analysis/microcontroller-market) |
| 127 | + |
| 128 | +> Eingebettete Systeme sind ein boomender Markt, der spezifische Programmierkenntnisse und ein interdisziplinäres Verständnis erfordert. |
| 129 | +
|
| 130 | +Im Rahmen dieser Veranstaltung wollen wir uns auf die Integration in eine Mikrocontrollerschaltung konzentrieren. |
| 131 | + |
| 132 | +> **Aktoren** ... (Wandler; Antriebselemente) setzen die elektronischen Signale in mechanische Bewegung oder andere physikalische Größen um und greifen damit aktiv in die Umgebung des eingebetteten Systems ein. |
| 133 | +
|
| 134 | +Sie unterscheiden sich durch: |
| 135 | + |
| 136 | ++ zugeführte Energieform (elektrischer Strom, Brennstoff) |
| 137 | ++ abgegebene Energieform (mechanische Energie, Wärme, magnetische Felder, Strahlung ) |
| 138 | ++ Freiheitsgrade (maximal 6, linear Gelenke, Rotation) |
| 139 | ++ Diskret / wertkontinuierlich |
| 140 | + |
| 141 | +Beispiele: |
| 142 | + |
| 143 | ++ Dioden, 7-Segment-Anzeigen, Displays |
| 144 | ++ Ventile (Pneumatik, Hydraulik) |
| 145 | ++ Motoren (Gleichstrom/Wechselstrom) |
| 146 | ++ Magnete (Manipulatoren, Lautsprecher) |
| 147 | + |
| 148 | +[^Wiki_Kraftwertk]: Wikipedia, Autor Avda, Kernkraftwerk Grafenrheinfeld - 2013, [Link](https://commons.wikimedia.org/wiki/File:Kernkraftwerk_Grafenrheinfeld_-_2013.jpg) |
| 149 | + |
| 150 | +## Ansteuerung digitaler Ausgänge |
| 151 | + |
| 152 | +Die Beschaltung eines externen Gerätes wird aus Sicht des Mikrocontrollers durch zwei zentrale Faktoren beschränkt: |
| 153 | + |
| 154 | +1. maximales Strom/ Spannungsniveau der Pins |
| 155 | +2. Zahl der verfügbaren vs. benötigte Pins |
| 156 | + |
| 157 | +**Lösungsansätze zu 1:** |
| 158 | + |
| 159 | +Elektronische, elektromechanische Bereitstellung einer entsprechenden Leistung. |
| 160 | + |
| 161 | +<!-- style="width: 75%; max-width: 1000px" --> |
| 162 | + |
| 163 | +**Lösungsansätze zu 2:** |
| 164 | + |
| 165 | +1. Verwendung von Dekoder-Bausteinen |
| 166 | + |
| 167 | +Der CD4543 Baustein dient der Ansteuerung von 7-Segment-Anzeigen. Mit dem Dekodieren einer 4-Bit Zahlendarstellung auf die zugehörigen Steuerleitungen werden 3 Pins eingespart. Vergleichen Sie die Schaltung mit der in Vorlesung 4 hergeleiteten Lösung. |
| 168 | + |
| 169 | +<!-- style="width: 75%; max-width: 1000px" --> |
| 170 | + |
| 171 | +2. Multiplexiing |
| 172 | + |
| 173 | +Mittels Muliplexing lassen sich nun mehrere 7-Segment-Anzeigen durch ein Set von Ausgängen beschalten. Allerdings wird in dieser Lösung pro Anzeige eine weitere Steuerleitung verwendet. Zudem ist eine Berücksichtigung der Schaltzeiten der Displays zu berücksichtigen. |
| 174 | + |
| 175 | +<!-- style="width: 75%; max-width: 1000px" --> |
| 176 | + |
| 177 | +3. Shift-Register (Sequenzialisierung) |
| 178 | + |
| 179 | +<!-- style="width: 45%; max-width: 800px" --> |
| 180 | + |
| 181 | +<!-- style="width: 65%; max-width: 1000px" --> |
| 182 | + |
| 183 | +[^TI_SNx4HC5958]: Texas Instruments, SNx4HC5958-Bit Shift Registers With 3-StateOutputRegisters, [Link](https://www.ti.com/lit/ds/symlink/sn74hc595.pdf?ts=1612165666219&ref_url=https%253A%252F%252Fwww.ti.com%252Fproduct%252FSN74HC595) |
| 184 | + |
| 185 | +[^TI_BCD]: Texas Instruments, CMOS BCD-to-Seven-Segement Latch/Decoder/Driver, [Link](https://www.ti.com/lit/ds/symlink/cd4543b.pdf?ts=1612176181441&ref_url=https%253A%252F%252Fwww.google.com%252F) |
| 186 | + |
| 187 | +[^Mux_7-Segmente]: mikrocontroller.net, 7-Segment gemultiplext, Tutorium, [Link](https://www.mikrocontroller.net/articles/Datei:Tut_7_Seg_03.gif) |
| 188 | + |
| 189 | +[^OutputPin]: mikrocontroller.net, Beschaltung von Digitalen Ausgängen, Zusammenfassung der grafischen Darstellungen |
| 190 | + |
| 191 | +## Ansteuerung von Motoren |
| 192 | + |
| 193 | +Gleichstrommotor |
| 194 | +=================== |
| 195 | + |
| 196 | +An dieser Stelle konzentrieren wir uns auf eine spezifische Variante des Gleichstrommotors und seine Ansteuerung mittels PWM. |
| 197 | + |
| 198 | +<!-- style="width: 65%; max-width: 750px" --> [^4] |
| 199 | + |
| 200 | +[^4]: Wikipedia, Autor Honina, Schematische Darstellung der Arbeitsweise einer permanenterregten Gleichstrommaschine, [Link](https://commons.wikimedia.org/wiki/File:Gleichstrommaschine.svg) |
| 201 | + |
| 202 | +Welche Kernparameter bestimmen das Verhalten unseres Motors? |
| 203 | + |
| 204 | +<!-- style="width: 75%; max-width: 750px" --> [^5] |
| 205 | + |
| 206 | +[^5]: Firma Dunker Motoren, Handbuch, [Link](http://www.dunkermotoren.de/default.asp?id=18&lang=1) |
| 207 | + |
| 208 | +Wie erfolgt der Betrieb aus Sicht des Mikrocontrollers? Wir haben zwei vorgaben, die wir umsetzen wollen, die Drehrichtung und die Geschwindigkeit. |
| 209 | + |
| 210 | +Für die Drehrichtung wird die Änderung der Polarität über eine H-Brücke umgesetzt. Mit 4 Schaltern kann der Stromfluss durch den Motor angepasst werden. |
| 211 | +<!-- style="width: 75%; max-width: 750px" --> |
| 212 | + |
| 213 | +Die Drehgeschwindigkeit ergibt sich aus der Vorgabe eines PWM Signals. |
| 214 | + |
| 215 | +<!-- style="width: 75%; max-width: 750px" --> |
| 216 | + |
| 217 | +<!-- style="width: 75%; max-width: 750px" --> [^6] |
| 218 | + |
| 219 | +[^6]: Firma Texas Instruments, Datenblatt L293D, [Link](https://www.ti.com/lit/ds/symlink/l293.pdf) |
| 220 | + |
| 221 | +### Schrittmotoren |
| 222 | + |
| 223 | +Ein Schrittmotor ist ein Synchronmotor, bei dem der Rotor (ein drehbares Motorteil mit Welle) durch ein gesteuertes, schrittweise rotierendes, elektromagnetisches Feld der Statorspulen um einen kleinen Winkel (Schritt) oder sein Vielfaches gedreht werden kann. |
| 224 | + |
| 225 | +<!-- style="width: 65%; max-width: 750px" --> |
| 226 | + |
| 227 | +Die technische Realsierung kann dabei zwei grundlegenden Mustern folgen. Man unterscheidet uni- und bipolare Schrittmotoren. |
| 228 | + |
| 229 | +<!-- style="width: 65%; max-width: 750px" --> |
| 230 | + |
| 231 | +```c |
| 232 | +uint8_t pattern[4]={9,5,6,10}; |
| 233 | +// 1001 -> 0101 -> 0110 -> 1010 |
| 234 | + |
| 235 | +void Vschritte(uint16_t ns, char dir) |
| 236 | +{ |
| 237 | + uint16_t z; |
| 238 | + int32_t n; |
| 239 | + for (z=0; z<ns; z++){ |
| 240 | + if (dir == 1) n++; |
| 241 | + else n--; |
| 242 | + PORTD=pattern[n & 3]; |
| 243 | + delay(10); |
| 244 | + } |
| 245 | +} |
| 246 | +``` |
| 247 | +
|
| 248 | +> Frage: Welche Idee setzt dieser Code um? Was meinen Sie zur Lesbarkeit? |
| 249 | +
|
| 250 | +Wird ein Schrittmotor durch ein externes Lastmoment oder durch die anzutreibende Masse beim starken Beschleunigen beziehungsweise Verzögern überlastet (d. h. Lastmoment > Motormoment), kann der Rotor dem Drehfeld nicht mehr folgen. Es werden Schritte übersprungen, und die Information über die aktuelle Position des Rotors geht verloren. |
| 251 | +
|
| 252 | +Eine sehr schöne Erklärung zur Funktionsweise von Schrittmotoren liefert das folgende Video. |
| 253 | +
|
| 254 | +<iframe width="560" height="315" src="https://www.youtube.com/embed/spWVb9cb7dA" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe> |
| 255 | +
|
| 256 | +[^Schrittmotor]: Wikipedia, Autor Honina, Schema eines Schrittmotors mit vier Schritten für eine Umdrehung (und unipolarer Beschaltung), [Link](https://commons.wikimedia.org/wiki/File:Schrittmotor.PNG) |
| 257 | +
|
| 258 | +[^StepperVariants]: Wikipedia, Autor Ulfbastel, Schrittmotor-Schaltungsvarianten), [Link](https://commons.wikimedia.org/wiki/File:Stepmotscheme.jpg) |
| 259 | +
|
| 260 | +### Servomotoren |
| 261 | +
|
| 262 | +Als Servomotor werden Elektromotoren bezeichnet, die die Kontrolle der Winkelposition ihrer Motorwelle sowie der Drehgeschwindigkeit und Beschleunigung erlauben. Sie integrieren neben dem eigentlichen Elektromotor, eine Sensorik zur Positionsbestimmung und eine Regelelektronik. Damit kann die Bewegung des Motors entsprechend einem oder mehreren einstellbaren Sollwerten – wie etwa Soll-Winkelposition der Welle oder Solldrehzahl – bestimmt werden. |
| 263 | +
|
| 264 | +<!-- style="width: 65%; max-width: 750px" --> [^5] |
| 265 | +
|
| 266 | +[^5]: Wikipedia, Autor Bernd vdB, Servo and receiver connections, [Link](https://commons.wikimedia.org/wiki/File:Rc-receiver-servo-battery_b.jpg) |
| 267 | +
|
| 268 | +<!-- |
| 269 | +style="width: 80%; min-width: 420px; max-width: 720px;" |
| 270 | +--> |
| 271 | +```ascii |
| 272 | +
|
| 273 | +
|
| 274 | + Nulllage (1500ms) |
| 275 | + Minima(1ms) | Maxima (2ms) |
| 276 | + | v | |
| 277 | +High | v v |
| 278 | + | +------+... +--- |
| 279 | + | | . | : | |
| 280 | + | | . | : | |
| 281 | + | | . | : | |
| 282 | + | | . | : | |
| 283 | + | | . | : | |
| 284 | + | | . | : | |
| 285 | + |--+ +---------------------------+ |
| 286 | + | |
| 287 | + +-------------------------------------|----> . |
| 288 | + 0 20ms |
| 289 | +``` |
| 290 | + |
| 291 | +``` |
| 292 | +#define F_CPU 1000000UL // ACHTUNG, wir nehmen einen generellen Prescaler |
| 293 | + // an! |
| 294 | +#include <avr/io.h> |
| 295 | +#include <avr/interrupt.h> |
| 296 | +
|
| 297 | +ISR( TIMER1_COMPA_vect ){ |
| 298 | + OCR1A = 2500-OCR1A; } |
| 299 | +
|
| 300 | +int main (void){ |
| 301 | + TCCR1A = (1<<COM1A0); |
| 302 | + TCCR1B = (1<<WGM12) | |
| 303 | + (1<<CS11); |
| 304 | + TIMSK = (1<<OCIE1A); |
| 305 | + OCR1A = 2312; |
| 306 | + sei(); |
| 307 | + while( 1 ) { |
| 308 | + ... |
| 309 | + OCR1A = OCR1A + 3; |
| 310 | + _delay_ms(40); |
| 311 | + ... |
| 312 | + return 0; |
| 313 | +} |
| 314 | +``` |
| 315 | + |
| 316 | +> Aufgabe: Erklären Sie das Zeitverhalten, das von diesem Programm realisiert ist. An welchem Pin müssen wir unseren Servomotor anschließen? |
| 317 | +
|
| 318 | + |
| 319 | + {{1-2}} |
| 320 | +******************************************************************************** |
| 321 | + |
| 322 | +``` |
| 323 | +#define F_CPU 1000000UL // ACHTUNG, wir nehmen einen generellen Prescaler |
| 324 | + // an! |
| 325 | +#include <avr/io.h> |
| 326 | +#include <avr/interrupt.h> |
| 327 | +
|
| 328 | +ISR( TIMER1_COMPA_vect ){ |
| 329 | + OCR1A = 2500-OCR1A; } |
| 330 | +
|
| 331 | +int main (void){ |
| 332 | + TCCR1A = (1<<COM1A0); // Togglen bei Compare Match |
| 333 | + TCCR1B = (1<<WGM12) | // CTC-Mode |
| 334 | + (1<<CS11); // Prescaler 8 |
| 335 | + TIMSK = (1<<OCIE1A); // Timer-Compare Interrupt an |
| 336 | + OCR1A = 2312; // Neutralposition |
| 337 | + sei(); // Interrupts global an |
| 338 | + while( 1 ) { |
| 339 | + ... |
| 340 | + OCR1A = OCR1A + 3; |
| 341 | + _delay_ms(40); |
| 342 | + ... |
| 343 | + return 0; |
| 344 | +} |
| 345 | +``` |
| 346 | + |
| 347 | +Mit unserem Prescaler der Taktrate geben erreichen wir 1MHz. Mit dem avisierten Prescaler 8 wird entsprechen 20ms 2500 Ticks im Zähler. Ein Tick ist 0.008ms lang. |
| 348 | + |
| 349 | +<!-- |
| 350 | +style="width: 80%; min-width: 420px; max-width: 720px;" |
| 351 | +--> |
| 352 | +```ascii |
| 353 | +
|
| 354 | +Zählerwert | Zeitdiagramm (20ms) für die Nulllage |
| 355 | +OCR1A | 2500 Ticks |
| 356 | + | <---------> |
| 357 | + | 2312 + + |
| 358 | + | /| / |
| 359 | + | / | / |
| 360 | + | / | / |
| 361 | + | / | / |
| 362 | + | / | / |
| 363 | + | / | + / |
| 364 | + | / |/|/ |
| 365 | + | / + + |
| 366 | + | |
| 367 | +PB1 | +-+ +--- |
| 368 | +OC1A | | | | |
| 369 | + | --+ +-------+ |
| 370 | + +----------:---------:----> . |
| 371 | + 20ms |
| 372 | +``` |
| 373 | + |
| 374 | +******************************************************************************** |
| 375 | + |
| 376 | + |
| 377 | +## Finales Anwendungsbeispiel |
| 378 | + |
| 379 | +<!-- style="width: 75%; max-width: 750px" --> |
| 380 | + |
| 381 | +https://www.tinkercad.com/things/lu1Gt48hNsL-gleichstrommotor-mit-encoder/editel |
| 382 | + |
| 383 | + |
| 384 | +## Blick zurück |
| 385 | + |
| 386 | +Welche Themenfelder sind wir in den vergangenen Monaten durchlaufen? |
| 387 | + |
| 388 | ++ Boolsche Algebra |
| 389 | ++ Minimierung von Schaltfunktionen |
| 390 | ++ Standardschaltnetze |
| 391 | ++ Flip-Flop Konzepte |
| 392 | ++ Standardschaltwerke |
| 393 | ++ Basiselemente des Modellrechners |
| 394 | ++ Hardwarenahe Programmierung |
0 commit comments