
RPi-Pico Drehstromgenerator
Elektronik-Labor
Projekte
Mikrocontroller
Raspberry

Beim Ausschlachten einer alten Festplatte (Video,
ab Minute 12) ist mir ein Dreiphasen-Motor in die Hände gefallen. Er ist
extrem gut gelagert und leichtgängig. Da kam der Gedanke auf, ihn mit
einem Drehstromgenerator in Gang zu setzen. Weil es ein Synchronmotor
ist, muss er langsam angefahren werden. Die Frequenz muss also bis zum
Sollwert kontinuierlich erhöht werden. Dafür sollte ein DDS-Generator
mit drei Phasen an drei PWM-Ausgängen verwendet werden.
Der einfachste aller möglichen Motortreiber besteht aus drei
komplementären Emitterfolgern, ähnlich wie man es in Gegentaktendstufen
macht. Sie sollen hier direkt mit den PWM-Signalen angesteuert werden.
Eine gewisse Glättung soll durch die Induktivität der Motorspulen
erreicht werden. Ein Nachteil ist der Spannungsverlust von ca. 0,7 V
pro Transistor. Aus einem PWM-Signal von 3,3 Vss wird am Ausgang eines
von 1,9 Vss. Die Motorspulen haben ca. 6 Ohm, sodass ein maximaler
Strom von 300 mA fließen kann, den die Transistoren gerade noch
schaffen.
#DDS4.py Motortreiber
from machine import Pin, Timer, PWM
import time
pwm0 = PWM(Pin(0))
pwm0.freq(5000)
pwm1 = PWM(Pin(2))
pwm1.freq(5000)
pwm2 = PWM(Pin(4))
pwm2.freq(5000)
tim = Timer()
x =[128,176,217,245,254,245,217,176,128,80,39,11,2,11,38,80,128]
t=0
def tick(timer):
global t
global f
t += f
t1 = int(t / 100) & 15
t2 = (t1 + 5) & 15
t3 = (t1 + 10) & 15
pwm0.duty_u16(256*x[t1])
pwm1.duty_u16(256*x[t2])
pwm2.duty_u16(256*x[t3])
tim.init(freq=1600, mode=Timer.PERIODIC, callback=tick)
for f in range(31):
time.sleep(0.2)
print(f, " Hz")
while 1:
time.sleep (1)
Die Sinustabelle besteht aus 16 Werten für eine volle Schwingung,
damit man die letzten vier Bits des Adresszeigers mit & 15
isolieren kann. Die fortlaufen ausgegebenen Stützwerte sollten in drei
glichen Abständen an die drei PWM-Ausgänge ausgegeben werden, sodass
Phasendifferenzen von 120 Grad entstehen. Weil man aber 16 nicht durch
3 teilen kann, werden die Positionen 0, 5 und 10 verwendet. Die kleine
Ungenauigkeit in den Phasendifferenzen stört den Motor nicht. Hier
werden also drei Sinussignale mit genauen Frequenzen in Hertz erzeugt.
In der Schleife fährt die Frequenz von 0 Hz bis 30 Hz hoch. Bei 1 Hz
ruckelt der Motor noch deutlich sichtbar, ab 5 Hz läuft er schon rund.
Die maximal erreichbare Frequenz ist 40 Hz, weil dann die
Induktionsspannung ähnlich groß wird wie die erzeugte Spannung. Für
höhere Drehgeschwindigkeiten müsste ich mehr Spannung liefern.
Die letzte Frequenz von 30 Hz bleibt beliebig lange erhalten. Der
Motor läuft dabei völlig stabil und geräuschlos. Man kann ihn mit der
Hand anhalten, aber danach läuft er nicht mehr von allein an. Man kann
ihn aber manuell anwerfen. Oder man startet das Programm neu, dann
läuft er von allein wieder an. Auch eine der beiden Platten kann man
auflegen, sie läuft dann problemlos mit.