|
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.
- Firmware und Dienstprogramme herunterladen: https://www.franksteinberg.de/ZIPS/eRpmMeter.zip
- Archiv entpacken.
- Ordner eRpmMeter öffnen, Doppelklick auf
"eRpmMeter-Uploader-UNO"
- Nach Aufforderung den Arduino UNO über USB
anschließen.
- 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
- 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.
- Aktuelle Drehzahl:
... wird oben links in Umdrehungen pro Minute
angezeigt. Endung ist "rpm" (revolutions per
minute).
- Maximale Drehzahl:
Der maximal gemessene Wert wird unten links
angezeigt. Endung ist "m" (maximum).
Taste [LEFT] - setzt den Wert
zurück.
- 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.
- 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: https://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 FreeBasic:
https://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
|
|