Forum: Mikrocontroller und Digitale Elektronik Prellen am Notaus, Realisieren einen Notaus


von Christoph V. (Gast)


Angehängte Dateien:

Lesenswert?

Hallo!

Für meine Studienarbeit habe ich eine Steuerbox mit einem Notaus-Taster 
vom Conrad (den günstigsten, "NOT-AUS BELEUCHTBAR") gebaut. Nach ein 
paar Versuchen habe ich den Taster nach der Schaltung hier im Forum 
entprellt (2 Widerstände, 3,3 und 33kOhm und eine Kapazität mit 100nF).

Der Notaus trennt die Stromversorgung zu den drei angeschlossenen 
Motoren und es soll dem Mikrocontroller (ATMega2560) mitgeteilt werden, 
dass jetzt eine Notaussituation eingetreten ist (und beim Ziehen wieder 
mitteilen, dass die Situation beendet ist).
Dies habe ich über einen Tasteninterrupt versucht, aber dieser ist 
zumindest beim Ziehen des Tasters fast immer zweimal ausgelöst worden. 
Nun habe ich das Signal mit einem Oszi gemessen (Bild angehängt) und es 
sind 2 Sprünge mit einem Abstand von etwa 130ms zu sehen. Hier im Forum 
wird von einer typischen Prellzeit von bis zu 10ms gesprochen, deshalb 
schließe ich Prellen in diesem Sinn aus.

Ich habe die Vermutung, dass beim Ziehen des Tasters, wobei man zuerst 
drehen muss und dann springt er nach oben, zweimal Kontakt hergestellt 
wird. Hat jemand Erfahrung mit einem solchen Taster? Was denkt ihr?

Wie könnte ich sonst noch den Notaus realisieren?

Vielen Dank schon mal und viele Grüße,
Christoph

von Sven P. (Gast)


Lesenswert?

Ich denke, dass...

1. ...eine Not-Aus-Funktion in der Regel nicht über Programmierung 
realisiert werden darf, sondern die Anlage über Hardware in einen 
sicheren Zustand versetzen muss (Relais, Sicherheitsschaltmodule)

2. ...20ms Prellen bei dem grobmotorischen Schaltkontakt normal sind und 
dass man dem wohl eher mit einem ausreichend großen RC-Glied beikommen 
sollte, wobei ich damit etwa das Zehn- bis Hundertfache deiner 100nF 
meine.

3. ...man auch in Software wunderbare Entprellroutinen schreiben kann.

von Christoph V. (Gast)


Lesenswert?

Danke für die schnelle Antwort!

Der sichere Zustand wird dadurch hergestellt, dass die Stromversorgung 
gekappt wird und die Motoren stehenbleiben.

Aber kann es sein, dass der Schalter 130ms lange prellt?


Ich habe auch noch folgendes versucht:
Den Taster nicht als externen Interrupt anzuschließen sondern als 
normalen Taster, den kann ich dann auch softwaremäßig entprellen.
Da ist dann solange Notaus-Situation, solange der Taster gedrückt ist 
und die Situation wird gelöst, sobald man den Taster zieht (über 
Schleifen realisiert).
Für den Pin habe ich den internen Pullup aktiviert und über den Taster 
mit GND verbunden.
Hier passiert folgendes: beim ersten Mal drücken funktioniert der Taster 
und die Notaussituation tritt ein (angezeigt durch blinkende LEDs). Nach 
etwa 10 Sekunden aber löst sich die Situation von selbst, ohne Ziehen 
des Taters. Der Pin ist mittlerweile wieder auf 1, ganz von selbst, und 
das Programm hat deswegen die Schleife verlassen. Anschließend erkennt 
er das Drücken des Notaus auch nicht mehr.

Was kann das sein? Ich bin ratlos und weiß nicht mehr, wie ich den 
Notaus realisieren soll, nachdem der Interrupt auch nicht geht.

von Sven P. (Gast)


Lesenswert?

Programmierfehler :-)

130 Millisekunden kann gut und gerne sein. Das ist teilweise sicher gar 
kein Prellen mehr, sondern fehlender Kontaktschluss. Bedenke mal, dass 
die Kontakte eigentlich nicht für solche winzigen Ströme gedacht sind!

von Gast4 (Gast)


Lesenswert?

Notaus hat in Hardwae zu funktionieren!!!!!!!!!!!!!!!!
Also auch, wenn sich der uC aufgehaengt hat.

(Ja es gibt zertifizierte sichere Steuerungen.)

Gast4

von holger (Gast)


Lesenswert?

>Der sichere Zustand wird dadurch hergestellt, dass die Stromversorgung
>gekappt wird und die Motoren stehenbleiben.

>Was kann das sein? Ich bin ratlos und weiß nicht mehr, wie ich den
>Notaus realisieren soll, nachdem der Interrupt auch nicht geht.

Schönes Beispiel weshalb man den Notaus nicht per
Software realisiert. Der Controller bleibt irgendwo
hängen, und der Notaus ist reine Makulatur.

Trenn direkt mit dem Notaus die Stromversorgung.
Sonst kann es teuer für dich werden.

von Sven P. (Gast)


Lesenswert?

Sachtmal ihr beiden, lest ihr eigentlich mit oder plärrt ihr nur drauf 
los?

> Der sichere Zustand wird dadurch hergestellt, dass die Stromversorgung
> gekappt wird und die Motoren stehenbleiben.

von Peter D. (peda)


Lesenswert?

Christoph V. schrieb:
> Nun habe ich das Signal mit einem Oszi gemessen (Bild angehängt) und es
> sind 2 Sprünge mit einem Abstand von etwa 130ms zu sehen. Hier im Forum
> wird von einer typischen Prellzeit von bis zu 10ms gesprochen, deshalb
> schließe ich Prellen in diesem Sinn aus.

Die 10ms sind das empfohlene Abtastintervall, nicht die Prellzeit.
Wenn Du die bekannte Entprellung mit 4-fach Abtastung nimmst, kriegst Du 
damit nur einen Impuls.
Der 1. High-Pegel ist ja nur 20ms lang, würde also noch unterdrückt 
werden. Nur Pegelwechsel länger als 40ms kommen durch.


Peter

von Gast (Gast)


Lesenswert?

Er schreibt doch am Anfang dass der Notaus die Stromversorgung der 
Motoren trennt UND dem Controller mitteilt, dass das passiert ist... 
Dann ist die eigentliche Notausfunktion doch in Hardware und es geht nur 
darum, dass die Steuerung das auch weiß...

von Gast4 (Gast)


Lesenswert?

>Sonst kann es teuer für dich werden.

Na gut, die Gefahr besteht hier wohl nicht:

>Für meine Studienarbeit ...

Aber trotzdem: in der Industrie wird die NotausFUNKTION meist in 
Hardware realisiert (Oeffnerkontakt des NOTAUS-Schalters). Der 
zusaetzliche Schliesser dient nur dazu, der Steuerung zu erzaehlen, an 
welcher Stelle sich jemand gegen den Taster gelehnt hat.

Gast4

von Sven P. (Gast)


Lesenswert?

Ok, Frage hat sich erledigt.

Gast4 schrieb:
> [blabla]

Du plärrst tatsächlich nur drauf los ohne zu überlegen.

von Peter D. (peda)


Lesenswert?

Christoph V. schrieb:

> Was kann das sein? Ich bin ratlos und weiß nicht mehr, wie ich den
> Notaus realisieren soll, nachdem der Interrupt auch nicht geht.

Nun, Du hast gemerkt, daß ein externer Interrupt völlig untauglich ist, 
das ist doch ein schönes Ergebnis.

Es entspricht völlig den Erfahrungen anderer Entwickler. Jeder kleinste 
Spike (Gewitter, Motoranlauf usw.) kann einen externen Interrupt 
auslösen.

Nun nimm die 4-fach Entprellung per Timerinterrupt und alles ist in 
Butter.


Peter

von Christoph V. (Gast)


Lesenswert?

>
> Aber trotzdem: in der Industrie wird die NotausFUNKTION meist in
> Hardware realisiert (Oeffnerkontakt des NOTAUS-Schalters). Der
> zusaetzliche Schliesser dient nur dazu, der Steuerung zu erzaehlen, an
> welcher Stelle sich jemand gegen den Taster gelehnt hat.
>

Genau so will ich es machen, vielleicht habe ich mich oben etwas unklar 
ausgedrückt. Die Funktion ist gewährleistet (Strom weg), es geht nur 
noch um die Mitteilung an den Controller, die funktioniert noch nicht so 
ganz.
Ich benutze auch den Öffner für die Stromversorgung und den 
Schließerkontakt für die Meldung.

Zum Programmieren:

Das Blinken bei Notaus geschieht in einer Endlosschleife, die nur 
verlassen werden kann, wenn der Taster wieder gezogen wurde. Deshalb 
wundert es mich, dass er diese ohne Ziehen verlässt und anschließend 
aber nicht mehr hineingeht.
Kann es sein, dass so ein Taster eine kapazitive Komponente hat und sich 
irgendwie auflädt?

Vielen Dank für die schnellen Antworten!

von Sven P. (Gast)


Lesenswert?

Glaub ich nicht. Ich tippe weiterhin auf einen Programmierfehler, 
schreib doch das Programm mal hierher.

Ansonsten noch so als Tipp: Lass die Anlage nicht automatisch anlaufen, 
sobald der Notaus wieder gezogen wurde, sondern bau einen weiteren 
Taster ein. Das verhindert dann ungewolltes Wiederanlaufen.

von Anon Y. (avion23)


Lesenswert?

Ich benutze die entprell routine von peter danneger. Die funktioniert 
bis jetzt absolut einwandfrei und kostet mich wenig.

von Christoph V. (Gast)


Lesenswert?

ok, ich hab den code schnell aus dem kopf zusammengetippt. Dieser Code 
ist das einzige, was in der main()-Funktion steht.

Wie gesagt, es funktioniert einmal und durch die LEDs weiß ich, dass er 
die Zeilen auch durchläuft, aber eben nur einmal, drückt man dann 
nochmal den Notaus, passiert nichts mehr.

1
if ((PINB && (1<<PB4)) == 0)
2
{
3
  delayms(150);
4
5
  if ((PINB && (1<<PB4)) == 0)
6
  {  
7
    while(1)
8
    {
9
      blink();       //schaltet alle LEDs an und kurz später wieder aus
10
      
11
      if ((PINB && (1<<PB4)) != 0)
12
      {
13
        delayms(500);     //lange Entprellen
14
        
15
        if ((PINB && (1<<PB4)) != 0)
16
        {
17
          LEDsaus();
18
          LEDan(5); //Statusled an, zeigt, dass er wieder aus dem Notaus ist
19
          break;  
20
        }
21
      }
22
    }
23
  }
24
}

von Miraculix (Gast)


Lesenswert?

Hallo Christoph,

wenn, wie es üblich sein sollte, der betätigte Notaus, also Taste 
"drinnen" einen Offenen Kontakt bedeutet, darf es nicht auf "OK"
gehen. Ein Offener Kontakt ist nun mal hochohmig. Richtig ist hingegen 
die Bemerkung daß solche Kontakte bei sehr kleinen Strömen gerne Ärger 
machen.
Ich hatte schon einen solchen Fall, geschlossener! Schalter ca. 10kOhm!

In Deinem Fall dürfte dann aber nur das "Wiedereinschalten" unentdeckt
bleiben, nicht schön, aber weniger gefährlich.

Ich würde mal folgendes Versuchen:
"Not-Austasten-Information" zum µP mit "normaler Taste" simulieren,
funktioniert es, sollte Programm soweit OK sein.

"Not-Austasten-Information" zum µP mal mit Multimeter messen,
bleibt die stabil?

Oder läuft über diese Leitung noch ein weiteres Signal???
Dann bitte über Optokoppler Trennen!

Mit freundlichen Grüßen
und viel Erfolg!

Miraculix

von Sven P. (Gast)


Lesenswert?

Du verschwindest mit 'break' aus deiner While-Schleife... und dann? 
Läuft das Programm bis zum Ende der main-Routine und hängt sich dann in 
einer automatisch erzeugten Endlosschleife auf...

von Christoph V. (Gast)


Lesenswert?

entschuldige, hab ich ganz vergessen, das ganze befindet sich in einer 
while(1)-Schleife, also

int main()
{
while(1)
{ ...

von holger (Gast)


Lesenswert?

>if ((PINB && (1<<PB4)) == 0)

if ((PINB & (1<<PB4)) == 0)

von Peter D. (peda)


Lesenswert?

Christoph V. schrieb:
> ok, ich hab den code schnell aus dem kopf zusammengetippt.

Sehr schön. Du erwartest doch nicht etwa, daß sich das jemand ansieht.

Das ist ein absolutes No-Go bei SW-Fragen. Entweder Copy&Paste oder als 
Anhang!


Peter

von Christoph V. (Gast)


Lesenswert?

holger schrieb:
>>if ((PINB && (1<<PB4)) == 0)
>
> if ((PINB & (1<<PB4)) == 0)

Es war tatsächlich ein Programmierfehler, ich weiß auch nicht, warum ich 
dort das Doppel-& geschrieben habe und der Compiler nicht gemeckert hat.

Auf jeden Fall funktioniert es jetzt einwandfrei, wenn ich nur ein & 
schreibe.

Vielen Dank nochmal für die Hilfe!
Viele grüße,
Christoph

von Marcus H. (mharnisch) Benutzerseite


Lesenswert?

Christoph V. schrieb:
>> Aber trotzdem: in der Industrie wird die NotausFUNKTION meist in
>> Hardware realisiert (Oeffnerkontakt des NOTAUS-Schalters). Der
>> zusaetzliche Schliesser dient nur dazu, der Steuerung zu erzaehlen, an
>> welcher Stelle sich jemand gegen den Taster gelehnt hat.
>>
>
> Genau so will ich es machen

Und wie erfährst Du, ob der Kontakt richtig geschaltet hat? Öffner: 
verschweißt, Schließer: "Notaus geschaltet. Prima, alles OK!"

In Sicherheitsschaltgeräten verwendet man beide Kontakte des Schalters 
zur Auswertung und Weitergabe des Signals (zweikanalige Ansteuerung). 
Kommt natürlich auf die Anforderungen (SIL) an.

Gruß
Marcus
http://www.doulos.com/arm/

von Christian H. (netzwanze) Benutzerseite


Lesenswert?

Christoph V. schrieb:
> Es war tatsächlich ein Programmierfehler, ich weiß auch nicht, warum ich
> dort das Doppel-& geschrieben habe und der Compiler nicht gemeckert hat.
Weil es ein && auch gibt - bedeutet UND.

Also:
Wenn PINB != 0 UND (1<<PB4) != 0
Da 1<<PB4 immer ungleich Null ist, gilt hier nur PINB != 0.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.