Hallo!
Seit einiger Zeit probiere ich an einer AVR Steuerung dran rum, die ich
selbst gebaut habe. Diese Steuerung ist eine Laufzeitüberwachung von
Gleichstrommotoren (8 x 24V/5A). Die Elektronik ist neben den Relays,
die die Motoren schalten eingebaut (aus Platzgründen nur an dieser
Stelle möglich). Als ich die Software und Hardware dafür entwickelt
habe, habe ich einen Test von 6 Tagen am Stück in meiner Werkstatt
abgehalten. Der Test lief sehr gut und ohne Fehler. Daraufhin habe ich
die Elektronik eingebaut und schon nach kurzer Zeit (ca. 5min.) wurden
Bit´s im SRAM unkontrolliert gesetzt und ein Ablauf der Zeit
"vorgegaukelt". Daraufhin dache ich noch das es ein Harwarefehler sein
könnte und habe die Elektronik an einen Akku mit 24V und alle anderen
Leitung abgeklemmt. Das Ergebniss: Die Bit´s im SRAM werden immer noch
gesetzt. Demnach behaupte ich, das es ein EMV (Statische oder
Magnetische Felder) schuld sein könnten.
Meine Frage:
- Könnte es EMV-Problem sein
- Wenn ja, wie kann ich das "abschirmen"
- Wenn nein, was ist dann los
- ........
Danke
Schaltung zeigen, alles andere ist ne Aufforderung zum Raten.
Nur soviel: Das Bits im RAM durch äußere Störfelder geändert werden, ist
sehr(!) unwahrscheinlich. Eher wird ein Reset ausgelöst oder du kriegst
Störungen an den Sensoren.
Ich schrieb:> und schon nach kurzer Zeit (ca. 5min.) wurden> Bit´s im SRAM unkontrolliert gesetzt und ein Ablauf der Zeit> "vorgegaukelt".
Das ist mit Sicherheit ein Softwarefehler.
Z.B. externe Interrupts zum Einlesen von Kontakten bzw. langen Leitungen
oder nicht Ausmaskieren von unbenutzten Pins.
Peter
Beschreibe mal im Detail die Stromversorgung in dem ursprünglichen
Aufbau und in dem nun nicht mehr funktionierendem Aufbau.
Also Relais und Motoren (induktive Lasten an sich) bzw. Probleme mit der
Stromversorgung der Lasten und des uC sind in den allermeisten Fällen
die Ursache von Problemen wie diesen. EMV eher nicht.
Probiere mal bei der Versorgung mit 24V und Batterie die induktiven
Lasten abzuhängen und sieh' ob das Problem bestehen bleibt.
Um einen Schaltplan wirst Du sowieso nicht herumkommen, wenn Du
professionell arbeiten willst; also zeichne einen und poste den hier.
Wie hast Du das Layout denn gemacht? Auch posten.
In solchen Fällen spielt oft auch der Aufbau (z.B. Leitungsverlauf) eine
Rolle. Poste mal ein paar Fotos. Achte auf bildfüllendes Format und
Schärfe.
Ich mach am besten, zur leichteren Verständlichkeit ein Youtube-Video.
Vorab: mit Akku hab ich jetzt schon mal getestet, funktioniert auch
nicht. Eingänge hab ich schon mal alle rausprogrmmiert. Im Anhang die
Software, die ja in meiner Werkstatt ohne Probleme funktioniert.
>Im Anhang die Software, die ja in meiner Werkstatt ohne Probleme >funktioniert.
Markiere mal bitte das verräterische Bit.
Gut kommentiert ist die Software aber nicht. Außerdem
vermisse ich eine gewisse Ordnung/Struktur mit entsprechenden
Kommentierungsblöcken damit man sich in dem Programm auch nach
Jahren zurecht findet. Das erschwert die Suche unnötig zumal
Assembler ohnehin ziemlich umständlich ist.
>die ja in meiner Werkstatt ohne Probleme funktioniert.
Auch mit der selben Anordnung und belasteten Motoren?
Bürstenlose Motore werden es wohl nicht sein?
Wenn das in der Werkstatt im Leerlauf funktioniert, muss das
unter Last vor Ort nicht genauso sein.
Ich hab´s rot markiert.
Software kann ich mir nur schwer vorstellen, da ich es schon mit 2 total
verschiedenen Programmen ausprobiert habe.
Danke für euere Hilfe!
Hi
>Wie sollte den der Timerinterrupt den richtig aussehen, ich kann leider>keinen Fehler erkennen!
Z.B. so:
1
push r16
2
in r16,SREG
3
push r16
4
5
....
6
7
pop r16
8
out SREG,r16
9
pop r16
10
reti
Das 'inc r16' in der Interruptroutine verändert die Flags Z,N und V im
SREG. Wenn der Interrupt also zum Beispiel genau vor einem 'breq' oder
'brne' zuschlägt, kann das lustige Effekte haben.
MfG Spess
include.docx (27,8 KB, 12 Downloads)
********************************************************************
*Kann ich leider nicht lesen. Mach es als .txt und m. Kommentierung*
********************************************************************
Hallo!
Da wo das Bit gesetzt wird, ist beim Makro B_01 sbi PORTB,0
Wenn ich jetzt mein Interrupt folgend auslege:
TIMER: push r16
lds r16,B100
subi r16,1
sts B100,r16
pop r16
reti
würde dann das Problem mit den Flags verschwinden?
Mit in und out vom SRAM funktioniert nicht??
Hi
>würde dann das Problem mit den Flags verschwinden?
Nein. 'subi' verändert die Flages auch. Weshalb stäubst du dich dagegen,
SREG zu sichern? Das gehört zu den Basics der Assemblerprogrammierung.
>Mit in und out vom SRAM funktioniert nicht??
????
MfG Spess
Sorrrry!!
Ups, hab ich mich mit dem sichern vom SREG und SRAM verlesen!
Ja, wird mir auch klar, wenn ich so überlege.
Ich probiers gleich mal!!
Dannnnnnke
@Ich
Haste eigentlich die üblichen Kondensatoren (ganz nah) am Controller
montiert? Im Video sehe ich da keine.
Wenn nur die Versorgung vorhanden ist, dann bleiben nur noch wenige
Möglichkeiten.
-Stabilität der Versorgung fehlerhaft
-Softwareproblem
-Güte des Aufbaus, kalte Lötstelle etc., Quarz korrekt angeschlossen?
Gewöhnlich würde ich mal ein paar Messungen mit einem Oszilloskop
empfehlen, aber ich gehe mal davon aus, das keins verfügbar ist?
Vielleicht ist es tatsächlich ein Softwareproblem und die bereits
angeregten Vorschläge reichen aus.
Und dürfen wir auch erfahren welche Fehlermeldung bei welchem Code
genau? ;-) "Oben" steht viel Code.
> lds und sts ist doch eine Sicherung.
Schau Dir mal die Operanden von lds und sts an. Da steht nirgendwo ein
Register in das Du sreg geladen hast.
Also ist das keine Sicherung des Status-Registers.
Das Problem ist, das das subi das Status-Register verändert (abhängig
von den Operanden). Ich empfehle Dir: Nimm den Rat von spess53 an.
ja, die Kondensatoren mit 100nF ist schon ganz nah am µC, da er hinten
auf der Leiterplatte aufgelötet wurde. Ein Osziloskop hab ich schon und
auch gemessen. Deswegen auch die vermutung von mir, das die Störung über
Luft oder nur noch Software sein könnte. Was Spess gemeint hat könnte
schon zutreffen. Da bin ich wohl sehr auf der Leitung gesessen :-). Die
Möglichkeit könnte schon sein, mit den Durchläufen und Störungsauftritt,
dass das mit dem SREG so war. Umprogrammiert ist es jetzt und eingebaut
ist es auch schon wieder. Jetzt heißt es für mich abwarten. Ich bin euch
allen sehr dankbar, denn so was bring mich zur Verzweiflung.
Johann
Mike Hammer schrieb:> include.docx (27,8 KB, 12 Downloads)>> ********************************************************************> *Kann ich leider nicht lesen. Mach es als .txt und m. Kommentierung*> ********************************************************************
*.txt, *.doc nennt man vielleicht Liebesbriefe, aber keine Sourcen.
Halte Dich doch einfach an übliche Regeln. Wenn Du ein Assemblerprogramm
schreibst, nen es *.asm.
Und wenn Du dann noch weißt, wie man einen Kommentar schreibt, dann wird
dieser farbig hervorgehoben.
Peter
Mal gemessen?
Schaltung:
Reset-kondi auf 100nF vergrößern
Wie ist der Regler (5V) aufgebaut? (100nF davor/Dahinter)?
Bei solchen sachen würde ich vor den Regler zusätzlich ordentlich
kapazität setzen. (1000µ o.ä) Nach dem Regler keine großen Kapazitäten!
Teste deine Schaltung, in dem du einen Pin vom Controller an einen
Flipflop oder so oder so hängst, den du bei RESET setzt, oder bei
anderen Zuständen. Da kannst du kontollieren, wo der Fehler passiert!
Wie sind die Eingänge abgepuffert, bzw sind die absicherbar?? (Evtl
externer Pegelwandler etc verwenden)
Hi
-Wie hängen deine Stromversorgung der Motoren (immerhin ja max. 40A) und
die -Stromversorgung des µC zusammen.
-Tritt der Fehler schon bei Nutzung der Relais (ohne Motoren) oder erst
beim -Schalten der Motoren auf?
-Ist der Brown out detector enabled? Wenn ja, für welche Spannung.
MfG Spess
Servus,
> Könnte es EMV-Problem sein>> - Wenn ja, wie kann ich das "abschirmen">> - Wenn nein, was ist dann los
alles was du brauchst sind Filter (siehe Bild)- und ordentlich mit Erde
(Schutzerde) verbinden.
Im Gleichstromkreis (AVR Stromversorgung)umbedingt einige Längsdrosseln
und diverse Kondensatoren zur Ableitung.
Auch alle Ausgänge unbedingt mit Drosseln abblocken!
Das ist zwar ein riesiger Aufwand, aber es lohnt sich.
Gruß XMEGA
HAste jetzt mal nen Schaltplan zum ganzen System?
Das Video ist ja recht nett, bringt aber für die Fehleranalyse nicht
viel.
Auch wärs mal angebracht, über die Spannungsversorgung zu reden, bei 24V
und einigen Ampere.
Habt ihr im Video nicht gesehen das ICH den Controller nur noch
mit einer Batterie ohne jede Peripherie versorgt? Da sind eure
Vorschläge nicht unbedingt sinnvoll.
Mir kommt die Geschichte irgendwie bekannt vor und des Rätzels
Lösung war dann so ein Fuse-Bit das nicht gesetzt war. Leider weis
ich das nicht mehr. Watchdog vielleicht? Schon mal in die Richtung
geforscht? Ich weiß das ich nichts weiß.
Also, über die Versorgungsspannung ist eher unrealistisch da ich das
ganze mit einem Akku schon mal getestet habe (es sei denn, es sind
Störungen auf der Leiterplatte zu erzeugen). Im Anhang hab ich mal ein
Bild von den Fuses. Ich denke, dass diese Einstellungen nicht dafür
schuld sind (ich hoffe es aber).
Benutzt du wie im Tutorial einen externen quarzoszillator? Dann wäre
external clock die richtige fuse einstellung.
Aber im Video siehts eher nach gewöhnlichem quarz aus, dann könntest du
das full amplitude (ckopt, siehe
Beitrag "Das Mysterium CKOPT") fuse setzten um das ganze
störunempfindlicher zu machen.
Passt zwar alles nicht ganz auf dein Fehlerbild, aber wer weiß was der
controller anstellt wenn der takt mal aus dem tritt kommt.
gestern hab ich noch das Häckchen bei full amplitude gesetzt und wieder
in die Maschine eingebaut und ich muss sagen, dass es bis jetzt immer
noch funktioniert. Das mit der Löschdiode war schon gebaut und war nicht
des Rätsels Lösung. Ich hoffe das es mit der full amplitude weiterhin
funktionieren wird. Hat jemand ein Tutorial zu diesen Fuse und Lock?
Ein Tutorial nicht, aber du kannst noch mal in den Thread gucken den ich
oben in meinem Beitrag verlinkt habe, da wird viel um dieses Fusebit
diskutiert und auch erklärt.
Wäre das Problem mit Abschirmung vom µC und Quarz durch ein Stück
Alufolie (ohne Erdung) auch zu beseitigen? Damit stelle ich mir sowas
wie von Conrad den Atmega32 im Metalgehäuse vor.
Spannungsspitzen werden auf über evtl GND etc übertragen. Auf was steht
deine Brown-out detection?
Solche probleme habe ich fast immer auch, wenn mein AVR nicht
ausreichend gepuffert ist (100nf), eingänge, spannungsspitzen.
Also BODEN steht auf 4,0V. Der Test mit full amplitude ist auch
gescheitert. Das selbe Phänomen ist wieder aufgetreten. Was doch noch
sein könnte ist das, wenn ich doch 5V Spannungsversorgung über die
Leiterplatte hinaus auf eine Leitung durch einen Verdrahtungskanal mit
vielen anderen Leitungen auf eine LED am Schaltschrankdeckel führe da
ich diese mit ULN 2003a betreibe, eine "Fremdinduktion" das ganze
beeinflusst.
Ich glaube du gehst das zu Wissenschaftlich an. Das is doch keine
raketenwissenschaft. BODEN auf 4V das bedeutet dass wenn da eine spitze
unter 4V fällt, dein AVR einen RESET auslöst!
Ich würde auf die Engangsbeschaltung schauen, und mal eine Art DEBUG
einbauen, in deine Software, von mir aus mit UART, und dann in eine
Textdatei loggen (HYperterminal) dann siehst du was passiert! Mit
Rumraten wird das nix
Also jetzt mal Butter bei die Fische: Poste endlich mal den Schaltplan;
und auch einen Verdrahtungsplan mit Leitungslängen. Du bist jetzt schon
mehrfach nach den Details der Schaltung gefragt worden und hast
eigentlich kaum darauf geantwortet.
Was hast Du an Messgeräten?
Du schreibst, dass Deine Schaltung im Labor richtig funktioniert hat, im
Feld aber nicht.
Ferner schreibst Du, dass die Aufgabe Deiner Schaltung ist,
> Gleichstrommotoren (8 x 24V/5A)
zu überwachen, die ja aufgrund ihrer Kommutierungsbürsten Deinen Aufbau
auf jede EMV-Schwachstelle prüfen.
Mich würde nun interessieren, wie Du die Eingänge deiner Schaltung
entprellt hast.
Des weiteren schließe ich mich der Aussage meines Vorredners an
> Poste endlich mal den Schaltplan;> und auch einen Verdrahtungsplan mit Leitungslängen.