Forum: Mikrocontroller und Digitale Elektronik Kleiner Demonstrator-Aufbau für harte Echtzeit?


von Erwin M. (nobodyy)


Lesenswert?

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?

von Ulrich F. (Gast)


Lesenswert?

Vielleicht verwendest du den falschen Servo.
Nimm mal einen billigen analogen.

von Pepe (Gast)


Lesenswert?

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.

von Karl H. (kbuchegg)


Lesenswert?

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.

von Erwin M. (nobodyy)


Lesenswert?

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.

von Yalu X. (yalu) (Moderator)


Lesenswert?

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.

von Erwin M. (nobodyy)


Lesenswert?

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
Noch kein Account? Hier anmelden.