Forum: Mikrocontroller und Digitale Elektronik ATXmega64A1 vergisst Bootloader und Flash!


von mattkeag (Gast)


Lesenswert?

Hallo zusammen!

Ich hab da ein seltsames Problem.
Problemkind ist ein ATXmega64A1.

Dieser wird über Schleifkohlen mit Strom versorgt, über welche 
gleichzeitig auch der Strom für einen BLDC-Antrieb geht. Hier lässt sich 
absolut nix dran ändern! Also extreme Betriebsbedingungen!
Das ding hat einen Bootloader, der gegen Schreiben und Lesen geschützt 
ist, sowie einen Watchdog der fest durch Fuses definiert ist.
Die App ist verständlicherweise nur gegen Lesen geschützt.
Nun ist es vorgekommen, dass mal die App und neuerdings sogar der 
Bootloader scheinbar verschwunden ist.
Bemerkt hab ich dies, da das Gerät nicht mehr funktioniert hat und bei 
genauerem Hinschauen, der externe Quarz nicht mehr geschwungen hat. 
Dieser wird beim BL sowie der App verwendet. Zunächst dachte ich, dieser 
hätte durch die starken vibrationen im Betrieb abgedankt, jedoch war 
nach Tausch dessen, das Problem nicht weg. Erst nach erneuter 
Programmierung lief das ding wieder.
Was noch seltsam war, dass der Watchdog per Fuses auf 4Sek. gesetzt war, 
aber dieser beim ersten Programmierversuch nach diesem Chrash scheinbar 
auf 8Sek. gesetzt war. Alle 8 Sekunden wurde ein Signalmuster bei 
bestimmten IOs erzeugt, das nur nach dem Reset so auftritt. Also App 
hatte ein Problem und der WDT auch.
Bin ratlos!
Hat hier irgendwer was dazu zu sagen?

von Peter D. (peda)


Lesenswert?

Schaltplan zeigen.

von mattkeag (Gast)


Lesenswert?

Hallo peda,

ist relativ einfach gehalten:
Aus 24V mach 15V per LM2940 und dann 3,3V mittels NCP5501DT33G.
Dazwischen vor und hinter den Reglern diverse C's zum glätten und 
Filtern der höherfrequenten Störungen des Bürstenfeuers.
Mittlerweile auch Filter ergänzt mit FKP1-C's wegen der hochfrequenten 
Störungen durch das Bürstenfeuer.
Die Spannung am Proz ist für einige 100ms nach Abschalten der Spannung 
noch stabil - Am Proz direkt keinerlei Störimpulse auf 3,3V zu messen.

Wie bereits beschrieben:
Gerät war im aktiven betrieb - also BLDC-Motor lief mit einigen Ampere, 
welche über die schleifenden Schleifkohlen gezogen wurden und Spannung 
zappelte um die 24V - und plötzlich war die Programmierung einfach weg 
trotz gesetzter Fuses zum Schutz.
Bootloader vorhanden, muss aber über einen speziellen Befehl aus der App 
gestartet werden. Zwar nicht unmöglich aber aufgrund diverser Hürden wie 
Checksumme etc. unwahrscheinlich.

Welchen Einfluss kann die Schaltung auf die Löschung des Flash haben?
Worauf ist zu achten?

Gruss
Sigi

PS: Schaltplan posten etwas schwierig - Chef muss zustimmen ;-)

von Peter D. (peda)


Lesenswert?

Interessant wäre der Anschluß des Motors an den MC und auch die 
Leitungsführung (Platine, Verkabelung).

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Ich denke, dass es am Layout liegt. Habe gerade eine Bewässerungsanlage 
mit XMEGA und Pumpen gebaut, die mit DC-Motoren laufen. Die Motoren 
ziehen 2 Ampere, die per PWM auf 1A effektiv gebändigt werden. Die 
Stromspitzen an den FETs sind schon recht "nett" anzusehen. Der 
Controller hängt über L/C-Filter an der Versorgung, die durch einen 
3.3V-LDO stabilisiert wird. Hohe Ströme fließen somit nur über die FETs 
und die Motoren, die Strompfade sind kurz und breit angelegt. Das 
Massepolygon und das 3.3V-Polygon um den Controller sind absolut frei 
von Spannungsrauschen. Funktioniert problemlos. Du solltest Deinen 
Controller in eigene Versorgungspolygone einbetten und die hohen Ströme 
räumlich davon absetzen. Die Versorgungsleitungen zum Controller 
solltest Du L/C-filtern und die Leitungen vom Controller zu den 
Steuerstufen sollten über Masseflächen laufen.
Das Feuer an den Schleifkohlen solltest Du mit Ferriten, 
stromkompensierten Drosseln und Kondensatorkaskaden von der 
Steuerschaltung fernhalten.

: Bearbeitet durch User
von mattkeag (Gast)


Lesenswert?

Ohje, alles schon gemacht.
Direkt an den Halbbrücken schnelle Folien-Cs.
Leistungsteil und Steuerteil auf dem PCB getrennt etc. pp....
Schleifkohlen haben so ihr ganz eigenes Eigenleben, das man nicht 
einfach so in jedem Fachbuch findet. Das wurde mir erst im Laufe dieses 
Projektes richtig klar.
Da greift voll der multiplikative Charakter aufgrund des negativ 
differentiellen Widerstandes des Lichtbogens.
Ein DC-Motor erzeugt ein ganz anderes Abbrandbild als ein BLDC.

Nur.... warum ist das Flash plötzlich im aktiven leer bzw. das Programm 
beschädigt?
Was kann hierfür der Auslöser sein - wie könnte dieser Mechanismus 
innerhalb des Atmel ablaufen?
Kann ich einen Atmel durch leitungsgebundene Störsignale das Programm 
"aus dem Kopf schlagen"?

Gruß
Sigi

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

mattkeag schrieb:
> PS: Schaltplan posten etwas schwierig - Chef muss zustimmen ;-)

Möchtet ihr eine Lösung? Oder wollt ihr weiter im Nebel stochern?

von mattkeag (Gast)


Lesenswert?

Wie geschrieben,
was ist der Grund, dass ein Atmel sein Flash maltretiert?
Welche Mechanismen greifen hier?

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

mattkeag schrieb:
> was ist der Grund, dass ein Atmel sein Flash maltretiert?
> Welche Mechanismen greifen hier?

Nur der Flash-Controller im XMEGA kann das Flash löschen. Dazu müsste er 
falsche Befehle erhalten oder Befehle als falsch interpretieren. Das 
könnte beispielsweise passieren, wenn die CPU aufgrund einer massiven 
elektrischen Störung Befehle falsch ausführt. Deshalb ist ein Betrieb 
der CPU in einem stabilen elektrischen Umfeld essentiell. Das gilt aber 
grundsätzlich für alle elektronischen Bauteile.

: Bearbeitet durch User
von Peter D. (peda)


Lesenswert?

mattkeag schrieb:
> was ist der Grund, dass ein Atmel sein Flash maltretiert?

- Überspannung an VCC
- Überspannung >VCC, Unterspannung <GND an IO-Pins

Z.B. wenn man Outputs direkt an Leistungs-FETs legt, kann da rückwärts 
was reinsauen.
Wenn alles nichts hilft, Optokoppler zwischen MC und Leistungsteil.

VCC sollte man mit ner 3,9V Z-Diode begrenzen.

BOR hast Du gesetzt?

Der Watchdog hilft gegen Hardwareprobleme überhaupt nicht. Auch wenn 
viele es versuchen.

: Bearbeitet durch User
von Siegfried H. (Firma: Mattke AG) (mattkeag)


Lesenswert?

Stimmt, die Z-Diode fehlt!
Bräuchte man wenn ne Schutzdiode im Proz aktiv wird. Wird bisher nur 
über mehrere 100nF "abgesaugt". Sowas konnte ich bisher jedoch noch 
nicht messtechnisch erfassen.
Proz ist über Serienwiderstände, Filter-Cs, Schottkys nach Vcc und 
Motortreiber von den Fets getrennt. Leiterbahnen von Klemmen zu Fets und 
Motor sehr dicht und kurz ausgelegt.
Bauteilplatzierung auch getrennt in Leistungs- und Steuerteil, so dass 
(theoretisch) keine Lastströme in die Steuerung weder kapazitiv noch 
induktiv stören können - ausser durch die gemeinsame Stromzuführung über 
die Schleifkohlen, was absolut unumgänglich ist.

Bzgl. Layout:
Es gibt kein richtiges Layout, sondern nur bessere und schlechtere.

Beim BOD such ich den Wert für tBOD im Datenblatt.
Wie lang ist diese Zeit?

Ich vermute, dass wenn ich einen extrem scharfen und kurzen Puls bekomme 
und der interne Reset noch nicht aktiv ist, es Register zerdeppert.

Hab eben eine FFT von den 3,3V im Leerlauf gemacht - Leistungsaufnahme 
Motor um die 30Watt - bei Volllast sind locker 10...15A möglich.
Ergebnis: Max. 1,5mV bei 35MHz, alles andere quasi nicht mehr messbar.
Durch Beschleunigungs- und Bremsmanöver kann die Spannung auch unter 15V 
zusammbrechen oder über 30V hochsausen. Beides wurde per Software 
weitgehend unter Kontrolle gebracht, sodass von Controller bis Treiber 
alles noch arbeitet.

Werde Tests mit kleineren C's mit höheren Grenzfrequenzen machen. Stellt
sich jedoch meisst erst nach Tagen und Langzeittests heraus ob's was 
gebracht hat.
Problem ist zusätzlich, dass die oben beschriebene Störung nur 
sporadisch, teils erst nach Tagen oder Wochen auftritt.

von Peter D. (peda)


Lesenswert?

Siegfried Hoch schrieb:
> Wird bisher nur
> über mehrere 100nF "abgesaugt".

Der 3,3V VCC würde ich wenigstens noch nen 470µF Elko spendieren. Der 
kann schon einige Transienten vernichten, ohne das die VCC gleich durch 
die Decke geht.

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Wobei Elko nicht Elko ist. Also auf niedrigen ESR (105°C-Typen) achten.

von Siegfried Hoch (Gast)


Lesenswert?

Mercy...
bin diesbezüglich am Testen.

Reihenfolge wie folgt:
24V -> 2000µF -> LM2940/15V -> 470µF -> NCP5501DT33G/3,3V -> 10µF + 
n*100nF (direkt an VCC-Pins des µC)

Aus Erfahrung kriegt man aber diese Transienten nur mit kleineren MLCCs 
unter 10nF raus - siehe Impedanzkennlinien!
Die 100er wechseln bereits unter 30MHz das Ufer zur Spule.

Zu Beginn des Projektes dachte ich auch, es wäre relativ einfach mit ein 
paar C's etc, aber das Projekt hat es in sich. 24V - kein Problem, aber 
wer denkt schon dran, dass diese zum Einen erheblichen Lastschwankungen 
(locker +/-10V) unterliegt (Durch die Schleifkohlen + deren Verschleiss) 
und zudem mit HF-Rauschen im Volt-Bereich verseucht sein kann, was wie 
Kriechöl überall zu finden ist.

Frage:
Was passiert beim ATXmega vom Abfall der VCC unter Vbod bevor der 
interne Reset greift?
Siehe XMEGA-Manual Kapitel 9.4.2 Figure 9-4. Brown-out Detection reset.

Arbeitet da der Oszillator noch und werden da noch Befehle ausgeführt?
Angenommen dem ist so und die Vcc geht unter die 1,6V oder so... was 
passiert da? Ich gehe davon aus, dass die Vcc per Transient schneller 
als ein Taktzyklus von 32MHz runter geht und mir hier ggf. Register 
versaut werden. Dies messtechnisch zu erfassen ist extrem schwierig - es 
sind derzeit Vermutungen aufgrund des Verhaltens des gesamten Systems.
Was kann ich da ggf. machen?

Weiteres Problem:
Hardware steht nahezu unveränderbar - ausser den Werten von Bauteilen.

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.