ESP32 Kommunikation ohne Zeit zu verlieren?
Hallo zusammen
Ich möchte gerne einen PID Regler mit einem ESP32 im Loop laufen lassen. Den Sollwert möchte ich von aussen über die serielle Schnittstelle oder über ein Webinterface eingeben bez. den Istwert ausgeben. Nun soll der Regler möglichst schnell den Loop durchlaufen um richtig zu regeln. Welche Methode könnte ich nutzen ohne den loop auszubremsen? Wäre eine Schrittweise Eingabe über Tasten und per ISR Pin in den ESP32 besser und würde das System weniger ausbremsen? Ich meine eine Taste um den Wert zu erhöhen und eine um den Sollwert zu verkleinern und diese beide über einen rising Interrupt. Am liebsten würde ich den Sollwert über ein Interface eingeben.
Wie sieht es sonst mit der Kommunikation zwischen mehreren ESP32 aus, wie können diese zusammen kommunizieren ohne viel Zeit zu verlieren?
Wenn ich zwei Tasten für den Sollwert mache, bräuchte ich natürlich noch eine externe Anzeige, was aktuell der Sollwert ist mit einer Segmentanzeige und diese würde ja den Regler auch wieder ausbremsen.
5 Antworten
Es gibt ESP32 mit zwei Kernen... und soweit ich weiß, gibt es Möglichkeiten, Code aufzuteilen - das wäre die ultimative Lösung, um einen Teil verzögerungsfrei zu bekommen und den anderen Ein- und Ausgabe, etc... machen zu lassen.
Mein Herangehen im Allgemeinen wäre:
Ich würde mich zuerst um den Regler kümmern: Was für ein Timing brauchst du zwingend, wie hoch dürfen Latenz/Varianz sein...
Demnach ließe sich entscheiden, ob der Regel z.B. in einem Timing-Interrupt laufen sollte oder nicht.
Ansonsten könnte man auch locker in der Loop noch Tasten abfragen, eine Software-Entprellung realisieren und wenn man es geschickt anstellt sogar zeitlich invariant umsetzen - also gleiche Ausführungszeit egal ob Taste gedrückt wurde. Wenn die paar Befehle (bei 180 MHz Taktgeschwindigkeit) bei effizienter Umsetzung stören, scheitert das Projekt eh. Jeder Interrupt ist langsamer/verzögert mehr.
Das genaue Timing der loop ist möglicherweise sowieso nicht vorhersehbar (wobei ich denke, dass bei 2 Kernen die Loop exklusiv zur Verfügung steht und WLAN, etc... vom anderen Kern behandelt wird)
Ich glaube, du schießt mit Kanonen auf Spatzen.
Ein ESP ist so schnell, der wird sich bei der Aufgabe die meiste Zeit langweilen.
Wenn es nur um die Regelung geht, sollte ein Attiny locker reichen und selbst der wird nicht ausgelastet sein.
Zuerst sollte man sich fragen, welche Schaltgeschwindigkeit notwendig ist, weil das natürlich eine Preisfrage sein kann.
Ich habe hier gerade so einen ähnlichen Mikrocontroller, mit dem ich ein Signal in 320us auslese und darauf reagieren kann, aber um einen Motor zu regeln, muss das doch nicht so schnell laufen. Wenn man Tasten benutzen will, beispielsweise bedeutet es, dass jemand die Tasten drückt, mit seiner Reaktionszeit (eines Zockers) von 300 ms? Oder tausendfach langsamer als mit serieller Kommunikation (I2C).
Stellt sich die erste Frage, ob Du nicht ein bisschen zu viel Wert auf die Regelgeschwindigkeit legst... Was musst Du regeln, dass es auf jede Millisekunde ankommt, dass Du jegliche minimalste Verzögerung ausschließen musst/willst?
Bist du noch in der Planung, oder hast du schon Versuche gefahren? Hast du die Regelgeschwindigkeit gemessen, welche effektive Verzögerung du tatsächlich hast?
Um einen motor zu regeln brauchts einen Frequenzumformer. Der regelt die Drehzahl. Wenn du das Drehmoment regeln willst bräuchtest du ein schaltgetriebe. Nur mal so am rande. Und ein FU reagiert nahezu Verzögerungsfrei. Kann man in den parametern einstellen.
ich bin noch in der Planung und wollte so nur wissen ob der ESP32 dafür geeignet ist. Ich probiere den Regler gerade mit Simulink auszulegen.
Ich verstehe Dein Problem überhaupt nicht.
Um einem Motor in irgendeiner Weise zu regeln, kommt es doch nicht auf microSekunden an.
ich möchte eine möglich grosse Regelgeschwindigkeit haben. Ich möchte ein Drehmoment eines Motors regeln. Die Abweichung sollte so kurz wie möglich sein. Der Regler darf auch wenig Überschwingen.