Hallo zusammen, ich möchte mir für einen Motorteststand ( Brushlessmotoren aus dem Modellbau )eine Drehzahlanzeige bauen. Ich habe noch einen Drehzahlsensor hier rumliegen: http://www.rc-team.org/dsens.htm Wie kann ich denn da die Impulse zählen? Macht das der Arduino ( Nano / Uno ) überhaupt mit? 12 Zellen Akku x 4,2 Volt = 50,4 V max. , Motoren mit max. 2000 KV x 50,4 V = 100800 Umdrehungen ( Impulse ).
Hans S. schrieb: > 100800 Umdrehungen ( Impulse ). Selbst wenn das pro Sekunde wäre, hätte der MC noch keine Probleme damit. Wichtiger ist, ob der Sensor damit klarkommt. So lange dieser ein sauberes digitales Signal an den Arduino liefert, kann der das locker zählen. Das Messen der Umdrehungen kann auf mehrere Arten geschehen: * Der MC misst den zeitlichen Abstand der Sensorimpulse und errechnet daraus die Drehzahl * Der MC misst die Anzahl der Pulse pro Zeiteinheit und errechnet daraus die Drehzahl. Die erste Methode ist schneller, liefert aber meistens etwas mehr Jitter (Sprünge im Ergebnis), die zweite Methode braucht immer die Torzeit als Messperiode, ist durch Mittelung aber etwas ruhiger.
Der Sensor ist extra dafür gebaut. Das sind Impulse pro Minute, sollte dann ja kein Problem sein. Kannst du mir mal nen Denkanstoss liefern, wie ich die Pulse zähle? Mit pulsIn, mess ich ja den Abstand, wenn ich mich nicht irre.
:
Bearbeitet durch User
Hans S. schrieb: > Mit pulsIn, mess ich ja den Abstand, wenn ich mich nicht irre. Es tut mir leid, aber von dem Arduino Sketchzeug habe ich soviel Ahnung wie von mittelalterlicher türkischer Dichtung. Mein Ansatz wäre: Timer starten und Input Capture Interrupt aktivieren. Am IC Eingang ist mein Sensorsignal. InputCapture Interrupt liest Timer Register und setzt Timer zurück. Gelesenes Register ist Ergebnis in Zeiteinheiten des Timer. Hauptprogramm macht die Umrechnung kontinuierlich und zeigts über die serielle Schnittstelle oder auf LCD. Falls ich langsame Umdrehungen erwarte, nutze ich zusätlich den Timer Overflow Interrupt, um Überläufe des Timers zu berücksichtigen.
:
Bearbeitet durch User
Matthias Sch. schrieb: > Es tut mir leid, aber von dem Arduino Sketchzeug habe ich soviel Ahnung > wie von mittelalterlicher türkischer Dichtung. Mein Ansatz wäre: Und ich genauso viel von dem was du da schreibst :) Bin Anfänger......
Hans S. schrieb: > Bin Anfänger...... Na dann: 1. Datenblatt des Controllers lesen, der auf dem Arduino sitzt. 2. Programmiersprache Deiner Wahl lernen (Assembler, C, Bascom...). 3. Controller programmieren und Drehzahlen auslesen / ausgeben.
Hans S. schrieb: > Bin Anfänger...... Dann geh erst mal den simplen Weg. 1 Sekunde lang mitzählen, wieviele Pulse vom Sensor gemeldet werden. Für deinen Motorteststand ist eine Aktualisierung alle 1 Sekunde wohl mehr als ausreichend. Zudem sind die dich interessierenden Drehzahlen alle gross genug, dass die Genauigkeit der Methode ausreichend sein sollte. Anfänger sein ist kein Argument. Irgendwann muss man alles mal lernen. Und das geht auch nicht ohne Blessuren ab. Sprich: es wird dich hunzen, es wird dir Ärger machen, es wird nicht auf Anhieb funktionieren, du wirst einen Menge lernen müssen und du wirst auch nicht gleich mit der technisch ausgefeiltesten Methode rangehen können weil die für dich noch 3 Schuhnummern zu gross ist. Wenn du aber durch bist, wirst du eine Menge gelernt haben. 'Ich will, aber ich kann nicht weil ich Anfänger bin, macht ihr mal für mich' gilt in der Programmierung nicht. In der Hinsicht ist Programmieren wie Radfahen: du musst es selber machen um es zu lernen. Und es gibt dabei eine Menge zu lernen!
1 | ... |
2 | |
3 | unsigned long last; |
4 | |
5 | void loop() |
6 | { |
7 | unsigned long now = millis(); |
8 | |
9 | if( now - last >= 1000 ) { // (mindestens) 1 Sekunde ist vergangen |
10 | last = now; |
11 | |
12 | mach was mit der Pulszahl |
13 | |
14 | Pulszahl = 0; |
15 | } |
16 | |
17 | stelle fest, ob am Eingang ein Pegelwechsel vorliegt und wenn ja |
18 | zähle einen Puls in der Pulszahl. |
19 | } |
:
Bearbeitet durch User
Hans S. schrieb: > Wie kann ich denn da die Impulse zählen? Macht das der Arduino ( Nano / > Uno ) überhaupt mit? Klassisch: Beitrag "einfache Drehzahlmessung mit ATmega88" oder Arduino Uno: http://www.mino-elektronik.de/fmeter/fm_software.htm#bsp7 Karl Heinz schrieb: > Dann geh erst mal den simplen Weg. Ich glaube, er will keinen Weg gehen, sondern am Ziel sein ;-)
m.n. schrieb: > Karl Heinz schrieb: >> Dann geh erst mal den simplen Weg. > > Ich glaube, er will keinen Weg gehen, sondern am Ziel sein ;-) So wie alle, die das an einem verregneten Samstag Nachmittag machen wollen. :-) Wenn es nur um das Ziel geht: es gibt im Modellbauhandel genügend Drehzahlmesser. Und das zu einem Preis, der im Eigenbau nur schwer erreichbar ist.
:
Bearbeitet durch User
Karl Heinz schrieb: > So wie alle, die das an einem verregneten Samstag Nachmittag machen > wollen. :-) Ist heute schon wieder Sonnabend? ;-) Vielleicht soll ja noch eine Großanzeige angeschlossen werden und das ist bislang nicht verraten worden - wie so oft. Egal, soll er entscheiden, wie er mag.
Ich will keine fertige Lösung, bei mir hier ist Mittwoch vormittag und regnen tuts auch nicht. Wenn ihr euch auf dem Level unterhalten wollt, gerne, kann ich auch. Wer lesen kann ist klar im Vorteil! Im Eingangsbeitrag steht der Link zu dem Drehzahlmesser den ich nutzen möchte. Ich wollte lediglich wissen, wie man so ein Signal auswerten kann. Umrechnen und seriell oder auf einem Display ausgeben kann ich mir den Kram selbst. Wenn ihr ne Frage zu Visual Basic .Net habt, fragt mich bitte nicht. Ich kann diese Leute die irgendwas damit an einem verregneten Mittwoch Nachmittag machen wollen nicht ab. Die wollen immer alles fertig haben.
:
Bearbeitet durch User
>100800 Umdrehungen
nehme mal an pro Minute,
und zweifle gleichzeitig, dass einem Motor das gefällt.
Hans S. schrieb: > Ich wollte lediglich wissen, wie man so ein Signal auswerten kann. Und das haben wir Dir mitgeteilt. Daß es bei Dir regnet, tur mir aufrichtig Leid :-(
Hans S. schrieb: > Wenn ihr ne Frage zu Visual Basic .Net habt, fragt mich bitte nicht. Ich > kann diese Leute die irgendwas damit an einem verregneten Mittwoch > Nachmittag machen wollen nicht ab. Die wollen immer alles fertig haben. Brauchst keine Sorge haben. Die hier regelmässig Postenden sind durchaus in der Lage eigenständig aus der mit pulsIn gemessenen Pusldauer auf die Drehzahl umzurechnen ohne zuerst einen VB.Net Wissenden befragen zu müssen.
:
Bearbeitet durch User
OK, back to Normallevel..... :) @chefkoch Das wäre das absolute Maximum, was rechnerisch/technisch an Drehzahl geht. In der Regel sind es Motoren mit max 4000kv an 3 oder 6 Zellen, die Motoren mit 12 zelligen Akkus haben in der Regel maximal 600kv. @Karl Heinz Es soll schon mal den Fall gegeben haben, wo man mit einer Windows Programmierumgebung ein Konfigurationstool programmiert hat, das dann per Bluetooth die config an den Arduino übergeben hat. Hab ich selbst im Bau.... Über die pulseIn bekomm ich doch die Impulslänge, also den Zwischenraum zwischen den Rechtecken des Signals. Sind die nicht bei gleichbleibender Drehzahl idealerweise immer gleich lang?
Hans S. schrieb: > Über die pulseIn bekomm ich doch die Impulslänge, also den Zwischenraum > zwischen den Rechtecken des Signals. Du hast auf einen Sensor verlinkt. Auf der dortigen Web-Seite gibt es ein Video. In dem Video wird ein Oszi-Bild gezeigt, wie sich das Signal bei wechselnder Drehzahl des Motors verhält. Schon mal angeschaut?` > Sind die nicht bei gleichbleibender > Drehzahl idealerweise immer gleich lang? Natürlich sind die bei gleichbleibender Drehzahl idealerweise gleich lang. Das ist doch überhaupt nicht die Frage. Die Frage ist doch: wie verhält sich die Pulslänge (bzw. Länge der Pausen zwischen den Pulsen) bei wechselnder Drehzahl! Bzw. welcher Zusammenhang besteht zwischen der Pulslänge und der Anzahl der Pulse pro Zeiteinheit (und damit der Drehzahl) und welche Eigenschaften muss das Signal dafür haben.
:
Bearbeitet durch User
Hans S. schrieb: > Es soll schon mal den Fall gegeben haben, wo man mit einer Windows > Programmierumgebung ein Konfigurationstool programmiert hat, das dann > per Bluetooth die config an den Arduino übergeben hat. Hab ich selbst im > Bau.... und? würde mich nur beeindrucken, wenn du sowohl auf PC Seite als auch auf Arduino Seite die Bluetoothansteuerung komplett selbst machst. Inklusive Protokollstapel und Profile.
:
Bearbeitet durch User
Ich glaub, ich hab mich verrannt. Ich krieg den zeitlichen Zusammenhang zwischen dem Durchlaufen der void loop und dem Abfragen der pulseIn nicht gebacken. pulsIn gibt ja den Länge des Impulses zurück, wenn das Signal von HIGH auf LOW geht. Was ist denn jetzt schneller, die Wiederholung der void loop oder das nächste Auftreten eines Impulswechsels. Setz ich da nicht besser nen Interrupt und zähle da einfach ne Variable hoch? Ich muss ja die Impulse zählen, die Länge ist für mich uninteressant. Über die Anzahl der Impulse und die Anzahl der Motorpole kann ich mir die Drehzahl ja errechnen. So ist auch die Funktionsweise von Datenloggern, die im Modell die Daten loggen oder per Telemetrie an den Sender schicken.
Hans S. schrieb: > pulsIn gibt ja den Länge des Impulses zurück, wenn das Signal von HIGH > auf LOW geht. Nein. Lies noch mal die Doku, was pulsIn wirklich macht. http://arduino.cc/en/pmwiki.php?n=Reference/PulseIn > Was ist denn jetzt schneller, die Wiederholung der void loop oder das nächste Auftreten eines Impulswechsels. Interessiert kein Schwein. Selbst wenn du mal einen Puls verpasst, ändert der Motor seine Drehzahl in 100µs nicht wesentlich. > Ich muss ja die Impulse zählen Kann man natürlich auch machen. Das Grundgerüst dafür steht ja schon weiter oben.
:
Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.