Skip to content

Latest commit

 

History

History
395 lines (278 loc) · 18.5 KB

16_Aktoren.md

File metadata and controls

395 lines (278 loc) · 18.5 KB

LiaScript

Ansteuerung von peripheren Komponenten

Parameter Kursinformationen
Veranstaltung: @config.lecture
Semester @config.semester
Hochschule: Technische Universität Freiberg
Inhalte: Konzepte und Nutzung von Timern und Interrupts
Link auf GitHub: https://github.com/TUBAF-IfI-LiaScript/VL_EingebetteteSysteme/blob/master/16_Aktoren.md
Autoren @author


** Fragen an die Veranstaltung**

  • Charakterisieren Sie die Merkmale eines eingebetteten Systems!
  • Beschreiben Sie aktuelle Entwicklungstendenzen eingebetteter Systeme.
  • Erklären Sie an einem Beispiel die Notwendigkeit für die interdisziplinäre Arbeit bei der Entwicklung von Sensor-Aktor-Systemen!

                Abstraktionsebenen

           +----------------------------+ -.
  Ebene 6  | Problemorientierte Sprache |  |
           +----------------------------+  |
                                           ⎬ Anwendungssoftware
           +----------------------------+  |        ╔═══════════════╗
  Ebene 5  | Assemblersprache           |  |     ◀══║ HIER SIND WIR!║
           +----------------------------+ -.        ╚═══════════════╝

           +----------------------------+
  Ebene 4  | Betriebssystem             |     Systemsoftware
           +----------------------------+   

           +----------------------------+   
  Ebene 3  | Istruktionsset             |     Maschinensprache
           +----------------------------+     

           +----------------------------+  -.
  Ebene 2  | Mikroarchitektur           |   |
           +----------------------------+   |
                                            ⎬ Automaten, Speicher, Logik
           +----------------------------+   |
  Ebene 1  | Digitale Logik             |   |
           +----------------------------+  -.

           +----------------------------+
  Ebene 0  | E-Technik, Physik          |     Analoge Phänomene
           +----------------------------+                                      .

Motivation

Bislang haben wir uns allein mit dem Controller beschäftigt, wie aber nutzen wir nun die Funktionalität in einem eingebetetten System. Damit gehen wir in unser Betrachtung von Mikrocontrollern noch einen weiteren Schritt zurück und integrieren nun auch die extern angeschlossene Elemente.

Eingebettete Systeme ...

... sind informationsverarbeitende Systeme, die in ein größeres Produkt integriert sind, und die normalerweise nicht direkt vom Benutzer wahrgenommen werden. [Marwedel]

_... 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]

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.

Als zentrale Merkmale folgen daraus:

  1. Interaktion mit der Umgebung (Sensor/Aktor Systeme)
  2. ggf. hohe Anforderungen an die Verlässlichkeit (u.a. Zuverlässigkeit und Verfügbarkeit)

Bild

  1. Schwerpunktentwicklungsziel Effizienz (Energieverbrauch, Speicher, Ausführungsdauer)

  2. explizite Berücksichtigung der Ausführungs- und Reaktionsdauer (Reaktive Systeme, Echtzeitsysteme)

  3. Spezifischer Zuschnitt einer Lösung

Ein eingebettetes System:

  • erfüllt eine spezielle Aufgabe mit
  • problemangepasste Hardware und Software
  • einer spezifischen Benutzerschnittstelle
  • ist häufig konkreten Zeitanforderungen unterworfen
  • garantiert ein angepassten Grad an Verlässlichkeit und
  • setzt die Aufgabenstellung effektiv und kostengünstig um.

Der Versuch einer Zukunftsperspektive ist unter anderem auf folgender Webseite versucht worden Link

Eingebettete Systeme sind ein boomender Markt, der spezifische Programmierkenntnisse und ein interdisziplinäres Verständnis erfordert.

Im Rahmen dieser Veranstaltung wollen wir uns auf die Integration in eine Mikrocontrollerschaltung konzentrieren.

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.

Sie unterscheiden sich durch:

  • zugeführte Energieform (elektrischer Strom, Brennstoff)
  • abgegebene Energieform (mechanische Energie, Wärme, magnetische Felder, Strahlung )
  • Freiheitsgrade (maximal 6, linear Gelenke, Rotation)
  • Diskret / wertkontinuierlich

Beispiele:

  • Dioden, 7-Segment-Anzeigen, Displays
  • Ventile (Pneumatik, Hydraulik)
  • Motoren (Gleichstrom/Wechselstrom)
  • Magnete (Manipulatoren, Lautsprecher)

Ansteuerung digitaler Ausgänge

Die Beschaltung eines externen Gerätes wird aus Sicht des Mikrocontrollers durch zwei zentrale Faktoren beschränkt:

  1. maximales Strom/ Spannungsniveau der Pins
  2. Zahl der verfügbaren vs. benötigte Pins

Lösungsansätze zu 1:

Elektronische, elektromechanische Bereitstellung einer entsprechenden Leistung.

Bild

Lösungsansätze zu 2:

  1. Verwendung von Dekoder-Bausteinen

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.

Bild

  1. Multiplexiing

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.

Bild

  1. Shift-Register (Sequenzialisierung)

Bild

Bild

Ansteuerung von Motoren

Gleichstrommotor

An dieser Stelle konzentrieren wir uns auf eine spezifische Variante des Gleichstrommotors und seine Ansteuerung mittels PWM.

Gleichstrom

Welche Kernparameter bestimmen das Verhalten unseres Motors?

Gleichstrom

Wie erfolgt der Betrieb aus Sicht des Mikrocontrollers? Wir haben zwei vorgaben, die wir umsetzen wollen, die Drehrichtung und die Geschwindigkeit.

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. Gleichstrom

Die Drehgeschwindigkeit ergibt sich aus der Vorgabe eines PWM Signals.

Gleichstrom

Gleichstrom

Schrittmotoren

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.

Schrittmotor

Die technische Realsierung kann dabei zwei grundlegenden Mustern folgen. Man unterscheidet uni- und bipolare Schrittmotoren.

SchrittmotorVarianten

uint8_t pattern[4]={9,5,6,10};
// 1001 -> 0101 -> 0110 -> 1010

void Vschritte(uint16_t ns, char dir)
{
   uint16_t z;
   int32_t n;
   for (z=0; z<ns; z++){
    	if (dir == 1) n++;
	    else n--;
	    PORTD=pattern[n & 3];
	    delay(10);
   }
}

Frage: Welche Idee setzt dieser Code um? Was meinen Sie zur Lesbarkeit?

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.

Eine sehr schöne Erklärung zur Funktionsweise von Schrittmotoren liefert das folgende Video.

<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>

Servomotoren

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.

ServoMotor



           Nulllage (1500ms)
    Minima(1ms)  |  Maxima (2ms)
              |  v  |
High   |      v     v                
       |  +------+...                        +---                            
       |  |   .  |  :                        |     
       |  |   .  |  :                        |               
       |  |   .  |  :                        |               
       |  |   .  |  :                        |               
       |  |   .  |  :                        |                             
       |  |   .  |  :                        |   
       |--+      +---------------------------+
       |
       +-------------------------------------|---->                           .
           0                                20ms
#define F_CPU 1000000UL    // ACHTUNG, wir nehmen einen generellen Prescaler
                           // an!
#include <avr/io.h>
#include <avr/interrupt.h>

ISR( TIMER1_COMPA_vect ){
  OCR1A = 2500-OCR1A;	     }

int main (void){
  TCCR1A = (1<<COM1A0);    
  TCCR1B = (1<<WGM12) |
           (1<<CS11);      
  TIMSK  = (1<<OCIE1A);    
  OCR1A = 2312;            
  sei();                   
  while( 1 ) {
    ...
    OCR1A = OCR1A + 3;
    _delay_ms(40);
    ...
  return 0;
}

Aufgabe: Erklären Sie das Zeitverhalten, das von diesem Programm realisiert ist. An welchem Pin müssen wir unseren Servomotor anschließen?

                         {{1-2}}

#define F_CPU 1000000UL    // ACHTUNG, wir nehmen einen generellen Prescaler
                           // an!
#include <avr/io.h>
#include <avr/interrupt.h>

ISR( TIMER1_COMPA_vect ){
  OCR1A = 2500-OCR1A;	     }

int main (void){
  TCCR1A = (1<<COM1A0);    // Togglen bei Compare Match
  TCCR1B = (1<<WGM12) |    // CTC-Mode
           (1<<CS11);      // Prescaler 8
  TIMSK  = (1<<OCIE1A);    // Timer-Compare Interrupt an
  OCR1A = 2312;            // Neutralposition
  sei();                   // Interrupts global an
  while( 1 ) {
    ...
    OCR1A = OCR1A + 3;
    _delay_ms(40);
    ...
  return 0;
}

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.


Zählerwert |                             Zeitdiagramm (20ms) für die Nulllage      
OCR1A      |           2500 Ticks
           |          <--------->
           |   2312   +         +
           |         /|        /
           |        / |       /
           |       /  |      /
           |      /   |     /   
           |     /    |    /     
           |    /     | + /      
           |   /      |/|/        
           |  /       + +      
           |
PB1        |          +-+       +---                            
OC1A       |          | |       |                       
           |        --+ +-------+        
           +----------:---------:---->                                         .
                         20ms

Finales Anwendungsbeispiel

Gleichstrom

https://www.tinkercad.com/things/lu1Gt48hNsL-gleichstrommotor-mit-encoder/editel

Blick zurück

Welche Themenfelder sind wir in den vergangenen Monaten durchlaufen?

  • Boolesche Algebra
  • Minimierung von Schaltfunktionen
  • Standardschaltnetze
  • Flip-Flop Konzepte
  • Standardschaltwerke
  • Basiselemente des Modellrechners
  • Hardwarenahe Programmierung