Wie kompiliert man MicroPython vom Quellcode selbst?

Python auf Einplatinencomputer wie Raspberry Pi, Banana Pi / Python für Micro-Controller
Benutzeravatar
Dennis89
User
Beiträge: 1153
Registriert: Freitag 11. Dezember 2020, 15:13

Das sieht ja sehr gut aus, danke für die Idee und auch für die Mühe das zu simulieren.

Ich habe gerade mal etwas darüber gelesen und habe die Diode so verstanden, das sie bei geringen Strömen sperrt und ab einem definierten Strom lässt sie die definierte Spannung , in dem Fall die 3V3, durch. In dem Datenblatt, bei Reichelt oder auch hier bei Conrad finde ich keine Infos, wie ich den Strom "gestalten" muss, damit die Diode meine 3V3 durchlässt.

Ich könnte jetzt auch blind die Diode aus deinem Link kaufen, aber vielleicht brauche ich das mal wieder.

Das wäre schön wenn das klappt und die ganzen Widerstände des Spannungsteilers wegfallen würden.

Grüße
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
__deets__
User
Beiträge: 14523
Registriert: Mittwoch 14. Oktober 2015, 14:29

Nicht die ganzen Widerstände! Die Diode ersetzt nur einen der beiden Widerstände, und ist eben variabel dabei (wie alle Halbleiter), so dass du eine definierte Spannung bekommst. Und das mit dem Strom ist recht einfach: die Diode darf maximal 250mA fließen lassen. Das ist mehr als genug Luft nach oben, die Treiber des Encoders können ja nur 10mA oder so. Und um zu funktionieren, muss sie nach Tabelle 1 ein paar mA haben. Bei 10KOhm Widerstand bist du bei deine 20V mit 2mA gut dabei. Zur Not kann man den auch noch verkleinern, aber würde ich erstmal so probieren.
Benutzeravatar
Dennis89
User
Beiträge: 1153
Registriert: Freitag 11. Dezember 2020, 15:13

Ich glaube jetzt hats Klick gemacht. Dann besorge ich mir die Dioden mal und die Trimmpotis auch gleich.

Vielen Dank für deine Unterstützung.


Grüße
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
Benutzeravatar
Dennis89
User
Beiträge: 1153
Registriert: Freitag 11. Dezember 2020, 15:13

Guten Abend,

ich melde mich mal zurück. Die Zener-Dioden sind heute angekommen. Bestellt habe ich die hier.
Leider hat es mir heute für einen ersten Versuch nicht mehr gereicht. Jetzt dachte ich mir, um morgen nicht gleich zu arg enttäuscht zu werden, zeige ich mal wie ich mir den Anschluss vorgestellt habe: https://www.dropbox.com/s/1od0uelvupw18 ... n.pdf?dl=0

Sieht das richtig aus? Ich finde es ziemlich passend zu der Simulation von __deets__.

Danke und Grüße
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
__deets__
User
Beiträge: 14523
Registriert: Mittwoch 14. Oktober 2015, 14:29

Sieht gut aus. Wobei ich wenn möglich einen Spannungsteiler übereinander anordne. Das ist natürlich nur Konvention, mir mit meiner mäßigen Erfahrung hilft das aber. Wichtig: erst mit dem Oszi prüfen! Nicht, dass der ESP gegrillt wird. Die Eingänge vertragen VDD + 0.3 oder so, also etwa 10%. Sollte das doch drüber sein, kann man nochmal mit einem 10K Widerstand parallel zur Zehner arbeiten. Zumindest in meiner Simulation ging das.
Benutzeravatar
Dennis89
User
Beiträge: 1153
Registriert: Freitag 11. Dezember 2020, 15:13

Vielen Dank für deine Antwort.

Ich werde das natürlich auf einem extra Steckbrett ohne ESP aufbauen und prüfen. Ich habe nur einen Ersatz-ESP da und denn brauche ich eigentlich um parallel mit dem Nextion-Display, das ich auch für das Projekt verwenden will, warm zu werden. Und es tut mir grundsätzlich immer weh, wenn etwas kaputt ging weil ich leichtsinnig oder hektisch war.

Zusätzlich hatte ich mir noch ein paar unterschiedliche Trimm-Widerstände mitbestellt in der Hoffnung damit dann unproblematisch und einfach den passenden Widerstand einzustellen.

Ich werde mich morgen mit dem Ergebnis wieder zurück melden.

Grüße
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
Benutzeravatar
Dennis89
User
Beiträge: 1153
Registriert: Freitag 11. Dezember 2020, 15:13

Guten Morgen,

es funktioniert wunderbar!
https://www.dropbox.com/s/k4u6v6oqf4gvg ... .jpeg?dl=0

Auch dir Ausgabe des Drehwinkels passt jetzt 🙂

Vielen lieben Dank!

Wenn der vollständige Code dann steht und funktioniert, zeige ich ihn hier. Hoffentlich muss ich das nicht vorher😃

Grüße
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
__deets__
User
Beiträge: 14523
Registriert: Mittwoch 14. Oktober 2015, 14:29

Hm. Immer noch keine 3V? Komisch. Aber wenn es jetzt besser geht, ist das ja die Hauptsache.
__deets__
User
Beiträge: 14523
Registriert: Mittwoch 14. Oktober 2015, 14:29

Kannst du auch mal deine Kanäle am Oszi tauschen? Falls da was komisch ist.

Und was den Code angeht: du wirst einen PID Regler schreiben müssen, ich bin ziemlich sicher, dass wir uns dazu nochmal sprechen 😁
Benutzeravatar
Dennis89
User
Beiträge: 1153
Registriert: Freitag 11. Dezember 2020, 15:13

Ich kann die Widerstände noch etwas ändern um auf 3V zu kommen. Schön ist, dass die Spannung dank der Z-Dioden konstant bleiben.
__deets__ hat geschrieben: Freitag 4. März 2022, 12:16 Und was den Code angeht: du wirst einen PID Regler schreiben müssen, ich bin ziemlich sicher, dass wir uns dazu nochmal sprechen 😁
Ach sag doch nicht sowas 🙈

Ich habe eigentlich keine sonderlichen Anforderungen an die Drehzahl oder an den Drehwinkel, an dem der Motor stoppen soll.
Das Lastmoment ist während der Drehung eigentlich konstant und dadurch muss ich die Motordrehzahl während des Betriebs nicht überwachen und nachstellen. Die "optimale" Drehzahl wird mit ein paar Versuchsstücken ermittelt. Eine konstante Drehzahl könnte in der Praxis eher zum Problem führen. Wärend des Schweissvorgangs erwärmen sich die Werkstücke und dadurch verhält sich auch das Schmelzbad anders. Das heißt nach einer bestimmten Schweißzeit sollte man die Drehzahl eher etwas erhöhen. Das würde ich mir aber eher für die Version 2.0 aufheben. Das ist ja auch weider von der Geometrie und von den Schweißparameter abhängig.

Und um dem Motor an einem bestimmten Winkel anzuhalten, benötige ich eigentlich auch keinen PID-Regler. Ich vergleiche Soll und Ist und dann wird gestoppt. Eine Toleranz von einem Grad ist da auch okay.

Übersehe ich etwas oder meinst du, das es von mir unrealistisch ist, zu denken der Motor würde konstant drehen und ich brauche auf jeden Fall einen Regler?

Grüße
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
__deets__
User
Beiträge: 14523
Registriert: Mittwoch 14. Oktober 2015, 14:29

Eigentlich sollte die Spannung mit den Zehnern ja festgelegt sein. So ganz verstehen, warum ich in der Simulation mit Parallelen Widerständen was daran drehen kann, verstehe ich nicht. Aber die ist auch nicht perfekt. Wichtig ist aber natürlich m dass es geht.

Und was deine Regelung angeht: das sieht du zu einfach. Du brauchst eine Beschleunigungsrampe, und eine Bremsrampe, und den Sattel zwischendrin. Und das wird geregelt werden müssen. Bin ich mir sehr sicher. Der Vorteil ist dann natürlich, dass man das gleich zu einer komplexeren Rampe machen kann, um diesem Effekt zu begegnen.
Benutzeravatar
Dennis89
User
Beiträge: 1153
Registriert: Freitag 11. Dezember 2020, 15:13

Wenn ich mal Zeit habe, dann kann ich mit den Z-Dioden noch etwas herumspielen, habe ein paar mehr gekauft.

Ich verstehe was du meinst, ich habe das Fahrprofil als sprunghafte Zustandsänderungen beschrieben und du siehst es realistischer, im Trapezfahrprofil.
Ich verstehe nur nicht ganz wie du das mit dem regeln meinst, bzw. was ich regeln soll.
Wenn ich zum Beispiel den Motor mir halber Drehzahl fahren will. Dann würde ich "einfach" 50% in der PWM-Steuerung vorgeben. Sollte ich stattdessen einen Regler bauen, der zuerst mehr wie 50% Strom gibt und sich dann auf die 50% einregelt damit es schneller geht? Oder was sollte ich regeln?

Danke und Grüße
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
__deets__
User
Beiträge: 14523
Registriert: Mittwoch 14. Oktober 2015, 14:29

Du regelst nach der gewünschten Position. Ab dem Startpunkt läuft deine Rampe (die kann auch mehrere Segmente haben, oder sogar eine Kurve sein, aber Rampe reicht erstmal), und dann vergleichst du ist mit soll. Wenn du noch nicht da bist, regelst du die PWM hoch, und wenn du drüber bist, runter. Das mit PID, und ggf sowas wie Feed forward und clamping. Coole YT Serie die ich gerade dazu gesehen habe: https://youtu.be/wkfEZmsQqiA

Und du irrst, wenn du denkst, dass die Fahrtregelung via PWM so läuft, dass du einfach 50% eingibst, und gut ist. Bei meinen diversen Robotik Experimenten in Uni oder der DLR hat eine PWM Regelung immer nur in den oberen 80% stattgefunden, und war auch nicht linear. Auch deine Lastmomente sind nur theoretisch gleich. Bloß weil du keine erwarteten Änderungen erwartest (wie eine Fahrt ins Gebirge zb, oder verschiedene anmontierte Geräte), heißt das nicht, dass keine da sind. ZB durch innere Reibung, die Schläuche, Gravitation.
Benutzeravatar
Dennis89
User
Beiträge: 1153
Registriert: Freitag 11. Dezember 2020, 15:13

Danke für deine Erklärung.

Ich schaue mir die YT-Serie dazu gerne an.

Bin mal gespannt was da noch auf mich zu kommt, sowas hatte ich gar nicht auf dem Schirm.

In dem Fall melde ich mich vermutlich früher wieder zurück 😃

Grüße
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
Benutzeravatar
Dennis89
User
Beiträge: 1153
Registriert: Freitag 11. Dezember 2020, 15:13

Ich habe mir die ersten 6 Videos angeschaut und mir Gedanken darüber gemacht wie ich das auf mein Projekt übertragen kann/muss.

Ich schreibe hier mal meine Gedanken dazu auf.
Man kann die Drehschweissvorrichtung die gebaut wird, mit einer Drehmaschine vergleichen. Anstelle des Drehmeisels, der in zwei Achsen verfahren kann, ist hier aber der Schweißbrenner an einer Position fixiert. Meine Steuerung muss das Werkstück um einen einstellbare Winkelgröße und einer einstellbaren Geschwindigkeit drehen.

Das heißt für mich
__deets__ hat geschrieben: Freitag 4. März 2022, 15:23 Wenn du noch nicht da bist, regelst du die PWM hoch, und wenn du drüber bist, runter.
Dass das nicht zutrifft. Weil ich will nicht möglichst schnell ans Ziel sondern möglichst konstant und wenn ich etwas darüber bin ist das in Ordnung.
Ich hätte eher einen Regelkreis in der ich nach der Geschwindigkeit regle. Um die Geschwindigkeitsänderung festzustellen müsste ich die Werte, die mein Encoder liefert abhängig von der Zeit betrachten und dadurch Rückschlüsse auf die Geschwindigkeitsänderung schließen und je nach Abweichung das PWM-Signal anpassen.
__deets__ hat geschrieben: Freitag 4. März 2022, 15:23 hat eine PWM Regelung immer nur in den oberen 80% stattgefunden, und war auch nicht linear.
Das mit den 80% verstehe ich nicht ganz. Die Drehzahl des Motors kann ich steuern wenn ich die Impulse (in MP duty()) ändere. In einer Beispielrechnung will ich ein Rohr mit einem Umfang von 105,9mm mit einer Geschwindigkeit von 10mm/s schweißen. Mein Werkstück muss sich mit 5,7 min^-1 drehen. Der verwendete Getriebemotor hat am Getriebeabgang eine max. Drehzahl von 40 min^-1 und treibt das Werkstück über eine weitere Übersetzung an. Der Getriebemotor müsste am Getriebeabgang eine Drehzahl von 13,6min^-1 haben. Wenn 40 min^-1 == duty(100) sind, dann sind 13,6 min^-1 == duty(34). Die 34% sind jetzt aber hoffentlich nicht mit den 80% von dir zu vergleichen?

Mit der Reibung und allen Einflüssen drum rum gebe ich dir vollkommen recht und ich glaube dir auch, dass das alles nicht linear abläuft. Ich glaube ich muss das an realen Bedingungen mal testen und Ergebnisse zu sehen um eine Vorstellung von den Fehlerauswirkungen zu bekommen. Da das hier alles doch recht grob ist.
Wenn ich an die Beispiele von Drohnen oder Roboter denke, dann leuchtet mir die Regelung auch vollkommen ein.

Ich musste das jetzt mal nieder schreiben und darüber "reden". Das soll aber keine Kritik sein, ich kann das aus der Theorie einfach nicht einschätzen wie "groß" die Fehler sein werden oder ob sie vernachlässigbar klein sind.

Ich kann auch gerne mal eine Funktionsbeschreibung mit Skizzen liefern, das wir auf dem gleichen Stand sind?
__deets__ hat geschrieben: Freitag 4. März 2022, 15:23 Bei meinen diversen Robotik Experimenten in Uni oder der DLR
DLR, dafür kann ich mich auch begeistern.😍


Grüße
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
__deets__
User
Beiträge: 14523
Registriert: Mittwoch 14. Oktober 2015, 14:29

Hallo Dennis,

das ist schon vollkommen ok, dass du das in Frage stellst. Du setzt dich ja ernsthaft auseinander, und ich bin auch kein Experte fuer Motion Control. Ich habe ein paar erfolgreiche Projekte gefrickelt, aber das war's auch. Das einzige, worin ich Profi bin, ist Programmieren an sich.

Fangen wir mal mit dem Motor an. Wenn der nicht selbst ein Servo-Motor ist (womit die ganze enkodiererei entfallen wuerde, denn dann hat der den schon intern), und die PWM nicht nur eine Steuerung darstellt, sondern eine Energiezufuhr, dann ist deine Ueberlegung zum Motor so nicht korrekt.

Denn was da ja passiert ist nicht, dass die PWM eine Geschwindigkeitsangabe darstellt. Sondern eine Energiezufuhr, die - und das ist wichtig! - abhaengig vom Zustands des Systems in einem Drehmoment resultiert. Wenn der Motor steht, ist das Drehmoment (abhaengig von der gewaehlten PWM) so gross, wie es werden kann. Faengt der aber an zu drehen, entwickelt sich sofort etwas, dass sich "back EMF" nennt. Das ist ein dem Antriebstrom entgegengerichter Strom, der das tatsaechlich erzeugte Drehmoment reduziert, bis die sich im Gleichgewicht befinden. Damit hat der Motor seine (unter diesem Duty Cycle) maximale Drehzahl erreicht. Und das auch nicht sofort, sondern asymptotisch. Das sind aber natuerlich nicht die einzigen Faktoren. Dazu kommt

- eine initiale statische Reibung, die ueberwunden werden muss.
- eine Reibung proportional zur Geschwindigkeit.
- eine Last, die selbst im Idealfall ein unterschiedliches Traegheitsmoment hat, zb unterschiedliche Rohrlaengen/Durchmesser/Materialien.

Diese Kraefte machen das System erstmal nicht unberechnbar (also fuer unseren Fall hier schwankend), aber es fuehrt dazu, dass deine einfache Ueberlegung nicht ausreicht in meinen Augen. Selbst wenn du experimentell das System aufbaust, und das Werkstueck drehen laesst, und dazu die notwendige PWM ermittelst, kommst du zu dieser Geschwindigkeit nur asymptotisch. Das dauert aber im Zweifel viel zu lange, und je nach Werkstueck auch unterschiedlich lange. Und im schlimmsten Fall ist die zu waehlende PWM zu dem Zeitpunkt sogar so gering (weil das System grundsaetzlich "rund laeuft"), dass du noch nicht mal das initiale statische Moment ueberwunden bekommst. Du musst also initial eine hoehere PWM fahren, und nach einer gewissen Zeit reduzieren auf die gewuenschte. Oder anders gesagt: regeln.

Und das waren eben auch meine Erfahrungen: zum anfahren meiner Roboter habe ich immer jenseits der 80% gebraucht, weil die Reibung im System (Sandiger Untergrund, war ja fuer den Mars, starke Untersetzungen mit viel Getriebe-Reibung) hoch war. Und die Regelung hat sich dann immer nur in diesen Regionen abgespielt. Wo die bei dir liegen wird, weiss ich nicht. Aber einen so simplen linearen Zusammehang zwischen PWM und Drehzahl gibt's eben nicht, selbst wenn der sich im Gleichgewicht fuer bestimmte Bereiche einstellt.

All das beruecksichtigt dann natuerlich nicht, dass es im Rundlauf noch Schwankungen geben koennte. Wobei mir erst durch dein letztes Posting klar wurde, dass da nur das Werkstueck sich dreht, das reduziert natuerlich die potentiellen Einfluesse. Schmiermittel in den Gertierben und dessen Viskositaet bei Temperatur aber zB ist immer noch drin.

Was die Regelung nach Geschwindigkeit oder Position angeht: in einer idealen Welt ist das egal, weil Position nur das Integral der Geschwindigkeit ist, und umgekehrt die Ableitung der Position die Geschwindigkeit. Und der gleiche Zusammenhang gilt ja auch fuer Beschleunigung. Dem Regler ist das erstmal ziemlich egal, warum man da eines dem anderen vorzieht haengt wahrscheinlich von der Anwendung ab, und Ueberlegungen, wo man sich den Fehler leisten kann oder will. Salopp gesagt: wenn du auf Geschwindigkeit regelst, aber gleichzeitig die Position ueberwachst, um die notwendige Ueberschweissung sicherzustellen, dann hast du letztlich eh nach der Position geregelt. Same same. Es kann sogar sein, dass du mit Geschwindigkeitsregelung besser faehrst, weil dir zb ein Fehler im Ueberfahren hier egal ist. Eine Rueckwaertsfahrt zur Korrektur ist bei dir wohl eher nicht gewuenscht. Aber auch das koennte man natuerlich im Positionsregler sicherstellen, indem der niemals negative Drehrichtungen ausgeben darf. Doch wie gesagt: ziemlich einerlei.
Benutzeravatar
Dennis89
User
Beiträge: 1153
Registriert: Freitag 11. Dezember 2020, 15:13

Vielen Dank für die sehr ausführliche und lehrreiche Antwort!

Ich habe nun schon viel Zeit in das Projekt investiert und möchte jetzt natürlich auch, dass die Zeit nicht umsonst war und das dabei ein ordentliches Ergebnis rauskommt. Dann werde ich mich in nächster Zeit intensiver mit der Regelungstechnik befassen und mal schauen was ich zu Stande bekomme.

Da ich mit Ausnahme deiner Videos in diese Richtung noch nicht weiter recherchiert habe, fällt der Post hier etwas knapp aus.
Die Fragen werden dann sicherlich kommen, wenn ich mich intensiver mit dem Thema beschäftigt habe.

Ansonsten habe ich gerade nichts mehr zu sagen :D Dein Text leuchtet mir in jeder Hinsicht ein und ich bin eigentlich froh, dass das jetzt schon zur Sprache kam und nicht erst nach den ersten Fehlversuchen.


Wünsche noch ein schönes Wochenende
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
Benutzeravatar
Dennis89
User
Beiträge: 1153
Registriert: Freitag 11. Dezember 2020, 15:13

Guten Abend,

ich habe gerade noch ein Verständnisproblem mit:
wenn du auf Geschwindigkeit regelst, aber gleichzeitig die Position ueberwachst, um die notwendige Ueberschweissung sicherzustellen, dann hast du letztlich eh nach der Position geregelt. Same same.
Meine Bedingung die der Regler erfüllen soll: Das System soll mit Konstanter Drehzahl so genau wie möglich auf Position fahren ohne negative Korrektur der Position.
Ich habe die PWM-Energiezufuhr für den Motor und einen Encoder, der mir die Position angibt.

Die mathematische Beschreibung eines PID-Reglers besteht aus drei Konstanten, für jeden Regler(P, I und D) eine. Dazu kommt die Regelabweichung, die kann ich entweder aus Soll- und Ist-Position berechnen oder ich berechne aus meiner vorgegebenen PWM-Werten die Soll-Drehzahl und die Ist-Drehzahl aus den Impulsen des Encoders. Wobei sich das für mich so anfühlt, als wenn das Ist-Drehzahl-Ergebnis zu spät kommt.
Dazu kommt noch die Differenz aus aktueller und vorherirgen Regelabweichung und der gewählten Abtastzeit.
Das Ergebnis ist dann die Steuergröße, was in meinem Fall der PWM-Wert wäre.

Wenn ich das so betrachte dann unterscheidet sich für mich die Regelung nach Geschwindigkeit und Position. Ich stelle mir das so vor:
Regelung nach Position - Fahre genau nach xy. Der Motor beschleunigt und nähert sich seinem Ziel um so näher er kommt umso langsamer wird er wieder, bis er da ist. Wie schnell er da ankommen soll habe ich nicht gesagt und erwarte deswegen keine konstante Fahrt.

Regelung nach Geschwindigkeit - Fahre 50km/h bis du ca bei xy bist. Der Motor beschleunigt auf 50km/h und die Regelung sorgt dafür, dass er die hält. An der Position angekommen bremst er ab und überfährt sie etwas.

Will ich beides, dann bräuchte ich zwei Regler, weil ich habe ja zwei Regelabweichungen, aber wiederum nur eine Steuergröße. Ich müsste in dem Fall ein dominante Regelabweichung haben. Damit sobald man in der Nähe von xy ist, die Geschwindigkeit außer acht lässt und rechtzeitig abbremst. Das benötige ich ja nicht, aber ich versuche mit solchen Überlegungen zu verstehen, wieso die Regelung nach Position und Geschwindigkeit einerlei ist. Da komme ich gerade auf keinen grünen Zweig.

Über etwas Hilfestellung wäre ich dir sehr dankbar.

Schönen Abend und Grüße
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
__deets__
User
Beiträge: 14523
Registriert: Mittwoch 14. Oktober 2015, 14:29

Hallo Dennis,

fangen wir mal beim einfachen an - der Regelung nach Position. Der entscheidende Hinweis hier ist, dass ich ueber eine Position *zum Zeitpunkt* rede. Nicht einfach nur einer Position. Bei t0 ist die Postion 0. Bei t + 1 Sekunde ist sie 100 Schritte. Bei t + 2 Sekunden ist sie 500 Schritte (wir beschleunigen also). Und so weiter und so fort. Als Graph aufgetragen sieht das Positions/Zeitdiagramm aus wie eine Parabel, dann kommt eine Gerade, und dann kommt wieder die Parabel, aber umgedreht. Das folgt ganz einfach aus den Bewegungsgleichungen: wir fangen mit einer konstanten Beschleunigung a an zu drehen, bis wir die gewuenschte Geschwindigkeit v_max erreicht haben. Dann halten wir diese Geschwindigkeit, bis wir zum Moment des abstoppens kommen. Und dann bremsen wir mit -a (oder ggf. einem -a_2, wenn zB ein schnellerer oder langsamerer Stopp gewuenscht ist) wieder ab. Konstante Beschleunigungen ergeben eine gerade ansteigende Geschwindigkeit, und eine gerade ansteigende Geschwindigkeit ergibt eine quadratische Position daraus integriert.

Wenn man sich das ganze als Zeit/Geschwindigkeitsdiagramm vorstellt, dann hat man die Rampe: von 0 auf v_max, das fuer eine Weile gehalten, und dann wieder runter. Grundsaetzlich kann man das Problem also auch so formulieren, das waere dann die Geschwindigkeits-basierte Regelung. Und in einer mathematisch und physikalisch idealen Welt waere das egal.

Ein Bild davon findet sich hier: https://robotics.stackexchange.com/ques ... r-actuator

Und das habe ich gefunden bei dem Versuch, ein Argument fuer oder gegen Positional vs Velocity Control zu finden. Das Bild ist etwas unklar. So wie ich es bisher verstehe, hat beides Vor- und Nachteile. Velocity Control geht besser mit sich aendernden Koeffizienten um, die auftreten, wenn man ein adaptives System hat. Das kann zB ein Quad-Copter sein, bei dem man bestimmte Features wie besonders schnelles ansprechen bei Punches haben will.

Position Control hingegen erreicht beide Ziele von dir: du willst ja nicht nur eine bestimmte Geschwindigkeit erreichen, sondern auch ab bestimmten Positionen anhalten. Bei Velocity-Control ueberwachst du also gleichzeitig die Position, und sobald die wie gewuenscht erreicht ist, musst du den setpoint auf langsamer werden steuern, und die Regelung arbeitet daran, das umzusetzen. Gleich Position zu nehmen, loest beides in einem. Ich wuerde dabei bleiben, aber ich habe auch bisher nur die absoluten Grundlagen der Theorie hier verstanden. Noch laengst alles.

Was deine Betrachtung von Soll/Ist und PWM angeht: das klingt konfus. Wenn du Positional Control machst, ist Soll durch eine Funktion von t vorgegeben, und Ist durch deinen Encoderwert. Bei Velocity-Control ist Soll auch eine Funktion von t, und fuer die Geschwindigkeit musst du die letzten beiden Positionswerte durch ihr Zeit-Delta teilen. Woher du vorgegebene PWM-Werte haben willst, verstehe ich nicht. Woher sollen die kommen? Das es keinen Zusammenhang zwischen Geschwindigkeit und PWM gibt, habe ich ja schon dargelegt.
Benutzeravatar
Dennis89
User
Beiträge: 1153
Registriert: Freitag 11. Dezember 2020, 15:13

Guten Abend __deets__,

vielen Dank für deine weitere Hilfe.
dass ich ueber eine Position *zum Zeitpunkt* rede
Oh man, ja natürlich so macht das Sinn. Das hätte ich auch mal selbst drauf kommen können.
Woher du vorgegebene PWM-Werte haben willst, verstehe ich nicht. Woher sollen die kommen? Das es keinen Zusammenhang zwischen Geschwindigkeit und PWM gibt, habe ich ja schon dargelegt.
Vielleicht habe ich mich da falsch/unverständlich ausgedrückt. Ich versuche es mal direkt mit meiner verwendeten Hardware erklären. Will der Bediener die Geschwindigkeit festlegen, hat er einen Poti. Wird dieser gedreht werte ich die Werte mit dem internen ADC des ESP aus und skaliere die Werte im Bereich von 0-100. Diesen Wert übergebe ich 'PWM.duty()' und dadurch stellt sich eine "beliebige" Drehzahl ein. (Das meine einfache Betrachtung aus vorherigen Posts nicht zutrifft, habe ich verstanden.) Diesen Wert habe ich als "vorgegenemer PWM-Wert" gemeint.
Mittlerweile sehe ich das aber etwas anders. Ich stelle mit dem Poti meine gewünschte Geschwindigkeit ein, gebe dem Regler aber die Möglichkeit 'Pwm.duty()' von 0-100 zu regeln und an Hand der Position abhängig der Zeit bekomme ich meine Ist-Geschwindigkeit und habe dadurch meine Soll-Ist-Werte und zwar die Geschwindigkeiten und die Regelgröße ist dann 'PWM.duty()'.

Ich hatte heute aber noch nicht viel Zeit mich tiefer in das Thema einzuarbeiten, daher fällt dieser Post erst mal wieder etwas knapp aus. Aber ich wollte dir auch Bescheid geben, dass ich deinen Beitrag gelesen habe und mich jetzt weiter damit beschäftige. Ich muss das morgen alles mal niederschreiben und nochmal hinterfragen und dann wird wieder ein Post kommen, der etwas aussagekräftiger als dieser hier ist. Eventuell ist in meinem obigen Gedankengang auch noch einen Denkfehler drin, jetzt ist schon spät, aber eine Rückmeldung war mir dennoch wichtig.

Viele Grüße
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
Antworten