Forum: Mikrocontroller und Digitale Elektronik Steuerung Garagentorantrieb, Probleme bei Debug


von Silvio G. (technofreak)



Lesenswert?

Hallo

ich habe vor einer Weile eine Leiterplatte von einer Bosch Comfortlift 
Garagentorsteuerung erhalten um diese zu reparieren. Da durch 
Schwitzwasser der Garagendecke die Leiterplatte stark geschädigt wurde 
bestand keine Chance auf Reparatur. Daher habe ich eine neue 
Leiterplatte erstellt, die mit einem PIC16 arbeitet und, bis auf das 
Funkmodul, die gleichen Funktionen liefern soll. Nach einigen Tests 
stellte sich heraus, dass beim Debuggen mit dem PicKit3 das Programm 
stehen bleibt. Dabei scheint kein Reset ausgeführt zu werden sondern das 
Programm bleibt stehen als würde man den Pause-Knopf in der IDE drücken. 
Das geschieht immer dann wenn das Relais für die Beleuchtung schaltet. 
Dabei führt nicht jedes Schalten zum Abbruch, sondern  manchmal auch 
erst das 7., 10. oder auch schon 1. und zwar häufiger das Ab- als das 
Anschalten. Daher vermute ich, dass es irgendwo Rückkopplungen auf die 
Spannungsversorgung gibt.

Habe ich grundlegende Fehler in der Schaltung?
Wo kann oder sollte die Entstörung verbessert werden?

In der Platine sind noch einige Sachen etwas wirr, da ich nach der 
Herstellung der Leiterplatte noch etwas ändern musste.

Ich hoffe ihr könnt mir weiterhelfen.

Silvio

von Silvio G. (technofreak)


Lesenswert?

Hallo

hat denn keiner eine Idee oder ist der Beitrag nur irgenwie 
untergegangen?

Silvio

von Max G. (l0wside) Benutzerseite


Lesenswert?

Silvio G. schrieb:

> Nach einigen Tests
> stellte sich heraus, dass beim Debuggen mit dem PicKit3 das Programm
> stehen bleibt. Dabei scheint kein Reset ausgeführt zu werden sondern das
> Programm bleibt stehen als würde man den Pause-Knopf in der IDE drücken.
> Das geschieht immer dann wenn das Relais für die Beleuchtung schaltet.
> Dabei führt nicht jedes Schalten zum Abbruch, sondern  manchmal auch
> erst das 7., 10. oder auch schon 1. und zwar häufiger das Ab- als das
> Anschalten.

Kümmere dich mal um das Abblocken von Versorgungsspannung und Reset. 
MCLR könnte einen Abblockkondensator vertragen. Eine Massefläche, die 
den Namen verdient, hätte auch nicht geschadet.

Ich bin aber kein PIC-Experte (das letzte Mal ist mindestens 15 Jahre 
her).

Max

von Silvio G. (technofreak)


Angehängte Dateien:

Lesenswert?

Hallo

Massefläche ist natürlich vorhanden, hatte ich nur für das nachträgliche 
hinzufügen der geänderten Schaltungsteile entfernt und vergessen vor dem 
Posten wieder einzufügen. Gibt auch keine Leiterbahnen auf der oberen 
Seite (blau), da sind die Brücken bzw. Widerstände auf der Unterseite 
platziert.

Ich habe inzwischen schon mal die Leiterplatte an einem Labornetzteil 
getestet. Nur das Schalten des Relais ohne Last läuft sowohl im Debugger 
als auch im richtigen Betrieb.

Was sollte noch zusätzlich in die Spannungsversorgung um die Bedingungen 
zu verbessern? Kondensator an Reset kann ich ja mal hinzufügen.

Silvio

von Juppo N. (juppo)


Lesenswert?

Hallo
Sich alles anzuschauen ist natürlich Zeitaufwänding.
Generell würde ich die Relais für Motoren über Optokoppler (TLP621) 
ansteuern.
Spannungversorgung über Stromkompensierende Drossel hilft auch gaz gut.
Auch drauf achten das die Relais den DC Strom aushält.

An µP 10 µ Tantal Kondensatoren
An IC 100nf Blockkondensatoren.

usw.
Hatte auch schon das auf dem Tisch alles gut ging,aber wenn die Motoren 
belastet werden die Störungen zu hoch waren.
Dann könnte man auch noch Ferrit Ringe nehmen und die Mororzuleitungen 
einwickeln.
Viel Spass
Juppo

von Anja (Gast)


Lesenswert?

Juppo Nini schrieb:
> Generell würde ich die Relais für Motoren über Optokoppler (TLP621)
> ansteuern.

Wozu? die Störung kommt über die gemeinsame Masseleitung.

Ich würde mir Gedanken um eine anständige Masseverdrahtung machen. 
(Sternpunkte für Leistungsmasse, I/O + Spannungsreglermasse und 
Prozessormasse).
Der Reset-Eingang gehört zusätzlich mit 1-10nF abgeblockt.
D16 ist eher hinderlich. R11 würde ich ca 10-22K dimensionieren.

Alle Stecker/Klemmen gehören auf eine Seite der Leiterplatte (I/O-Masse) 
damit die Störungen nicht durch den Prozessorbereich laufen.
Ich würde zusätzlich noch Filter-Cs für die Komparator-Eingänge und die 
Schaltereingänge am Prozessor spendieren.

Die so genannte "Massefläche" bringt außer einer höheren 
Stromtragfähigkeit keine EMV-Verbesserung. (Dazu müßte sie mit der 
Bestückungsseite vollflächig durchkontaktiert werden).

Gruß Anja

von Silvio G. (technofreak)


Lesenswert?

Hallo

D16 war gedacht um die Schaltung vom PicKit zu trennen bei der 
Programmierung ohne Spannungsversorgung. Aber bei der Größe von R11 geht 
da ja sowieso nicht viel drüber.

Große Ströme auf der Masse gibt es nur zwischen D4, D5, C7 und R4. Die 
liegen mit dem gemeinsamen Masse-Anschlüssen alle am untern Rand der 
Leiterplatte.

Die Positionen der Steckverbinder / Klemmen sind von der alten 
Leiterplatte übernommen und nicht (K6, K7, K8) bzw. nur sehr wenig (K2, 
K3, K4,K5, K9) veränderbar.

Bauteile an Reset, Komparator-In und µC-In werde ich nachrüsten.

Leiterbahnen (abgesehen von den 7 Brücken) auf der Bestückungsseite gibt 
es nicht. Daher kann da auch keine Massefläche durchkontaktiert werden.

Silvio

von Hubert G. (hubertg)


Lesenswert?

Du hast die Spannung für die Relais mit D2 entkoppelt, das gleiche 
solltest du vor dem 7805 auch noch mal machen, und einen Elko dazu.
Wenn du die Möglichkeit hast die Schaltung von einer Batterie aus zu 
versorgen, würde ich das mal probieren. Dann siehst du ob die Störung 
über die Stromversorgung kommt, oder ob es Einstreuungen sind.

von Karl H. (kbuchegg)


Lesenswert?

Silvio G. schrieb:

> Ich habe inzwischen schon mal die Leiterplatte an einem Labornetzteil
> getestet. Nur das Schalten des Relais ohne Last läuft sowohl im Debugger
> als auch im richtigen Betrieb.

Das schreit aber dann schon fast förmlich erst mal nach einem 
Snubber-Glied.

Schaltet das Relais entsteht beim Lösen der Relais-Kontakte im Lastkreis 
an den Kontakten ein kleiner Lichtbogen, der dir mit den dabei 
entstehenden elektromagnetischen Wellen auf die Spannungsversorgung 
deines µC zurückwirkt und ihn zum Absturz bringt.
(Immerhin hat Marconi seine elektromagnetischen Wellen genau so 
hergestellt, mit denen er dann erstmalig über den Atlantik gefunkt hat. 
Bei entsprechend hohen Strömen einen Abrissfunken erzeugen, der kräftige 
EM-Wellen erzeugt).

Du brauchst ein Funken-Löschglied am Relais, vulgo Snubber.

Keine Last - kein Strom im geschalteten Stromkreis
Kein Strom - kein Funke
kein Funke - keine EM-Störungen
keine EM-Störungen - kein Absturz

von Sven K. (Gast)


Lesenswert?

Hi,

wie schaut es mit der Wärme am 7805 bei 23V aus?

Gruß Sven

von Oliver (Gast)


Lesenswert?

Hi,

da ich mich mit dem PIC und Deiner Buildumgebung nicht auskenne: wie 
sind die Interruptserviceroutinen für die nicht maskierbaren ISRs 
implementiert? Gibt es z.B. einen Interrupt, der bei internen Fehlern 
(Adress-, Datenbus o.ä.), SW-Resets, Opcode-Fail, Unterspannung usw. 
ausgelöst wird? Wo würde Dein Programm in diesen Fällen weitermachen?

Tritt der "Pause"-Effekt beim Einschalten des Lichts direkt oder mit 
einer Verzögerung auf?

Tritt der "Pause"-Effekt auch dann auf, wenn Du in der Garage a) die 
Lichtlast abklemmst, den Motor angeschlossen lässt; b) die Lichtlast 
angeschlossen läst und den Motor abklemmst?

Kannst Du ausschliessen, dass es im Einschaltmoment nicht zu einem 
Einbruch der Versorgungsspannungen kommt?

von Silvio G. (technofreak)


Lesenswert?

@ Hubert G.

Du meinst bestimmt D12 nach der Sicherung. Also nach den Relais noch 
eine Diode vor dem 7805?

@ Sven K.

Nach 20 min. mit eingeschalteter LED und ständig schaltendem 
Licht-Relais wird der 7805 ca. 15° wärmer als die Umgebung. Ich kann ihn 
noch problemlos anfassen. Im späteren Betrieb ist die LED auch 
eigentlich aus (außer als Fehlermeldung, dann blinkend mit max. 40% 
On-Time). Sollte also passen.

@ Oliver

Unterspannung macht über Brown Out (bei 2,5V) einen Reset und startet 
das Programm neu. Stack over- oder underflow macht auch einen Reset. 
Watchdog ist disabled. Interrup bei internen Fehlern hab ich im 
Datenblatt nichts zu gefunden. Da aber nach einem solchen Stop die 
Möglichkeit besteht schrittweise weiter das Programmm zu debuggen und 
auch in den einzelnen Speicherstellen Werte stehen die zu dieser 
Programmposition passen schließe ich eigentlich aus dass ein Reset 
stattgefunden hat. Ich denke er geht einfach nur in den Stop, so als 
wenn man in der IDE den Pause-Knopf drückt.

Fall a) Licht ab, Motor dran habe ich nicht probiert, wird nachgeholt.
Fall b) Licht dran, Motor ab war ja mein Testaufbau mit dem ich dieses 
Verhalten erst richtig erkannt habe. Im Programmablauf kamen noch einige 
Fehler vor, die oft auch ein Abschalten des Motors verhinderten und ich 
musste daher den Stecker ziehen um nicht jedes mal die Sicherung 
wechseln zu müssen. Dann steht das Programm ja sowieso.

Ich denke am Einbruch der Versorgung infolge zu hoher Last liegt es 
nicht, da das Programm häufiger beim Ausschalten (so ca. 70%) als beim 
Einschalten des Relais stehen bleibt.

@ Karl Heinz

Ich werd mich da mal schlau machen.

Silvio

von Hubert G. (hubertg)


Lesenswert?

Silvio G. schrieb:
> Du meinst bestimmt D12 nach der Sicherung. Also nach den Relais noch
> eine Diode vor dem 7805?

Ja, das meinte ich und noch einen Elko dazu.

C6 sollte doch der Snubberkondensator sein, ob die Dimensionierung 
stimmt?
Ein 220 Ohm Widerstand in Serie? Ob bei dieser Größe schon notwendig, 
kann ich nicht sagen.

von Oliver (Gast)


Lesenswert?

Hallo Silvio,

welche Leistung hat die Lichtlast und um welchen Typ handelt es sich: 
Leuchtstofflampe oder Glühlampe (induktive bzw. ohmsche Last)?

Hattest Du schon geschrieben, wie Du die Steuerung aus dem Fehlerzustand 
bringst? Geht das nur über einen Reset (über den Resetpin oder über das 
Ziehen der Versorgungspannung) oder fängt sich Dein Programm von alleine 
wieder?

Ansonsten würde ich den Code dahingehend instrumentieren, dass die LED 
einmal exklusiv aus der Mainloop und in einem zweiten Schritt exklusiv 
aus der ISR getoggelt wird - evtl. gibt Dir das Hinweise darüber, wo 
sich Dein Programm im Fehlerzustand befindet.

Mir ist aufgefallen, dass Du anscheinend kein Freund von 
Funktionsprototypen bist (was ja vom Compiler auch toleriert wird) und 
dass Du mit einigen Funktionsparametern Berechnungen bzw. Bitoperationen 
ausführst. Könnte es evtl. sein, dass Du bei der Implementierung von 
anderen Datentypen ausgegangen bist, als sie letztendlich tastächlich 
vom Compiler definiert wurden? Versuch's doch mal mit 
Funktionsprototypen für alle Deine Funktionen und aktivier' den 
Prototypencheck in den Compileroptionen.

Gerade bei Systemen mit "Sicherheitsaspekten" (hier: automatisches 
Schliessen des Tores) sollte eigentlich immer ein Watchdog die korrekte 
Funktion der Controllers absichern. Hast Du ihn aus einen bestimmten 
Grund deaktiviert und verändert sich das Fehlerbild, wenn Du ihn 
aktivierst?

Das ein Programm auf einem funktionierenden Controller (und 
funktionierendem Quarz!) ohne angeschlossenen Debugger 'einfach so' 
anhält, habe ich bisher nicht erlebt.

Gruß,
Oliver

von Oliver (Gast)


Angehängte Dateien:

Lesenswert?

Hi,

ich bin mir nicht sicher, ob es ein Problem darstellt, aber ist die 
Anbindung von D11 / des Spannungsreglers an +24V wirklich optimal?

Wäre die Variante im Anhang nicht besser (dort wird die 
Induktionsspannung im Abschaltaugenblick direkt über D11 
kurzgeschlossen, ohne dass der Spannungsregler davon betroffen wäre).

Gruß,
Oliver

von Silvio G. (technofreak)


Lesenswert?

Hallo

C6 war in der originalen Steuerung auch so drin ohne zus. Widerstand. Da 
hängt eine Glühlampe dran, ich denke mal 40 oder max. 60 Watt. Leitung 
zwischen Lampe und Klemme max. 15 cm.

@ Oliver

Beim Debuggen reicht es in der IDE einfach wieder auf Start oder 
Einzelschritt zu drücken und das Programm scheint normal im Programm 
weiter zu laufen.

Watchdog hab ich mir erstmal noch keine Gedanken drüber gemacht, da er 
ja den Test und die Fehlersuche eher behindert als zu helfen. In der 
fertigen Anwendung ist die Benutzung natürlich schon sinnvoll.

Silvio

von Silvio G. (technofreak)


Lesenswert?

@ Oliver

werd ich beim Einbau der von Hubert G. vorgeschlagenen zusätzlichen 
Diode berücksichtigen.

Silvio

von Anja (Gast)


Lesenswert?

Oliver schrieb:
> Wäre die Variante im Anhang nicht besser (dort wird die
> Induktionsspannung im Abschaltaugenblick direkt über D11
> kurzgeschlossen, ohne dass der Spannungsregler davon betroffen wäre).

Klar, die Diode ist zu weit weg vom Relais.
Aber ich denke das allein wird das Problem nicht lösen.

Gruß Anja

von Silvio G. (technofreak)


Lesenswert?

Hallo

könnte die Einkopplung auch direkt in die Verbindung vom µC zum PicKit 
stattfinden? Die Leiterplatte hängt kopfüber im Gehäuse und der PicKit 
hängt ca. 10 bis 15 cm darunter. Verbunden sind beide über Flachband 10 
adrig mit
1 = Vdd
2 = Gnd
3 = Vpp
4 = Gnd
5 = PGC
6 = Gnd
7 = PGD
8 = Gnd
9 = Gnd
10 = Gnd

Silvio

von Oliver (Gast)


Lesenswert?

Hi,

hängt das PicKit tatsächlich nur an dieser Flachbandleitung in der Luft 
oder hast Du die Verbindung über eine zusätzliche Zugentlastung 
entlastet? Falls nicht, könnte ich mir schon vorstellen, dass das PicKit 
durch eine mechanische Erschütterung (ausgelöst durch das Schalten des 
Relais) aufgrund von Kontaktproblemen kurzzeitig die Verbindung zum uC 
verlieren könnte. Dann sollte dies aber auch beim Schalten der anderen 
Relais auftreten.

Wie sieht es denn ohne PicKit aus - gibt es dann irgendwelche 
auffälligen Problem beim Ausschalten des Lichts?

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.