Forum: Mikrocontroller und Digitale Elektronik ATMEGA32 Prellspitzen abfangen


von Dietmar P. (dietmar2)


Lesenswert?

Hallo,

Ihr habt mir vor Monaten mit meiner Schaltung (Überwachung offene 
Fenster / Türen auf einer Anzeigetafel) geholfen.
Realisiert habe ich dies mit Reedkontakten, SPI zwischen Leitungseingang 
und der etwas entfernten Anzeigetafel (LEDs). Gesteuert wird das Ganze 
mit einem ATMEGA32.
Funktioniert seither gut, jetzt das "Aber".

Wenn im Gang das Licht mittels Taster und Eltako ein-/ausgeschaltet wird 
erhalte ich offenbar Prellspitzen, die totz gut gesiebterSpannung (nach 
Gleichrichtung 1000µF, vor und hinter dem 7805 100nF) bis in den 
ATMEGA32 durchschlagen. Einige LEDs gingen kurz an.
Ich habe dies mit der Software weitestgehend über einen Signalvergleich 
mithilfe einer Zeitkonstanten (Schleife) beseitigt.

Nun bin ich an einem Tiefpass direkt vor dem µC. der µC zieht im 
Normalbetrieb ca. 4,5 mA.

Habt Ihr für diesen Anwendungsfall für das R-C-Glied Beispielwerte? 
Rechnen kann ich das nicht und mit dem Ausprobieren werde ich wohl nie 
fertig.

Danke vorab für Eure Hilfe.

Dietmar P.

von Helmut L. (helmi1)


Lesenswert?

Zeig mal die Schaltung wie du was verbunden hast.

Solche Sachen muessen nicht ueber die Versorgungsspannung passieren 
sondern koennen auch ueber die Eingaenge in den uC reinkommen. 
Ein/Ausgangleitungen zum uC macht man nur so schnell wie noetig nicht so 
schnell wie moeglich.

von Dietmar P. (dietmar2)


Angehängte Dateien:

Lesenswert?

Anbei mal meinen Schaltplan der µC-Platine.

Die Versorgungsspannung kommmt über PortC "Verteiler" vom Netzteil.

Der Takt für PL / ... und MISO beträgt ca. 500 Hz.

Habe den Schaltplan aus Versehen zweimal angehängt.

: Bearbeitet durch User
von Karl H. (kbuchegg)


Lesenswert?

Dietmar P. schrieb:

> Ich habe dies mit der Software weitestgehend über einen Signalvergleich
> mithilfe einer Zeitkonstanten (Schleife) beseitigt.

Zeig mal deine Software.
Das müsste schon mit dem Teufel zugehen, wenn du durch die PeDa 
Entprellung irgendwelche Prellspitzen durchbringst. Das wäre das erste 
mal, dass ich von der ein 'Versagen' hören würde. So schliessig konnten 
bisher Taster gar nicht sein und die konnten so viel prellen wie sie 
wollen, bisher kam diese Entprellung immer wunderbar damit klar.

Deine Verwendung des Wortes 'Schleife' macht mich allerdings hellhörig.

: Bearbeitet durch User
von Dietmar P. (dietmar2)


Angehängte Dateien:

Lesenswert?

Anbei einmal das Pgroamm mit der Schleife.

LV1 und LV2 deshalb, weil ich 32 Leitungen habe.
Also, bei jedem 70.ten Durchlauf bei gleichen Ergebnis wie bei erstem 
Durchlauf erfolgt der Parallelshift für das SPI.
Das sollte meine Dämpfung sein und bewirkt eine Verzögerung von ca. 0,5 
Sekunden.

Gesteuert wird das Programm von main.c

von Dietrich L. (dietrichl)


Lesenswert?

Dietmar P. schrieb:
> Anbei mal meinen Schaltplan der µC-Platine.

Und wo hängen jetzt die Reed-Kontakte dran und wie sind sie verschaltet?
Wie lang ist die Leitung?

Wenn es PB0...PB4 ist, die Reedkontakte nach GND schalten, Du die 
internen Pullups benutzt und die Leitungen > 20..50cm lang sind, sind 
Störungen über die Eingänge vermutlich die Ursache.
Dann brauchst Du eine Schutzbeschaltung / ein Eingangsfilter.
Einfachversion:
1
 Vcc
2
  |
3
  R1 (z.B. 2,2kOhm)
4
  |
5
  +--R2-- (z.B. 10kOhm) --> Port-Pin
6
  |
7
Reed
8
  |
9
 GND
Luxusversion (mit Tiefpass):
1
 Vcc
2
  |
3
  R1 (z.B. 2,2kOhm)
4
  |
5
  +--R2--+--R3-- (beide z.B. 10kOhm) --> Port-Pin
6
  |      |
7
Reed     C (z.B. 100nF)
8
  |      |
9
 GND    GND

Gruß Dietrich

von DingsDa (Gast)


Lesenswert?

Als erstes würde ich mal einen 100 nF an die Vcc des Atmels hängen.
Fehlt zumindest im Schaltplan.

Da die Störung vom Eltako kommt, wird ein VDR parallel zu den 
Schaltkontakten und der Spule Wunder bewirken. Das unterdrückt Dir die 
Spannungsspitzen im 230V Netz während des Schaltens.

Entsprechendes würde ich auch am Netzteileingang Deiner Schaltung machen 
und
noch ein ein XY-Filter einbauen. Dann ist von der Seite schon mal Ruhe.

Wie ist denn Deine Anzeigetafel angebunden? D.h., ist das 
Verbindungskabel
geschirmt? Wahrscheinlich nicht(!)?

von Dietmar P. (dietmar2)


Angehängte Dateien:

Lesenswert?

Hier jetzt den Leitungseingang und den "Sender".

Die Reedkontakte liegen auf GND. Ist ein Kontakt offen so wird der 
Eingang über den 10k auf high gezogen.

: Bearbeitet durch User
von Karl H. (kbuchegg)


Lesenswert?

Dietmar P. schrieb:
> Anbei einmal das Pgroamm mit der Schleife.
>
> LV1 und LV2 deshalb, weil ich 32 Leitungen habe.
> Also, bei jedem 70.ten Durchlauf bei gleichen Ergebnis wie bei erstem
> Durchlauf

... wie bei der letzten Veränderung. Zmindest ist es so programmiert. 
Solle aber keine Auswirkungen haben

> erfolgt der Parallelshift für das SPI.

?
Den Teil versteh ich nicht.
Zeig mal den Teil, wie du diese Funktion benutzt.

> Gesteuert wird das Programm von main.c

die sehe ich aber nicht.

> Das sollte meine Dämpfung sein und bewirkt eine Verzögerung von ca. 0,5 
Sekunden.

mit dem vorhandenen Code kann ich das nicht nachvollziehen. Aber 0.5 
Sekunden sind schon ganz schön viel Holz. Da sollte eigentlich nichts 
mehr 'wackeln'.
Ich muss den Code noch mal studieren. So recht bin ich mit dem noch 
nicht warm.

Ich sehe auch noch nicht, wie man mit dieser Auswertefunktion ein 
Ergebnis bekommen würde. Oder besteht das Ergebnis nur in der 
Information: irgendwo ist noch was offen?

: Bearbeitet durch User
von Helmut L. (helmi1)


Lesenswert?

So wie deine Schaltung aufgebaut ist must der uC sich fast bei jedem 
pips aus dem Tritt bringen lassen.

1. Keine Stuetzkondensatoren
2. Keine Eingangsfilter an den Inputs
3. Kein Filter in der Versorgungsleitung

Dann noch die Frage vernueftige Platine mit GND Plane oder so auf 
Lochrasterkarte.

von Karl H. (kbuchegg)


Lesenswert?

Karl Heinz schrieb:

>> erfolgt der Parallelshift für das SPI.
>
> ?
> Den Teil versteh ich nicht.
> Zeig mal den Teil, wie du diese Funktion benutzt.

Auf jeden Fall klingt es nicht logisch.
Der Ablauf müsste sein
1
...
2
3
  while( 1 ) {
4
    Parallelshift geben
5
    Schieberegister einlesen
6
    auswerten, wobei 70 mal hintereinander das gleiche
7
    Ergebnis kommen muss, damit die Auswertung loslegt
8
9
    entsprechende Verzögerung
10
  }

d.h. das Einlesen der Schieberegister erfolgt im ständigen Wechsel mit 
der Entprellung und nicht erst nachdem die Auswertung ihr ok gegeben 
hat.
Denn wenn du 70 mal dieselben Werte prüfst, ist klar dass da irgendwann 
mal die 70 erreicht werden.
Die 70 werden erreicht, weil die übergeordnete Schleife bei 70 jeweils 
neuen Abfragen der Schieberegister jedesmal dasselbe Ergebnis gebracht 
hat und nicht weil 70 überprüfungen einer einmaligen Abfrage ergeben 
hat, dass sich nichts verändert.

Aber zeig am besten mal mehr Code. So ist das für mich noch nicht 
nachvollziehbar, was du da programmiert hast.

: Bearbeitet durch User
von Dietmar P. (dietmar2)


Lesenswert?

OK, erst mal danke für Eure Informationen.

@helmi1:
Nein, nein, keine Lochrasterplatine, ist 'ne gedruckte Schaltung.

1. ok, sollte ich nachholen
2. Was für ein Filter?
3. dto. Versorgungsleitung?

@ kbuchegg:

Kurz zur Funktion.
Die Leitungseingänge liegen am 74HC165 an. Die Information ob offen / 
geschlossen wird als 1 / 0 als MISO per Leitung an den 74HC595 und an 
den Prozessor gegeben.
Im Prozessor erfolgt der Vergleich des Leitungszustandes (für alle 32 
Objekte) zum Zeitpunkt 1 und Zeitpunkt 70. Nur bei gleicher Information 
wird das Ergebnis per Parallelshift angezeigt.

Die Schaltung und das gesamte Programm ist recht komplex, des kann ich 
nicht alles hier zeigen.

: Bearbeitet durch User
von Karl H. (kbuchegg)


Lesenswert?

Dietmar P. schrieb:

> Die Schaltung und das gesamte Programm ist recht komplex, des kann ich
> nicht alles hier zeigen.

OK. Dann nicht.
Abgesehen von deinen Hardware-Sünden denke ich aber trotzdem, dass du 
hier im Programm einen Bock geschossen hast.
Deine Entprellung kommt mir erstens deutlich zu kompliziert vor und ob 
die  zweitens tatsächlich entprellt, davon bin ich noch lange nicht 
überzeugt. Im Moment denke ich eher, du verzögerst da zwar etwas rum, 
aber im Grunde 'beisst' dein Code immer noch beim geringsten Puls. Etwas 
verzögert zwar, aber er beisst.

> MISO per Leitung an den 74HC595

Wo kommt da jetzt auf einmal ein 595 ins Spiel?

: Bearbeitet durch User
von Helmut L. (helmi1)


Lesenswert?

Dietmar P. schrieb:
> Nein, nein, keine Lochrasterplatine, ist 'ne gedruckte Schaltung.
>
> 1. ok, sollte ich nachholen
> 2. Was für ein Filter?


So wie Dietrich dir das schon gezeigt hat.
Beitrag "Re: ATMEGA32 Prellspitzen abfangen"

Leitungen die nach draussen gehen macht man immer niederohmig damit die 
sich nichts einfangen. Die internen Pullup im Bereich von 50 .. 100K 
sind da viel zu hochohmig.

> 3. dto. Versorgungsleitung?

Kleine Drossel in Reihe und Kondensator nach GND.

von Dietmar P. (dietmar2)


Lesenswert?

@ helmi1:

Danke, damit kann ich etwas anfangen. Werde mal die Überarbeitung der 
Schaltung ins Auge fassen.

@kbuchegg:

Leitungen geben Information in das Parallelregister des 165. Beim 
Parallelshift-Impuls werden alle Informationen zur Taktzeit 0 in das 
Schieberegister geladen. Taktzeit 1 bis 32 schiebt die Informationen 
(MISO) per Leitung an an den 595. Dort ebenfalls in das Schieberegister. 
Zur Taktzeit 0 werden die Informationen aus dem Schiebergister in das 
Parallelregister geladen an dem die LEDs hängen.

Meine Dämpfung besteht nun darin, dass beim Zyklus 1 und Taktzeit 0 der 
Parallelshift beim 165 und 595 erfolgt. Der momentane Leitungszustand, 
den ich parallel zum Schieberegister im 595 auch im Prozessor in ein 
Register geladen habe wird dann bei der Taktzeit 70 mit dem Zustand 
Taktzeit 1 verglichen. Wenn das Ergebnis gleich ist, erfolgt der 
Parallelshfit für den 595 und die Auswertung wegen eines evtl. Alarms. 
Ändert sich der Leitungszustand zwischen Taktzeit 1 und 70 wird alles 
zurückgesetzt und wieder bei 1 begonnen.

Ich habe das mit einem Durchlaufzähler gelöst, könnte man wahrscheinlich 
leichter (?) über eine Zeitkonstante lösen.

Gruß

: Bearbeitet durch User
von Dietmar P. (dietmar2)


Lesenswert?

Nach zwei Jahren und dem Horror vor dem Herstellen kompletter, neuer 
Platinen hatte ich eine Idee zur Lösung meines "Prellproblems" bei 
mechanischen Schaltspitzen (Kühlschran, Eltako, usw.)

Habe direkt nebem dem Mega-32, so eng wie möglich, auf die Platine zwei 
Kondensatoren angebracht:

1. 10 µF (!) zwischen Versorgungsspannung VCC und GND
2. 10 nF zwischen PC4 (mein Info-/Miso-Eingang) und GND

Das System läuft, ansonsten ungeändert, seit Wochen absolut stabil.

Billig gelöst.
Wollte das nur abschließend berichten.

Gruß

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.