kramann.info
© Guido Kramann

Login: Passwort:










COACH2
1 Planung
2 Architektur
3 Anzeige
4 EEPROM
5 I2C
..5.1 MasterSendByte
..5.2 MasterSend2Bytes
..5.3 MasterReceiveByte
..5.4 MasterReceive2Bytes
6 UART
7 DFT
8 FFT
9 Planung2
10 Klassen
..10.1 AnzeigeTaster
..10.2 RS232
..10.3 MotorServo
..10.4 Drehgeber
..10.5 Sensor
..10.6 Funk
11 Adaption
..11.1 Programmiertechnik
..11.2 Evoopt
12 Fuzzy
..12.1 Uebungsaufgabe
..12.2 Fuzzygroesse
..12.3 Fuzzyset
..12.4 Lookuptable
13 Skript
..13.1 Funkkorrektur
..13.2 Skriptsprachen
..13.3 Anforderungen
..13.4 Agentensysteme
..13.5 Implementierung
..13.6 Experimente
14 Gesamtkonzept
..14.1 Skripterweiterung
..14.2 Makroverhalten
67 Echtzeitsysteme
..67.1 Einfuehrung
....67.1.1 Echtzeit
....67.1.2 Korrektheit
....67.1.3 Hardware
....67.1.4 Ziele
....67.1.5 Synchronprogramm
..67.2 Threads
....67.2.1 Java
....67.2.2 Synchronisierung
..67.3 COACH
....67.3.1 Kaskadenregler
....67.3.2 Zeitebene1
....67.3.3 Zeitebene2
....67.3.4 Zeitebene3
....67.3.5 Puck
....67.3.6 Puckschwarm
..67.4 RTAIlab
....67.4.1 Slax
....67.4.1 USB_Stick
....67.4.2 Sinus
..67.5 Semaphor
....67.5.1 Laufkatze
....67.5.2 Java
....67.5.3 Semaphor
..67.6 Audio
....67.6.1 wav
....67.6.2 Linux
..67.7 Lookup
....67.7.1 Fuzzy
....67.7.2 PWM
..67.8 NeuronaleNetze
....67.8.1 Neuron
....67.8.2 Backpropagation
....67.8.3 Umsetzung
....67.8.4 Winkelerkennung
..67.9 Internetprogrammierung
....67.9.1 Codegenerierung
....67.9.2 PHP_Programmierung
....67.9.3 PHP_OOP
....67.9.4 Java
....67.9.5 UDP
..67.10 DFT
..67.11 FFT
..67.12 Zustandsmaschine
..67.13 Fuzzy
....67.13.1 Fuzzylogik
....67.13.2 FuzzyRegler
....67.13.3 Uebung9
....67.13.5 Softwareentwicklung
......67.13.5.1 AgileSoftwareentwicklung
......67.13.5.2 FuzzyRegler
......67.13.5.3 Uebung
....67.13.6 Umsetzung
......67.13.6.1 FuzzyRegler
......67.13.6.2 Simulation
......67.13.6.3 Optimierung
......67.13.6.4 Uebung
....67.13.7 Haengependel
......67.13.7.1 Haengependel
......67.13.7.2 Simulation
......67.13.7.3 FuzzyRegler
......67.13.7.4 Optimierer
......67.13.7.5 Genetisch
....67.13.8 Information
....67.13.9 Energie

10.5 AVR-Projekt coach2.2_05_sensor - Verwendung des Entfernungssensors und eines Zeitgebers

  • Folgende virtuellen Klassen wurden implementiert:
class SensorBASIS
{
    public:
        virtual void aktualisieren();
    virtual int16_t holeAbstand_mm();
};

Code 10.5-1: Virtuelle Basisklasse der Klasse Sensor

Methodenname Beschreibung Beispiel
aktualisieren() Fügt einem "Ringspeicher" einen neuen Messwert hinzu. sensor.aktualisieren();
int16_t holeAbstand_mm() Bildet aus den letzten 10 durch Aktualisierungen
gewonnenen Meßwerten den Mittelwert und rechnet den Wert
auf einfache Weise in einen Abstand um
distanz = sensor.holeAbstand_mm();

Tabelle 10.5-1: Methoden der Klasse Sensor

class ZyklusBASIS
{
    public:
        virtual void setzeMaxZaehler(uint16_t maxwert=50); //Obergrenze, bei der der Zyklenzaehler wieder von vorn beginnt.
        virtual uint16_t holeZyklusZaehlstand();
        //Einstellbereich: 1ms bis maximal 28ms
        virtual void warteBis_ms(uint8_t dauer_ms=20); //50Hz Zyklus entspricht warten bis 20ms vorbei
};

Code 10.5-2: Virtuelle Basisklasse der Klasse Zyklus

Methodenname Beschreibung Beispiel
setzeMaxZaehler(uint16_t maxwert=50) Setzt die Obergrenze für den Zykluszähler (Erläuterung s.u.) zyklus.setzeMaxZaehler(50);
uint16_t holeZyklusZaehlstand() Holt die Anzahl der bisher durchlaufenen Endlos-while-Schleifen (Erläuterung s.u.) switch(holeZyklusZaehlstand()) {...}
warteBis_ms(uint8_t dauer_ms=20) Wartet, bis die angegebenen Millisekunden (1ms bis maximal 28ms) verstrichen sind while(zyklus.warteBis_ms(20));

Tabelle 10.5-2: Methoden der Klasse Zyklus

  • Achten Sie beim Testen des Hauptprogramms auf folgendes:
  • Das Programm arbeitet unter Verwendung des Hyperterminals und meldet sich dort mit Hinweisen zur Benutzung.
  • Die Klasse Zyklus sorgt dafür, dass die Endlosschleife im Hauptprogramm in Perioden von 20ms durchläuft.
  • Für spätere Reglerentwürfe kann dies oder ein Vielfaches davon auch als klar definierte Totzeit verwendet werden.
  • Außerdem enthält sie einen Zyklus-Zähler, der sich merkt, wie oft bereits die Endlosschleife durchlaufen wurde.
  • Der Zykluszähler beginnt bei Überschreiten von "obergrenze" wieder ()bei Null.
  • Dadurch läßt sich ein Mechanismus implementieren, der es erlaubt alle x Zyklen die Aktion y durchzuführen (s. switch-Anweisung im Hauptprogamm).
  • Grundsätzlich läßt sich damit "Synchrone Programmierung" betreiben (s. Vorlesung Echtzeitsysteme)
  • Hier wird dies benutzt, um in jedem while-Schleifendurchgang eien neuen Analogwert vom Sensor zu speichern, aber nur alle 50 Zyklen (Nr. 20 innerhalb der Indices 0..49) einen Meßwert auszugeben.
  • Machen Sie sich schon einmal Gedanken darüber, wie das Sensorsignal möglichst einfach numerisch differenziert oder integriert werden kann, um die Voraussetzungen zur Implementierung eines PID- oder Zustands-Reglers zu schaffen.