mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik AVR Torsteuerung


Autor: Heinz peter Posch (poschi8)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo alle zusammen,
Ich möchte bei mir zuhause eine Steuerung für das Garagentor entwerfen.
Das ganze soll wie folgt ablaufen:

1 Taster: 1 mal drücken / Tor fährt nach oben
          nochmal dücken / Tor bleibt stehen
          nochmal drücken / Tor fährt runter

2 Endschalter: Anschlag oben / Anschlag unten
               wenn die Endschalter auslösen soll das Tor stehen bleiben

Das ganze soll mit einem Avr realisiert werden.
Ich habe bereits einige ansätze, jedoch ist kein größtes Problem die 
Sache mit dem Taster, meine Gedanke war, den Taster mit der Toogle 
funktion zu realisiern.
Das Problem damit ist nur das das Tor dann nur zwischen Auf un Ab 
wechselt und nicht stehen bleibt.

Danke schon mal im voraus für alle Antworten.

Mfg,
Heinz Peter

Autor: Düsendieb (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Heinz Peter,
den Taster normal einlesen, entprellen, eine Flanke bilden und damit 
arbeiten.


Axel

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Ich arbeite zufällig bei einem Torhersteller, und kann dir mit 
sicherheit sagen, das man bei einer solchen steuerung noch 
sicherheitseinrichtungen benötigt. z.B. Stromüberwachung, oder 
Schließkantensicherrung. ansonsten darf das Tor nur in Totmann berieben 
werden.

Autor: Heinz peter Posch (poschi8)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Taster ist bereits Entprellt, aber wie kann ich die Flanken bilden?
Bzw, könntest du mir das genauer erläutern...

Mfg,
Heinz Peter

Autor: Heinz peter Posch (poschi8)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Sicherheitselektronik für den Motor habe Ich bereits, da können 
keinen Fehler auftreten.

Mfg,
Heinz Peter

Autor: ... ... (docean) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Zustandsmaschine:
Zustand1: if(taster())
             hoch(); Zustand erhöhen;
Zustand2: if(!taste()))
             Zustand erhöhen;
Zustand3: if (taste())
             runter(); Zustand erhöhen;
Zustand4: if (!taste())
              Zustand auf Startzustand setzen;

Autor: Gastofatz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Spricht etwas gegen zwei Tasten? Eine für rauf <-> stopp und eine für 
runter <-> stopp? Das würde ich usabilitymäßig besser finden und 
einfacher zu proggen wärs auch.

Autor: Heinz peter Posch (poschi8)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ah also so meinst du das...
Ist der Zustand eine einfach variable die 3 mal erhöht wird und dann 
zurück gesetzt wird.
Hättest du eine fertiges Beispiel für mich?

Ich benutze nur einen Taster weil ich ein vorgefertigtes Schaltpult 
habe, dort ist nur ein Taster frei.

Mfg,
Heinz Peter

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Heinz peter Posch schrieb:
> Ah also so meinst du das...
> Ist der Zustand eine einfach variable die 3 mal erhöht wird und dann
> zurück gesetzt wird.
> Hättest du eine fertiges Beispiel für mich?

Schwierig.
Du sollst ja auch was tun :-)
#define ROT             0
#define ROT_GEDRUECKT   1
#define GELB            2
#define GELB_GEDRUECKT  3
#define GRUEN           4
#define GRUEN_GEDRUECKT 5

uint8_t zustand;

int main()
{
   ....


  zustand = ROT;

  while( 1 )
  {
    switch (zustand)
    {
      case ROT:
        if( TasteGedrückt )
          zustand = ROT_GEDRUECKT;
        break;

      case ROT_GEDRUECKT:
        Sirene_Einschalten();
        if( ! TasteGedrückt )
          zustand = GELB;
        break;

      case GELB:
        Sirene_Ausschalten();
        if( TasteGedrückt )
          zustand = GELB_GEDRUECKT;
        break;

      case GELB_GEDRUECKT:
        Sirene_Einschalten();
        if( ! TasteGedrückt )
          zustand = GRUEN;
        break;

      case GRUEN
        Lampe_Einschalten();
        if( TasteGedrückt )
          zustand = GRUEN_GEDRUECKT;
        break;

      case GRUEN_GEDRUECKT:
        Lampe_Ausschalten();
        if( ! TasteGedrückt )
          zustand = ROT;
        break;
    }
  }
}

Autor: Heinz peter Posch (poschi8)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jap schon klar, das ist eigentlich genau das was ich wollte.
Super, danke dafür.
Ich hatte wirklich keine Ahnung wie Ich das machen sollte.

Mfg,
Heinz Peter

Autor: Heinz peter Posch (poschi8)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich hätte nur eine Frage zu deinem Beispiel:

case rot: Taste wird gedrückt

case rot_gedrückt: Taster wird losgelassen, das Tor fährt rauf

case gelb: Taste wird erneut gedrückt

case gelb_gedrückt: Taste wird losgelassen, das Tor bleubt stehen

case gruen: Taste wird erneut gedrückt

case gruen_gedrückt: Taste wird losgelassen, das Tor fährt runter

dannach beginnt das ganze wieder von vorne.
Ist meine Annahme korrekt oder sehe ich dabei irgend etwas falsch, bzw 
ist mein Lösungsansatz richtig?

Mfg,
Heinz Peter

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Heinz peter Posch schrieb:
> Der Taster ist bereits Entprellt,

SW-Entprellung kann nie schaden, z.B. unterdrückt sie auch Störimpulse.

> aber wie kann ich die Flanken bilden?

Ist quasi ein Abfallprodukt der Entprellung, daher macht eine 
SW-Entprellung vieles einfacher.

Ich wundere mich immer wieder, wie Leute tagelang mit Problemen kämpfen, 
weil sie krampfhaft versuchen, eine Entprellung zu umgehen.


Peter

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Heinz peter Posch schrieb:
> Ich hätte nur eine Frage zu deinem Beispiel:
>
> case rot: Taste wird gedrückt
>
> case rot_gedrückt: Taster wird losgelassen, das Tor fährt rauf
>
> case gelb: Taste wird erneut gedrückt
>
> case gelb_gedrückt: Taste wird losgelassen, das Tor bleubt stehen
>
> case gruen: Taste wird erneut gedrückt
>
> case gruen_gedrückt: Taste wird losgelassen, das Tor fährt runter
>
> dannach beginnt das ganze wieder von vorne.
> Ist meine Annahme korrekt oder sehe ich dabei irgend etwas falsch, bzw
> ist mein Lösungsansatz richtig?

Eine einfache Möglichkeit solche Zustandsmaschinen zu überprüfen, ist es 
sie sich aufzumalen.

Für jeden Zustand malst du einen Kreis und schreibst den Namen des 
Zustands neben den Kreis.

Dann gibt es noch Pfeile, die die Kreise verbinden.
Über den Pfeil schreibst du den Auslösemechanismus, also was muss 
vorliegen, damit dieser Weg genommen wird. Unter den Pfeil schreibst du, 
welche Aktion dabei erfolgen soll.

Einen Kreis markierst du noch speziell: Das ist dein Startzustand. Dort 
geht alles los.

Und dann spielst du Computer: Du befindest dich im Startzustand (also in 
einem Kreis). Von diesem Kreis gehen Pfeile raus, über jedem dieser 
Pfeile steht eine Bedingung. Die gehst du jetzt der Reihe nach durch 
(und stellst dir einen Benutzer vor, wie er auf Tasten drückt, Scheiben 
einhaut, vor sich hinflucht, was Benutzer halt so tun). Wenn eine deiner 
Bedingungen bei einem Pfeil zutrifft, dann folgst du diesem Pfeil und 
führst die zugehörige Aktion in deiner gedachten Umwelt aus. Du landest 
bei einem anderen Kreis und dort geht das Spielchen wieder weiter: 
Welche Pfeile gehen raus und unter welchen Bedingungen können sie 
betreten werden. Und so geht das Spielchen immer weiter. Am besten 
nimmst du auch noch an, dass im Zeitraum den du brauchst um einem Pfeil 
zu folgen, in der Realität keine Zeit vergeht. Wenn du also einen Pfeil 
betreten hast, weil eine Taste niedergedrückt wurde, dann ist sie immer 
noch gedrückt, wenn du beim Zielkreis angelangt bist (und wenn es dort 
einen Pfeil gibt, der genau das als Kriterium hat, dann geht die Reise 
sofort weiter; natürlich unter Ausführung der Aktion die unter dem Pfeil 
steht)

Auf die Art erhältst du erst mal ein graphisches Schaubild deiner 
'Maschine'. Mit dem kann man gut Fehler suchen und Szenarien 
durchspielen, ob sich die Maschine auch wie erhofft verhält. Auch 
erfordern Änderungen nur einen Radiergummi und sind in Null komma Nix 
erledigt.

Jeder Zustand besteht 3 Teilen:
* Einem Namen
* Irgendwelchen Bedingungen, wie man in einen anderen Zustand kommen 
kann
* Aktionen, die an diese Bedingungen geknüpft sind und ausgeführt 
werden, wenn ein Zustandswechsel ansteht. (*)
* Es kann auch sein, dass eine Aktion zu machen ist, die an gar keine 
Bedinung geknüpft ist und keinen Zustandswechsel veranlasst. Das 
entspricht dann einem Pfeil, der ohne Bedinungung vom Kreis rausgeht und 
wieder im selben Kreis mündet.

Und das Beste: Aus diesem Schaubild kann man dann ganz leicht den Code 
ableiten :-)

Edit (*)
Insofern war das Beispiel gedankenlos zusammengeklopft. Es sollte eher 
so aussehen

  case ROT:
    if( Tastegedrückt ) {
      machwas;
      zustand = GELB;
    }

Autor: Heinz peter Posch (poschi8)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Tasten sind SW-Entprellt.

Ich weiß was ein Flussdiagramm ist und wie das funktioniert, ich wollte 
nur wissen ob mein Ansatz stimmt.
Mfg,
Heinz Peter

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ein Anfang für deine 'Maschine' könnte zb so aussehen

Startzustand: TOR_ZU


   TOR_ZU                                   TASTE ABWARTEN_AUF
   +-----------+  Taste 1 gedrückt          +-----------------+
   |           | -------------------------->|                 |
   |           |  Öffnungsmotor starten     |                 |
   +-----------+                            |                 |
                                            +-----------------+
                         Taste 1 losgelassen   |      |
                              +----------------+      |
                              |                       | Endschalter?
                              |                       +-------------+
                              |                       Motor stoppen |
                              v  TOR_ÖFFNET                         |
                         +------------------+                       |
            Taste 1 gedr.|                  |                       |
          +--------------|                  |        TOR_IST_AUF    v
          |              +------------------+        +----------------+
                              |                  +-->|                |
                              | Endschalter?     |
                              +------------------+
                                Motor stoppen

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Heinz peter Posch schrieb:
> Die Tasten sind SW-Entprellt.

Auch gut.
Wenn es damit dann egal ist, ob eine taste länger gedrückt ist oder 
nicht, sparst du dir eine Menge Zustände in deiner Maschine. In dem Fall 
kannst du dann davon ausgehen, dass eine gedrückte Taste beim Betreten 
eines Pfeiles am Ende des Pfeiles wieder gelöst wurde.

>
> Ich weiß was ein Flussdiagramm ist und wie das funktioniert,

Das hat nichts mit einem Flussdiagramm zu tun.
Das ist ein Zustandsdiagram!
Die Maschine hat fiktive Zustände und reagiert auf Ereignisse. Mit 
dieser Reaktion sind Aktionen verknüpft.

Das wird visualisiert! Es geht um die Logik der Maschine, nicht darum 
wie diese Logik implementiert wird.

> ich wollte
> nur wissen ob mein Ansatz stimmt.

Na ja.
Das ist ja noch kein Ansatz. Das sind ein paar Worte die so etwas 
ähnliches wie eine Tabelle andeuten.

Autor: Winfried J. (Firma: Nisch-Aufzüge) (winne)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vorgestern habe ich das Ganze auf ner LOGO programmiert.


http://www.nisch-aufzuege.at/PDFs/rolltorsteurung_...

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Heinz peter Posch schrieb:
> Die Tasten sind SW-Entprellt.

Dann müßtest Du ja schon die Drückereignisse haben.

Deine Statemachine braucht 4 Zustände, die Du mit jedem Drückereigniss 
um 1 weiter zählst und bei 4 wieder auf 0 setzt:
0 = stehen hoch
1 = fahren hoch
2 = stehen runter
3 = fahren runter

Und die (entprellten) Endlagenschalter setzen von 3 auf 0 bzw. 1 auf 2.


Peter

Autor: toni (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!!

Hast du deine Steuerung realisieren können?
Ich muss eine ähnliche Steurung entwerfen und wollte fragen ob du mir 
ein paar tips geben kannst wie man so ein Projekt am besten beginnt?

mfg

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
toni schrieb:
> Hallo!!
>
> Hast du deine Steuerung realisieren können?
> Ich muss eine ähnliche Steurung entwerfen und wollte fragen ob du mir
> ein paar tips geben kannst wie man so ein Projekt am besten beginnt?

Mit einer vernünftigen Tatsenentprellung und Papier und Bleistift.
Damit fällt und steht alles bzw. ab dann wird das ganze trivial.

Hast du den Rest vom Thread überhaupt gelesen?
Weißt du was eine Zustandsmaschine ist?

#>>> Statemachine <<<#

Autor: toni (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ein Flussdiagramm ist mir bekannt!
Meine aufgabenstellung ist ähnlich wie oben!

Im Rahmen der Diplomarbeit soll eine gemeinsame Basissteuerung für 
Poolabdeckungen, Parkpoller und Tür- und Torantriebe entwickelt werden. 
Die Realisierung soll mittels Mikrocontroller (AVR) erfolgen.

Schaltplan-Konstruktion und Layoutentwurf samt Dimensionierung einer 
Basissteuerung.
Realisierung einer Steuerung in Form einer Platine.


24V DC Motor

Soll eine Steuerung entwickelt werden die Auf und Ab fährt!
Meine Frage also wie ich so eine aufgabenstellung am besten realisiere!

Autor: Düsendieb (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
toni schrieb:
> Meine Frage also wie ich so eine aufgabenstellung am besten realisiere!

wie schon von Karl-Heinz geschrieben: mit Papier und Bleistift.

erst eine große Black Box mit der Sensorik und dem Motor drann.

dann kleinere Kisten usw...

Autor: Christian H. (christian_h)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hat man das nicht im Studium gelernt?

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.