Jump to content

Drehzahlmesser mit Industrial Digital in 4 Bricklet


roemheld
[[Template core/global/global/poll is throwing an error. This theme may be out of date. Run the support tool in the AdminCP to restore the default theme.]]

Recommended Posts

Hallo,

ich will ein "Industrial Digital in 4 Bricklet" verwenden, um die Drehzahl zu messen.

Als erstes habe ich einen Magnetschalter an Pin0 angeschlossen.

Leider konnte ich damit nur Drehzahlen bis 240  U/min genau messen, was einer Schaltfrequenz von 4Hz entspricht, bei weiterem erhöhen der Drehzahl, bleibt die gemessene Drehzahl bei 240 U/min und ab 600 U/min fällt die gemessene Drehzahl sogar auf 180 U/min ab.

Danach habe ich eine Gabellichtschranke PMF44P von Panasonic getestet. In der Dokumentation wird diese mit einer maximalen Frequenz von 1000Hz angegeben.

Leider hat dies keine Verbesserung bei der Drehzahlmessung gebracht. Wie mit dem Magnetschalter konnte ich Drehzahlen ab 300 U/min nicht mehr messen.

 

Auch ein verändern der Debounce Period (zwischen 3 bis 100) hat keine Verbesserung gebracht

 

Ich programmiere mit Java.

 

Meine Frage ist nun, ob das "Industrial Digital in 4 Bricklet" überhaupt zum messen von Schaltfrequenzen zwischen 1-12 Hz geeignet ist, oder ob ich ein "IO-4 Bricklet" verwenden sollte.

 

Zum Schluss eine Anmerkung. Ich bin weder Elektriker noch Elektroniker.

 

Link to comment
Share on other sites

Da springen mir direkt keine richtig groben Fehler ins Auge. Was mir aber auffällt ist diese Zeile

 

strecke = (zaehler - zwSpeicher1) * (radUmfang / 1000);

 

Wobei zaehler, zwSpeicher1 und radUmfang Integerwerte sind. Dies führt dazu, dass radUmfang / 1000 == 2 ist und nicht 2.184 (bei radUmfang == 2184). Das verfälscht deine Werte etwas.

 

Dann ist da noch das Busy Waiting:

 

while(waitingStartTime + 1000 > System.currentTimeMillis()){}

 

Da könnte man stattdessen Thread.sleep(1000) nehmen. Aber das hat denke ich nichts mit deinem Problem zu tun, außer das Busy Waiting wäre recht ungenau und führt nicht zu 1 Sekunde Wartezeit, was sich auch wieder auf die Genauigkeit deiner Berechnung auswirkt.

 

Ansonsten schlage ich vor, dass du dein Programm und deinen Aufbau auf ein Minimum reduzierst. Also nur Master Brick und Industrial Digital In 4 Bricklet und in deinem Programm nur noch den Flankenzähler abfragst und den Wert umrechnest. Wenn das funktioniert liegt das Problem im entfernten Teil des Aufbaus. Wenn das nicht funktioniert, muss man sich nur noch den minimalen Aufbau genauer ansehen.

Link to comment
Share on other sites

Vielen Dank,

wegen des Integerfehlers, habe es korrigiert.

Habe die ganze Hardware welche nicht benötigt wird, abgebaut.

Meine Stromversorgung habe ich auch durch eine Batterie ersetzt und ein kleines Testprogramm geschrieben.

Ich frage jetzt den Counter nur alle 60 Sekunden ab und setzte in auf 0.

Bis 300 U/min klappt das perfekt.Die Drehzahlanzeige meiner Drehmaschine und ausgegeben Drehzahl des "Indusrial Digital In 4" sind identisch.

Ab einer höheren Drehzahl bleibt die ausgegebene bei 300 hängen und ab 450U/min fällt sie wieder ab auf etwa 230.

Mein Fluke kann auch Schaltfrequenzen messen.

Habe damit die Frequenz am Brickleteingang gemessen.Dazu meine Drehmaschine auf 600 U/min beschleunigt und habe dann genau 10 Hz gemessen.

Meine Lichtschranke funktioniert also einwandfrei.

 

Habt Ihr die Schaltfrequenz größer 5Hz wirklich getestet?

 

Hier noch meinen Sourcecode:

    public static void testen() throws Exception {

        IPConnection ipcon = new IPConnection();

        BrickletIndustrialDigitalIn4 idi4 = new BrickletIndustrialDigitalIn4(IDI4UID, ipcon);

        ipcon.connect(host, port);

        int value=0;

        idi4.setDebouncePeriod(70);

        long waitingStartTime = System.currentTimeMillis();

        short eingang =0; // festlegen des impulsgebenden Eingangs des IObricklets

 

        while (value<2){

            while(waitingStartTime + 60000 > System.currentTimeMillis()){}// jede Sekunde Schleife durchlaufen

            waitingStartTime = System.currentTimeMillis(); // Systemzeit abfragen

            System.out.println(idi4.getEdgeCount(eingang,true));

        }

        ipcon.disconnect();

    }

Link to comment
Share on other sites

Du hast die Entprellzeit für den Flankenzähler nicht eingestellt. Der Standardwert dafür ist 100ms, was 5Hz entspricht wenn die "high" und "low"-Zeiten je gleich lang sind.

 

Streu mal an einer strategischen Stelle folgendes ein ;):

// Eingang 0 (=bitmask 1), Steigende Flanke, Debounnce 5ms (max ~100Hz)
idi4.setEdgeCountConfig(1, BrickletIndustrialDigitalIn4.EDGE_TYPE_RISING, (short)5); 

 

das "setDebouncePeriod" setzt nur die Entprellzeit für den InterruptListener.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...