^

eRpmMeter - ein Drehzahlmesser für bürstenlose Elektromotoren


Ich will einen Drehzahlmesser für meine brushless-Motoren!

Es ist nicht so, dass ich mir noch keine gekauft hätte; im Gegenteil. Die meisten funktionieren optoelektronisch und messen die Änderungen des Lichteinfalls, wenn ein Propellerblatt vorbeihuscht. Reproduzierbare und stabile Messwerte habe ich allerdings selten erhalten. Bei bürstenlosen Motoren gibt es noch eine andere Möglichkeit: Die Drehzahl wird ermittelt, indem die Signale an den Motoranschlüssen ausgewertet werden. Daher auch der Name eRpmMeter (eRpm = electrical revolutions per minute).

Beim Chinesen des geringsten Misstrauens habe ich dann den "Hobbywing Brushless RPM Sensor" gesehen. In der Hoffnung, dass das Teil verwertbare Signale ausspuckt, habe ich die fälligen 2,63 Euro investiert. Nach vier Wochen war klar: Da kommt ein astreines Rechtecksignal raus, dessen Frequenz der Drehzahl entspricht.

Am Ende der Überlegungen, wie daraus ein Drehzahlmesser entstehen könnte war die Idee geboren, eine besonders nachbaufreundliche Konstruktion zu schaffen. Das ganze Konstrukt besteht aus fertig kaufbaren Modulen die nur noch elektrisch miteinander verbunden werden müssen. Lediglich eine handvoll Lötstellen sind erforderlich, um ein funktionsfähiges Gerät zu erhalten.

Basis ist ein Arduino UNO. Das ist eine Platine, auf dem ein AVR-Mikrocontroller werkelt. In diesen muss eine Firmware geladen werden. Das läuft über den USB-Anschluss eines Windows-Computers. Ich habe versucht alles so vorzubereiten, dass keine Vorkenntnisse erforderlich sind.

Benötigtes Material


  • Arduino Uno  ab ca. € 2,60
  • Gehäuse für Arduino Uno ca. € 1,-
  • LCD Keypad Shield  ca. € 1,80
  • Hobbywing Brushless RPM Sensor ca. € 2,70
Nicht im Bild:
  • Servo-Verlängerungskabel ca. 0,60
  • Widerstand 1-2 kOhm
  • Widerstand ca. 100 kOhm
  • USB Anschlusskabel
Ich habe alle Teile direkt in China über aliexpress bestellt. Das bedeutet ca. 4 Wochen Wartezeit, dafür werden nur die angegeben Preise abgerufen. Bei Bestellung derselben Teile in Deutschland müssen wir mit dem 3-4fachen rechnen.

Löten !

Eigentlich müssen wir nur den dreipoligen Anschluss vom "Hobbywing Brushless RPM Sensor" an die passenden Anschlüsse auf dem LCD Keypad Shield löten. Stabilisierte 5V stellt uns netterweise der Arduino UNO zur Verfügung. Die Kabel müssen wir wie folgt anschließen:
  • schwarz > GND
  • rot > über einen Widerstand 1 bis 2 kOhm an 5V
  • weiß > über einen Widerstand von ca. 100 kOhm an Arduino Pin 3 (vierter Anschluss von rechts)
Der Widerstand an 5V  verhindert, dass der Arduino neu startet, wenn der Sensor angesteckt wird. Ich vermute, dass die Spannung beim Verbinden kurzzeitig einbricht.
Der hochohmige Widerstand in der Signalleitung schützt den Eingang des Mikrocontrollers. Ich habe es geschafft, diesen zu zerstören, indem ich versehentlich die Motorkabel direkt angeschlossen hatte (damals noch ohne den Schutzwiderstand).

Der Sensor wird mit einem "Servostecker" geliefert. Wenn wir ein Servo Verlängerungskabel schlachten, können wir die entsprechende Hälfte an das Shield anlöten. Die Bilder zeigen, wie ich es gemacht habe. Man beachte bitte auch die high-tech Zugentlastung mit einem Stück blauem Geschenkband!

Das Shield und der Arduino müssen nur über die Stift- und Buchsenleiste zusammengesteckt werden.

Verbindung mit dem PC; wir brauchen einen Treiber!

Wenn der Arduino und das LCD Keypad Shield verbunden  sind, können wir das Konstrukt mit dem PC verbinden. Unser Arduino UNO hat Bausteine, die über USB eine virtuelle serielle Schnittstelle (ComPort) erzeugen. Dazu braucht es einen Treiber. Moderne Windows Versionen installieren diese teilweise automatisch. Also: Erstmal den Arduino anschließen und warten, was passiert.

Werden Treiber nach dem Anstecken automatisch installiert: GUT! Wenn nicht müssen wir uns den Treiber aus dem Internet laden. Die schlechte Nachricht: Es gibt sehr viele verschiedene Schnittstellenbausteine, die jeweils passende herstellerspezifische Treiber benötigen. Die gute Nachricht: So gut wie alle billigen Arduino UNO Nachbauten aus China verwenden denselben Baustein, nämlich den CH340.
Den Treiber dazu können wir direkt beim Hersteller runterladen: http://www.wch.cn/downfile/65
 

Nächster Schritt: Die Intelligenz muss in den Arduino

Vorausgesetzt, Windows erkennt unseren virtuellen ComPort  und das Windows-"Plong" ertönt nach dem Anstecken, kann es weitergehen. Als nächstes müssen wir die Firmware für den Drehzahlmesser in den Flash-Speicher des Arduino laden. Das habe ich so vorbereitet, dass es weitestgehend automatisch abläuft. Alles erforderliche befindet sich in dem von mir vorbereiteten Download.
  1. Firmware und Dienstprogramme herunterladen: http://www.franksteinberg.de/ZIPS/eRpmMeter.zip
  2. Archiv entpacken.
  3. Ordner eRpmMeter öffnen, Doppelklick auf "eRpmMeter-Uploader-UNO"
  4. Nach Aufforderung den Arduino UNO über USB anschließen.
  5. Die Nummer des ComPorts wird automatisch ermittelt und die Firmware wird auf den Arduino geladen.
Ist alles gut gegangen, ist unser Drehzahlmesser einsatzbereit!

Hilfe, ich sehe nichts!

Nach dem Laden der Firmware, sollten wir etwas auf dem LCD-Display sehen können. Falls nicht oder nur schemenhaft, müssen wir den Kontrast am blauen Trimmer über dem Display nachregeln.

Verbindung zum Motor und Stromversorgung

Die Drehzahl misst unser Gerät über das zweipolige rote Kabel des RPM Sensors. Dieses müssen wir mit zwei Kabeln zwischen Regler und Motor verbinden. Welche beiden der drei Kabel wir dafür verwenden, ist egal.

Zur Stromversorgung des eRpmMeters haben wir mehrere Möglichkeiten: Zum Einen per USB. Hier können neben einem Computer auch eine Powerbank anschließen. Die andere Möglichkeit stellt die Rundstecker-Buchse dar. Hier können Spannungen zwischen ca. 6 und 12 Volt angeschlossen werden. Ein 5V Spannungsregler sorgt für geregelte Verhältnisse. Plus muss an den Stift, Masse nach außen.
 

Bedienung

  1. Anzahl der Pole einstellen:
    Zu aller Erst müssen wir dem eRpmMeter mitteilen wie viele Pole unser Motor hat. Es werden ja die Umpolungen des Magnetfeldes gemessen, die der Drehzahlregler steuert. Viele Pole = viele Umpolungen pro Umdrehung, wenig = wenig Umpolungen / Umdrehung. Können wir die Polzahl unseres Motors nicht über die technischen Daten rausbekommen, können wir die Magnete zählen. Bei Außenläufern geht das meist problemlos. Der aktuelle Wert steht in der oberen Zeile rechts (im Bild recht = 14 Pole). Neu seit der Version vom 24.04.2018:  Das eRpmMeter kann die Polzahl messen (siehe nächstes Kapitel).
     Taste [UP] - erhöht die Anzahl um 2
     Taste [DOWN] - verringert die Anzahl um 2
     Taste [SELECT] - speichert den aktuellen Wert als neuen Standard (im EEPROM).
    Es gibt nur gerade Polzahlen, Der Einstellbereich reicht von 2 bis 32.

  2. Aktuelle Drehzahl:
    ... wird oben links in Umdrehungen pro Minute angezeigt. Endung ist "rpm" (revolutions per minute).

  3. Maximale Drehzahl:
    Der maximal gemessene Wert wird unten links angezeigt. Endung ist "m" (maximum).
     Taste [LEFT] - setzt den Wert zurück.

  4. Durchschnittliche Drehzahl:
    Taste [RIGHT] - Diese Taste hält den aktuellen Wert in der Anzeige unten rechts fest. Darüber hinaus wird ein Mittelwert aus den Werten gebildet, so lange die Taste gehalten wird. Endung ist "ave" oder "a" (average). Die Anzahl der dem Mittelwert zugrunde liegenden Messwerte wird neben dem a angezeigt (im Bild aktuell 17 Messungen).
    Taste [LEFT] - setzt den Wert zurück.

  5. Reset
    Taste [RST] - startet das Gerät neu.

Anzahl der Pole messen     > neu in Version 2018-04-24 <

Falls die Ermittlung der Polzahl Schwierigkeiten verursacht, können wir diese auch mit Hilfe des eRpmMeters ermitteln. Dazu starten wir das Gerät im POLE-COUNT Modus. Während wir den Motor mit der Hand drehen, werden die Pole gezählt und angezeigt. Leider gibt es Mehrfachzählungen, wenn der Rotor zwischen den Magnetrastungen pendelt . Folgende Vorgehensweise funktioniert bei mir am besten: Motor gut fixieren, Luftschraube anbringen, zehn zügige 360-Grad Umdrehungen ausführen, dabei den Rotor mit dem Finger leicht abbremsen. Im Idealfall wird genau die 10-fache Polzahl angezeigt (wegen der zehn Umdrehungen). Sind die Werte unplausibel, ist meist der nächst niedrige glatt durch 20 teilbare Wert der richtige.
  • POLE-COUNT Modus aufrufen:
    Taste [LEFT] gedrückt halten. Taste [RST] kurz drücken. Taste [LEFT] loslassen, nachdem " Turn Motor 360°! " auf dem Display erscheint.

  • Bedienung:
    Taste [LEFT] - setzt den POLE-COUNT Wert auf Null.
    Taste [RST] - startet das Gerät neu.

Kalibrieren

Im Gegensatz zum Original-Arduino ist der Takt der China-Klone quarzgesteuert. Das bürgt für eine stabile Frequenz, was die Grundlage der Messungen ist. Ob der absolute Wert der Frequenz den aufgedruckten 16 MHz entspricht, steht aber in den Sternen. Bei Preisen unter 3 Euro für eine fertige Arduino-Platine dürfen wir keine ausgesuchten Quarze erwarten. Kalibrieren ist also angesagt.

Aber was als Referenz nehmen? Wer im Besitz eines verlässlichen Frequenzgenerators ist, kann dieses Signal verwenden. Oszilloskope haben meist ein 1 kHz Testausgang. Der wäre geeignet. Haben wir solch Männerspielzeug nicht zur Verfügung, können wir auf einen Notbehelf zurückgreifen. Der Messeingang ist bewusst nicht auf einen definierten Pegel gezogen (ohne Pullup / Pulldown). Der Eingang ist so empfindlich, dass er die Netzfrequenz aus der Umgebung "auffängt". Dazu muss eine Netzspannung führende Leitung in der Nähe sein. Die Frequenz der 230V Versorgung beträgt hierzulande bekanntlich 50 Hz.

Also: Wer eine Frequenzquelle hat, speist das Signal über das Signalkabel und Masse statt des RPM Sensors ein. Ist das nicht verfügbar, lassen wir den Anschluss offen und verlängern ggf. das Signalkabel und versuchen die Netzfrequenz zu empfangen. Die auf diesem Weg empfangene Netzfrequenz wird vermutlich um +/- 2 rpm schwanken. Außerdem differiert sie etwas nach Tageszeit. Aber zumindest als "Hausnummer" ist es verwendbar.
  • Kalibriermodus aufrufen:
    Taste [RIGHT] gedrückt halten. Taste [RST] kurz drücken. Taste [RIGHT] loslassen, nachdem " * calibrate CPUfrequency * " auf dem Display erscheint.

  • CPU-Frequenz einstellen:
    Erstmal zur Klarstellung. Wir können die Taktfrequenz nicht ändern, die der Quarz für den Mikrocontroller (von mir CPU genannt) erzeugt. Wir passen den Wert an, der für die Berechnung zu Grunde gelegt wird.
     Taste [UP] - erhöht die Frequenz um ein kHz
     Taste [DOWN] - verringert die Frequenz um ein kHz
     Taste [RIGHT] -  erhöht die Frequenz um zehn kHz
     Taste [LEFT] - verringert die Frequenz um zehn kHz
     Taste [SELECT] - speichert den aktuellen Wert als Standard (im EEPROM) und beendet das Kalibriermenü.

  • Resultierender Messwert:
    In der zweiten Zeile rechts wird der resultierende Wert angezeigt. Dabei werden 2 Pole zugrunde gelegt. Bei 50 Hz Netzfrequenz muss 3000rpm angezeigt werden. 1 kHz müssen 60000rpm ergeben.

  • Tasten-Werte :
    Die Tasten werden beim LCD Keypad Shield ausgewertet, indem verschiedene Spannungsteiler-Widerstände aktiviert werden. Die resultierenden Spannungswerte müssen über den AD-Wandler Kanal 0 gemessen werden. In der unteren Zeile links werden die 8bit-Wandlerwerte und die resultierende Kennung der Taste angezeigt. Das kann zum Debuggen verwendet werden, falls die Tasten mal nicht so wollen wie vorgesehen.

Serielle Ausgabe der Messwerte

Die Messwerte werden über den UART und den virtuellen ComPort des Arduino ausgegeben und sind mit jedem aktuellen Terminalprogramm empfangbar. Die Schnittstellenparameter sind: 115.200 Baud, 8 Datenbits, kein Paritätsbit, 1 Stoppbit.

Neben den auf dem LCD angezeigten Werten werden noch ausgegeben:
  • Timerticks
     Anzahl der 16Mhz Timerticks, die im Messzeitraum (von ca. 0,5 Sekunden) durchschnittlich für eine Vollwelle des vom RPM Sensor gelieferten Signals gemessen wurden.
  • Number of Measures
    Anzahl der Messungen, aus denen innerhalb des Messzeitraums (von ca. 0,5 Sekunden) ein Mittelwert gebildet wurde.

Verwendete Programmiersprachen und Hilfsprogramme

Hinweise zu den verwendeten Programmen im oben schon erwähnten Download: http://www.franksteinberg.de/ZIPS/eRpmMeter.zip
Es handelt sich ausschließlich um freie Software. Verbinden möchte ich das mit einem großen Dank an die Ersteller dieser ausnahmslos sehr professionellen Programme. 

Auch wenn die Hardwaregrundlage ein Arduino ist, habe ich die Firmware für eRpmMeter mit LunaAVR geschrieben. Die Arduino-Entwicklungsumgebung basiert auf der Programmiersprache C und damit bin ich immer noch nicht warm geworden. LunaAVR hat die meisten Sprachelemente von BASIC und das ist mir sympathisch! Außerdem gibt's LunaAVR komplett kostenlos, ist gut dokumentiert und erzeugt sehr kompakten Code.
Link zu LunaAVR:  http://avr.myluna.de

Als kleines Nebenprodukt ist ein Kommandozeilenprogramm für Windows entstanden. Das ermittelt die Nummer einer seriellen Schnittstelle dadurch, dass diese neu angesteckt wird. Das ist mit USB-seriell-Adaptern machbar und ein Arduino ist genau das für einen PC. Damit ist der Firmware Upload möglich, ohne dass der Nutzer im Gerätemanager nach Portnummern suchen muss. Der Quelltext und das Binary finden sich im Ordner "SayNewComPort".
Geschrieben ist das Programm in FreeBasichttps://www.freebasic.net    https://www.freebasic-portal.de

Zum Schluss sei noch erwähnt, dass der eigentliche Upload (das Flashen) der Firmware mittels AvrDude realisiert ist. AvrDude ist ebenfalls freie Software und der Quasi-Standard zum Flashen von AVR Mikrocontrollern: https://www.nongnu.org/avrdude


Frank Steinberg, im April 2018


Zur Startseite


Haftungsausschluss    Impressum

© Frank Steinberg