Skip to content

Commit 813a0a5

Browse files
committed
First version of L16
1 parent d996053 commit 813a0a5

18 files changed

Lines changed: 378 additions & 79 deletions

15_TimerUndInterrupts.md

Lines changed: 32 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -339,8 +339,11 @@ int main(void){
339339
DDRB |= (1 << PB5);
340340
ADMUX = (1<<REFS0);
341341
ADCSRA |= (1 << ADPS2) | (1 << ADPS1) | (1<<ADPS0) | (1<<ADEN)|(1<<ADIE);
342+
ADCSRA |= (1<<ADSC); // Dummy read
343+
while(ADCSRA & (1<<ADSC));
344+
ADCSRA |= (1<<ADSC); // Start conversion "chain"
345+
(void) ADCW;
342346
sei(); // Set the I-bit in SREG
343-
ADCSRA |= (1<<ADSC); // Start the first conversion
344347
345348
int i = 0;
346349
while (1) {
@@ -615,7 +618,7 @@ $$
615618

616619
#### Timer-Funktionalität (Normal-Mode)
617620

618-
Für die Umsetzung eines einfachen Timers, der wie im Nachfolgenden Beispiel jede
621+
Für die Umsetzung eines einfachen Timers, der wie im nachfolgenden Beispiel jede
619622
Sekunde aktiv wird, genügt es einen entsprechenden Vergleichswert zu bestimmen,
620623
den der Zähler erreicht haben muss.
621624

@@ -671,6 +674,9 @@ Wir verknüpfen unseren Timer im Comparemodus mit einem entsprechenden Ausgang u
671674
672675
> **Frage:** Welchen physischen Pin des Controllers können wir mit unserem Timer 1 ansteuern?
673676
677+
Setzen wir also die Möglichkeiten des Timers vollständig ein, um das Blinken im Hintergrund ablaufen zu lassen. Ab Zeile 13 läuft dieser Prozess komplett auf der
678+
Hardware und unser Hauptprogramm könnte eigenständige Aufgaben wahrnehmen.
679+
674680
**Normal Mode Konfiguration**
675681
676682
<div>
@@ -696,7 +702,30 @@ int main(void)
696702
```
697703
@AVR8js.sketch
698704

699-
**Fast PWW Konfiguration**
705+
Was passiert, wenn die Aktivierung und Deaktivierung mit einer höheren Frequenz vorgenommen wird? Die effektiv wirkende Spannung wird durch den Mittelwert repräsentiert. Damit ist eine Quasi-Digital-Analoge Ausgabe ohne eine entsprechende Hardware möglich.
706+
707+
> **Merke:** Reale Analog-Digital-Wandler würden ein Ergebnis zwischen 0 und $2^n$ projiziert auf eine Referenzspannung ausgeben. PWM generiert diesen Effekt durch ein variierendes Verhältnis zwischen an und aus Phasen.
708+
709+
<!--
710+
style="width: 80%; min-width: 420px; max-width: 720px;"
711+
-->
712+
```ascii
713+
Tastverhältnis
714+
^ "1/4" "2/3"
715+
Spannung | +---+........ +----
716+
| | | . |
717+
| | | . |
718+
| | | . |
719+
| | | . |
720+
| | | . |
721+
|--+ +---------------+
722+
+------------------------------->
723+
<------------------>
724+
Periode .
725+
```
726+
727+
Im folgenden wird der **Fast PWW Mode** genutzt, um auf diesem Wege die LED an
728+
PIN 9 zu periodisch zu dimmen. Dazu wird der Vergleichswert, der in OCR1A enthalten ist kontinuierlich verändert.
700729

701730
```cpp avrlibc.cpp
702731
#ifndef F_CPU
@@ -730,7 +759,6 @@ int main(void){
730759
731760
[^2]: Firma Microchip, megaAVR® Data Sheet, Seite 126, [Link](http://ww1.microchip.com/downloads/en/DeviceDoc/ATmega48A-PA-88A-PA-168A-PA-328-P-DS-DS40002061A.pdf)
732761
733-
734762
```cpp avrlibc.cpp
735763
#include <avr/io.h>
736764
#include <util/delay.h>
@@ -780,7 +808,6 @@ Zähler | + +
780808
781809
> **Problem:** Wie große ist das maximal Darstellbare Zahlenintervall?
782810
783-
784811
### Anwendungen
785812

786813
Wir wollen einen Eingangszähler entwerfen, der die Ereignisse als Zählerimpulse betrachtet und zusätzlich mit einem Schwellwert vergleicht.

16_Aktoren.md

Lines changed: 314 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,314 @@
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.4
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+
12+
mark: <span style="background-color: @0;
13+
display: flex;
14+
width: calc(100% + 32px);
15+
margin: -16px;
16+
padding: 6px 16px 6px 16px;
17+
">@1</span>
18+
red: @mark(#FF888888,@0)
19+
blue: @mark(#898AE3,@0)
20+
gray: @mark(gray,@0)
21+
-->
22+
23+
# Programmierung CPU
24+
25+
**TU Bergakademie Freiberg - Wintersemester 2020 / 21**
26+
27+
Link auf die aktuelle Vorlesung im Versionsmanagementsystem GitHub
28+
29+
[https://github.com/TUBAF-IfI-LiaScript/VL_EingebetteteSysteme/blob/12_RISC_CISC.md](https://github.com/TUBAF-IfI-LiaScript/VL_EingebetteteSysteme/blob/master/16_Aktoren.md)
30+
31+
Die interaktive Form ist unter [diesem Link](https://liascript.github.io/course/?https://raw.githubusercontent.com/TUBAF-IfI-LiaScript/VL_EingebetteteSysteme/master/16_Aktoren.md#1) zu finden
32+
33+
34+
---------------------------------------------------------------------
35+
36+
** Fragen an die Veranstaltung**
37+
38+
+ Charakterisieren Sie die Merkmale eines eingebetteten Systems!
39+
+ Beschreiben Sie aktuelle Entwicklungstendenzen eingebetteter Systeme.
40+
+ Erklären Sie an einem Beispiel die Notwendigkeit für die interdisziplinäre Arbeit bei der Entwicklung von Sensor-Aktor-Systemen!
41+
42+
<!--
43+
style="width: 80%; min-width: 420px; max-width: 720px;"
44+
-->
45+
```ascii
46+
47+
Abstraktionsebenen
48+
49+
+----------------------------+ -.
50+
Ebene 6 | Problemorientierte Sprache | | ╔═══════════════╗
51+
+----------------------------+ | ◀══║ HIER SIND WIR!║
52+
⎬ ╚═══════════════╝
53+
+----------------------------+ | Anwendungssoftware
54+
Ebene 5 | Assemblersprache | |
55+
+----------------------------+ -.
56+
57+
+----------------------------+
58+
Ebene 4 | Betriebssystem | Systemsoftware
59+
+----------------------------+
60+
61+
+----------------------------+
62+
Ebene 3 | Istruktionsset | Maschinensprache
63+
+----------------------------+
64+
65+
+----------------------------+ -.
66+
Ebene 2 | Mikroarchitektur | |
67+
+----------------------------+ |
68+
⎬ Automaten, Speicher, Logik
69+
+----------------------------+ |
70+
Ebene 1 | Digitale Logik | |
71+
+----------------------------+ -.
72+
73+
+----------------------------+
74+
Ebene 0 | E-Technik, Physik | Analoge Phänomene
75+
+----------------------------+ .
76+
```
77+
78+
---------------------------------------------------------------------
79+
80+
## Motivation
81+
82+
Bislang haben wir uns allein mit dem Controller beschäftigt, wie aber nutzen
83+
wir nun die Funktionalität in einem eingebetetten System. Damit gehen wir in
84+
unser Betrachtung von Mikrocontrollern noch einen weiteren Schritt zurück und integrieren nun auch die extern angeschlossene Elemente.
85+
86+
**Eingebettete Systeme ...**
87+
88+
> _... sind informationsverarbeitende Systeme, die in ein größeres Produkt integriert sind, und die normalerweise nicht direkt vom Benutzer wahrgenommen werden._ [Marwedel]
89+
90+
> _... 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]
91+
92+
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.
93+
94+
Als zentrale Merkmale folgen daraus:
95+
96+
1. Interaktion mit der Umgebung (Sensor/Aktor Systeme)
97+
2. ggf. hohe Anforderungen an die Verlässlichkeit (u.a. Zuverlässigkeit und Verfügbarkeit)
98+
99+
![Bild](./images/16_Aktoren/1280px-Kernkraftwerk_Grafenrheinfeld_-_2013.jpeg)<!-- style="width: 75%; max-width: 1000px" --> [^1]
100+
101+
[^1]: Wikipedia, Autor Avda, Kernkraftwerk Grafenrheinfeld - 2013, [Link](https://commons.wikimedia.org/wiki/File:Kernkraftwerk_Grafenrheinfeld_-_2013.jpg)
102+
103+
3. Schwerpunktentwicklungsziel Effizienz (Energieverbrauch, Speicher, Ausführungsdauer)
104+
105+
4. explizite Berücksichtigung der Ausführungs- und Reaktionsdauer (Reaktive Systeme, Echtzeitsysteme)
106+
107+
5. Spezifischer Zuschnitt einer Lösung
108+
109+
> Ein eingebettetes System:
110+
>
111+
> + erfüllt eine spezielle Aufgabe mit
112+
> + problemangepasste Hardware und Software
113+
> + einer spezifischen Benutzerschnittstelle
114+
> + ist häufig konkreten Zeitanforderungen unterworfen
115+
> + garantiert ein angepassten Grad an Verlässlichkeit und
116+
> + setzt die Aufgabenstellung effektiv und kostengünstig um.
117+
118+
Der Versuch einer Zukunftsperspektive ist unter anderem auf folgender Webseite versucht worden [Link](https://www.grandviewresearch.com/industry-analysis/microcontroller-market)
119+
120+
> Eingebettete Systeme sind ein boomender Markt, der spezifische Programmierkenntnisse und ein interdisziplinäres Verständnis erfordert.
121+
122+
Im Rahmen dieser Veranstaltung wollen wir uns auf die Integration in eine Mikrocontrollerschaltung konzentrieren.
123+
124+
> **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.
125+
126+
Sie unterscheiden sich durch:
127+
128+
+ zugeführte Energieform (elektrischer Strom, Brennstoff)
129+
+ abgegebene Energieform (mechanische Energie, Wärme, magnetische Felder, Strahlung )
130+
+ Freiheitsgrade (maximal 6, linear Gelenke, Rotation)
131+
+ Diskret / wertkontinuierlich
132+
133+
Beispiele:
134+
135+
+ Dioden, 7-Segment-Anzeigen, Displays
136+
+ Ventile (Pneumatik, Hydraulik)
137+
+ Motoren (Gleichstrom/Wechselstrom)
138+
+ Magnete (Manipulatoren, Lautsprecher)
139+
140+
## Ansteuerung digitaler Ausgänge
141+
142+
Die Beschaltung eines externen Gerätes wird aus Sicht des Mikrocontrollers durch zwei zentrale Faktoren beschränkt:
143+
144+
1. maximales Strom/ Spannungsniveau der Pins
145+
2. Zahl der verfügbaren vs. benötigte Pins
146+
147+
**Lösungsansätze zu 1:**
148+
149+
Elektronische, elektromechanische Bereitstellung einer entsprechenden Leistung.
150+
151+
![Bild](./images/16_Aktoren/ControlPins.png)<!-- style="width: 75%; max-width: 1000px" --> [^1]
152+
153+
[^1]: mikrocontroller.net, Beschaltung von Digitalen Ausgängen, Zusammenfassung der grafischen Darstellungen
154+
155+
**Lösungsansätze zu 2:**
156+
157+
1. Verwendung von Dekoder-Bausteinen
158+
159+
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.
160+
161+
![Bild](./images/16_Aktoren/CD4543.png)<!-- style="width: 75%; max-width: 1000px" --> [^1]
162+
163+
[^1]: 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)
164+
165+
2. Multiplexiing
166+
167+
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.
168+
169+
![Bild](./images/16_Aktoren/Multiplexer.gif)<!-- style="width: 75%; max-width: 1000px" --> [^1]
170+
171+
[^1]: mikrocontroller.net, 7-Segment gemultiplext, Tutorium, [Link](https://www.mikrocontroller.net/articles/Datei:Tut_7_Seg_03.gif)
172+
173+
3. Shift-Register (Sequenzialisierung)
174+
175+
![Bild](./images/16_Aktoren/ShiftRegister.png)<!-- style="width: 25%; max-width: 500px" --> [^1]
176+
![Bild](./images/16_Aktoren/ShiftRegisterTiming.png)<!-- style="width: 65%; max-width: 1000px" --> [^1]
177+
178+
[^1]: Texas Instruments, SNx4HC5958-Bit Shift RegistersWith 3-StateOutputRegisters, [Link](https://www.ti.com/lit/ds/symlink/sn74hc595.pdf?ts=1612165666219&ref_url=https%253A%252F%252Fwww.ti.com%252Fproduct%252FSN74HC595)
179+
180+
## Ansteuerung von Motoren
181+
182+
Gleichstrommotor
183+
===================
184+
185+
An dieser Stelle konzentrieren wir uns auf eine spezifische Variante des Gleichstrommotors und seine Ansteuerung mittels PWM.
186+
187+
![Gleichstrom](https://upload.wikimedia.org/wikipedia/commons/thumb/a/a8/Gleichstrommaschine.svg/1280px-Gleichstrommaschine.svg.png)<!-- style="width: 65%; max-width: 750px" --> [^4]
188+
189+
[^4]: Wikipedia, Autor Honina, Schematische Darstellung der Arbeitsweise einer permanenterregten Gleichstrommaschine, [Link](https://commons.wikimedia.org/wiki/File:Gleichstrommaschine.svg)
190+
191+
Welche Kernparameter bestimmen das Verhalten unseres Motors?
192+
193+
![Gleichstrom](./images/16_Aktoren/Kennlinie.png)<!-- style="width: 75%; max-width: 750px" --> [^5]
194+
195+
[^5]: Firma Dunker Motoren, Handbuch, [Link](http://www.dunkermotoren.de/default.asp?id=18&lang=1)
196+
197+
Wie erfolgt der Betrieb aus Sicht des Mikrocontrollers? Wir haben zwei vorgaben, die wir umsetzen wollen, die Drehrichtung und die Geschwindigkeit.
198+
199+
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.
200+
![Gleichstrom](./images/16_Aktoren/HBruecke.png)<!-- style="width: 75%; max-width: 750px" -->
201+
202+
Die Drehgeschwindigkeit ergibt sich aus der Vorgabe eines PWM Signals.
203+
204+
![Gleichstrom](./images/16_Aktoren/PWM.png)<!-- style="width: 75%; max-width: 750px" -->
205+
206+
![Gleichstrom](./images/16_Aktoren/L293D.png)<!-- style="width: 75%; max-width: 750px" --> [^6]
207+
208+
[^6]: Firma Texas Instruments, Datenblatt L293D, [Link](https://www.ti.com/lit/ds/symlink/l293.pdf)
209+
210+
### Schrittmotoren
211+
212+
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.
213+
214+
![Schrittmotor](https://upload.wikimedia.org/wikipedia/commons/7/74/Schrittmotor.PNG)<!-- style="width: 65%; max-width: 750px" --> [^4]
215+
216+
[^4]: 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)
217+
218+
Die technische Realsierung kann dabei zwei grundlegenden Mustern folgen. Man unterscheidet uni- und bipolare Schrittmotoren.
219+
220+
![SchrittmotorVarianten](https://upload.wikimedia.org/wikipedia/commons/thumb/4/48/Stepmotscheme.jpg/1024px-Stepmotscheme.jpg)<!-- style="width: 65%; max-width: 750px" --> [^5]
221+
222+
[^5]: Wikipedia, Autor Ulfbastel, Schrittmotor-Schaltungsvarianten), [Link](https://commons.wikimedia.org/wiki/File:Stepmotscheme.jpg)
223+
224+
```c
225+
uint8_t pattern[4]={9,5,6,10};
226+
// 1001 -> 0101 -> 0110 -> 1010
227+
228+
void Vschritte(uint16_t ns, char dir)
229+
{
230+
uint16_t z;
231+
int32_t n;
232+
for (z=0; z<ns; z++){
233+
if (dir == 1) n++;
234+
else n--;
235+
PORTD=pattern[n & 3];
236+
delay(10);
237+
}
238+
}
239+
```
240+
241+
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.
242+
243+
Eine sehr schöne Erklärung zur Funktionsweise von Schrittmotoren liefert das folgende Video.
244+
245+
<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>
246+
247+
248+
### Servomotoren
249+
250+
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.
251+
252+
![ServoMotor](https://upload.wikimedia.org/wikipedia/commons/9/9e/Rc-receiver-servo-battery_b.jpg)<!-- style="width: 65%; max-width: 750px" --> [^5]
253+
254+
[^5]: Wikipedia, Autor Bernd vdB, Servo and receiver connections, [Link](https://commons.wikimedia.org/wiki/File:Rc-receiver-servo-battery_b.jpg)
255+
256+
<!--
257+
style="width: 80%; min-width: 420px; max-width: 720px;"
258+
-->
259+
```ascii
260+
261+
262+
Nulllage (1500ms)
263+
Minima(1ms) | Maxima (2ms)
264+
| v |
265+
High | v v
266+
| +------+... +---
267+
| | : | : |
268+
| | : | : |
269+
| | : | : |
270+
| | : | : |
271+
| | : | : |
272+
| | : | : |
273+
|--+ +---------------------------+
274+
|
275+
+-------------------------------------|----> .
276+
0 20ms
277+
```
278+
279+
Diese Funktionalität lässt sich mit einem Timer entsprechend umsetzen.
280+
281+
$$
282+
20ms = 2500 x 0.008ms
283+
$$
284+
285+
286+
```
287+
#define F_CPU 1000000UL
288+
#include <avr/io.h>
289+
#include <avr/interrupt.h>
290+
291+
ISR( TIMER1_COMPA_vect ){
292+
OCR1A = 2500-OCR1A; }
293+
294+
int main (void){
295+
TCCR1A = (1<<COM1A0); // Togglen bei Compare Match
296+
TCCR1B = (1<<WGM12) |
297+
(1<<CS11); // CTC-Mode; Prescaler 8
298+
TIMSK = (1<<OCIE1A); // Timer-Compare Interrupt an
299+
OCR1A = 2312; // Neutralposition
300+
sei(); // Interrupts global an
301+
while( 1 ) {
302+
...
303+
OCR1A = OCR1A + 3;
304+
_delay_ms(40);
305+
...
306+
return 0;
307+
}
308+
```
309+
310+
## Anwendungsbeispiel
311+
312+
![Gleichstrom](./images/16_Aktoren/Beispiel.png)<!-- style="width: 75%; max-width: 750px" -->
313+
314+
https://www.tinkercad.com/things/lu1Gt48hNsL-gleichstrommotor-mit-encoder/editel

0 commit comments

Comments
 (0)