Hi ich habe eine Frage. Mein Ziel ist es während ich einen Motor steuere gleichzeitig einen Sensor zu messen. Dafür brauche ich ja eine Multitasking system. wenn ich auf einen Arduino FreeRtos installiere könnte das doch klappen oder? freundliche Grüße sutance!
Hi, kommt auf deinem Steueralgorithmus an. Wenn du den zB mit nem FOC-Algorithmus versuchst hast du ja quasi einen PWM Takt zeit dein Reglung zu berechnen. Was für einen Sensor willst du denn auslesen oder abfragen?
das ist völlig übertrieben. programmier es einfach in c und fertig.
Marc S. schrieb: > das ist völlig übertrieben. programmier es einfach in c und fertig. auch freeRtos wird in C programmiert. > Dafür brauche ich ja eine Multitasking system. nein. Auch ein Multitasking-System macht dinge nacheinander wenn nur eine CPU vorhanden ist. Das gleiche kannst du auch ohne Multitasking erreichen. > ich auf einen Arduino FreeRtos installiere könnte das doch klappen > oder? vermutlich, aber der aufwand wird wohl recht groß sein.
Also wenn ich dann zum Beispiel einen Raspberry mit mehreren Kernen nehmen kann der gleichzeitig den Motor steuern und Sensordaten lesen? Danke
Also wie meine Vorredner schon erwähnt wird es ja eh alles nach einander ausgeführt. Je nach PWM Frequenz und Taktfrequenz des Prozessors müsste es aber locker hinhauen so nen Luftmengen Sensor zB via SPI auszulesen.
sutance schrieb: > Also wenn ich dann zum Beispiel einen Raspberry mit mehreren Kernen > nehmen kann der gleichzeitig den Motor steuern und Sensordaten lesen? klar kann man das, aber das kann man auch ohne mehre Kerne.
Ich mach mal ein sehr grobes Beispiel. Sagen wa mal du hast ne 20 kHz PWM und du willst mit ner FOC regeln. Dh. du musst sehr oft den Strom messen am besten in jedem PWM Takt alle drei Phasenströme. Dafür hast du dann 1 /20kHz Zeit. und jetzt rechne mal wie viele Instruktions du da zwischen bekommst.
FreeRTOS lässt sich vermutlich nur mit erheblichem Aufwand in das Ardunio System einbringen. Ich denek, dass du diese simple Aufgabe auch selbst erledigen kannst. Zum Beispiel so:
1 | unsigned long interval; |
2 | |
3 | void setup |
4 | { |
5 | interval=millis()/10 +1; |
6 | } |
7 | |
8 | void loop() |
9 | { |
10 | query_my_sensors(); |
11 | control_the_motor(); |
12 | |
13 | // wait until end of interval |
14 | while (millis()/10 < interval) {}; |
15 | interval++; |
16 | } |
In der Setup Routine holst du dir die Systemzeit, teilst sie durch 10 und addierst 1. Das nächste Intervall ist dann in 10ms. In der Hauptschleife fragst du zuerst die Sensoren ab und speicherst ihre Zustände in irgendwelchen Variablen. Dann rufst du die Motorsteuerung auf. Sie reagiert womöglich auf die Werte in den Sensor-Variablen. Dann wartest du auf das Ende des ersten Intervalls. Dann incrementierst du den Intervall-Zähler und wiederholst die Hauptschleife. Diese Art von Intervall-Berechnung stellt sicher, dass die Hauptschleife exakt alle 10ms wiederholt wird. Vorgesetzt ist natürlich, dass die beiden aufgerufenen Funktionen selbst nicht mehr als 10ms in Anspruch nehmen. Die Motorsteuerung würde ich als Zustandsautomat (google danach) entwickeln. Ein PID Algorithmus ist damit relativ geradlinig umsetzbar.
Peter II schrieb: > Marc S. schrieb: >> das ist völlig übertrieben. programmier es einfach in c und fertig. > > auch freeRtos wird in C programmiert. ich habe ja nicht gesagt nimm etwas was in C programmiert ist, sondern programmier es in C. ich glaube ein OS macht nur unnötigen overhead bei so einer simplen aufgabe.
Das schreit nach normaler Interruptprogrammierung, nicht nach nem OS. Das wichtige (Echtzeit) Zeug wird in einer hoch priorisierten Interruptroutine ausgeführt, der Rest in main(). Interruptreihenfolge steht im Datenblatt. Ggf. kann man sich noch n void* Array machen und das der Reihe nach durchgehen. Aber die Aufgabe hört sich dafür eigentlich nicht kompliziert genug an.
Arduino, multitasking.... Sowas kann nur von einem Arduinolaner kommen...
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.