Hallo,
ich bin dabei mit einem Arduino Uno und einem Motorshield einen
Schrittmotor zu steuern.
Dabei soll über zwei Tasten die Richtung bestimmt werden. Taster 1
Umdrehung links herum und Taster 2 1 Umdrehung rechts herum. Das
funktioniert soweit. Soll vllt auch noch über eine Rampenfunktion
erweitert werden.
Der Taster 3 soll als Notaus funktionieren. Sprich wird dieser gedrückt
so soll der Motor anhalten und sich zusätzlich zwei Steps zurück
bewegen.
Das Problem:
Wenn ich dies versuche über einen Interrupt zu lösen, bekomme ich diesen
nicht mehr beendet oder dieser wird ignoriert. Ich habe die Vermutung
das er sich die Anzahl der Schritte merkt und erst einen neunen Befehl
entgegen nimmt wenn er diese abgearbeitet hat. Dies verhindert jedoch
der Interrupt (soll er ja auch).
Vllt hat ja hier jemand eine Idee.
Beste Grüße
Michael (Strompädagoge)
1
#include<Stepper.h>
2
3
4
/* STEPS muss auf die Anzahl der Stepps des verwendeten Motors angepasst werden */
5
#define STEPS 200
6
7
// eine Instanz aus der Klasse Stepper wird erzeugt
8
// sie bekommt die Anzahl der Steps und die Pins, an die der Schrittmotor
Behandle dein Notaus wie die anderen Tasten. Du musst dir nur den Status
merken damit der Notaus nur einmal abgefragt wird. Diesen Status löscht
du mit betätigen einer der beiden anderen Tasten.
MaWin schrieb:> Ich würde ihn mit RESET verbinden...
Nich wirklich Zielführend.
Falls man die Infos als solche bezeichnen darf;)
@TO
Ist Dir eigentlich bewusst wie oft der Int ausgelöst wird, wenn Du da
die Taste drückst?
Äää.. nich das ich da nachgesehen hätte!
Die Bezeichnung Notaus ist hier sehr verwirrend.
Wenn von Notaus geredet wird, dann im Normalfall im Zusammenhang mit CE.
Da dieser Notaus in keinster weise die CE Bedingungen erfüllen kann,
handelt es sich nicht um einen Notaus in klassischem Sinne...
Draco schrieb:> Michael L. schrieb:>> volatile int state = LOW;>> Was soll das denn sein?!
volatile bedeutet, dass der Wert bei jeder Verwendung aus der Variablen
gelesen wird (also nicht temporär in Registern gehalten wird), weil er
z.B. durch Interruptroutinen verändert werden kann o.ä.
https://www.arduino.cc/en/Reference/VolatileSamuel schrieb:> Die Bezeichnung Notaus ist hier sehr verwirrend.> Wenn von Notaus geredet wird, dann im Normalfall im Zusammenhang mit CE.> Da dieser Notaus in keinster weise die CE Bedingungen erfüllen kann,> handelt es sich nicht um einen Notaus in klassischem Sinne...
Das ich damit keine Norm erfülle ist mir klar. Ich will das laufende
Programm unterbrechen um Schaden am Versuchsaufbau zu vermeiden. Wenn du
einen besseren Titel hast, änder ich das gerne ab. ;)
Beste Grüße
strompädagoge
Ist es eigentlich Möglich den Interrupt erst auf Betätigung eines
Tasters zu beenden?
So geht der ja wieder zurück ins eigentliche Programm sobald dieser
abgearbeitet ist.
Notaus gehört in die Stromversorgung der Motoren oder der ganzen
Maschine. Nicht auf eine Softwarebene. Wenn der Prozi hängt .... was
dann.... Arm/ Bein ab ?
Michael L. schrieb:> Ist es eigentlich Möglich den Interrupt erst auf Betätigung eines> Tasters zu beenden?> So geht der ja wieder zurück ins eigentliche Programm sobald dieser> abgearbeitet ist.
Wenn du im Interrupt alles zurückstellst, Tastendruck, Schritte usw.,
dann rührt sich ja nichts mehr wenn herausgesprungen wird.
Im Interrupt merken das die Taste 3 gedrückt wurde, im main dann wieder
zurücksetzen wenn sie losgelassen wurde.
Servus,
die Tasten müssten erstmal entprellt werden (zumindest die Notaus
Taste). Weiterhin müsste man die Variable "state" auch im Programm
(loop) einbauen.
Sowas wie
do{
...
}while(state);
Außerdem müsste man im Interrupt das Notaus wieder entriegeln können...
Stephan schrieb:> Notaus gehört in die Stromversorgung der Motoren oder der ganzen> Maschine. Nicht auf eine Softwarebene. Wenn der Prozi hängt .... was> dann.... Arm/ Bein ab ?
und was ist wenn Schäden erst dadurch entstehen, das das Gerät sofort
abgeschaltet wird?`
Es gibt auch gute gründe warum man ein Notaus über Software geordnet
machen sollte.
Überlegt dir mal ein Kran mit Magnet, der Schrott transportiert. Beim
Notaus sollte wohl nicht der Magnet abgeschaltet werden. Es sollte die
Bewegung möglichst schnell beenden aber auch nicht "sofort".
aSma>> schrieb:> die Tasten müssten erstmal entprellt werden (zumindest die Notaus> Taste)
Gerade die Notaustaste sollte nicht entprellt sein, die Schrittmotoren
sollen doch sofort stehen bleiben und nicht erst nach, angenommen,
5msec.
Für die anderen Tasten stellt sich die Frage, sollen die Steps nur
einmal ausgeführt werden oder sollen sie laufen solange die Taste
gedrückt ist. Die Laufzeit der Steps ist sicher länger als das Prellen
der Tasten.
Was ist wenn beide Tasten gleichzeitig gedrückt werden?
Peter II schrieb:> Es gibt auch gute gründe warum man ein Notaus über Software geordnet> machen sollte.
Nein!
Not-Aus bedeutet *immer*: Alles Aus und sofort!
Das bedeutet bei deinem Kranbeispiel: Ja, die Last fällt runter.
Was du meinst ist Not-Halt. Da gibt es die Stopp-Kategorien 0, 1 und 2.
0 sofort alles aus
1 gesteuertes Stillsetzten bis Gefahr weg und dann alles aus
2 gesteuertes Stillsetzen bis Gefahren weg und nur wichtige, aber
ungefährliche Sachen unter Energie lassen (z.B. dein Hubmagnet, Kühlung,
Absaugung, Beleuchtung...)
Peter II schrieb:> Es gibt auch gute gründe warum man ein Notaus über Software geordnet> machen sollte.
Nein, die gibt es nicht. So etwas wäre ein gefährlicher Verstoss gegen
die Maschinenrichtlinie und andere Vorschriften, das wird auch bei einer
Prüfung niemals genehmigt.
Natürlich herrscht hier im Forum die Meinung vor,
Sicherheitsvorschriften sind nichts für echte deutsche Kerle und
ausserdem völlig unverbindlich, das ändert aber nicht das geringste
daran, dass eine Missachtung nicht nur den Pfuscher selbst, sondern auch
andere in Gefahr bringt. Daher kann man solche unverantwortlichen Posts
nicht unwidersprochen lassen.
Georg
Georg schrieb:> Daher kann man solche unverantwortlichen Posts> nicht unwidersprochen lassen.
Da bin ich ganz deiner Meinung. Notaus ist NOTAUS und sonst nichts, ohne
jegliche Einschränkung.
Wenn ihr allerdings den Thread etwas weiter oben lesen würdet, dann wäre
klar das der Titel nicht dem entspricht was der TO eigentlich will. Er
hat das auch selbst schon eingeschränkt.
Er will nur einen Ablauf gezielt beenden.
Georg schrieb:> Nein, die gibt es nicht. So etwas wäre ein gefährlicher Verstoss gegen> die Maschinenrichtlinie und andere Vorschriften, das wird auch bei einer> Prüfung niemals genehmigt.
achso - warum gibt es dann Notaustaster die über einen Bus an eine SPS
angeschlossen werden?
Route 6. schrieb:> Nein!> Not-Aus bedeutet *immer*: Alles Aus und sofort!> Das bedeutet bei deinem Kranbeispiel: Ja, die Last fällt runter.
nein, ganz bestimmt nicht.
https://de.wikipedia.org/wiki/Notausschalter
[...]
Stopp-KategorienStopp-Kategorie 0:
Energiezufuhr zu den Antriebselementen wird sofort getrennt (nur
möglich, wenn das plötzliche Abschalten der Energie keine Gefährdung
verursacht)
Stopp-Kategorie 1:
gesteuertes Stillsetzen: Maschine wird in einen sicheren Zustand
versetzt, dann erst wird die Energie zu den Antriebselementen endgültig
getrennt. Dies ist sinnvoll, wenn Klemmungen, Bremsen o. ä. Energie
benötigen.
Stopp-Kategorie 2:
Maschine wird in einen sicheren Zustand versetzt, die Energie aber nicht
getrennt. Diese Kategorie sollte nur dann genutzt werden, wenn technisch
keine Möglichkeit besteht, gefahrlos die Energie zu trennen. Zum
Beispiel würde bei einem Kran mit Lasthebemagnet das Abschalten der
Spannung am Magnet zum Abstürzen der Last führen (nur EN 60204-1:2006
Pkt. 9.2.2).
[...]
Hubert G. schrieb:> Da bin ich ganz deiner Meinung. Notaus ist NOTAUS und sonst nichts, ohne> jegliche Einschränkung.
dann solltest du dich etwas mehr informieren.
Hubert G. schrieb:> Michael L. schrieb:>> Ist es eigentlich Möglich den Interrupt erst auf Betätigung eines>> Tasters zu beenden?>> So geht der ja wieder zurück ins eigentliche Programm sobald dieser>> abgearbeitet ist.> Wenn du im Interrupt alles zurückstellst, Tastendruck, Schritte usw.,> dann rührt sich ja nichts mehr wenn herausgesprungen wird.> Im Interrupt merken das die Taste 3 gedrückt wurde, im main dann wieder> zurücksetzen wenn sie losgelassen wurde.
Wie bekomme ich denn das alles zurück gesetzt?
Bei Funktionen wie stepper.runToNewPosition(20); merkt er sich ja die 20
Schritte irgendwo. Nur ich weiß nicht wo...
Peter II schrieb:> dann solltest du dich etwas mehr informieren.
Eher du.
Du vemischt hier Not-Aus mit den Handlungen im Notfall, die in der DIN
EN 60204-1 beschrieben sind.
Da gibt es neben Not-Aus sogar das Einschalten oder das Starten im
Notfall.
Not-Aus ist Not-Aus, basta!
Route 6. schrieb:> Not-Aus ist Not-Aus, basta!
ich habe den link auf wiki oben schon geschrieben, dort geht es um
Not-Aus und dort ist auch das Beispiel mit dem Kran drin. Auch mit
verweis auf eine DIN.
Peter II schrieb:> Route 6. schrieb:>> Not-Aus ist Not-Aus, basta!>> ich habe den link auf wiki oben schon geschrieben, dort geht es um> Not-Aus und dort ist auch das Beispiel mit dem Kran drin. Auch mit> verweis auf eine DIN.
In dem verlinkten Artikel steht aber auch noch mehr:
https://de.wikipedia.org/wiki/Notausschalter#Sicherheitsaspekte
[...]
"Bei Notaus ist gefordert, die Anlage zum Schutz gegen elektrischen
Schlag spannungsfrei zu schalten. Sicherheitsnormen erwähnen den
Not-Halt. Bei Not-Halt ist es nicht gefordert, dass die gesamte Maschine
spannungsfrei wird. Ein Antrieb muss bei Erkennen einer gefahrbringenden
Situation durch den Bediener angehalten werden können zum Schutz vor
einer Gefährdung. Zum kontrollierten Abbremsen des Antriebes wird
Spannung benötigt. In den meisten Fällen wird z. B. eine
Speicherprogrammierbare Steuerung (SPS) oder angeschlossene PC-Technik
nicht abgeschaltet. Auch Bremsen, Kühlungen, Absaugungen u. ä.
Sicherheitstechnik werden meist nicht abgeschaltet, sofern von ihnen
keine Gefährdungen ausgehen."
[...]
https://de.wikipedia.org/wiki/Notausschalter#Problematik_der_Begrifflichkeiten
[...]
"Im deutschen Sprachgebrauch werden die beiden Funktionen Not-Aus (=
Abschalten, Unterbrechen der Energiezufuhr) und Not-Halt (= Anhalten,
Stillsetzen der beweglichen Maschinenteile) häufig unter dem Begriff
„Not-Aus“ subsumiert, was zuweilen – auch unter Fachleuten – zu
Verwirrungen führt. Korrekt ist die Verwendung von „Not-Aus“ als
deutsche Entsprechung für den englischen Begriff emergency switching
off.[1] Es gab aber deutsche Normausgaben, die auch den englischen
Begriff emergency stop fälschlich mit dem Ausdruck „Not-Aus“
wiedergaben. Dies tat insbesondere die EN418 (Sicherheit von Maschinen;
NOT-AUS-Einrichtung, funktionelle Aspekte; Gestaltungsleitsätze;
Deutsche Fassung EN 418:1992) und teilweise auch die alte
EG-Maschinenrichtlinie 98/37/EG.
Die Nachfolgenorm ISO 13850 hat dies korrigiert und spricht von
Not-Halt. In der neuen Fassung der Maschinenrichtlinie (2006/42/EG, bzw.
2009/127/EG) wurde der falsch verwendete Begriff ebenfalls durch
Not-Halt ersetzt."
[...]
Beide Auszüge bestätigen die Aussage von Route 66.
Zum Thema Not-Aus auf SPS:
Es gibt spezielle Sicherheits-SPS, welche für Not-Aus-Funktionen
zugelassen sind (und auch den passenden SIL-Level besitzen).
NA schrieb:> Beide Auszüge bestätigen die Aussage von Route 66.
wo?
Es steht unter NOT-AUS
[...]
Der Not-Aus-Schalter
Stopp-Kategorie 0: Energiezufuhr zu den Antriebselementen wird sofort
getrennt (nur möglich, wenn das plötzliche Abschalten der Energie keine
Gefährdung verursacht)
[...]
Damit ist doch schon klar, das ein NOT-AUS nicht immer die Gesamte
anlange ausschalten muss.
Peter II schrieb:> NA schrieb:>> Beide Auszüge bestätigen die Aussage von Route 66.>> wo?>> Es steht unter NOT-AUS>> [...]> Der Not-Aus-Schalter>> Stopp-Kategorie 0: Energiezufuhr zu den Antriebselementen wird sofort> getrennt (nur möglich, wenn das plötzliche Abschalten der Energie keine> Gefährdung verursacht)> [...]>> Damit ist doch schon klar, das ein NOT-AUS nicht immer die Gesamte> anlange ausschalten muss.
Das ist eher der Formatierung in Wikipedia geschuldet. Die
Stopp-Kategorien gehören nicht nur zur Funktion Not-Aus.
Kategorie 0 ohne Gefährdung -> Not-Aus -> Elektrische Versorgung weg
Ab Kategorie 0 mit Gefährdung -> Not-Halt mit anschließender (nicht
zwingend geforderter) Abschaltung der elektrischen Versorgung.
Steht in den Hinweisen zur Begriffsproblematik.
womit ich eigentlich ja schon alles gesagt hatte.
Ob der Kran dann die Last abwirft oder der Magnet an bleibt dürfte ja
von den vorgeschriebenen Arbeitsumgebungen abhängig sein. Sofern sich eh
Niemand unterhalb des Magneten aufhalten soll und darf, soll er doch
abwerfen.
Ist doch eine Frage WIE die Arbeitssicherheit im Umgang mit dem Kran vom
Hersteller definiert wurde. Der Hersteller definiert doch die Sicherheit
des Kranes und den Umgang mit ihm.
Michael L. schrieb:> Bei Funktionen wie stepper.runToNewPosition(20); merkt er sich ja die 20> Schritte irgendwo. Nur ich weiß nicht wo...
Wenn das von dir verwendete Stepper Objekt keine passende Methode zur
Verfügung stellt, musst du wohl selber aktiv werden und die passende
Funktion implementieren.
Route 6. tautologisierte im Beitrag #4746568:
> Not-Aus ist Not-Aus, basta!
Not-Aus ist Ein (Dichotomieaxiom).
Not-Fall ist Aufstieg.
Not-Book ist kein Buch.
Basta Asciutta!
Peter II schrieb:> Damit ist doch schon klar, das ein NOT-AUS nicht immer die Gesamte> anlange ausschalten muss
Das war ja überhaupt nicht die Frage, sondern ob man eine
Not-Aus-Funktion einfach durch eine zusätzliche Funktion in der Software
realisieren kann, wie der TO das vorhat. Und das ist einfach nur
unverantwortlich. Z.B. weil der angebliche Not-Aus völlig wirkungslos
ist, wenn sich die Software mal aufgehängt hat.
Ja, ich weiss, du bist ein harter Kerl, der keine Sicherheiten braucht,
und ausserdem sind deine Programme alle vollkommen fehlerfrei, bewiesen
dadurch das sie ja von dir sind. Aber leider kann man das nicht
verallgemeinern.
Georg
Wie sieht das eigentlich aus wenn ich drei Taster mit Interrupt
überwachen möchte? Dafür sind doch nur Pin D2 und D3 vorgesehen. Oder
funktioniert das nur mit maximal zwei Tastern?
Not-Aus MUSS jegliche Energie von den Antriebselementen nehmen, dazu
gibt es nur sehr wenige Ausnahmen.
Dabei ist es egal, ob sie gerade in Betrieb sind oder nicht. Dies geht
natürlich nicht im Rahmen von irgendwelcher Software. Also indirekt.
Geh' einfach mal davon aus, dass gerade die Not-Abschaltung, durch einen
Absturz der Software erzwungen wird;-/
... aber niemand hindert Dich daran den Zustand des Not-Aus-Schalters,
mittels Software, zu überwachen.
Bei Schrittmotoren ist aber davon auszugehen, dass ein "hartes"
abschalten, fast immer zu Schrittverlusten führt.
Taster über einen Interrupt schalten ist eine schlechte Idee. Du
müsstest die Taste hardwaremässig entprellen. Ansonsten löst du immer
zumindest 2x den Interrupt aus.
Der Mega328 des UNO kann aber auch Pin-Change Interrupt. Wie das
allerdings mit der Arduino-IDE funktioniert weiß ich nicht. Das Problem
mit den Tastenprellen stellt sich aber auch hier.
Michael L. schrieb:> Dafür sind doch nur Pin D2 und D3 vorgesehen. Oder> funktioniert das nur mit maximal zwei Tastern?
Versuch doch mal Dir vorzustellen, wie Du Tasten abfragen kannst ohne
die INT-Eingänge zu benutzen. Das ist nämlich kein guter Stil und kann
je nach Situation schädlich sein. Leider ist diese Denkweise sehr
verbreitet, viele Anfänger denken die INT-Eingänge seien eine Art
"NotAus-Interface" - sind sie aber nicht.
Ich habe mir die Stepper.cpp mal kurz angeschaut. Die Anzahl der Steps
wird in einer while-Schleife abgearbeitet. Es kann daher nur durch einen
Interrupt unterbrochen werden. Wie das zu machen wäre müsste man sich
genauer ansehen. In einem fremden Programm herumzuzaubern ist aber nicht
so leicht. Wenn du dann auch noch eine Rampe hinzufügen willst, wird es
besonders lustig, oder gibt es sowas schon fertig?
Daher ist das Programm für deine Wünsche nur bedingt geeignet. Und das
Problem des Tastenprellen bleibt bestehen.