Forum: Mikrocontroller und Digitale Elektronik (Cortex-M3 VS Raspberry) Für die Steuerung


von Praktikant (Gast)


Lesenswert?

Hi Lieber Entwickler,

Nach eine lange Suche hier konnte ich mich leider nicht weiter schlau 
machen.

Ich habe ein Steuerungsgerät für mein Praktikum zu realisieren, der ca. 
40 digitale I/O für einige Sensoren, einen CANbus um mit einige 
Komponente zu kommunizieren, ADC und einen DAC besitzen muss.

Als Ideen hatte ich zwei:


-Entweder mit einem Raspberry, der einige MHZ (700) Leistung unter dem 
Hub hat. und dann voll ausgestatet mit einem OS. Dafür muss ich alle 
dieser Expander (für die GPIO, für Canbus, Für ADC..etc) extra 
ausstaten, und dazu auch die Software.

-zweite Idee wäre mit einer MCU (beispielweise Cortex-M3). Denn er 
besitze all dise Schnittstellen. Da benötigte man keine Expander dazu.


Jetzt bleibt mir die Frage mit der Echtzeit Offen.

ist das Raspberry so leistungsfähig, um die funktionen im echtzeit 
auszuführen ??

wie könntet ihr die zwei Idee bewerten ??

von Martin K. (martinko)


Lesenswert?

Kommt auf Deine "Echtzeitbedingungen" an.

Gruß Martin

von Bernhard (Gast)


Lesenswert?

Mein Raspberry Pi ist heute gekommen, doch ich konnte das Teil bisher 
noch nicht ausprobieren. Ich hab selbst mal überlegt Raspberry Pi für 
Echtzeitanwendungen einzusetzen, bin aber dann relativ schnell wieder 
davon abgekommen. Sicher, es mag möglich sein das Ding irgendwie 
echtzeitfähig zu machen, doch da handelst du dir vermutlich mehr 
Probleme ein, als es tatsächlich bringt. Das Raspberry Pi Board ist zwar 
toll, aber meines Erachtens (zumindest was ich bisher gelesen habe) 
einfach nicht für Echtzeitanwendungen gemacht.

Ich würde da eher zu Cortex M3 (STM32 kann ich zum Beispiel empfehlen) 
raten. Meines Erachtens ist die Einarbeitungszeit in die 32bit uC von ST 
jedoch schon ziemlich hoch. Falls du nur eine einfache Anwendung mit 
wenig Rechenaufwand und vielen IOs realisieren musst, würde ich dir eher 
zu nem AVR Derivat raten. Ansonsten solltest du da schon ein bisschen 
Zeit einrechnen (je nachdem wie gut du dich mit Mikrocontrollern 
auskennst).

von Praktikant (Gast)


Lesenswert?

Für die Steuerung sind unter andern auch einen Regler , der zwei Motoren 
(abhähig von ihren Drehzahl) regelt zu implementieren.

Ich habe einen einfachen Blinker Programm für Raspberry geschrieben, der 
einen GPIO_PIN toggelt danach mit einem Logikanalyzer das Signal 
angeschaut.

was mir aufgefallen ist, dass sobald das RP etwas im Hintergrund tut, 
wird das Signal nicht mehr regelmässig. und tauchen große Abstände im 
Signal auf.

von Max G. (l0wside) Benutzerseite


Lesenswert?

Der Raspberry hat intern auch einen ARM-Kern, insofern ist das relativ 
egal. Relevant ist für Echtzeitanforderungen eher das verwendete 
Betriebssystem, und da sieht es bei normalem Linux (Debian & Co) nicht 
sonderlich toll aus.

Schau mal nach RTLinux auf dem RPi.

Oder guck nach dem Beagleboard, siehe auch 
https://groups.google.com/forum/#!msg/beagleboard/i1YGBYbMYuk/oZnxT6I5W54J 
- hier hat wohl jemand erfolgreich RTLinux drauf zum Laufen gebracht.

Max

von scheri (Gast)


Lesenswert?


von (prx) A. K. (prx)


Lesenswert?

Etwas vereinfacht: Der CM3 ist gut beim Steuern von Hardware mit vielen 
Pins, und schlecht bei komplexeren TCP/IP Services und umfangreichen 
Daten. Beim RPi ist es genau umgekehrt.

von Frank K. (fchk)


Lesenswert?

Praktikant schrieb:
> Hi Lieber Entwickler,
>
> Nach eine lange Suche hier konnte ich mich leider nicht weiter schlau
> machen.
>
> Ich habe ein Steuerungsgerät für mein Praktikum zu realisieren, der ca.
> 40 digitale I/O für einige Sensoren, einen CANbus um mit einige
> Komponente zu kommunizieren, ADC und einen DAC besitzen muss.
>
> Als Ideen hatte ich zwei:
>
>
> -Entweder mit einem Raspberry, der einige MHZ (700) Leistung unter dem
> Hub hat. und dann voll ausgestatet mit einem OS. Dafür muss ich alle
> dieser Expander (für die GPIO, für Canbus, Für ADC..etc) extra
> ausstaten, und dazu auch die Software.
>
> -zweite Idee wäre mit einer MCU (beispielweise Cortex-M3). Denn er
> besitze all dise Schnittstellen. Da benötigte man keine Expander dazu.
>
>
> Jetzt bleibt mir die Frage mit der Echtzeit Offen.
>
> ist das Raspberry so leistungsfähig, um die funktionen im echtzeit
> auszuführen ??
>
> wie könntet ihr die zwei Idee bewerten ??

Erstmal bewerte ich Deine Rechtschreibung mit 4-.

Der Raspberry ist populär, aber nicht das einige Linux-Board. Für Dich 
wäre der BeagleBoneBlack viel besser geeignet, weil er viel mehr IOs 
hat. Plus: er ist auch sonst schneller.

http://beagleboard.org/Products/BeagleBone%20Black

Was ist bei Deiner Anwendung wichtig?

- Brauchst Du eine hohe Rechenleistung? Musst Du viele 
Gleitkommaoperationen durchführen? Dann ist ein Linux-Board besser?

- In der Automobilindustrie gibt es oft die Anforderung, dass jedes 
CAN-Gerät innerhalb von n Millisekunden (mit n<<1000) nach dem 
Einschalten betriebsbereit und auf CAN Messages reagieren können muss. 
Das schaffst Du mit einem Linux-Board und einem Standard-Linux niemals. 
Da hast Du Bootzeiten von einigen 10 Sekunden. In diesem Fall musst Du 
ein Mikrocontrollerboard verwenden, das ein prozessorinternes Flash hat, 
aus dem der Code direkt ausgeführt wird. Die großen ARM11 und Cortex 
A8/A9 haben das nicht, und die findest Du daher nicht in diesen 
Anwendungen.

- Musst du zwingend ein festes Zeitraster einhalten, egal was auch immer 
passiert? Das nennt sich "harte Echtzeit". Dafür ist Linux nicht 
geeignet. Nimm ein richtiges Echtzeitbetriebssystem (RTOS) und suche die 
Hardware dann nach den Anforderungen des RTOS aus. Das wäre ein Punkt 
für den Mikrocontroller.

- Brauchst Du schnelle IOs? Ist es wichtig, dass der Prozessor die Pins 
schnell schalten kann? Dann kannst Du nicht mit IO-Expandern arbeiten, 
dann müssen es GPIO-Pins des Controllers sein. Das schließt dann den 
Raspberry Pi aus, weil der nur wenige Pins dafür über hat. Und bei Linux 
wirst Du Dich dann mit Kernelprogrammierung auseinandersetzen müssen, 
was Dein Projekt deutlich schwieriger macht. Ohne Linux hast Du es hier 
einfacher.

- Musst Du viel auf dem CAN-Bus senden oder empfangen? Werden hohe 
Datenraten benötigt? Wird ein definiertes Zeitraster benötigt? Hier 
schneidet der Raspbery Pi sehr schlecht ab. Die CAN-Interfaces, die es 
dafür gibt, laufen alle über SPI, und der in diesen Lösungen verwendete 
Microchip SPI-CAN-Controller ist dafür nicht die optimale Lösung. Der 
BeagleBoneBlack hat glaube ich CAN im Mikrocontroller schon eingebaut - 
Du bräuchtest dann nur noch einen Transceiver. Und wenn Du einen Cortex 
M3/M4 oder einen PIC32 nimmst, dann wählst Du natürlich einen, der CAN 
schon eingebaut hat.

Im großen und ganzen kann ich Dir sagen:

1. Nicht den Raspberry Pi nehmen. Der ist zwar weit verbreitet, und er 
ist billig, aber er ist für das, was Du machen willst, nicht gedacht und 
nicht geeignet. Es gibt genügend andere Linux-Boards, die Deine 
Anforderungen besser erfüllen - falls Du überhaupt Linux verwenden 
willst und verwenden kannst.

2. Überlege, ob Du die hohe Gleitkommaleistung der Linux-Boards wirklich 
brauchst. Am besten ist es, wenn Du alles mit Ganzzahlen oder 
Festkommazahlen machst. Das schafft dann auch ein Cortex M3/M4 oder 
PIC32.

fchk

von seennoob (Gast)


Lesenswert?

Hallo

Praktikant schrieb:
> Für die Steuerung sind unter andern auch einen Regler , der zwei Motoren
> (abhähig von ihren Drehzahl) regelt zu implementieren.

Wie sind die Motoren anzusteuern (PWM) ? Welche Zykluszeit wird benötigt 
? Wie soll die Geschwindigkeit ausgenommen werden (via Impuls oder AB 
Signal) ?

Ich würd dir wennst in Richtung Cortex M3/M4 gehst den TI TIVA C ans 
Herz legen. Hat ein gutes Preis/Leistungsverhältnis.

näheres siehe Datenblatt:
http://www.ti.com/lit/gpn/tm4c123be6pz

von Praktikant (Gast)


Lesenswert?

@Frank

>Erstmal bewerte ich Deine Rechtschreibung mit 4-.

Ich kann Ihnen nur zustimmen.
Als ausländischer Student quäle ich mich immer noch mit der schwere 
deutsche sprache :)

Aber für Ihre (Ausführliche Bewertung), die ich GENAU gebraucht habe. 
bin ich Ihnen sehr dankbar.

von Praktikant (Gast)


Lesenswert?

@ seennoob

>Wie sind die Motoren anzusteuern (PWM) ? Welche Zykluszeit wird benötigt
>? Wie soll die Geschwindigkeit ausgenommen werden (via Impuls oder AB
>Signal) ?

Die Motoren werden prinzipiell mit einem Frequenzumrichter gesteuert. 
Der FU konnte man entweder mit einer spanung 0...10V DC bzw. +/- 10V, 
oder per CAN-Bus.
Obwohl ich für die erste Option noch tandiere...

von seennoob (Gast)


Lesenswert?

Hallo Praktikant,

Ich hoffe Ihnen ist bewusst welche Einschränkungen es birgt wenn man 
Analogwerte zum Steuern verwendet. Man ist beschränkt auf die 2 Motoren. 
Bei kann könnte man sich die Vorteile eines Buses zunutze machen.

Da würde es sicher auch fertige HW geben in Form von einem Evalboard bei 
den kleinen Cortex M3/M4.

Oder man nimmt sowas wie den TI AM3359 im ICE-Board.

Grüße

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.