Sensordefekt erkennen Plausibilitätsprüfung

Hallo,
Ich habe ein Problem an dem ich schon länger grüble.
Der Aufbau funktioniert grundsätzlich sehr gut es geht eigentlich um eine
quasi Sicherheitseinrichtung.
2 Arduinos ein Nano ein Mega über Uart verbunden.
am Nano hängen 2 Induktive Sensoren die mit einer einfachen Drehgeberauswertung die Umdrehungen (Max 5 Hz) und die Drehrichtung einer Welle abnehmen, zählen und an den Mega übergeben.
Der Mega steuert auf Tastendruck einen Motor der die Welle eine vordefinierte Anzahl (Ziel) von Umdrehungen laufenlässt und vor erreichen langsamer wird und bei den Vorgegebenen Umdrehungen stoppt.
Funktionier alles sehr gut.
Nun möchte ich während der Mega den Motor laufen lässt permanent die Drehgeberauswertung auf Plausibilität, Funktion prüfen um bei einem Sensordefekt oder anderer Fehlfunktion den Motor automatisch zu stoppen.
Quasi Motor dreht sich Umdrehungen werden hochgezählt, Ok Umdrehungen bleiben gleich, Fehler > Motor Stopp.
Nur ist mir noch nichts eingefallen wie ich diese Funktion in den Sketch integriere.
Ich würde mich über eine Anregung zu einer Lösung sehr freuen. Danke
nano Sketch

void loop() { 
   aState = digitalRead(outputA);              
    if (aState == LOW && aLastState==HIGH){    
     if (digitalRead(outputB) != aState) { 
       counter ++;
    } else {
       counter --;
     }
    mySerial.println(counter);   
   } 
   aLastState = aState;                  

Mega Sketch

if (umdre < ziel  {
           if ( Motordrehzahl < maxgeschwi ) {       //Motorbeschleunigung
        zae = zae + 1;
        if (zae > 100) {
          Motordrehzahl= Motordrehzahl + 1 ;  // analog Out 0 - 255
          zae = 0;
           	}
}
   	}

    if (umdre > ziel - 5) {		//Motordrehzahl reduzieren bis stopp
            if (Motordrehzahl > 127) {     // 127 = Motor Stopp  (analog Out 0-255)
        zae = zae + 1;
        if (zae > 200) {
          Motordrehzahl = Motordrehzahl - 1 ;
          zae = 0;
        }
        }
        }

lg Andreas

z.B. jede Sekunde prüfen ob sich bei drehendem Motor die Umdrehungsanzahl geändert hat
nur Pseudocode:

if (motorSollSichdrehen == true)
{
  currentMillis = millis();
  if (currentMillis - previousMillis > 1000)
   {
      if (currentUmdrehungszaehler = = previousUmdreheungszaehler) Serial.println("alarm");
      previousUmdrehungszaehler = currentUmdrehungszaehler;
      previousMillis = currentMillis;
  }
}

Hallo Danke erstmal
So ähnlich habe ich es schon versucht das Problem ist dabei das beim Start alles steht und dann langsam beschleunigt und diese Lösung das ganze stoppt bevor es startet. Wenn ich die Sekunden von 1 auf 5 erhöhe sollte es eigentlich gehen.
lg

Das hängt eigentlich eher von Deiner Anwendung ab, wie lange die den Fehlerzustand verträgt. Die 1/5 Sekunden müssen ja nicht starr sein, die kannst Du ja je nach dem aktuellen Zustand ändern, z.B. Anfahren 5 Sekunden und dann runter auf geringere Werte.
Da der Arduino wohl den Motor steuert, weiß der (Du) ja, wie schnell der drehen sollte, also auch in welcher Zeit welche Änderung zu erwarten ist.

Gruß Tommy

Hallo,
gängige Art & Weise ist es bei Anfahrvorgängen erst mal die Überwachung nicht aktiv zu haben und dann nach einer vertretbaren Zeit zu aktivieren.
Heinz

Das sind zwei unterschiedliche Anforderungen.
Funktionsprüfung bekommst Du auf dem Nano aufgrund der fehlenden Infos vom Mega nicht hin.
Plausibiltät setzt voraus, das Du vom Nano die Daten durchgängig unbearbeitet bekommst und darauf zeitbasiert reagieren kannst.

Da würde mich interessieren warum die Gesamtaufgabe auf vier microcontroller verteilt ist.
vgs

Na, das sind doch eher nur 2 - eben ein Nano und ein Mega :upside_down_face:

Aha ja so kann man es auch verstehen.

Da es eine Sicherhietsfunktion sein soll, sollte man darüber nachdenken wie kann man es ausserhalb des Programmes detektieren. Wenn das Programm hängt ist dann Essig mit Motor stoppen.

Um das zu erkunden müsste man wissen was das ganze ist und wie es im Detail aufgebaut ist und welche Abweichungen zu "es läuft normal" noch toleriert werden können.

Eine Sache wäre eine Art Watchdog-Timer aus externer Elektronik: Ein Impuls kommt vom Drehgeber und setzt das Aufladen eines Kondensators zurück. Kondensator beginnt sich neu aufzuladen.
Wenn all zu lange kein Rücksetzen kommt fällt ein Relaiskontakt ab das den NOT-AUS-Kreis öffnet.

Aber ob das eine praktikable Lösung ist hängt ja von einigen Faktoren ab die momentan unbekannt sind.

Der Motor startet langsam das heißt die Impulse kommen in größeren Zeitabständen wären diese Zeitabstände bei maximaler Drehzahl tolerabel?

Da deine Steuerung die Motordrehzahl steuert kannst du auch die erlaubte Zeit die vergehen darf bis der nächste Impuls kommt in Abhängigkeit von der Motordrehzahl ändern.

Weitere Möglichkeiten:
Welle dreht sich nicht Motorstrom steigt über eine erlaubte Grenze. Keine Ahnung ob das so ist.

Abtastung redundant ausführen alle Sensoren sind zweimal vorhanden. Alle Sensoren müssen Signale liefern sonst Stop.

Das ganze hört sich ja nach größerer Maschine an.
Es gibt spezielle Sicherheits-SPS-Sensoren die auf der Versorgungsspannung eine Frequenz aufmoduliert haben.
Damit kann man dann jederzeit abfragen ob ein Sensor noch funktioniert und die Verkabelung noch in Ordnung ist
Wenn Frequenz die Auf Anschlussleitung 1 "losgesendet wird" auf Leitung 2 zurückkommt alles I.O. Keine Frequenz = Fehler.

Deswegen wäre es gut du würdest mal die ganze Maschine und was diese Maschine macht beschreiben.
vgs

Herzlichen Dank für eure Anregungen ich werde mal einen Mix aus euren Vorschlägen testen und ab einer gewissen Drehzahl regelmäßig auf Änderung prüfen. Die Idee mit der externen Watchdog Elektronik ist glaube ich eine kleine Übertreibung, ich habe allerdings schon mal überlegt die ganze Steuerung zusätzlich zum Mega-Watchdog mit einem externen Chip zu überwachen.
Was für ein Ic würde sich dafür anbieten um beim Hängen bleigen (Was noch nie vorgekommen ist) des Mega alles abzuschalten?
lg
Andreas

ich nehm dazu einen zweiten arduino und lasss auf diesem einen timer laufen
der vom ersten zurückgesetzt wird (per digital pin)

der kann dannn ein relais abschalten oder auch eine mail versenden das was nicht stimmt.

Hallo,

Nano hängen 2 Induktive Sensoren die mit einer einfachen Drehgeberauswertung die Umdrehungen (Max 5 Hz) und die Drehrichtung einer Welle abnehmen

Wie ist das ganze aufgebaut?
Den das Problem bei Induktiven Sensoren ist das die haben eine ziemlich breite Hysterese zwa immer gleich aber trotzdem
Grüße Bernhard

Warum sollte das ein Problem sein?
Ich habe mit induktiven Sensoren früher die Position von XY-Mechaniken bei der Referenzfahrt auf den zehntel-Millimeter genau reproduzieren können.
vgs

Das stimmt wollte nur aufmerksam machen.
Grüße

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.