Eigenwerte

Practical Engineering 4: Motorsteuerung mit dem RasPi Pico (deutsch)

1. Einleitung

Eine der populärsten Anwendungsfelder für Mikrocontroller ist die Steuerung und Regelung von Motoren.

Im Hobby- und Modellbaubereich sind häufig kleine und billige Gleichstrommotoren (DC-Motoren) anzutreffen, die mit wenigen Volt aus handelsüblichen Batterien versorgt werden können.

Die reine Steuerung (“Teilleistungsbetrieb”) dieser zweipoligen Motoren ist einfach und wird oft über schlichte Transistor-Schaltungen und so genannte Pulsweitenmodulation (PWM) vollzogen.

Einen simplen Aufbau mit diskreten Bauteilen sowie ein Projekt in diesem Kontext thematisiert der folgende Blog-Artikel.

2. Motorantrieb und -steuerung

Zur Realisierung eines Aufbaus benutze ich das schon vorgestellte Raspberry Pi Pico Mikrocontroller Board (im Weiteren RasPi Pico genannt).

Als Tool für die Programmierung verwende ich Thonny, die genutzte Programmiersprache ist MicroPython, die Sprache der Wahl für ad-hoc Versuche und Prototypen.

2.1 Bauteile und Komponenten

Die Bauteile-Liste beinhaltet im Einzelnen:

  • RasPi Pico – DatenblattRP2040 Datenblatt
  • Motraxx DC-Motor (Bürstenmotor) – Datenblatt
  • 1xBipolartransistor NPN BC337 – Datenblatt
  • 1xFreilaufdiode P6KE – Datenblatt
  • 1xWiderstand 1 kOhm
  • 1xElektrolytkondensator 1 µF1
  • Punktrasterplatine (202 Kontakte) und Blankdraht
  • Micro-USB Kabel
  • 9V-Batterie einschließlich Adapter
  • Zahnrad plus Anbauten
  • Buchsen- und Steckerleisten, Schaltlitze (0,14 mm² verwendet), Schrumpfschlauchstücke

1 genauer Wert nicht so kriegsentscheidend, größere Werte sind zu bevorzugen falls zur Hand

2.2 Schaltplan

Die im Folgenden vorgestellte Motoransteuerung2 ist die einfachste Schaltung die ich in der Literatur finden konnte.

Dieser Aufbau treibt den Motor in lediglich eine Richtung an, und kann diesen auch nicht abbremsen.

Schaltplan der Motoransteuerung; GP1 vom Microcontroller, VBAT von 9V-Blockbatterie
Schaltplan der Motoransteuerung; GP1 vom Mikrocontroller, VBAT von 9V-Blockbatterie

Grundsätzlich sollten Feldeffekttransistoren (FETs) bei solchen Schaltungen den Vorzug gegenüber Bipolartransistoren erhalten da sie spannungs- und nicht stromgesteuert sind und somit den Ausgang des Mikrocontrollers nicht belasten.

Bipolartransistoren sind jedoch generell unempfindlicher und meistens billiger zu haben als FETs. Der hier verwendete, sehr weit verbreitete BC337 kostet bei einschlägigen Händlern aktuell einen einstelligen Cent-Betrag.

Der Pico Port GP1 führt entweder eine Spannung von 0,0V (Low) oder von 3,3V (High). Im ersteren Fall sperrt, im letzteren Fall leitet der Transistor.

Der theoretische Basis-Emitter-Strom beträgt im leitenden Fall circa:

IBE, th = (UµC[V]-USchwell BE[V])/R[Ω] = (3,3-0,7)/1000 = 2,6mA

Eine Kontrollmessung bestätigte erwartungsgemäß diese Werte. Die Stromverstärkung des BC337 liegt im Bereich von 100-400. Ein Blick in das Datenblatt des Motors verrät, dass dies für einen zweckmäßigen Betrieb ausreicht (ansonsten ist das Datenblatt für den Teillastbetrieb eher von begrenztem Nutzen).

Da der Motor eine induktive Last darstellt ist in der Schaltung eine Freilaufdiode notwendig.

Der Elektrolytkondensator (Elko) dient als Energiepuffer.

Die Versorgungsspannung liefert hier eine 9V-Blockbatterie. Ihr Minuspol muss mit einem der GND Pins auf dem RasPi Pico Board verbunden werden (gemeinsame Masse). Ein USB-Anschluss (VBUS mit +5V) ist, abgesehen von winzigen Motorgruppen, als Energiequelle für einen DC-Motor nicht geeignet.

Es sei an der Stelle noch angemerkt, dass es Schaltungen dieser Art im Elektronikversand natürlich auch fertig als Bausatz zu kaufen gibt.

2 der Begriff “Motoransteuerung” bezeichnet in diesem Artikel lediglich die HW, wohingegen “Motorsteuerung” hier die komplette Einheit einschließlich SW meint

2.3 Ansteuerungs-Algorithmus

Der RasPi Pico verfügt über spezialisierte PWM-Hardware die über MicroPython sehr einfach anzusprechen ist (siehe dazu auch RP2040 Datenblatt, Kapitel 4.5.).

Unten abgebildet ist ein quick&dirty Code den man für einen Versuchslauf so jedoch voll verwenden kann. Ein ausgefeilteres Programm findet sich in meinem RasPi Github-Repository (desweiteren findet sich in diesem Repository u. A. auch ein direkt flashbares .uf2-File welches die PWM unmittelbar anhand der user LED GPIO25 visualisiert).

Die PWM-Frequenz von 1 kHz (T = 1 ms) hat sich für den verwendeten Motor praktisch bewährt, wobei ich allerdings auch keine größeren mechanischen oder akustischen Probleme bei etwas geringeren Frequenzen feststellen konnte (nach oben hin sind aus verschiedenen Gründen jedoch schnell Grenzen gesetzt).

Die PWM hat eine 16bit Auflösung (Dezimalwerte von 0 – 65.535). Ein Vorgabewert von beispielsweise 16.384 führt daher zu einem Tastgrad (duty cycle) von 25%. 65.535 ist gleichbedeutend mit voller Ansteuerung, d. h. konstanter Spannungspegel von 3,3V entsprechend 100% Tastgrad.

Code
from machine import Pin, PWM
import utime
pwm = PWM(Pin(1)) # GPIO 1 bzw. GP1; an sich frei wählbar
pwm.freq(1000) # PWM-Frequenz
dutyCycle = 16384 # (1/4)*2^16
pwm.duty_u16(dutyCycle)
utime.sleep(0.1) # kurzer Impuls für den Anlauf
dutyCycle = 8192 # (1/8)*2^16
pwm.duty_u16(dutyCycle)
utime.sleep(10)
dutyCycle = 10920 # (1/6)*2^16
pwm.duty_u16(dutyCycle)
utime.sleep(10)
dutyCycle = 0
pwm.duty_u16(dutyCycle)

2.4 Versuchsaufbau

Im Video nun der Motor in Aktion. Die Ansteuerungs-Sequenz ist ähnlich dem in Kapitel 2.3 beschriebenen Algorithmus.

Auf dem Oszilloskop sollte die PWM gut erkennbar sein (Abgriff direkt an GP1 vor dem Widerstand).

Da sich das Motormoment abstützen muss und damit der Motor nicht zu “Wandern” beginnt empfiehlt sich ein Festzurren der Einheit an einem größeren Objekt (ich habe ein zersägtes Stück Holz genommen auf welches auch die Zahnradwelle geklebt ist).

Ein auf der Platine zusätzlich vorhandener Shunt-Widerstand wurde nur kurzzeitig für eine Kontrollmessung benutzt und ist funktional nicht notwendig.

Hier noch der abschließende Hinweis, dass der Aufbau als Ganzes nicht sonderlich EMV-tauglich ist.

3. Produktiver Test

Nun verwende ich den Motoraufbau für ein kleines physikalisches Experiment aus dem Bereich der Schwingungslehre.

3.1 Parametererregte Schwingungen

Parametrische Oszillatoren sind Schwinger mit zeitabhängigen Parametern.

Die so bezeichneten Systemmatrizen (diese repräsentieren Massen, Dämpfungen und Federkonstanten eines schwingfähigen Systems) der Bewegungsgleichungen sind bei solcherart Schwingern nicht konstant, sondern ändern sich zeitlich nach einer von außen vorgegebenen Parameterfrequenz Ω.

M(t)u´´ + D(t)u´ + S(t)u = 0

Die hier nur angedeutete Mathematik welche jene Systeme beschreibt ist so umfangreich wie komplex und geht weit über den Rahmen dieses Blog-Artikels hinaus (weiter unten ist für Interessierte Literatur zum Thema aufgeführt).

Anschaulich sind bei diesen Schwingern jedoch Stabilitätsbetrachtungen, wobei das anschaulichste Beispiel wohl die Kinderschaukel darstellt. Eine periodische Schwerpunktverlagerung führt dazu, dass Amplituden sich stetig vergrößern.

Eine Konfiguration mit dem Motraxx-Motor wird im Folgenden das Modell einer Schaukel (“Fadenpendel”) antreiben.

Die Fadenlänge ändert sich periodisch mit einer von außen aufgezwungenen Parameterfrequenz, die für ein beobachtbares Aufschaukeln die doppelte Eigenfrequenz des Pendels aufweisen muss.

3.2 Fadenpendel

3.2.1 Systemparameter

Allgemein berechnet sich die Eigenfrequenz eines Fadenpendels nach:

ω = (g/L)^0,5

mit g als Erdbeschleunigung und L als (mittlere) Fadenlänge. Im Versuchsaufbau beträgt die Eigenfrequenz bei L = 0,1 m:

ωVersuch = (9,81/0,1)^0,5 = 10 1/s (entspricht ca. 1,6 Hz)

Die Parameterfrequenz muss sich daher um den folgenden Wert bewegen will man ein Aufschaukeln des Systems beobachten:

Ω = 2*ωVersuch = 20 1/s (entspricht ca. 3,2 Hz)

Dies entspricht einer Motordrehzahl von etwa:

n = (Ω/(2*π)) * 60 = 191 1/min

also grob drei Umdrehungen pro Sekunde. Das Video zeigt das Versuchsergebnis mit dieser Drehzahl (Hinweis: für eine genaue Messung der Drehzahl ist ein digitaler Drehzahlmesser ggf. hilfreich).

Wird das System mit einer anderen Parameterfrequenz angeregt klingt eine durch eine Anfangsstörung verursachte Schwingung (die stets mit der Eigenfrequenz ausgeführt wird) nach und nach ab.

3.2.2 Numerischer Abgleich

Es ist trotz der komplizierten Mathematik relativ einfach möglich, instabile Bereiche eines Fadenpendels numerisch zu berechnen (zum Beispiel mit den Programmen Matlab oder Octave) und damit die Versuchsergebnisse zu validieren.

Ein lauffähiges Simulations-Programm hierzu findet sich in meinem Octave Github-Repository.

Dieses Programm berechnet die Stabilitätskarte eines Fadenpendels bei vorgegebener Pendellänge3:

Stabilitätskarte des Fadenpendels bei L = 0,1 m (grün: stabil; blau: instabil), numerische Berechnung; rote Pfeile markieren die zu verifizierenden Versuchs-Parameter
Stabilitätskarte des Fadenpendels bei L = 0,1 m (grün: stabil; blau: instabil), numerische Berechnung; rote Pfeile markieren die zu verifizierenden Versuchs-Parameter

Der Hub ΔL am Exzenter beträgt im Aufbau unveränderlich 1,0 Zentimeter (0,01 m), was zu einem ausreichend breiten und im Versuch verhältnismäßig simpel zu treffenden Instabilitätsbereich führt.

Mit größeren Hüben ließe sich ein Aufschaukeln noch einfacher erreichen.

3 der Dämpfungswert ist geschätzt; wird er vergrößert, verschmälert sich die blaue Fläche und verschwindet schließlich ganz

4. Erweiterungen und Ausblick

Die im Artikel vorgestellte Schaltung ist die einfachste Möglichkeit der Motoransteuerung, welche sich zudem nur für geringe Ströme eignet.

Mit einer so genannten H-Brücke ließe sich der Motor hingegen in zwei Richtung betreiben, womit eine solche Schaltung gut für zum Beispiel einen Roboter geeignet wäre. Tatsächlich kommt sie hier sehr oft zum Einsatz.

Auch könnte die Konfiguration mit einem Taster oder Schalter ergänzt werden um auf eine äußere Eingabe zu reagieren.

Umfangreiche Sammlungen von Schaltplänen und technischen Hintergrundinformationen in diesem Umfeld finden sich in zahlreichen Offline-Quellen, sowie einschlägigen Elektronik-Communities im Netz.

5. Weiterführende Informationen

5.1 Literatur

1. Strukturdynamik – Robert Gasch, Springer Vieweg; ISBN 978-3-540-88976-2 (2. Auflage)

2. Schwingungen – Kurt Magnus, Springer Vieweg; ISBN 978-3-8348-2574-2 (9. Auflage)

3. Elektronik Tabellen: Betriebs- und Automatisierungstechnik – Michael Dzieia, Westermann; ISBN 978-3142350165 (4. Auflage)

5.2 Online Ressourcen

hackaday.io Projekte des Autors (englisch)