Um den Unterschied zwischen harter und weicher Echtzeit zu zeigen habe ich es versucht mit einem Servo, weil der angeblich stark zittert wenn keine harte Echtzeit verwendet wird, aber der Versuch zeigt mit einem Lowlatency-Kernel (Linux) nichts, kein Zittern, selbst wenn Hyper-Threading, CPU frequency scaling und CPU sleep States aktiviert sind. Messungen mit dem Programm Cyclictest und mit einem Oszi zeigen das es da zwar Verzögerungen von mehreren Millisekunden gibt, während die mit einem RT-Kernel unter 40 µs liegen, aber diese Ausreißer sind selten. Gibt es keine Demonstratoren mit denen man die zeigen kann?
Vielleicht verwendest du den falschen Servo. Nimm mal einen billigen analogen.
Hast Du eine Lageregelung im Stillstand (sprich Motor bewegt sich nicht) und ohne Störung probiert? Wenn ja, dann wirst Du normalerweise nicht mal 10-50ms merken. Wenn der Motor nur steht, kannst Du sogar die Regelung abschalten und nur das PWM Signal gleich lassen und es passiert nicht wirklich was. Außerdem ist dein Zittern von der "Motorgröße" abhängig. Wenn der Motor zu träge ist, dass er bei deinen Unterschieden im Regeltakt nicht bewegt, passiert auch nichts. Wie steuerst Du eigentlich deinen Servo an? Ist da ein fertiger Servotreiber dazwischen? Dann hat der wenigstens noch eine Stromregelung nach gelagert, dann wirst Du noch weniger ein Zittern haben.
Erwin M. schrieb: > Um den Unterschied zwischen harter und weicher Echtzeit zu zeigen habe > ich es versucht mit einem Servo, weil der angeblich stark zittert wenn > keine harte Echtzeit verwendet wird, aber der Versuch zeigt mit einem > Lowlatency-Kernel (Linux) nichts, kein Zittern, selbst wenn > Hyper-Threading, CPU frequency scaling und CPU sleep States aktiviert > sind. Was genau hast du da programmiert? Grundsätzlich: Ein Servo muss auch unter rauhen Bedingungen im Modellbau zurecht kommen. Ein Servo, dass in einem Flugmodell bei den kleinsten Unregelässigkeiten wie wild zu zittern anfängt, ist in der Praxis unbrauchbar.
Pepe schrieb: > Hast Du eine Lageregelung im Stillstand (sprich Motor bewegt sich nicht) > und ohne Störung probiert? Ja, mit RT sollte nichts zittern, ohne RT deutlich. > Wie steuerst Du eigentlich deinen Servo an? Einfach ein Pin vom Parallelport, genauer ein Daten-Pin. Das Programm ist das Squarewave-example: https://rt.wiki.kernel.org/index.php/Squarewave-example Mit Frequenzteilung für alle 12 Ausgangspins, in der out-Funktion die bei jedem Aufruf den Zähler u64_state inkrementiert: // D5: 200 / cycle if ( (u64_state/100) bitand 1 ) // at the second half of the cycle set the bit to high byte0 or_eq 0x20; // set BIT5 Bei D5 erhalte ich so die für einen Servo passenden 100 Hz. Ausprobiert habe ich auch 10 kHz, 5 kHz, 2 kHz, 500 Hz, 250 Hz, 40 Hz, 20 Hz, 8 Hz, 4 Hz, 1.5 Hz, 0.5 Hz von den anderen der 12 Ausgangs-Pins aber ohne Änderung.
Erwin M. schrieb: > Gibt es keine Demonstratoren mit denen man die zeigen kann? Schließ doch mal einen Lautsprecher an und lass ein Rechtecksignal mit etwa 1 kHz generieren. Da wirst du wahrscheinlich einen deutlichen Unterschied hören. Auch softwaregenerierte Schrittmotorsignale sind ziemlich anspruchsvoll, was das Echtzeitverhalten der Software betrifft. Beim Servo siehst du deswegen nicht viel, weil da – explizit oder implizit – ein Tiefpass darin steckt, der mindestens die 20 ms Periodendauer des PWM-Signals überbrücken muss.
Yalu X. schrieb: > Erwin M. schrieb: >> Gibt es keine Demonstratoren mit denen man die zeigen kann? > > Schließ doch mal einen Lautsprecher an und lass ein Rechtecksignal mit > etwa 1 kHz generieren. Das war mein erster Ansatz, aber unter gleichen Bedingungen, kein Hyper-Threading, CPU frequency scaling und CPU sleep States deaktiviert, ist kein Unterschied zu hören. Erst bei 10 kHz und unter Last wie einen Kernel kompilieren hört man ohne RT deutlich mehr Rauschen und auch Knacken, aber viel leiser als der Grundton, wobei man bei 10 kHz die Oberwellen (30, 50, ... kHz) nicht hört. Da müsste ich noch einen Tiefpass verwenden, um nur das Knacken und etwas Rauschen rauszufiltern.
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.