Forum: Mikrocontroller und Digitale Elektronik Cortex M0(+) vergleich (SAMD vs STM32F0)


von Wad W. (wad_wer)


Angehängte Dateien:

Lesenswert?

Hi,

ich habe bisher schon mehrere Sachen mit dem STM32F0's gemacht. 
Hauptsächlich Leistungselektronik (BLDC Motor Steuerungen).

Ich bin mit dem auch eigentlich ganz zufrieden. Mir ist allerdings 
aufgefallen das die STM32FXXX "gefühlt" viel leichter sterben als z.B. 
AVR8 µC's.

Jetzt habe ich hier ein SAMD10 Xplained Board liegen. Da die SAMD Serie 
ja preislich und auch von der Ausstattung her vergleichbar ist, 
interessieren mich nun die Unterschiede.

Ich habe heute mal eine kleine Testreihe gemacht:)

die Testboards sind einmal das SAMD10 Xplained und das STM32F051 
Discovery auf dem ich den 3,3V LDO getauscht und eine Diode gebrückt 
habe damit der F051 auch mit 3,3V läuft (orginal 3,0V).

Ich kompiliere den test code mit GCC ARM Embedded 
(https://launchpad.net/gcc-arm-embedded) und selbst zusammen gestrickten 
make files. Die Einstellungen sind identisch.

Beide µC's laufen mit 48MHz mit den 8MHz vom programmer µC.

Hier meine bisherigen vergleich Tests (Scope Bilder im Anhang)

>Test 1.<

Pin high und low schalten (nicht toggeln damit es später vergleichbar 
bleibt)

SAMD10 code:
1
PORT->Group[0].DIRSET.reg = PORT_PA10;
2
while (1){
3
  PORT->Group[0].OUTSET.reg = PORT_PA10;
4
  PORT->Group[0].OUTCLR.reg = PORT_PA10;
5
}


STM32F0 code:
1
RCC->AHBENR |= RCC_AHBPeriph_GPIOA;
2
GPIOA->MODER |= (((uint32_t)GPIO_Mode_OUT) << 20);
3
while(1){
4
  GPIOA->BSRR = GPIO_Pin_10;
5
  GPIOA->BRR = GPIO_Pin_10;
6
}

hier kommt bei beiden eine Frequenz von 4.8MHz raus. Allerdings sieht 
das beim STM32F0 nicht wirklich gleichmäßig aus (siehe Anhang Test1)


>Test 2.<
Das gleiche nur mit einer den wert wechselnden uint8.
1
static uint8_t switchInt = 3;
2
if(switchInt == 3){
3
  pin -> high
4
        switchInt = 5;
5
}else{
6
  pin -> low
7
        switchInt = 3;
8
}

Dabei ist der SAMD10 komischerweise deutlich schneller. Es kommen 
2.53MHz beim SAMD und 2.0MHz beim stm32F0 raus.


>Test 3.<

Eine Multiplikation.
1
static uint8_t switchInt = 0;
2
volatile uint32_t mulTest32 = 0x10001*switchInt;
3
if(mulTest32); // damit es nicht weg optimiert wird
4
if(switchInt == 3){
5
  pin -> high
6
        switchInt = 5;
7
}else{
8
  pin -> low
9
        switchInt = 3;
10
}

Hier sind beide annähernd gleich schnell. der der F0 braucht 333ns 
länger(als in test 2) der SAMD 335ns. beide machen das per HW.


>Test 4.<

Dividieren.
1
static uint8_t switchInt = 0;
2
volatile uint32_t DIVTest32 =  0xFFFFFFFF/switchInt;
3
if(DIVTest32);
4
if(switchInt == 3){
5
  pin -> high
6
        switchInt = 5;
7
}else{
8
  pin -> low
9
        switchInt = 3;
10
}

Hier ist der ST schneller. SAMD 12.05µs, STM32F0 10,6µs.


Im 5. Test (siehe Anhang) habe ich den gleichen code laufen wie in 4. 
nur an den PIN ein RC glied mit R=200 C=1µF. hier sieht man deutlich das 
der widerstand der Ausgangsschaltung des SAMD deutlich hochohmiger ist. 
Meine Hoffnung wäre das er damit vielleicht unsensibler gegen 
"Störstrom" ist... aber k.A. ob das so ist.


Mich würde interessieren wo ihr vielleicht noch Unterscheide bemerkt 
habt oder vermutet. Und meint ihr da können merkbare unterscheide in der 
Robustheit sein?

: Bearbeitet durch User
von Gerd E. (robberknight)


Lesenswert?

Wad W. schrieb:
> Mir ist allerdings
> aufgefallen das die STM32FXXX "gefühlt" viel leichter sterben als z.B.
> AVR8 µC's.

Dann hast Du irgendwo in Deiner Schaltung einen Fehler, der dafür sorgt 
daß Du an irgendeinem Punkt die Absolute Maximum Ratings des Controllers 
verletzt.

Die AVRs sind als Controller die 5V unterstützen und in einem viel 
gröberen Prozess gefertigt werden typischerweise robuster gegen sowas 
als die moderneren Cortex-M.

> Und meint ihr da können merkbare unterscheide in der
> Robustheit sein?

Das ist der falsche Ansatz. Was Du da bekommst sind irgendwelche 
Bauchgefühle zu Robustheit gegen undefinierte Störungen.

Du solltest schauen daß Du den Fehlermechanismus in Deiner Schaltung 
erkennst mit dem die Absolute Maximum Ratings überschritten werden. Wenn 
Du den erkannt und verstanden hast, dann kannst Du gezielt 
Schutzmaßnahmen gegen ergreifen. Wenn die Absolute Maximum Ratings nicht 
mehr verletzt werden, überleben auch Deine Controller.

von Wad W. (wad_wer)


Lesenswert?

Hi,

ist nicht so das mir die ganze zeit Kontroller sterben. Meistens sind 
meine Sachen aber auf Multicoptern unterwegs und hier kommt es immer zu 
Störungen die so Schaltungen an ihre grenzen bringen. Egal ob es nachher 
ein Anwendungsfehler oder z.B. ein absturz (hohe Induktionsströme beim 
aufprall des Motors) ist. noch dazu muss alles winzig und leicht sein 
;).. es ist also wie immer ein Kompromiss.

mich würde halt interessieren ob da zwischen den verschiedenen ARM CM0's 
merkbare Unterschiede zu erwarten sind. z.B. kann der SAMD10 mit 2 Pins 
versorgt werden. Und braucht laut Datenblatt weniger Entkopplung als der 
STM32F051. So kann man platz sparen. aber ist er jetzt deshalb Sensibler 
oder Robuster oder gleich?

Kann natürlich sein das es da keine klare Antwort gibt, aber deshalb 
frage ich :)

: Bearbeitet durch User
von Gerd E. (robberknight)


Lesenswert?

Wad W. schrieb:
> Egal ob es nachher
> ein Anwendungsfehler oder z.B. ein absturz (hohe Induktionsströme beim
> aufprall des Motors) ist. noch dazu muss alles winzig und leicht sein
> ;).. es ist also wie immer ein Kompromiss.

Aber oft kann man schon mit ein paar kleinen Teilen wie ner Doppeldiode 
hier und einer Z-Diode oder TVS-Diode dort ne ganze Menge reißen was 
Robustheit angeht. Und das geht weder deutlich auf den Platz noch 
Gewicht.

Der Trick ist aber die Fehlermechanismen zu verstehen und dann ganz 
gezielt die richtigen Schutzbauteile an der richtigen Stelle zu 
verwenden. Wenn man bei Platz und Gewicht begrenzt ist, ist das 
natürlich aufwendiger als wenn man die "mit der Gießkanne" verteilen 
kann.

Ich weiß nicht was da bei Dir in die Richtung schon verbaut ist. Zeig 
doch mal Deinen Schaltplan.

Außerdem beschreibe was mit Deinem letzten defektem Controller (oder den 
letzten defekten Controllern) genau los war:

- Sichtprüfung Gehäuse normal oder Schäden erkennbar?
- Stromaufnahme normal, erhöht oder Kurzschluss?
- Am SWD unter HW-Reset grundsätzlich erreichbar?
- Flash lässt sich per SWD auslesen?
- Programm startet und läuft normal?
- Alle digital genutzten Pins normal nutzbar und korrekte Funktion?
- Alle analog genutzten Pins (ADCs, Komparatoren, DACs) nutzbar und 
korrekte Funktion?

Gab es noch andere Schäden auf dem Board? Z.B. der Spannungregler ist 
defekt und liefert jetzt eine zu hohe Spannung? Oder ein am Controller 
angeschlossener Mosfet-Treiber hat jetzt einen Kurzschluss zur 
Versorgungsspannung?
Dann müsste der Schutz eher zu diesen Bauteilen hin und der Tod des 
Controllers war nur ein Folgefehler.

Systematisches Vorgehen inkl. Protokollierung beschleunigt die Arbeit 
erheblich.

: Bearbeitet durch User
von Wad W. (wad_wer)


Lesenswert?

Hallo Gerd,

komplette Schaltungen darf ich nicht posten da mein Chef bestimmt was 
dagegen hätte ;)

Mehr Schutzdioden sind schon auf dem plan, aber ich bin mir nicht sicher 
ob die
nötig sind. Mir persönlich ist noch kein STM32 im betrieb gestorben 
deshalb kann ich immer nur spekulieren was der Auslöser war. Generell 
ist die Ausfallrate mit dem Umstieg von AVR8 zu STM32 gesunken (<1%).
Das wird aber daran liegen das mit dem STM32 mehr Schutzmaßnahmen 
umgesetzt wurden (z.B Stromüberwachung).

Mir ist halt aufgefallen das die art des Defekts sich geändert hat. mit 
den AVR8 war es meistens eine Halbbrücke, jetzt ist es meistens der µC.

Das Bild was ich habe wenn die Teile dann Hier sind, ist das der STM32 
entweder gar nix mehr macht nur die 3,3V kurz schließt und heiß wird. 
oder er braucht enormen strom und läuft noch (komplett), bringt aber den 
3,3V LDO in die Temperatur Begrenzung.

Wie aber im ersten Post gesagt, bin ich eigentlich zufrieden mit der 
Leistung und Robustheit. Deshalb würde ich das Augenmerk gerne wieder 
Richtung SAMD vs STM32F0 lenken :D. Meine frage ist eher wo unterscheide 
sind.

: Bearbeitet durch User
von Markus M. (adrock)


Lesenswert?

Naja, die unterschiedlichen Ergebnissen in den Ausgaben werden wohl 
durch eine unterschiedliche Auslegung / Taktung der Peripherie zustande 
kommen.

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.