hallo klaus,
hier ein paar antworten zu den meisten deiner fragen.
Zitat
Ist es zur Spannungsmessung des DC-Motors erforderlich im Interrupt beide Motoranschlüsse zu messen? Über die Freilaufdiode der H-Brücke ist doch die Spannung auf der Low-Seite immer nur 0,7V?
also ich mache die back-EMF steuerung beim ESP32 nicht in interrupts, sondern in einem task. der grund ist folgender: beim ESP32 können interrupt routinen nur aus dem RAM ausgeführt werden. du kannst zwar deine funktionen ins RAM mappen, aber sobald du von dort aus ESP-library funktionen aufrufen willst (z.B. PWM steuern), crasht das ding. scheinbar kann er nicht alle library funktionen ins RAM mappen.
der ESP32 ist nunmal keine hard-realtime-fähige maschine, sondern eher eine "kommunikationsmaschine" fürs IOT und so... das merkt man auch daran, dass zum beispiel der ADC von miserabler qualität ist, oder dass die hardware-peripherie-funktionalität verglichen mit üblichen mikrokontroller (wie z.B. ARM Cortex-M) sehr beschränkt ist.
aber nun zurück zu deiner frage: ja, ich würde immer beide motoranschlüsse messen. dies führt zu genaueren und somit stabileren resultaten als die andere motorpol-spannung nur anzunehmen. und vorallem wenn du auch wert auf langsamfahrt setzt, wo die BEMF-spannung um 0V herum tanzt, hättest du sonst eine sättigung und somit einen drift.
Zitat
Leidet die Spannungsmessung des ohnehin nicht besondern tollen ADC, wenn man zwei Spannungen mißt und darum den Multiplexer ständig aktiv hat?
der wurde ja dafür gemacht :-)... wegen des schlechten ADCs habe ich ein glaub ich 12-faches oversampling pro motorpol gemacht, aperioidisch, einfach aneinanderfolgend, jeweils abwechslungsweise beide motorpole (also total 24 ADC messungen), und bei jedem wechsel die differenz zum vorigen wert berechnet und aufsummiert.
Zitat
Hast Du die Versorgungsspannung direkt gemessen - oder wäre auch eine Messung in der On-Phase des PWM ausreichend?
die versorgungsspannung messe ich separat. starke variationen der versorgungsspannung kann man beim regler als feed-forward einfliessen lassen, um die drehzahlvariation (wegen versorgungsspannungsvariation) zu kompensieren.
Zitat
Würdest Du den Schaltplan und die Dimensionierung mit uns teilen?
hier die BEMF-motortreiber-schaltung mit anschluss zum ESP32. der rest der schaltung ist glaub ich nicht relevant...
Zitat
Zu den Tasks: Ich habe meine Hauptapplikation auf Core1 laufen. Der Drehzahlregler läuft auf Core0, wie auch die ISR von Core0 bedient wird. Kann ich nachprüfen, ob Teile einer Bibliothek, z.B. WiFi, aus dem Core1 auf dem Core0 gestartet werden? Deine Software läuft doch vermutlich auch auf beiden Cores, richtig?
ich habe mich auf die voreingestellte konfiguration beschränkt: wifi in einem core, applikation im anderen.
Zitat
Zum Regler: Wie ist Deine Erfahrung: Reicht PI oder muss man PID implementieren? Ich denke, wenn man ohnehin Anfahr- und Bremsverzögerung haben will, kann man sich den D-Teil sparen.
aus meiner sicht hat dies keinen zusammenhang. man muss sich das in zwei stufen vorstellen:
1) der empfangene sollwert ändert sich sprunghaft. dieser führt in ein "rampenmodul", welcher die sprünge in lineare rampen umwandelt.
2) dieses rampenbehaftetes signal geht zum eingang des PID-reglers. der regler versucht mit seinen PID-parameter so gut wie möglich dieses signal zu folgen. und dies in einem um magnituden schnelleren zeitrahmen als die anfahr- und bremsverzögerung selber.
somit dienen die PID-werte zur akkuraten "verfolgung" des rampensignals, ganz unabhängig wie steil oder flach die nnfahr- und bremsverzögerungsrampen sind.
also ich würde den D-teil trotzdem implementieren, auch wenn er später auf 0 gesetzt wird.
Zitat
Wie oft läuft Dein Regler? Alle paar Millisekunden oder mit maximaler Geschwindigkeit des Tasks? Und was wäre dann die Zeitkonstante?
bei mir läuft er periodisch alle 10ms. ich denke der PID-regler wird viel einfacher, als wenn dieser variable samplerate unterstützen soll.
Zitat
An die automatische Optimierung der Reglerparameter wage ich mich noch nicht heran. Hast Du vielleicht Literatur zu dem Thema?
ich bin da sehr pragmatisch und weniger akademisch vorgegangen: mit P wert langsam hoch, bis es instabil wird, dann 50% zurück, dann dasselbe mit I wert...
nun ja, der regler ist eins, aber dann gibt es noch tausend andere parameter zum tunen und justieren, von feed-forward, über variables PID-parameter-morphen in funktion der geschwindigkeit, PWM frequenz, timing für die BEMF-abtastung... und und und... und vorsicht, du bewegst dich da in eine eigene kleine welt... das ganze wird schnell mal zu einem lebenswerk. hauptsache es macht spass .
gruss
oli4