Forum: Mikrocontroller und Digitale Elektronik Zeitkritische Operationen und USB auf STM32(F4)


von GT (Gast)


Lesenswert?

Hallo zusammen,

ich habe eine kurze Frage zu einem anstehenden Projekt, zu der ich 
leider bisher keine klare Antwort finden konnte und mich selber zu wenig 
auskenne.
Ich würde gerne einen STM32F4 für eine zeitkritische Aufgabe benutzen, 
der gleichzeitig per USB mit einem Computer kommunizieren müsste. Dabei 
soll über ein Timer-Event im (schlimmsten Fall, vorhersehbar) mit 
Abständen von 1us ~20 Rechenzyklen an Code ausgeführt werden. 
Zwischendurch sollte jedoch immer viele Millisekunden Zeit sein um 
eventuell anfallende Daten zu übertragen. Kann dieser Interrupt eine 
höhere Priorität haben als der USB-Interrupt, oder stört das die 
Kommunikation? Die nötige Bandbreite sind jedenfalls nur max. 100 Byte 
pro Sekunde.
Ich kenne mich leider noch nicht sehr gut mit den STM32-Controllern aus, 
daher wäre ich über eine kurze Antwort (falls es die gibt) dankbar, ob 
das überhaupt funktionieren kann, oder ob ich die USB-Kommunikation und 
die Zeitkritische Steuerung über zwei verschiedene Controller laufen 
müssen.

Schöne Grüße,
GT

von rp6conrad (Gast)


Lesenswert?

Den F4 soll das locker schaffen, aber sind da noch andere Wunschen, wie 
gross darf der Latenz sein das die Daten uebertragen werden, muss dan 
noch etwas anderes laufen (adc, uart, i2c....).

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

GT schrieb:
> Kann dieser Interrupt eine
> höhere Priorität haben als der USB-Interrupt

Ja.

GT schrieb:
> der stört das die
> Kommunikation?

Nein.

Bei der Enumeration gibt es bestimmte Timeouts, die genauen Werte hab 
ich grad nicht parat, aber die sind in der Größenordnung vieler 
Millisekunden. Für die normale Datenübertragung bei Bulk-Transfers kann 
die Software praktisch beliebig lange brauchen; die Hardware hält den 
Host solange "hin" bis die Software Daten geliefert hat.
Notfalls kannst du deine zeitkritische Aufgabe ja nur nach der 
Enumeration beginnen.

GT schrieb:
> mit
> Abständen von 1us ~20 Rechenzyklen an Code ausgeführt werden

Damit sind 20 MHz schon "verbraucht". Mit Exception-Ein/Austritt könnte 
das je nach CPU-Frequenz und Flash-Latenz schon eng werden...

von Jim M. (turboj)


Lesenswert?

GT schrieb:
> Kann dieser Interrupt eine
> höhere Priorität haben als der USB-Interrupt, oder stört das die
> Kommunikation?

USB Interrupts sind i.A. überhaupt nicht zeitkritisch - denn den 
zeitkritischen Teil vom USB Protokoll macht die Hardware (USB 
Peripherial).

Ausnahme sind Hacks wie VUSB, weil da alles in Software gemacht wird und 
so binnen µs reagiert werden muss.

GT schrieb:
> Dabei
> soll über ein Timer-Event im (schlimmsten Fall, vorhersehbar) mit
> Abständen von 1us ~20 Rechenzyklen an Code ausgeführt werden.

Das sind verdammt wenige Zyklen - da schaut man mal besser nach ob man 
das clever in Hardware lösen kann.

von Frank K. (fchk)


Lesenswert?

Warum ist die Wahl auf den STM32F4 gefallen? Mangelnde Marktübersicht?

Für so etwas wäre beispielsweise ein LPC43xx besser geeignet.

https://www.nxp.com/products/processors-and-microcontrollers/arm-based-processors-and-mcus/lpc-cortex-m-mcus/lpc4300-cortex-m4-m0:MC_1403790133078#/

Der hat einen Cortex M4 als Haupt-CPU - hier würde dann die 
USB-Kommunikation und das Datenmanagement laufen, und zusätzlich noch 
einen Cortex M0, der dann Deinen 1us-Task ausführen könnte. In dieser 
Serie gibt es sogar Versionen mit zwei M0.

fchk

von GT (Gast)


Lesenswert?

Vielen Dank für die Antworten =)
Wenn nur die Enumeration zeitkritisch ist, dann bin ich ja beruhigt.

Frank K. schrieb:
> Warum ist die Wahl auf den STM32F4 gefallen? Mangelnde Marktübersicht?

Sicherlich. Ich habe schon wegen eines anderen Prpjekts mit einem 
STM32F4-Discovery Board herumgespielt und ganz gute Erfahrungen damit 
gemacht. Ich bin natürlich dankbar über alternative Vorschläge. 
Ursprünglich hatte ich schon über einen FPGA nachgedacht, da die 
"zeitkritische Aufgabe" lediglich eine art PWM an ca. 30 Pins ist. Da 
bin ich mir aber nicht sicher, ob der Aufwand mich in FPGAs einzulernen 
sich lohnt.

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

GT schrieb:
> da die
> "zeitkritische Aufgabe" lediglich eine art PWM an ca. 30 Pins ist.

Die STM32 können mit den Timern und deren Synchronisation und DMA 
ziemlich komplexe Signalformen automatisch in Hardware erzeugen. Andere 
Controller können das auch noch besser. Vielleicht lässt sich damit 
deine Aufgabe lösen, wäre besser als in Software.

von Jim M. (turboj)


Lesenswert?

GT schrieb:
> da die
> "zeitkritische Aufgabe" lediglich eine art PWM an ca. 30 Pins ist.

Je nachdem wieviel Jitter erlaubt ist kannste das durchaus mit Software 
(Timer IRQ Handler) machen.

Man muss nur daran denken dass auch ein IRQ mit allerhöchster Prio ein 
Tail-Chaining machen darf, und so weniger Take als üblich benötigt.


Viele GPIOs kann man mit Timer+DMA ansteuern (Timer triggert DMA, DMA 
schreibt GPIOx->BSRR). Da hat man wesentlich weniger Jitter und CPU 
Last, braucht aber RAM fürs DMA.

Bei >16 Pins braucht man IMHO mindestens 2 DMA Channels, denn die GPIO 
Register beim STM32 fassen nur jeweils 16 Pins zusammen.

von GT (Gast)


Lesenswert?

DMA klingt super, das passt perfekt für meine Anwendung! Dann steht ja 
allem weiteren nichts mehr im Wege =)

von Pandur S. (jetztnicht)


Lesenswert?

Zeitkritisches Zeug auf dem Controller, aber der PC nur zur Kontrolle, 
Parametrisierung und Visualisierung. Der zeitkritische Prozess muss ja 
auch weiterlaufen, wenn das Kabel abgezogen ist, oder abgezogen wird.

Plane das Ganze so, dass der PC da sein kann, oder auch nicht.

von GT (Gast)


Lesenswert?

Zitronen F. schrieb:
> Zeitkritisches Zeug auf dem Controller, aber der PC nur zur
> Kontrolle,
> Parametrisierung und Visualisierung. Der zeitkritische Prozess muss ja
> auch weiterlaufen, wenn das Kabel abgezogen ist, oder abgezogen wird.
>
> Plane das Ganze so, dass der PC da sein kann, oder auch nicht.

Genau so hatte ich es vor. =)

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.