Drehzahlmessung

stift

Level-1
Beiträge
261
Reaktionspunkte
17
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
ich komme gerade nicht weiter.
ich möchte eine drehzahlmessung programmieren.
an meiner welle sitzt ein punkt den ich mittels bero abfragen kann.
Wie kann ich denn am besten die drehzahl errechnen.
ich hab mir gedacht ich nehme einen zeitraum von z.b. 10s und zähle dann wie oft mir mein bero signal gibt.
dummerweise muss ich die timer allerdings mit dem signal das der motor ein ist starten. dies ist allerdings dauersignal und desshalb läuft der zyklus nur einmal durch da ich ja eine positive taktflanke an meinem zeitglied brauche. kann mir jemand helfen?
 
Du startest z.Bsp. einen SE-Timer. Wenn der Timer die 10 Sek. erreicht hat, geht sein Ausgang auf Signal True. Daraus erzeugst du eine Flanke. Mit dieser Flanke springst du einerseits in einen kleinen Programmabschnitt, der dir die Drehzahl berechnet, ausgibt und den Zähler wieder auf Null stellt. Außerdem baust du die Flanke als UN in deine Timerstartbedingung mit ein, so daß der Timer wieder einen Start bekommt.


Code:
      U     E      0.0                  //BERO
      FP    M      1.0                  //HM Zählflanke BERO
      SPBN  NZAE                        //wenn keine Flanke, dann nicht zählen

      L     MD    10                    //wenn Flanke, dann zählen
      L     1
      +D    
      T     MD    10

NZAE: U     M      0.0                  //Motor EIN
      UN    M      1.3                  //Flankenmerker
      L     S5T#10S
      SE    T      1
      U     T      1
      FP    M      1.2                  //Hilfsmerker Flanke
      =     M      1.3                  //Flankenmerker

      U     M      1.3
      SPBN  M001

      L     MD    10                    //gezählte Impulse
      DTR   
      L     1.000000e+001               //10 Sekunden
      /R    
      T     MD    14                    //Impulse pro Sekunde

      L     0
      T     MD    10                    //wieder auf Null stellen

M001: NOP   0
 
Zuviel Werbung?
-> Hier kostenlos registrieren
die frage ist wie genau du es messen musst wenn du 10 sek mist und die impulse zählst kommt es zu einer ungenauigkeit von ca +-0,3 umdrehungen bei max drehzahl bei min drehzahl +- 0,6 umdrehungen
 
selbstverständlich nicht.
nur die geschwindigkeit eines kolbens ermitteln.
siehe thread "Rechenoperationen mit sich ändernden Variablen"
mfg
Stift
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi
ich muss noch mal nachhaken,
ich hab das problem dass mir die zeit bis zur auswertung (10s) zu groß ist.
d.h. die nachregelzeit ist mir zu groß, da ich wenn ich meine drehzahl verändere erst nach 10s die neue drehzahl angezeigt bekomme.
Wie würdet ihr vorgehen um eine schnelle auswertung zu erhalten.
mein problem ist dass ich keinen drehzahlgeber anflanschen kann. Ich hatte auch überlegt ein zahnrad einzubauen und die taktung, wie oft die zähne kommen mit einem hall-sensor abzufragen, allerdings ist auch dafür kein platz.
mein neuster ansatz ist dass ich die zeit stoppe für eine umdrehung. daraus errechne ich die drehzahl, die ich auf ein mw lege.
ändert sich nun die zeit für eine umdrehung mehr wie +/- 10ms so soll die die neue drehzahl errechnet und auf das mw geschoben werden. Leider haperts mit der Umsetzung.
Wie würdet ihr bei der programmierung vorgehen.
Die zeit könnte ich ja im ob35 messen. Allerdings habe ich angst dass dieser zu groß wird.
 
Ich würde mit dem OB1_precycle arbeiten. Da steht die Zykluszeit des letzten Zyklus drin. Wenn Du einen Positiven Impuls vom Sensor bekommst Setzt Du eine INT Variable auf 0 und dann addierst in jedem Zyklus den OB1_precycle auf diese INT Variable auf. Somit hast Du die Dauer einer Umdrehung.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Der OB1_pre_cycle (bei der Schreibweise bin ich mir nicht sicher) ist eine Variable im OB1 schau mal oben in die Variablen Deklaration vom OB1.

Such mal hier im Forum und in der Step7 Hilfe nach diesem Begriff.

Edit: es ist wohl der OB1_prev_cycle
 
Zuletzt bearbeitet:
Hallo
hast Du die Möglichkeit ein weiteres Bauteil einzubauen?
In der letzten Firma hatten wir einen Frequenz/Strom umsetzer verbaut der die Impulse in 0-20mA vor der SPS wandelt und dann skaliert eingelesen wurde die Istwerterfassung war recht flott und genau.
Ist nur eine Idee.
 
Hatte ich mir auch schon überlegt.
Mein problem ist nur dass ich oben auf die welle keinen umsetzer anbauen kann wegen platzproblemen.
Ein Zahnrad dessen zähne ich mittels hall-sensor erfasse müsste eigentlich auch gehen, nur wäre es ein wahnsinniger aufwand das zahnrad zwischen motorwelle und die sekundärwelle einzubauen. Aus diesem grund muss ich die zeit stoppen bis mein bero einmal kommt. dann weiß ich dass ich eine halbe umdrehung zurückgelegt habe und kann es hochrechnen.
 
Ich verstehe dein Problem an dieser Stelle nicht ...
Ich würde es so machen (im OB1) :
Code:
wenn nicht INI dann 
 
L OB1_Prev_Cycle
L Zwischenspeicher
+D
T Zwischenspeicher
 
wenn INI und nicht Flanke dann
Flanke bilden
 
L OB1_Prev_Cycle
L Zwischenspeicher
+D
T Zwischenspeicher
 
In Zwischenspeicher steht die Dauer für 1 Umdrehung
daraus Drehzahl berechnen
Zwischenspeicher löschen

Kannst du dir daraus selbst eine Routine bauen ...?
 
Ich versteh nur nicht wo ich die zeit für eine umdrehung herbekommen. Was hat den dieser ob1_prev_cycle damit zu tun? Und was meinst du mit Flanke? Das Signal von meinem Bero?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
OB1_Prev_Cycle ist die Dauer in ms, die der vorangegangene Programm-Zyklus gedauert hat. Diese Angabe erhälst du aus den TEMP-Variablen des OB1.
Du kannst dir natürlich auch eine Mess-Routine auf Basis der Systemzeit selber bauen. Das ist auch nicht viel schwieriger. Das mit der OB1-Zeit ist halt nur der einfachste Weg ... die ist schon da ...
 
aber ich versteh nicht ganz was die programm-zykluszeit mit der zeit zu tun hat die meine pleuelwelle für eine umdrehung braucht
 
Na na na ...
Die SPS wird ja bei 200 Upm deiner Pleuel-Welle einige Zyklewn machen bevor deine Welle einmal rum ist. Das heißt, du addierst dann mehrere Zyklen auf und damit (einigermassen genau) die Dauer für eine Umdrehung (5 ms + 6 ms + 4 ms + 5 ms ... = 37 ms für einen Umlauf z.B.). Daraus / damit kannst du dir dann schon die Drehzahl errechnen.
Aber nicht vergessen. Nach einem Umlauf Zeitwert verrechnen und resetten für nächste Messung ...
 
Zurück
Oben