Forum: Mikrocontroller und Digitale Elektronik Welcher Cortex M3 Controller für BLDC und Ethernet


von unknown_soldier (Gast)


Lesenswert?

Ich habe bisher schon einige Projekte mit den AVR's realisiert, jedoch 
möchte ich einige zukünftige Projekte eher mit einem größeren uC 
realisieren, dazu gehört unter anderem eine kleine Heizungssteuerung 
o.ä. welche über ein Webinterface gesteuert werden soll, sowie ein BLCD 
Motorcontroller für ein Pedelec. Meine Recherchen haben ergeben, dass 
sich dafür Cortex M3 Controller eignen würden und diese auch relativ 
weit verbreitet sind. Nun stellt sich für mich die Frage ob ich mich 
eher für die NXP LPC17xx oder für die STM3 Controller entscheiden 
sollte. Da ich im Bereich der 32bit uC bisher keinerlei Erfahrung habe, 
wäre für mich interessant welchen Hersteller ich bevorzugen sollte, bzw. 
wo der Einstieg am leichtesten fällt.

Da ich im Moment eher zu NXP tendiere, habe ich als eval Board für den 
Einstieg an das das "LPC1769 LPCXpresso" sowie das dazugehörige 
Baseboard gedacht. Ist dieses und die dazugehörige Programmierumgebung 
Code Red zu empfehlen, oder sollte man anders beginnen.

Dass es von NXP nur relativ große Gehäuse gibt stört mich nicht.
Wenn ich allerdings in die Datenblätter schaue, dann sehen die eher wie 
Kurzzusammenfassungen aus. Deshalb frage ich mich, ist z.B. der Zugriff 
auf den ADC so ein Register gefrickel wie bei den AVR's, oder eher wie 
bei den Arduinos.

Ich hoffe ihr könnt mir bei meiner Entscheidung ein bisschen 
weiterhelfen.

von Eumel (Gast)


Lesenswert?

Für alles was du vorhast reicht ein AVR locker aus.

unknown_soldier schrieb:
> der Zugriff
> auf den ADC so ein Register gefrickel wie bei den AVR's, oder eher wie
> bei den Arduinos.

Dadrüber würde ich nochmal ganz scharf nachdenken.


Wenns denn wirklich ARM sein muss: Das neue TI Launchpad.

von unknown_soldier (Gast)


Lesenswert?

Bei dem Preis kann man sich das TI Launchpad sicherlich zulegen, jedoch 
würde ich schon gerne den Einstieg in die 32 Bit uC wagen.

Ob man das jeweilige Projekt auch auf einem 8 Bitter hätte umsetzen 
können, oder nicht, ist mir dabei relativ egal. Ich habe auch bisher 
nicht darauf geachtet immer den kleinst möglichen uC für das 
entsprechende Projekt zu verwenden, sondern hatte 3 oder 4 Standard 
Typen.

von Eumel (Gast)


Lesenswert?

Das neue Launchpad, mein Hübscher. Das hat einen ARM drauf. Google wird 
dir mehr erzählen.

von unknown_soldier (Gast)


Lesenswert?

Sorry, war erst beim alten Launchpad. Leider wird es wohl noch ein 
bisschen dauern, bis das neue ausgeliefert wird. Außerdem wäre mir 
Ethernet mit möglichst wenig (unnötigem) Aufwand wichtig. Gibt es 
weitere Punkte die für TI sprechen, außer das fast geschenkte Launchpad?

von Eumel (Gast)


Lesenswert?

Ja, ich bin verliebt in TI. Und zwar weil:
- Die Datenblätter gut sind
- Die andere Dokumentation ebenso
- Die Tutorials für das alte Launchpad waren ziemlich gut, ich erwarte, 
dass die neuen es ebenfalls sind.

von Dr. Sommer (Gast)


Lesenswert?

unknown_soldier schrieb:
> Deshalb frage ich mich, ist z.B. der Zugriff
> auf den ADC so ein Register gefrickel wie bei den AVR's, oder eher wie
> bei den Arduinos.

Autsch. Die Arduino's verwenden AVR's. Und verpacken nur das "Register 
Gefrickel" in hübsche Libraries. Da die ARM's wesentlich komplexer sind, 
ist das bei denen auch die Registerschieberei um einiges schwieriger, 
zumal die Dokumentation nicht immer so perfekt wie bei Atmel ist... Die 
Timer der STM32 sind zB sehr mächtig, das erfordert kompliziertere 
Ansteuerung... Es gibt allerdings auch da Wrapper-C-Methoden (Bei STM32: 
StdPeriphal library), aber die macht eigentlich nur den Code schöner, 
wirklich einfacher wirds dadurch auch nicht...

von unknown_soldier (Gast)


Lesenswert?

Ich hatte mich etwas missverständlich Ausgedrückt bzgl. AVR und Arduino. 
Letztendlich wollte ich wissen ob es fertige Funktionen gibt, die man 
nur aufrufen muss, oder ob es vergleichbar mit einem AVR Programm in C 
ist. Aber diese Frage ist ja nun beantwortet.

von Juergen G. (jup)


Lesenswert?

Wenn Dein Trend zu NXP geht dann schau Dir doch den mbed an.

Da ist auch ein PHY mit drauf und ein MagJack reicht um Ethernet zum 
laufen zu bringen.

Der cloud compiler ist kein Argument mehr, es geht auch CodeSourcery
auf dem heimischen Computer.

Ich habe einige Projekte auf dem mbed entwickelt, und lasse es dann auf 
einer eigenen Platine laufen.

Ju

von M. K. (avr-frickler) Benutzerseite


Lesenswert?

Also von NXP kann ich nur abraten, bin gerade selbst damit am 
rumspielen. Die Dokumentation ist mehr als unterirdisch. Der LPC-Link 
ist nicht wirklich nützlich, ich habe es jetzt schon einige Male gahbt 
das ich den Prozessor nicht mehr flashen mit LPC-Link konnte. Musst dann 
auf den Bootloader ausweichen.

Die Entwicklungsumgebung ist ganz OK hat aber auch so ihre 
Schwachstellen. Ich durfte Sie schon einmal neu installieren weil ich 
ein Simples LED-Blink Progrämmchen nicht mehr mit LPC-Link flashen 
konnte, von wegen Codesize > 8K beim Start aber die Meldung bekommen das 
die Version "Fully Activated" ist.

Wenn du nicht weist wie man ein Linkscript schreibt, bringen dir 
CodeSourcery und Co. leider auch nichts, weil das Linker-Script nicht 
bei den Beispielen von NXP dabei ist.

Bei den Beispielen musst du auch aufpassen das du die richtige CMSIS 
nimmst sonst kann es dir passieren das du die Beispiele erst einmal 
nicht kompiliert bekommst weil sich einige Bezeichner/Funktion geändert 
haben, z.B. aus SystemClockUdpdate() wurde SystemCoreClockUpdate() oder 
beim I2C heist es nicht mehr LPC_I2C->STAT sondern LPC_I2C->I2STAT.

Alles nur Kleinigkeiten, aber beim Einstieg nerven die einfach.

Beimm STM32 hatte ich solche Startprobleme nicht. Wenn du wirklich mit 
32-Bittern anfangen willst, nimm lieber die von ST. Auf Linux wird das 
zwar mit der Entwicklungsumgebung nicht ganz so einfach, wenn du aber 
Windows nutzt, scheint CooCox ziemlich gut zu sein.

Zu TI kann ich nichts sagen, aber wen die Leute hier sagen die taugen 
was, dann kannste dennen das auch glauben.

von Gregor B. (Gast)


Lesenswert?

STM32F4DISCOVERY Board würde ich mir ansehen. Ist bei Watterott vorrätig 
für 16,66€ plus Versand.
Dazu gibt es ausserdem eine riesige Softwaresammlung mit Beispielen für 
alle möglichen Funktionen, die auch für Motor-Control-Applikationen 
interssant sind (PID-Motorregler, Clarke-Transformation, 
Park-Transformation,...)

von Ethernet (Gast)


Lesenswert?

LM3S6965 von TI.

Der hat Ethernet PHI+MAC drinnen. Das bedeutet, du kannst an diesen 
Cortex M3 Chip direkt eine Ethernetbuchse klemmen. Sowas gibt es bei den 
STMs nicht.

Dazu gibts auch ein Evalboard.

von unknown_soldier (Gast)


Lesenswert?

Beim mbed und STM32F4DISCOVERY Board fehlt mir leider das Ethernet 
Interface. Da ist mir deshalb wichtig, weil ich gerade am Anfang nicht 
überlegen will ob das Problem nun von der Hardware oder von der Software 
kommt.

Wenn ich eure Posts richtig lese, dann gibt es anscheinend  zum STM32 
mehr fertige Librarys als zum NXP.
Jedoch scheint mir die Verfügbarkeit von LPC17xx in Deutschland besser 
zu sein.

Über die uC von TI habe ich mich bisher kaum informiert, werde das aber 
jetzt noch tun, vor allem weil kein zusätzlicher chip für Ethernet 
gebraucht wird.

Wie Problematisch ist das routen von Ethernet, gerade wegen der hohen 
Frequenzen. Geht das noch halbwegs wenn die Leiterbahnen nicht zu lange 
sind, oder muss man da schon genau schauen wie man welche Leiterbahn 
verlegt (Wellenwiderstand o.ä).

Danke für eure bisherige Unterstützung.

von Juergen G. (jup)


Lesenswert?

Also ich finde die ARM's von NXP und ST ziehmlich gleichwertig.
Bis jetzt hat fuer mich noch keiner der beiden Hersteller eindeutig
gewonnen. Fuer manche Anwendungen ist ein STM32 besser fuer die
andere ein LPC.
Ich entscheide immer am Project selbst welchem Chip ich den Vorrang 
gebe.

STM32F4-DISCOVERY ist 'ne feine Sache, fehlt allerdings das Ethernet.

Beim mbed hast Du Ethernet mit einem MagJack und 6 Kabeln auf einem 
Protoboard in 2 Minuten am laufen. Absolut problemlos.

Ich programmiere beide unter Linux mit CodeSourcery und eclipse.
Librarys gibt's fuer beide reichlich, vom Hersteller, Third Party und 
von der Community.
Allerdings ist es mit denen das gleiche wie mit den Lib's der 8-Bitter.

Hersteller  -> taugt nur fuer Demo Zwecke
Third Party -> gut aber nicht fuer lau.
Community   -> sehr gut aber nicht immer leicht zu finden.

Beim Routen von Ethernet musst Du Dir schon Gedanken machen wo die 
Leiterbahnen hin muessen. Ein PHY ist ein recht stromhungriges Biest, je 
nach dem welchen Chip Du da verwendest, musst Du ihm Elko's parallel zu 
den ByPass C's spendieren.
Vom uC zum PHY nicht weiter tragisch (so kurz wie's geht), den PHY und 
den MagJack aber immer schoen am Rand des PCB.


Ju

von Frank K. (fchk)


Lesenswert?

Die TI-Luminary-Teile sind recht buggy, zumindest die Teile, die vor der 
Übernahme durch TI designed wurden. Ich zitiere aus den Errata zum 
LM3S6911:

"3 Hibernation Module
3.1 Hibernation module does not operate correctly

Description:
The Hibernation module on this microcontroller does not operate 
correctly.

Workaround:
This errata item does not apply to many Stellaris devices, including the 
LM3S1166, LM3S1636, LM3S1969, and LM3S2919. Refer to the Stellaris 
Product Selector Guide (www.ti.com/stellaris_search) and Errata 
documents to find an alternative microcontroller that meets the design 
requirements for your application.

Silicon Revision Affected:
A1, A2"

Krass, was? Wäre da einer der Verantwortlichen in meiner Greifweite 
gewesen, hätte der sich ernste Sorgen machen müssen. Ich glaube, in 
Texas wurden solche Leute früher geteert und gefedert.

fchk

von unknown_soldier (Gast)


Lesenswert?

Danke für die Infos Juergen. Ich denke das mbed wäre ganz gut für den 
Anfang. Jedoch bräuchte ich dann, sofern ich nichts übersehen habe, für 
Jungfräuliche uC auf eigenen Boards noch einen zusätzlichen Programmer. 
Dafür würde sich wieder das LPC1769 LPCXpresso anbieten. Jedoch bin ich 
mir da nicht im klaren, ob ich damit an Code red gebunden bin.

Gibt es so etwas wie einen universellen Programmer wie bei den AVRs?

von Uwe (Gast)


Lesenswert?

> Da ist mir deshalb wichtig, weil ich gerade am Anfang nicht
> überlegen will ob das Problem nun von der Hardware oder von der Software
> kommt.
Und wie hilft dir das Ethernet Interface dabei ?

von Juergen G. (jup)


Lesenswert?

unknown_soldier schrieb:
> Jedoch bräuchte ich dann, sofern ich nichts übersehen habe, für
> Jungfräuliche uC auf eigenen Boards noch einen zusätzlichen Programmer.
> Dafür würde sich wieder das LPC1769 LPCXpresso anbieten.

Brauchst Du nicht unbedingt, die LPC's haben einen Bootloader fest drin, 
den man auch nicht (aus Versehen) ueberschreiben kann.
Der Bootloader funktioniert mit dem UART im Zusammenhang mit den Boot 
Pins.

Ju

von unknown_soldier (Gast)


Lesenswert?

@Uwe
Bei Problemen mit dem Ethernet möchte ich ausschließen können dass es an 
der Hardware liegt. Wenn das LCD anders verhält als es soll, bringt mir 
das Ethernet Interface natürlich nichts. Vielleicht stelle ich mir das 
mit dem Ethernet auch nur zu kompliziert vor. Bei den AVRs hatte ich nie 
ein Eval Board o.ä., dafür gab es aber ein ausführliches Tutorial und 
die Hardware war nicht so aufwändig.

Selbst bei der Hardware fürs Ethernet (PHY und Mag Jack) weiß ich noch 
nicht wirklich auf was man achten sollte, bzw. was wichtig ist. Kennt 
jemand sinnvolle Literatur zu diesem Thema, bzw. irgendetwas das einem 
den Einstieg erleichtert. Natürlich könnte ich mir eine fertige Ethernet 
Beschaltung im Internet raus suchen und nachbauen. Danach weiß ich 
leider auch nicht mehr.

von M. K. (avr-frickler) Benutzerseite


Lesenswert?

Der LPC1769 hat ebenfalls kein PHY an Board, auf dem LPCXpresso-Board 
ist ein PHY-Chip(LAN8720) verbaut. Wenn du also eigne Boards baust musst 
du dir hier auch etwas suchen.

von Juergen G. (jup)


Lesenswert?

unknown_soldier schrieb:

> Selbst bei der Hardware fürs Ethernet (PHY und Mag Jack) weiß ich noch
> nicht wirklich auf was man achten sollte, bzw. was wichtig ist. Kennt
> jemand sinnvolle Literatur zu diesem Thema, bzw. irgendetwas das einem
> den Einstieg erleichtert. Natürlich könnte ich mir eine fertige Ethernet
> Beschaltung im Internet raus suchen und nachbauen. Danach weiß ich
> leider auch nicht mehr.

Das wird alles nicht so heiss gegessen wie es gekocht wird.

Wenn Du im Internet suchst was man bei HF Schaltungen zu beachten hat 
und wendest das auf den Part nach dem PHY an geht das in Ordnung.

Den IC fuer den PHY und die Beschaltung hatte ich beim ersten Ethernet 
Layout mit einem LPC einfach vom Schematic des mbed abgekupfert.

http://mbed.org/media/uploads/chris/mbed-005.1.pdf

Diese Beschaltung laeuft bei mir fast identisch auch mit den STM's.

Welchen MagJack man nehmen muss haengt vom PHY ab. Hersteller von 
MagJack's wie Wuerth zBsp. haben in den Datenblaettern die interne 
Beschaltung abgebildet. Da suchst Du Dir den aus der zu Deinem PHY 
passt.

Ich wuerde Dir aber auf alle Faelle raten mit einem fertigen Modul also 
Discovery oder mbed anzufangen. Und dann erst ein eigenes Layout machen 
und mit der selben Firmware testen.

Ich war damals zu geizig dazu und habe mir einen STM32 und einen LPC1768 
jeweils auf eine Platine geloetet. Nur mit den ByPass C's den Cristallen 
und den Buttons fuer die BootPins. Alle anderen Pins auf Stiftleisten.
Auch der JTAG Adapter war selbst gebaut.

Es hat mich 2 Wochen gekostet um die gesamte Entwicklungskette zum 
laufen zu bringen und die erste LED blinken zu lassen.
Der Lernfaktor war natuerlich enorm.

Debugger haben mich nie interessiert, ich habe immer meine eigenen 
Methoden gehabt um die Fehler im Programm zu finden.
Doch jeder der mit ARM's zu tun hatte schrie nach einem Debugger. Also 
habe ich auch gelernt einen Debugger an den Arm oder AVR zu frickeln und 
mit OpenOCD die Register unter die Lupe zu nehmen.
Heute weiss ich, das ich immer noch keinen Debugger brauche. Auch nicht 
fuer die ARM's.
Ich habe nie gewusst was genau ein Linkerscript tut, und das der 
compiler/linker for dem main() noch ne ganze Menge Sachen an das 
Programm haengt.
Heute schreibe ich meine eigenen Linker scripts um das mit dem uC machen 
was ich will und nicht das was die ToolChain Provider fuer richtig 
befinden.

Mir hat's trotz dem ganzen Frust Spass gemacht und das Wissen kann mir 
keiner mehr nehmen.

Man muss es aber nicht auf die harte Tour machen.
Deshalb der Rat kauf Dir ein Modul wo alles wichtige drauf ist. Wenn 
Deine eigenen Designs irgend eine Macke haben kannst Du immer noch mit 
dem Modul Testen ob es die Firmware oder die Hardware ist.

Ju

von Juergen G. (jup)


Lesenswert?

holger schrieb im Beitrag #2829353:
> "Ich mach mal eben Ethernet" kannste knicken;)

Geht schon. Ein Webserver auf einem mbed macht man in 2 Minuten mit den 
mbed Libs.

Die Standard Protokolle gibt's fuer LPC und STM alle als Lib's.

Die Kopfschmerzen kommen wie immer wenn's ans Eingemachte geht.
Ich habe meinen Ethernet Stack fuer Router um Echtzeit Functionen 
erweitert.

Uff. Da traeumt man nachts davon bevor es laeuft.

von Juergen G. (jup)


Lesenswert?

holger schrieb im Beitrag #2829391:
> @Juergen
> Wenn jemand so etwas schreibt:
>
>>Deshalb frage ich mich, ist z.B. der Zugriff
>>auf den ADC so ein Register gefrickel wie bei den AVR's, oder eher wie
>>bei den Arduinos.
>
> Dann kann man davon ausgehen das er an Ethernet auf einem
> ARM verzweifeln wird. Das kriegt der nie gebacken.

Ich bin zu faul zum suchen, steht das weiter oben hier im Thread?

Ein ARM hat je nach Ausstattung so um die 4k 32-Bit Register um die 
Peripherie anzusteuern.

Wenn einer mit den AVR ADC Registern Probleme hat wird er mit einem ARM 
wirklich verzweifeln.

Da sollte man sich echt Gedanken machen eine Kommerzielle IDE zu nehmen 
wo man fast alles vorgebacken bekommt und es nur aufzuwaermen braucht.

Die Register Beschreibung zum LPC1768 ist 840 Seiten
Die von einem STM32F1XX  671 Seiten + das UserManual 1093 Seiten.

Das sit ne andere Liga als AVR's mit 8Bit

von unknown_soldier (Gast)


Lesenswert?

Ich hatte in den Datenblättern der jeweiligen uC nichts über einzelne 
Register o.ä. gelesen, weshalb ich fälschlicherweise vermutet hatte, 
dass der Zugriff auf die einzelnen Peripherie Module über fertige 
Funktionen abläuft, eben so ähnlich wie bei den Arduinos. Inzwischen 
habe ich aber bemerkt, dass das alles in den User Manuals steht.
Arduinos habe ich nie für eigene Projekte verwendet, da ich nicht auf 
die vorgefertigten Funktionen angewiesen sein wollte und der 
Funktionsumfang der Arduinos häufig nicht ausgereicht hätte. Auch hatte 
ich nie größere Probleme beim Initialisieren der Hardware (ADC, PWM, 
Timer, UART, usw.). Deswegen nicht einfach annehmen ich wäre dafür zu 
dumm oder zu unfähig.

Ich werde mich wahrscheinlich erst mal für das mbed entscheiden und 
versuchen mich ein bisschen einzuarbeiten und Erfahrung zu sammeln.

von Eumel (Gast)


Lesenswert?

unknown_soldier schrieb:
> Ich hatte in den Datenblättern der jeweiligen uC nichts über einzelne
> Register o.ä. gelesen, weshalb ich fälschlicherweise vermutet hatte,
> dass der Zugriff auf die einzelnen Peripherie Module über fertige
> Funktionen abläuft, eben so ähnlich wie bei den Arduinos.


Und die Funktionen machen was? Richtig, auf Regsiter zugreifen. Anders 
wird kein Controller auf diesem Planeten gesteuert. Wenn dir 
Registerfickelei zu blöd ist musst die entsprechenden Funktionen ja 
genau einmal selber schreiben und kannst sie immer wieder Benutzen.

von unknown_soldier (Gast)


Lesenswert?

Eumel schrieb:
> Und die Funktionen machen was? Richtig, auf Regsiter zugreifen. Anders
> wird kein Controller auf diesem Planeten gesteuert. Wenn dir
> Registerfickelei zu blöd ist musst die entsprechenden Funktionen ja
> genau einmal selber schreiben und kannst sie immer wieder Benutzen.

So habe ich das bisher auch gemacht. Aber wie gesagt, die Sache mit den 
Registern ist bereits geklärt.

von Juergen G. (jup)


Lesenswert?

Keine Angst, was ich oben ueber die Hardware geschrieben habe gilt auch 
fuer die Software.
Es wird nicht alles so heiss gegessen wie es gekocht wird.

Wenn Du am Anfang die Lib's der Hersteller nimmst siehst Du recht 
schnell einen Erfolg. Du darfst nur nicht denken das alles so einfach 
ist.

Es ist genau wie mit den Arduinos.
Die IDE versteckt das Register gefrickel in Funktionen, nur kommt man 
damit irgendwann nicht mehr weiter und dann kommt das boese Erwachen 
wenn man mit den User Manuals in Kontakt kommt.

Das gute an den ARM ist, das man die problemlos in C und/oder C++ 
programmieren kann und da eine Klassenhierarchie erstellen kann die die 
Umstellung von einem uC zum anderen sehr viel leichter macht.

Ich verwende zBsp. fuer die LPC's und die STMs ab einer bestimmten Ebene 
die selben Lib's.

Die Basisklassen bauen auf der Newslib bzw. CMSIS auf, je nach dem was 
einfacher zu implementieren war.
Das uC spezifische Gefummel ist in einem eigenen Verzeichnis "arch" 
meist in C und strukturiert.
Das was darueber kommt dann in "dev" und "lib".
ganz oben drauf kommt dann die App.
dev und lib ist schon zum grossen Teil C++
App dann alles in C++.

Damit bekommt man dann seine Projekte auch relativ schnell fertig ohne 
vom uC abhaengig zu sein.

Ju

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.