29.03.26, 20:47
Ich hatte im Bilderthread ja unter anderem mein 'Spaceship' mit Souther Lineartonarm vorgestellt.
Ich habe dazu nun den Motor und die Steuerung noch einmal überarbeitet.
Straylight frugte mich da nach Details zur Steuerung.
Es wird ein bischen technisch, theoretisch, (philosophisch).
Ich versuche meine Gedanken dabei verständlich wiederzugeben.
Vorab, das 'Spaceship' hat mit meinem Denon DP6000 den besten Gleichlauf aller meiner 8 Plattenspieler.
Hammer!
Wir reden hier von einem Riemengetriebenen Laufwerk mit Teller/Lager, die aus einem über 60 Jahre alten Rek-o-kut stammen. Das Motorpulley ist in Harz gegossen und mittels einem Dc Motor mit 12000rpm rund gedreht.
Die Größe des Pulleys ist so ausgelegt, dass die Sinusfrequenz bei 33.33 Umdrehungen bei ca 50hz liegt.
Der Motor ist ein Mitsumi 7.5° stepper Motor MSP42... (Gebraucht für 5€ gekauft, liegt aber neu auch nur um die 30€)
Der Stepper Motor läuft mit einem schönen Sinussignal absolut rund, ähnlich den gerne bei Riemenlaufwerken genutzten Synchronmotoren. Die Geschwindigkeit bleibt auch ohne Regelung ziemlich stabil.
Ich bin von Beruf Programmierer, lag also nahe, dass ich da was selbs entwickel.
Allerdings programmiere ich Warenwirtschaftssysteme. ibm iseries und SAP abap.
Mit Raspberry/Python hatte ich bislang noch keine Erfahrung.
Deshalb hat die erste Version zwar funktioniert, war aber recht hemdsärmlig realisiert.
Anfangs wusste ich nicht, wie ich den phasenverschobenen Sinus in Python generieren kann. Also habe ich aus meiner programmierten Gui heraus einen passenden Sox Befehl abgesetzt. Funktionierte einwandfrei. Aber Geschwindigkeitseinstellungen bzw. Korrekturen kann man so schlecht durchführen. Es muss erst der alte Sox befehl beendet werden um dann einen neuen korrigierten abzusetzen.
Daher resultiert auch der Kalibrierbutton in der Gui. Erkannte Abweichungen kann man damit gezielt korrigieren.
Allerdings hört man das bei laufender Platte deutlich. Die neue Sinusfrequenz habe ich dabei als neuen default abgespeichert. Ist also eher für nach einem Riemenwechsel oder nach versetzen des Motors gedacht.
Das sollte besser werden.
Mittlerweile weiss ich wie ich im Python das Sinussignal generieren und in Echtzeit ändern kann.
Für die automatsche Geschwindigkeitsanpassung ist es natürlich wichtig die exakte Geschwindigkeit zu kennen.
Dazu sind im Tellerrand 8 Reflektoren eingebaut, die von einem IR Reflektionssensor abgetastet werden.
Alle Messungen und korrekturen werden also 8mal pro Umdrehung (alle 0.275 sec bei 33rpm) durchgeführt.
Die Geschwindigkeitsmessung ist dabei gar nicht so einfach.
Wenn man die Geschwindigkeit von einem bis zum nächsten Reflektor misst, müssen diese exakt, (also wirklich exakt! Bruchteile von einem mm) den gleichen Abstand zueinander haben. Sonst werden einem Schwankungen angezeigt, die gar nicht vorhanden sind.
Das bekommt man zu Hause definitiv nicht hin.
Deshalb messe ich immer die Geschwindigkeit einer vollen Umdrehung. Also von einem Messpunkt bis zu ihm selbst. Der Messabstand ist dann immer gleich, also eine volle Umdrehung.
Die Messungen laufen dann 8 mal parallel. Bei jeder 1/8 Umdrehung habe ich die Geschwindigkeit der letzten vollen Umdrehung. Ist zwar etwas träger, aber esgibt keine künstlichen Schwankungen.
Das Sinussignal wird übrigens über den Line Out an einen kleinen Digitalverstärker ausgegeben und über die Lautsprecher Anschlüsse an den Motor geschickt.
Geschwindigkeitskorrektur.
Wenn an einem Messpunkt eine Abweichung festgestellt wird kann man leicht ausrechnen wie die Zielfrequenz aussehen muss um die Sollgeschwindigkeit zu erreichen.
Aber....
Passt man dann die Sinusfrequenz entsprechend an ist bei der nächsten Messung (1/8 Umdrehung später) die Geschwindigkeit auf Grund der Trägheit noch nicht erreicht. Man erkennt also immer noch, mehr oder weniger die gleiche Abweichung und korrigiert dann also noch einmal. Das führt dazu, dass über das Ziel hinaus geschossen wird. Es führt zu einem Pumpen rund um die Sollgeschwindigkeit.
Es ist also alles gar nicht so einfach.
Ich habe das Problem folgendermaßen gelöst.
Ich korrigiere nur dann, wenn die Geschwindigkeit stabil ist. Also kein Beschleunigungs- oder Abbremsvorgang aktiv ist. Ich prüfe die Abweichungen der letzten vier Messungen zueinander. Dann leite ich die Korrektur ein indem die Differenz zur Zielfrequenz in 20 Schritten im Abstand von 0.1 Sekunden auf die aktuelle Frequenz aufgeschlagen wird. Die Korrektur dauert also 2 Sekunden. Erst wenn dann die Geschwindigkeit wieder gesettelt ist wird dann gegebenenfalls wieder eine Korrektur durchgeführt.
Ich habe das jetzt nicht begrentzt, das heißt die Sinusfrequenz wird auf zig stellen hinter dem Komma eingestellt.
Die Geschwindigkeit bleibt so von Beginn bis Ende der Platte absolut stabil.
Und so sieht das ganze auf dem Pi aus
Linke Seite Buttons für Bildschirm aus für ungestörtes hören,
Buttons für Bildschirmhelligkeit + / -
Rechte Seite Color. Es kann zwischen 3 Farbschemata geswitcht werden.
Bildschirmschoner aktivieren.
Geschwindigkeit anzeigen.
Lock Geschwindigkeit, aktiviert die Autokorrektur.
Calibrate, zur definition der Grundfrequenz.
Mit aktivierter analogen Geschwindigkeitsanzeige.
0 = Sollgeschwindigkeit.
Jeder Skalenstrich sind 0,1% Abweichung
Anzeige Digital
Anderes Farbschema
Screensaver mit Restzeit Anzeige. Voller Balken startet bei 28min (33rpm)
17min (45rpm) Wenn die Zeit abgelaufen ist stoppt der Teller.
Links neben der Skala sieht man am kleinen Pfeil, dass die Geschwindigkeitskorrektur abbremst.
Hoffe das war alles soweit verständlich...
Ich habe dazu nun den Motor und die Steuerung noch einmal überarbeitet.
Straylight frugte mich da nach Details zur Steuerung.
Es wird ein bischen technisch, theoretisch, (philosophisch).
Ich versuche meine Gedanken dabei verständlich wiederzugeben.
Vorab, das 'Spaceship' hat mit meinem Denon DP6000 den besten Gleichlauf aller meiner 8 Plattenspieler.
Hammer!
Wir reden hier von einem Riemengetriebenen Laufwerk mit Teller/Lager, die aus einem über 60 Jahre alten Rek-o-kut stammen. Das Motorpulley ist in Harz gegossen und mittels einem Dc Motor mit 12000rpm rund gedreht.
Die Größe des Pulleys ist so ausgelegt, dass die Sinusfrequenz bei 33.33 Umdrehungen bei ca 50hz liegt.
Der Motor ist ein Mitsumi 7.5° stepper Motor MSP42... (Gebraucht für 5€ gekauft, liegt aber neu auch nur um die 30€)
Der Stepper Motor läuft mit einem schönen Sinussignal absolut rund, ähnlich den gerne bei Riemenlaufwerken genutzten Synchronmotoren. Die Geschwindigkeit bleibt auch ohne Regelung ziemlich stabil.
Ich bin von Beruf Programmierer, lag also nahe, dass ich da was selbs entwickel.
Allerdings programmiere ich Warenwirtschaftssysteme. ibm iseries und SAP abap.
Mit Raspberry/Python hatte ich bislang noch keine Erfahrung.
Deshalb hat die erste Version zwar funktioniert, war aber recht hemdsärmlig realisiert.
Anfangs wusste ich nicht, wie ich den phasenverschobenen Sinus in Python generieren kann. Also habe ich aus meiner programmierten Gui heraus einen passenden Sox Befehl abgesetzt. Funktionierte einwandfrei. Aber Geschwindigkeitseinstellungen bzw. Korrekturen kann man so schlecht durchführen. Es muss erst der alte Sox befehl beendet werden um dann einen neuen korrigierten abzusetzen.
Daher resultiert auch der Kalibrierbutton in der Gui. Erkannte Abweichungen kann man damit gezielt korrigieren.
Allerdings hört man das bei laufender Platte deutlich. Die neue Sinusfrequenz habe ich dabei als neuen default abgespeichert. Ist also eher für nach einem Riemenwechsel oder nach versetzen des Motors gedacht.
Das sollte besser werden.
Mittlerweile weiss ich wie ich im Python das Sinussignal generieren und in Echtzeit ändern kann.
Für die automatsche Geschwindigkeitsanpassung ist es natürlich wichtig die exakte Geschwindigkeit zu kennen.
Dazu sind im Tellerrand 8 Reflektoren eingebaut, die von einem IR Reflektionssensor abgetastet werden.
Alle Messungen und korrekturen werden also 8mal pro Umdrehung (alle 0.275 sec bei 33rpm) durchgeführt.
Die Geschwindigkeitsmessung ist dabei gar nicht so einfach.
Wenn man die Geschwindigkeit von einem bis zum nächsten Reflektor misst, müssen diese exakt, (also wirklich exakt! Bruchteile von einem mm) den gleichen Abstand zueinander haben. Sonst werden einem Schwankungen angezeigt, die gar nicht vorhanden sind.
Das bekommt man zu Hause definitiv nicht hin.
Deshalb messe ich immer die Geschwindigkeit einer vollen Umdrehung. Also von einem Messpunkt bis zu ihm selbst. Der Messabstand ist dann immer gleich, also eine volle Umdrehung.
Die Messungen laufen dann 8 mal parallel. Bei jeder 1/8 Umdrehung habe ich die Geschwindigkeit der letzten vollen Umdrehung. Ist zwar etwas träger, aber esgibt keine künstlichen Schwankungen.
Das Sinussignal wird übrigens über den Line Out an einen kleinen Digitalverstärker ausgegeben und über die Lautsprecher Anschlüsse an den Motor geschickt.
Geschwindigkeitskorrektur.
Wenn an einem Messpunkt eine Abweichung festgestellt wird kann man leicht ausrechnen wie die Zielfrequenz aussehen muss um die Sollgeschwindigkeit zu erreichen.
Aber....
Passt man dann die Sinusfrequenz entsprechend an ist bei der nächsten Messung (1/8 Umdrehung später) die Geschwindigkeit auf Grund der Trägheit noch nicht erreicht. Man erkennt also immer noch, mehr oder weniger die gleiche Abweichung und korrigiert dann also noch einmal. Das führt dazu, dass über das Ziel hinaus geschossen wird. Es führt zu einem Pumpen rund um die Sollgeschwindigkeit.
Es ist also alles gar nicht so einfach.
Ich habe das Problem folgendermaßen gelöst.
Ich korrigiere nur dann, wenn die Geschwindigkeit stabil ist. Also kein Beschleunigungs- oder Abbremsvorgang aktiv ist. Ich prüfe die Abweichungen der letzten vier Messungen zueinander. Dann leite ich die Korrektur ein indem die Differenz zur Zielfrequenz in 20 Schritten im Abstand von 0.1 Sekunden auf die aktuelle Frequenz aufgeschlagen wird. Die Korrektur dauert also 2 Sekunden. Erst wenn dann die Geschwindigkeit wieder gesettelt ist wird dann gegebenenfalls wieder eine Korrektur durchgeführt.
Ich habe das jetzt nicht begrentzt, das heißt die Sinusfrequenz wird auf zig stellen hinter dem Komma eingestellt.
Die Geschwindigkeit bleibt so von Beginn bis Ende der Platte absolut stabil.
Und so sieht das ganze auf dem Pi aus
Linke Seite Buttons für Bildschirm aus für ungestörtes hören,
Buttons für Bildschirmhelligkeit + / -
Rechte Seite Color. Es kann zwischen 3 Farbschemata geswitcht werden.
Bildschirmschoner aktivieren.
Geschwindigkeit anzeigen.
Lock Geschwindigkeit, aktiviert die Autokorrektur.
Calibrate, zur definition der Grundfrequenz.
Mit aktivierter analogen Geschwindigkeitsanzeige.
0 = Sollgeschwindigkeit.
Jeder Skalenstrich sind 0,1% Abweichung
Anzeige Digital
Anderes Farbschema
Screensaver mit Restzeit Anzeige. Voller Balken startet bei 28min (33rpm)
17min (45rpm) Wenn die Zeit abgelaufen ist stoppt der Teller.
Links neben der Skala sieht man am kleinen Pfeil, dass die Geschwindigkeitskorrektur abbremst.
Hoffe das war alles soweit verständlich...


![[-]](https://plattenspieler-forum.de/images/collapse.png)
