Pico PI und Python

Python auf Einplatinencomputer wie Raspberry Pi, Banana Pi / Python für Micro-Controller
Antworten
roland51
User
Beiträge: 7
Registriert: Freitag 21. Mai 2021, 16:06

Hallo in die Gemeinde der Programmierer,

Es geht um ein schulisches Projekt zum Elektromagnetismus.
Erst einmal möchte ich den Grundaufbau und die Funktion beschreiben.
Die Schüler sollen mit 3 selbstgewickelten Drahtspulen und einer in einer Wasserschüssel schwimmenden Magnetnadel die Funktion es E-Motors darstellen und experimentell erleben lernen.

Dazu haben wir schon eine Schaltung aufgebaut, dass mit 3 Tastern jeweils ein der Spulen unter Spannung gesetzt werden kann, so dass die Magnetnadel beginnt sich zu drehen. Die Stromversorgung erfolgt über einen Batteriekasten mit 4 x A ( R20) Batterien. Somit könnte man auch ein PI über einen Spannungsstabi mit 5 Volt versorgen. Dazu sind auf einer Lochrasterplatine auch schon für jede Spule eine P-MOS Transistor- Vertstärkerstufe vorhanden. Somit reichen nach unseren Berechnungen, 2,2 Volt mit 2 mA aus dem GPIO Ausgang um eine solche Spule voll anzusteuern.
Jetzt ist uns die Idee gekommen, ein Raspberry Pico zu nutzen um eine konstante Drehbewegung der Nadel zu erzielen.

Eigentlich handelt es sich um ein Programm , was ähnlich wie eine Schrittmotorensteuerung funktionieren müsste.
Dazu habe ich folgende Grundidee entwickelt:
- Über einen GPIO Eingang wird das Programm gestartet -> digitaler Eingang
- über einen Kippschalter an einem GPIO soll die resultierende Drehrichtung bestimmt werden -> digitaler Eingang
- über einen weiteren Kippschalter an einem GPIO soll zwischen Vollschritt oder Halbschritt umgeschaltete werden -> digitaler Eingang
- über eine analogen Eingang soll mit einem Poti die Drehgeschwindigkeit angepasst oder eingewählt werden können -> ADW Eingang

Jetzt meine eigentlichen Fragen dazu:
- Ist ein solches Pico von der Rechenleistung ausreichend eine solche Aufgabe zu erfüllen ?
- Gibt es in der Programmiersprache Python schon solche Programme, Module oder Funktionen, die man relativ einfach dafür anpassen kann ?
- Wie würdet ihr die Programmumsetzung gestalten, wenn man dieses kleine Programm von Grund auf neu schreiben müsste ?
Würdet ihr, weil wirklich nur die Schaltzustände High und Low gefragt sind, für den Drehintervall die Sleep Funktion nutzen ?
( Da die Magnetnadel auf eine Korkscheibe geklebt in einer Wasserschüssel schwimmend ohnehin eine gewisse Trägheit aufweist, sind Drehzahlen von mehr als 1 bis 2 Umdrehungen pro Sekunde ohnehin nicht möglich. )

Um noch einmal zusammenzufassen ;) Es geht mir nicht um die Schaltungsumsetzung selber, sondern rein um den programmiertechnischen Teil, und mögliche Erfahrunsgswerte mit dem Pico PI.

Ich danke euch allem im Voraus

Gruß
Roland
__deets__
User
Beiträge: 14494
Registriert: Mittwoch 14. Oktober 2015, 14:29

An sich ist der Pico dazu geeignet. Das ist ja trivial was da an Rechenleistung notwendig ist. Nur sehe ich nicht, wie das funktionieren soll. Der Pico soll ja elektronisch kommutieren. Und weil anders als beim mechanischen Kommutator kein implizites Wissen um die Position des Rotors vorhanden ist, muss man Feedback erzeugen. Dazu gibt es prinzipiell zwei Ansätze: Hallsensoren, oder die Messungen des Back-EMF der nicht unter Strom stehenden Spule. Beides ist es euch aber nicht vorgesehen, und bei dem Modell Kompassnadel auch wahrscheinlich schwer erfassbar. Und wenn, dann ist die Abfrage der entsprechenden Sensoren mittels ADC auch deutlich aufwändiger, als das simple, Zeit-gesteuerte Verhalten, das dir jetzt vorschwebt. Selbst wenn das erledigt ist, wird es für die Ansteuerung auch nochmal von der Logik her spannend. Das klingt mir zu unausgegoren, um wirklich sinnvoll zu werden.

Nachtrag: das sowas bei Steppern funktioniert, ist mE dadurch moeglich, dass die einen sehr spezifischen mechanischen Aufbau haben, bei dem ein im Verhaeltnis zu den zB 4 Magneten sehr praezise ausgerichtetes "Zahnrad" als Rotor dient, und die naechste Zacke dann einen definierten Schritt erzwingt, wenn man den naechsten Magneten anschliesst. Aber das ist mit eurem im wahrsten Sinne des Wortes schwimmenden Aufbau eben nicht drin.
poldi
User
Beiträge: 20
Registriert: Sonntag 19. April 2020, 08:35

Ich habe den Pico vor einem Monat mit Micro Python getestet. Allerdings kann der Pico sein Potenzial damit nicht voll und ganz ausschöpfen, daher habe ich den Weg über die Arduino IDE gewählt und siehe da, es lief wie erwartet deutlich schneller.
Für das genannte Projekt ist der Pico (Leistung) deutlich überdimensioniert aber preislich halt nicht zu schlagen, von daher kann ich das jederzeit empfehlen.
roland51
User
Beiträge: 7
Registriert: Freitag 21. Mai 2021, 16:06

Hallo __deets__

Ich verstehe dich überhaupt nicht !
Bitte versuche hier nicht durch die Komplizierung eines Problems hier, oder bei mir Verwirrung zu stiften. Danke

An dieser schwimmenden Magnetnadel wird keine Kraft abgegriffen. Sie soll nur rein auf Grund ihrer unterschiedlichen Einfärbung der Pole verdeutlichen, wie ein drehbarer Dauermagnet, der auch ein Kompass sein könnte, auf Magnetfelder im unmittelbaren Umfeld reagieren.

Ich verstehe überhaupt nicht warum man dafür irgendwelche Sensoren benötigen würde.
__deets__
User
Beiträge: 14494
Registriert: Mittwoch 14. Oktober 2015, 14:29

Wenn es bei der Ansteuerung deiner Elektromagnete auf die momentane Ausrichtung der Nadel ankommt, dann sind da sehr wohl Sensoren im Spiel. Die nennen sich einfach nur “Augen”. Hat der Pico aber nicht.

Doch offensichtlich weißt du es eh besser, und Beratungsresistente soll man ziehen lassen.. Deine Frage wurde ja beantwortet: ja, der Pico ist geeignet.
roland51
User
Beiträge: 7
Registriert: Freitag 21. Mai 2021, 16:06

Hallo __deets__

Jetzt verstehe mich mal bitte nicht falsch. Was oder welcher Fehler soll auftauchen, oder auch auftreten, wenn ich das über eine Zeitsteuerung mache ?

Wenn ich Programmlauf einmal, nur der Grund vorgebe:
setze GPIO-OUT1 für 1000 ms auf ON
warte 50 ms
setze GPIO-OUT2 für 1000 ms auf ON
warte 50 ms
setze GPIO-OUT3 für 1000 ms auf ON
warte 50 ms

Damit entsteht doch schon eine Rotationsbewegung ? Oder wohl doch nicht ?
Mir ist klar und auch bewusst, dass die Verweilzeit an denen alle 3 Spulen Spannungslos sind nicht zu hoch sein darf, sonst wird die schwimmende Magnetnadel wieder zum Kompass.

Oder habe ich hier einen totalen Denkfehler, der mir nicht offensichtlich klar wird ?

Gruß
Roland
roland51
User
Beiträge: 7
Registriert: Freitag 21. Mai 2021, 16:06

Hallo poldi
poldi hat geschrieben: Freitag 21. Mai 2021, 17:11 Ich habe den Pico vor einem Monat mit Micro Python getestet. Allerdings kann der Pico sein Potenzial damit nicht voll und ganz ausschöpfen, daher habe ich den Weg über die Arduino IDE gewählt und siehe da, es lief wie erwartet deutlich schneller.
Für das genannte Projekt ist der Pico (Leistung) deutlich überdimensioniert aber preislich halt nicht zu schlagen, von daher kann ich das jederzeit empfehlen.
Wie darf ich in diesem Zusammenhang die Arduino IDE verstehen ?
Ich habe mich inzwischen auch mal etwas schlau gemacht, und auch das Arduino wie auch der PICO kann mit C programmiert werden.
Damit muss ich auch ganz offen sagen, dass ich aus der Pascal und Delphi Schiene Kommender etwas auf Kriegsfuß mit C.

Wie ich deine Aussage werten ?
Warum mir dieser __deets__ versucht zu erklären das ich ein Honk bin, verstehe ich nicht wirklich. Siehst du es auch so, dass man für diese kleine Sache, die eigentlich mit manuell bedienten Tastern ohnehin schon funktioniert nun auch noch zusätzliche Sensoren benötigt ?
Ich erkenne wohl offensichtlich nicht, wenn man nacheinander und in x beliebiger Reihenfolge irgendwelche Taster drücken kann und es funktioniert, dann benötigt man nur weil ein Computer diese Schaltsequenz ausführt Sensoren ?

Da es nicht um Geschwindigkeiten geht, und es auch nicht darum geht, das hohe Rotationszahlen erzeugt werden sollen stehe ich wirklich jetzt auf dem Schlauch. Und wenn die Nadel mal ins Wasser fallen sollte, dann sehen es auch die Kinder. Oder ?

Ich wünsche allen alles Gute
Roland
__deets__
User
Beiträge: 14494
Registriert: Mittwoch 14. Oktober 2015, 14:29

Vielleicht habe ich eine andere Definition davon, was man unter Rotation versteht. Ich bin da von meinen brushless-Motoren an den Koptern ausgegangen. Das schrittweise umschalten sollte so funktionieren.
poldi
User
Beiträge: 20
Registriert: Sonntag 19. April 2020, 08:35

In der Arduino IDE müsste man den Pico tatsächlich "C lastig" befüllen. Um den Kindern ein paar Effekte zu zeigen, geht es mit Sicherheit eingebremst in Micro Python, von daher Viel Spaß beim basteln.
roland51
User
Beiträge: 7
Registriert: Freitag 21. Mai 2021, 16:06

Hallo @__deets__

Ich möchte jetzt nichts anderes behaupten, als was ich im Eingangspost beschreiben habe.
Was ist daran falsch zu verstehen, oder mit einer anderen Vorstellung zu verbinden, wenn ich schrieb, dass es sich auf einer Korkscheibe, in einer Wasserschüssel schwimmende vormagnetisierte Nadel handelt ?
Um jetzt mal ein wenig Ironie einzubringen, auch eine Stundenzeiger an einer Analoguhr vollführt eine Rotationsbewegung. Wenn auch nur sehr langsam.

@poldi

Basteln, nein ;) Es war eher nur die Programmierung. Die Schnittstellen waren ohnehin schon vorhanden, da das Grundmodell im händischen Tasterbetrieb schon seine Funktion bewiesen hat.
Dazu habe ich als geschachtelte Listen zwei Logik-Tabellen erstellt, damit sowohl im Halb- und Vollschrittmodus dargestellt werden kann. Das eigentliche Problem war nur die Anpassung der ADC Werte um eine Drehzahlabstimmung mit einem Poti hinzubekommen.
Das oder der PICO ist selbst mit Python zu schnell, um gegen die Trägheit der Magnetnadel zu kämpfen.

Was mir jetzt an meinem Programm noch nicht so gefällt, aber dazu fehlt mir die Erfahrung, dass ich in einer While Schleife abfrage ob der Start-Kippschalter eine High Signal hat. Dann lese ich den Delay Wert über das Poti aus. Über einen weiteren Schalter, nur als JA / Nein Logik ausgelegt, wird die Drehrichtung bestimmt, und der letzte Schalter übernimmt den Aufruf, ob im Halb- oder Vollschrittmodus gearbeitet werden soll. Bleibt der ON- Kippschalter auf ON, läuft der Code in einer Schleife ab. Nur muss ich jetzt warten, bis die Nadel eine ganze Runde gemacht hat, bevor der neue oder geänderte Rückgabewert des Potis eine Berücksichtigung findet.

Ich wünsche euch allen ein schönes Pfingsten
Roland
__deets__
User
Beiträge: 14494
Registriert: Mittwoch 14. Oktober 2015, 14:29

Seufz. Wenn man (muss natürlich nicht…) eine kontinuierliche Drehbewegung der Nadel erreichen will, dann erreicht man das, indem auf die nächste Phase schaltet *bevor* die Nadel durch das erreichen des minimalen Abstands abgebremst wird. Wobei man natürlich nicht zu schnell schalten darf, weil man sonst vorauseilt, und die Nadel plötzlich rückwärts dreht. Das ist mit Augenmaß (abstrakt: einem Sensor) erreichbar. Man könnte es mit ein bisschen Fantasie und Spieltrieb sogar als eine spannende Herausforderung betrachten.

Und, vorbelastet durch die Nutzung von Bürstenlosen Motoren, habe ich den offensichtlich unfassbaren Fehler begangen, in diese Richtung zu denken. Me(g)a culpa maxima. Eine Unverschämtheit sondergleichen. Leider ist nicht jeder fehlerfrei, so wie du augenscheinlich.

Es mag unbedachterweise an der Formulierung “konstante Drehbewegung” liegen, die irgendjemand hier im Thema genutzt hat, um sein Problem zu formulieren. Keine Ahnung wer das gewesen sein kann. Du nicht. Du machst ja keine Fehler.

So wie zb statt ein fixes sleep zu verwenden stattdessen einfach den nächsten Zeitpunkt der Umschaltung auszurechnen, und bis der erreicht ist problemlos weiter das Poti abfragen zu können. So das man nicht lange warten muss. Aber da denke ich wahrscheinlich schon wieder in die komplett falsche Richtung.
poldi
User
Beiträge: 20
Registriert: Sonntag 19. April 2020, 08:35

Bzw. hier:
https://de.wikipedia.org/wiki/Bürstenlo ... strommotor

Es kommt halt darauf an was man genau will.
roland51
User
Beiträge: 7
Registriert: Freitag 21. Mai 2021, 16:06

Hallo @__deets__

Ich hoffe das ich mich dieses Mal etwas verständlicher Ausdrücke, und wir nicht rein an Verständnisproblemen scheitern werden.

Ich habe in MyPython zwei getrennte Funktionstabellen abgelegt, die nur die Unterschiede zwischen Halb- und Vollschritt darstellen sollen.

variable1 = [[1,0,0],[0,1,0],[0,0,1]]
variable2 = [[1,0,0],[1,1,0],[0,1,0],[0,1,1],[0,0,1],[1,0,1]]

Diese werden einer Funktion, genauso der Drehrichtung, und einem Verzögerungswert übergeben, dass jeweils die Spulen, die einer inneren Liste zugeordnet sind geschaltet werden.

Das funktioniert.
Ich verstehe dich das du auf einem Sensor bestehst. Weil es ist nicht absehbar, wann die Nadel sich wirklich bis zur unter der gerade unter Spannung stehenden Spule hingedreht hat. Ich möchte aber noch einmal anmerken, dass auf Grund der eigenen Trägheit der Korkscheibe, auf der die Magnetnadel festgeklebt ist, ohnehin keine hohen Drehzahlen möglich sind.
Du hast vollkommen Recht, das die Nadel sich beginnt rückwärts oder in der anderen Richtung beginnt zu bewegen, wenn die Umschaltfrequenz zu hoch ist.
Auch wenn im Darstellungsmodell mal die Nadel für 1 Sekunde oder länger bei der gerade unter Spannung befindlichen Spule positioniert, ist es doch auch im Halbschrittmodus für die Kinder erlebbar, dass die Nadel sich im Falle das gerade 2 Spulen unter Spannung sind, sich genau zwischen beiden positioniert. Und das sollte doch auch der eigentliche Lerneffekt sein. Mit einer aktiven Spule, gibt es nur 3 Steps, und mit 2 aktiven Spulen sind mehr Steps möglich. Was auch dem Prinzip einer Schrittmotorsteuerung entspricht. Es geht um den Physiklehrplan einer 7. Gymnasialklasse.
Die haben gerade begonnen mit Elektro-Magnetismus zu experimentieren, und sind oder waren die ganze Zeit ohne echten Physiklehrer unterwegs.

Die höchste erzielbare Rotationsgeschwindigkeit mit diesen Mitteln liegt, gegeben durch diese eine spezifizierte Plastikschüssel mit Wasser bei 2,7 Hz !
Langsamer geht immer auch wenn es vereinfacht gesagt ruckelt. Alles was schneller ist führt zu einem merkwürdigen Verhalten bis einschließlich einer nicht gewollten Drehrichtungsumkehr.

Ich hoffe das war nun ausreichend detailliert.

Grüße
Roland
Antworten