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
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.
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.
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!
Notaus hat in Hardwae zu funktionieren!!!!!!!!!!!!!!!! Also auch, wenn sich der uC aufgehaengt hat. (Ja es gibt zertifizierte sichere Steuerungen.) Gast4
>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.
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.
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
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ß...
>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
Ok, Frage hat sich erledigt.
Gast4 schrieb:
> [blabla]
Du plärrst tatsächlich nur drauf los ohne zu überlegen.
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
> > 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!
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.
Ich benutze die entprell routine von peter danneger. Die funktioniert bis jetzt absolut einwandfrei und kostet mich wenig.
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 | }
|
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
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...
entschuldige, hab ich ganz vergessen, das ganze befindet sich in einer while(1)-Schleife, also int main() { while(1) { ...
>if ((PINB && (1<<PB4)) == 0)
if ((PINB & (1<<PB4)) == 0)
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
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
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/
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.