kramann.info
© Guido Kramann

Login: Passwort:










kramann.info
© Guido Kramann

Login: Passwort:




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