Drezahl Auswertung in ST

Redone

Level-1
Beiträge
20
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
hallo Leute,:eek:
ich möchte die Drehzahl eines Zahnrad mit 60 Zähne berechen und das Programm dafür in ST schreiben:confused::confused: !! und weiß ich nicht wie ich anfangen soll:confused::confused:
kann mir jemanden bitte helfen !!:rolleyes:ROFLMAO:ROFLMAO:ROFLMAO:
ich danke euch im Voraus.
Gruß
Redone:rolleyes:
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Es gibt mehrere Möglichkeiten.

1. Du kannst eine bestimmte Anzahl Impulse zählen und die Zeit stoppen. Diese durch die Anzahl der Impulse teilen.
2. Du kannst eine feste Zeit nehmen und zählen, wie viele Impulse in dieser Zeit eingehen. Dann wieder teilen.
3. Ist die SPS schnell genug (oder das Zahnrad langsam genug), dann kannst du natürlich auch die Zeit zwischen zwei Impulsen messen.

Aus den Signalen der Zahnräder machst du Flanken (R_Trig, F_Trig). Sind die Zähne gleich groß wie die Lücken (oft werden sie dazu abgeschliffen) kann man mit fallenden und steigenden Flanken arbeiten.
Wichtig ist, dass die Dauer des Signals, das vom Zahnrad kommt mindestens Doppel so groß ist, wie die Zykluszeit, sonst verlierst du Impulse.
 
ich habe ein Hallsensor der an dem Rad befestigt ist und liefert Impulse :) wie soll ich dann das Programm in ST dafür aus
 
hier mal ein Schnipsel aus einem Projekt, in dem ich genauso die Geschwindigkeit+Position bestimme:

Code:
(*aktuelle systemzeit bei pos. Flanke des Kettenradinis speichern und
Zeitdifferenz berechnen*)
IF
    INI_kettenrad=TRUE AND  flankenmerker_ini=FALSE
THEN
    diff:=timelow-timeold;
    timeold:=timelow;
    tmr2.IN:=TRUE;   (*Stillstandserkennung*)
ELSE
    tmr2.IN:=FALSE;
END_IF;
flankenmerker_ini:=INI_kettenrad;

Dieser Schnipsel steht in einer schnelle Task. Ist natürlich nicht vollständig, ohne die Systemzeitfunktionen und Variablendeklaration.
In der (langsameren) Main-Task steht dann nur noch:

Code:
(************************************************************
geschwindigkeit berechnen*)

diff1:=UDINT_TO_REAL(diff);
speed_sbm:=(1000000/diff1)*60;  (*takt/sec*)

(*********************************************************)

In diese Berechnung geht gleich die Zahnanzahl mit ein.

PS: Ich erfasse die Inkremente an einem Kettenrad, das durch die Kette getrieben wird. Da es eine Transportkette ist, habe ich hier ein durch das Produkt verursachtes Rucken mit entsprechendem Jitter im Signal. Also schliesst sich noch eine Konditionierung mittels Tiefpass und STAIR2-Funktion aus OSCAT an. Der Jitter fällt kleiner aus, wenn man am direkt angetriebenen Ritzel die Messung betreibt.
Bei mir synchronisiere ich auf diese Art und Weise zwei Maschinen und bin sehr zufrieden damit.


PPS: Hier handelt es sich um eine Periodendauermessung. Diese Art der Auswertung eignet sich nach meiner Erfahrung eher für Maschinen mit variablen Drehzahlen, die von nahe 0 bis zu moderaten Geschwindigkeiten arbeiten. Die Genauigkeit nimmt mit höheren Geschwindigkeiten ab, da Zyklusjitter und Signalverzögerung in der DI-Baugruppe dann stärker in die Messung eingehen. Für höhere Drehzahlen empfielt sich eine Frequenzmessung, also das Impulszählen mit fester Torzeit.

PPPS: Für die Auswahl des Verfahrens würde ich zum Taschenrechner raten. Ist die Zeit zwischen zwei Zähnen (Periode) größer als 10x Zykluszeit, dann Periodendauer. Ansonsten Frequenzzählung.
 
Zuletzt bearbeitet:
Beispiel: 100 Umdrehungen /60 Zähne entspricht 100Impulsen pro Sekunde.
Das sind also bei Beckhoff 100000 Zeiteinheiten zwischen den Pulsen (10ms).

Im obigen Beispiel wäre diff1 also 100000.0

1000000 / diff1 ergibt schon direkt die Drehzahl.

Bietest Du Deinem Ausbilder gleichzeitig noch die Frequenzmessung an, ssollte er eigentlich zufrieden sein.:ROFLMAO:

Da Du ja 2 Hallsensoren hast kannst Du 4 Flanken auswerten, was sich auf die Frequenzmessung positiv auswirkt.
 
Zuletzt bearbeitet:
Zurück
Oben