Hallo Leute, habe ein paar EMV Probleme mit dem ICP des Attiny2313. Ich benutze den ICP um das schalten eines Reed-Kontaktes zu erfassen. Das Potenzial am ICP wird über einen 10k Widerstand auf 5V gezogen, der Reed-Kontakt zieht es dann bei Bedarf auf 0V. Sporadisch kam es dabei in der "rauen Wildnis" zu Fehlauslösungen. Diese konnte ich jetzt mittels einer Leuchtsoffröhre (siehe http://www.mikrocontroller.net/articles/EMV_Einfache_Tester) schön nachbilden (siehe Anhang). Hab folgendes im Angebot was mir spontan eingefallen ist: - 100nF Abblockkondensator parallel zum Reed-Kontakt - Pull-Up-Widerstand verkleinern (1k) Was schlagt ihr als Entstörung vor? Wie kriege ich das ganze einigermaßen EMV fest?
Patrick L. schrieb: > Ich benutze den > ICP um das schalten eines Reed-Kontaktes zu erfassen. Wie schnell muß denn auf den Kontakt reagiert werden? Die sichere Methode ist, alle mechanischen Kontakte grundsätzlich mit Timerinterrupt + Entprell-SW abzufragen.
Ja das mache ich bereits: Sobald der ICP auslöst springe ich in die betreffende ISR und speere den "eigenen" Interrupt für 1sek. Nach 1sek gebe ich diesen in der main wieder frei. Der ICP wird nur so alle 10-20sek ausgelöst. Aber durch "einstreungen" löst er halt manchmal an stellen aus wo er nicht auslösen soll. Was ich vllt. erwähnen sollte: Ich nutze den ICP als "Zeitbasis", es hilft mir als nichts wenn ich durch die Änderung nicht mehr den genauen Schaltpunkt des Reed-Kontaktes erfassen kann. Alles was den Threshold nicht mehr als 10ms verändert ist ok.
das ist nicht entprellen. Du musst z.B. einige Male hintereinander den gleichen Zustand haben, damit der als gültig erkannt wird. Ansonsten hilft ein Tiefpass immer... lass die 10k An 5V und mach von da einen 100k mit 100nF. Das sollte reichen.
Patrick L. schrieb: > speere den "eigenen" Interrupt für 1sek. Was bloß mit Entprellung nicht das geringste zu tun hat. Patrick L. schrieb: > Alles was den Threshold > nicht mehr als 10ms verändert ist ok. Dann ist die bewährte Entprellung mit 4-fach Abtastung a 10ms ja gerade ausreichend. Die Routine nimmt es aber auch nicht übel, wenn man schon alle 1..5ms abtastet.
Patrick L. schrieb: > Ja das mache ich bereits: Sobald der ICP auslöst springe ich in die > betreffende ISR und speere den "eigenen" Interrupt für 1sek. Nach 1sek > gebe ich diesen in der main wieder frei. Der ICP wird nur so alle > 10-20sek ausgelöst. Das ist doch keine Entprellung. > Aber durch "einstreungen" löst er halt manchmal an stellen aus wo er > nicht auslösen soll. Dafür ist auch die Entprellung zuständig. Nämlich zu unterscheiden zwischen "Einstreuungen" und Tastenbetätigung. > Was ich vllt. erwähnen sollte: Ich nutze den ICP als "Zeitbasis", es > hilft mir als nichts wenn ich durch die Änderung nicht mehr den genauen > Schaltpunkt des Reed-Kontaktes erfassen kann. Alles was den Threshold > nicht mehr als 10ms verändert ist ok. 10ms. Frag den Reed jede ms ab, entprell den vernünftig und lies das Timerregister aus. mfg.
Versteh ich irgendwie nicht?? Also der ICP sorgt doch dafür das, wenn es z.B. zu einer fallenden Flanke am ICP-Pin kommt die betreffende ISR aufgerufen wird. Das klappt auch super. Und dadurch das ich den Interrupt nach einer Flanke für 1sek sperre wird dieser in der Zeit auch nicht wieder aufgerüfen. Und nach 1sek ist das prellen des mechanischen Kontaktes schon lange vorbei. Denke ich da was falsch? Klappen tut es zumindest schon eine ganze weile so.
Patrick L. schrieb: > Versteh ich irgendwie nicht?? Also der ICP sorgt doch dafür das, wenn es > z.B. zu einer fallenden Flanke am ICP-Pin kommt die betreffende ISR > aufgerufen wird. Das klappt auch super. Und dadurch das ich den > Interrupt nach einer Flanke für 1sek sperre wird dieser in der Zeit auch > nicht wieder aufgerüfen. Und nach 1sek ist das prellen des mechanischen > Kontaktes schon lange vorbei. Denke ich da was falsch? Klappen tut es > zumindest schon eine ganze weile so. Aber den Thread hast du doch aufgemacht, weil es manchmal nicht klappt. Z.B. wenn deine Leuchtstofflampe schaltet. Das gibt ein paar Peaks am ICP, und der erste löst den Interrupt aus. Eine Entprellung filtert das weg und erkennt nur das als Taster, was ein bisschen länger dauert als ein Peak oder zwei oder drei. mfg.
Ja richtig deswegen hatte ich ja an sowas wie einen Kondensator parallel gedacht. Ich werde mal die oben beschriebene Lösung mit dem RC-Glied parallel zum Reed-Kontakt ausprobieren.
So habe einen 100nF parallel zum Reed-Kontakt ausprobiert, der ICP triggert jetzt zumindest nicht mehr beim einschalten der Leuchtstoffröhre ;-) Ein wenig gezappel lässt auf dem Oszilloskop aber immer noch erkennen. Evtl. werde ich noch ein wenig mit dem Wert des Kondensators herumspeielen. Leider ist die Leuchtstoffröhrenvariante nicht so toll reproduzierbar, dass man klare aussagen machen könnte. Einen Widerstand in Reihe zum 100nF (Wie oben und hier: http://www.mikrocontroller.net/articles/Entprellung beschrieben) habe ich zunächst nicht mit eingebaut. Bevor das gehaue losgeht versuche ich auch mal darzulegen warum ich den weg gelassen habe: Die Anwendung ist ein Laptimer für ein Kart. Auf einigen Kartstrecken sind Permanentmagneten in die Fahrbahn eingelassen um eine Zeitmessung zu ermöglichen. Ich nehme an, dass sich das Kart mit max. 100km/h über diese ca. 1cm breite Magnetschleife drüber fährt. Das ergibt eine Zeit von ca. 0,36ms die der Reed-Kontakt den Pegel am ICP-Pin auf low zieht. Ein Widerstand würde die Zeitkonstante vergrößern, was mitunter nicht mehr dazu reichen würde den ICP zu triggern.
Patrick L. schrieb: > So habe einen 100nF parallel zum Reed-Kontakt ausprobiert, Hoffentlich hält das der Reed-Kontakt auf Dauer aus. Der Kurzschlußstrom kann zum Verschweißen der Kontakte führen. Gruß Anja
Hallo Patrik L. Du hast das mit dem entprellen noch immer nicht verstanden.... Störungen wirst Du immer irgendwelche haben, einiges kann ein Kondensator (am besten plus Spule) wegfiltern. Doch entprellen per SW geht ganz anders: Du fragst den Pin ab, ob das Relais geschaltet hat. Dann etwas warten, nochmal abfragen: "liegt der Impuls noch an?", etwas warten, nochmal abfragen..... In die ISR wird erst dann gesprungen, wenn alle Abfragen mit "Ja" beantwortet werden. Wenn irgendein "Nein" dablei ist, wird halt nicht gesprungen und die Komplette Abfrageroutine neu gestartet. Die Anzahl der Abfragezyklen kannst Du nach Bedarf optimieren. Ich habe mit dem eigentlichen Programmieren nix am Hut, das es aber so gemacht wird, steht in jedem Anfängerhandbuch ;-) Old-Papa
Ja das ist mit bewusst das es im eigentlichen Sinne dann kein "Entprellen" ist. Aber das von dir beschriebene Szenario erledigt ja im Prinzip auch der Noise Canceler den man im Timer Register dazuschalten kann. Anja schrieb: > Hoffentlich hält das der Reed-Kontakt auf Dauer aus. > Der Kurzschlußstrom kann zum Verschweißen der Kontakte führen. Das ist ein Effekt den ich so noch nicht mit bedacht habe. Ab welchen Strom würden die Kontakte den Verschweißen?
Patrick L. schrieb: > Was schlagt ihr als Entstörung vor? Wie kriege ich das ganze > einigermaßen EMV fest? Mein Vorschlag, der PCINT nutzt aber auch mit ICP geht: Beitrag "EIN-AUS mit Taster per Interrupt, ATtiny25 o.ä."
Patrick L. schrieb: > Das ist ein Effekt den ich so noch nicht mit bedacht habe. Ab welchen > Strom würden die Kontakte den Verschweißen? Da musst Du den Kontakt (bzw. sein Datenblatt) fragen. Das nutzt Dir aber nur teilweise, weil der Strom beim Kurzschließen eines geladenen Kondensators theoretisch unendlich sein kann. Begrenzt wird er nur durch den ohmschen und induktiven Widerstandsanteil von Kondensator und Leitung. Bevor Du da lang grübelst, nimm doch einfach einen Widerstand :-) Gruß Dietrich
Dietrich L. schrieb: > Bevor Du da lang grübelst, nimm doch einfach einen Widerstand :-) Jap mach ich.
Warum willst du dein Problem partout per Hardware lösen ? Die Softwarelösung per ausgewerteten Folge-Zustand am I/O-Pin garantiert doch viel mehr Flexibilität. Du mußt Puls-Ereignisse filtern die vom realen Schaltverhalten des Reed-Relais abweichen. Natürlich kann man das mit riesigen Filter-Anordnungen für jede Eventualität machen. Oder halt einfach mit sinnvoller Softwareanordnung. Der Noise Canceler ist ein Peakfilter der Länge 4 Takte (250ns bei 16MHz). Das ist viel zu kurz für richtig penetrante Fehlpulse.
Sind Reedkontakte dank Schutzgasfüllungen nicht gerade genau hierfür besonders gut geeignet und robust? Natürlich sind Kurzschlußströme nicht gut. Aber bei kleinen Kondensatoren sollten sich Reedschalter lange halten, zumal die Zuleitung auch nicht ohne Widerstand und Induktivität ist. Man kann natürlich noch einen kleinen Widerstand hinzufügen. Ich frage mich aber gerade ob für solch eine Anwendung nicht vielleicht Hall-Sensoren besser geeignet wären. Dann hätte man keine Mechanik die durch Erschütterungen gestört werden könnte. Da hätte man auch kürzere Zeiten zum "entprellen" / entstören. 0,36 ms sind für einen mechanischen Schalter keine Ewigkeit. Hinzu kommt noch ein anderes Problem. Wir reden hier beim Thema entprellen aneinander vorbei, da es um zwei Funktionen geht. - Zum einen soll eigentlich verhindert werden, daß ein Interrupt durch das Prellen nicht zig mal pro eigentlichem Impuls ausgelöst werden soll. So gesehen war die Idee mit dem Sperren des Interrupts nach dem Impuls nicht sooo schlecht und hatte doch etwas mit dem Thema zu tun. - Zum anderen soll ein Störimpuls ignoriert werden. Ein Softwarefilter der mehrfach abfragt ist zwar ganz nett, aber wenn die Bedingung ist, daß alle Abfragen positiv sein sollen, können durch die Off-Zeiten beim Prellen echte Signale als Störung gewertet werden. Ein bisschen flexibler sollte es schon sein, bzw. ein Hardwarefilter sollte da unterstützen. Meine erste Idee wäre wie gesagt es mit einem Hallsensor zu versuchen. Denn Reedschalter hätte ich dann getestet wenn es nicht klappt.
Dennis Heynlein schrieb: > Warum willst du dein Problem partout per Hardware lösen ? SW verhindert aber nicht die Zerstörung der Eingänge bei zu hohen Spannungen / Strömen. Falls die Angabe auf dem Oszi (TR1 Pk-Pk: 46,7V) auch nur halbwegs stimmt, würde ich HW als Schutz empfehlen - unabhängig vom Entprellen. Gruß Dietrich
Carsten R. schrieb: > Meine erste Idee wäre wie gesagt es mit einem Hallsensor zu versuchen. > Denn Reedschalter hätte ich dann getestet wenn es nicht klappt. Ja das war auch meine erste Idee. Allerdings hatte ich die relativ schnell verworfen, zum einem weil die üblichen Hersteller in diesem Segment (Alfano, Mychron, etc...) auch Reed-Kontakte einsetzen (http://www.kartbook.net/forum/topics/alfano-magnetic-track-pickup-sensor-repair). Ein anderer Grund liegt auch darin das man bei einem Hall-Sensor auf einem Triggerpegel einigen muss. Da ich aber keinerlei Kentniss über die stärke der Permanentmagnet auf der Kartbahn habe und ich mich auch nicht mit einem Oszi oder dergleichen da hinstellen will bin ich dann bei der elektronsch am einfachsten zu realisierenden Lösung geblieben. Dennis Heynlein schrieb: > Warum willst du dein Problem partout per Hardware lösen ? Zum einem weil ich Störeinflüsse von der Schaltung fern halten will und weil ich Hardware-Lösungen erst einmal Software-Lösungen vorziehe. Auch wenn der Trend heutzutage eher dahin geht möglichst viel in Software umzusetzen :-). Dietrich L. schrieb: > SW verhindert aber nicht die Zerstörung der Eingänge bei zu hohen > Spannungen / Strömen. Falls die Angabe auf dem Oszi (TR1 Pk-Pk: 46,7V) > auch nur halbwegs stimmt, würde ich HW als Schutz empfehlen - > unabhängig vom Entprellen. Ja, die Spannungen passen. Wurden mit einem Gould DSO 450 im Single Shot aufgenommen. Ob diese letzenendlich auch dem Kart montiert auch so groß sind kann ich nicht sagen. Mich wundert es das der Attiny2313 noch nicht seinen Geist aufgegeben hat, da scheinen die internen Schutzdioden ja einiges wegzufedern.
Patrick L. schrieb: > Das ergibt eine Zeit > von ca. 0,36ms die der Reed-Kontakt den Pegel am ICP-Pin auf low zieht. Da würde ich erstmal ins Datenblatt des Reed-Kontakts schauen, wie groß seine Ansprechzeit ist. Die sollte dafür schon <0,18ms sein, um sicher zu schalten. 0,36ms sind etwa 3kHz, da hat selbst ein 10W-Lautsprecher kaum noch eine sichtbare Auslenkung. Mechanik ist träge. Für solche kurzen Pulse nimmt man besser Induktionsspulen oder Hall-Sensoren.
Da stimme ich dir voll und ganz zu. Das das für einen Reed-Kontakt schon recht flott ist. Allerdings bin ich bei der obigen Berechnung auch nur von einem 1cm breiten "Magnetstreifen" ausgegangen. Leider habe ich dahingehend keine konkreten Angaben und habe das erstmal so angenommen. Ob der Magnetstreifen letztendlich breiter ist kann ich nicht sagen. Was aber wohl einigermaßen gesichert ist: Der Hersteller von diesen Laptimern benutzt wie auch schon oben von mir beschrieben ebendfalls Reed-Kontakte. Warum also mit Kanonen auf Spatzen schießen?
Auch die Reed Kontakte haben eine Ansprechschwelle, ähnlich wie die Hall-schalter. Mit etwas Glück könnte man mit den Datenblatt zum Reed kontakt ein Hall IC finden das eine ähnliche Schwelle hat, aber auch den Reed kontakten wird es verschiedene geben. So exotisch die Hallschalter auch nicht mehr: in fast jedem PC Lüfter ist so einer drin. Ganz ohne Entstörung wird es aber auch beim Hall Sensor nicht unbedingt gehen, denn auch da hat man ggf. andere Störimpulse die den Auslösen können. Aber immerhin muss man keine zu hohen Spannungen fürchten.
Gut dann halte ich mir die Option offen für die nächste Revision der Platine. Im Prinzip ist es ja keine großer Aufwand den Reed-Kontakt durch einen Hall-Schalter zu ersetzen. Einen TLE4905 habe ich auch noch zuhause herumliegen der sollte funktionieren. Nur ob er empfindlich genug ist, werde ich wohl nur durch testen herausfinden können.
Warum soll es mit einem Reedkontakt nicht gehen? Beim Fahrradtacho funktioniert es doch auch. Und den bauen sich einige Leute an ihren Yoghurtbecher, um zu testen, ob ihre Honsukawamaha auch wirklich 300 läuft. mfg.
Patrick L. schrieb: > Gut dann halte ich mir die Option offen für die nächste Revision der > Platine. Im Prinzip ist es ja keine großer Aufwand den Reed-Kontakt > durch einen Hall-Schalter zu ersetzen. Einen TLE4905 habe ich auch noch > zuhause herumliegen der sollte funktionieren. Nur ob er empfindlich > genug ist, werde ich wohl nur durch testen herausfinden können. Ich habe die selben Probleme mit einem HAL-Sensor. Das wird dir als nicht viel helfen ...
Ja ich denke da geht wohl nichts über eine gründliche Erprobung auf der jeweiligen Strecke. Am besten werde ich mal die Apparatur in die Hand nehmen und dann von Hand schauen in welchen Abstand der Reed-Kontakt auf das Magnetfeld reagiert. Vllt. lässt sich dann auch erkennen wie breit die eigentliche Magnetschleife ist. Leider habe ich dazu keine Inforamtionen im Netz gefunden. Einzig das zugrunde liegende Patent habe ich gefunden: http://www.google.com/patents/EP0632350B1?cl=de
Zu deinem EMV-Test: Kommen die Probleme durch den Reed-Kontakt oder ist der Eingang das Problem? Wenn der Reed nicht anspringt dann verkleiner die 10k damit dort "ordentlich" Strom fließt. Oder den Test ohne Reed ausprobieren. Ich bin an einer Lösung auch interessiert, bei mir stört die Leuchtstoffröhre und eine Heizung wenn sie zündet.
@Patrick L. Nicht, dass Du es verstanden hättest, aber hast Du Dir meinen obigen Link überhaupt einmal angesehen? Die dortige Schaltung nebst Programm bietet meines Erachtens eine solide Lösung für Dein Problem: RC-Glied als Enstörkomponente und µC als aktives Glied für eine stabile Hysterese. Im Grunde könnte man die Funktion des µC auch durch diskrete Logik aufbauen.
Rudi schrieb: > Zu deinem EMV-Test: > > Kommen die Probleme durch den Reed-Kontakt oder ist der Eingang das > Problem? Wenn der Reed nicht anspringt dann verkleiner die 10k damit > dort "ordentlich" Strom fließt. Oder den Test ohne Reed ausprobieren. > Der Reed-Kontakt ist nicht das Problem eine "Entprellung" habe ich ja drin. Zumindest ausreichend für mein verständnis, auch wenn hier einige anderer Meinung sind. Die Probleme treten mit sowie ohne Reed-Kontakt (Kabelende offen) auf. Gelöst habe ich das jetzt mit einem 100nF Kerko parallel zum Reed-Kontakt. Wobei noch ein zusätzlicher Widerstand in der nächsten Revision der Platine vorgesehen wird. Sollte dann so wie hier aussehen (http://www.mikrocontroller.net/articles/Datei:RC_debouncer.png). Ist dann halt wie ein Tiefpass. m.n. schrieb: > Nicht, dass Du es verstanden hättest, aber hast Du Dir meinen obigen > Link überhaupt einmal angesehen? Ja habe ich. Und wie auch schon oben geschrieben zumindest den Hardware-Teil weitesgehend umgesetzt. Beim Software-Teil bleibe ich bei meiner Lösung über die Interrupt-Sperre. Da bin ich erstmal Beratungresistent ;-)
Hier einige sehr interessante Dokumente über Reed-Schalter: http://www.meder.com/fileadmin/meder/pdf/de/Technische_Dokumente/Die_Funktion_des_Reedschalters.pdf http://www.meder.com/fileadmin/meder/pdf/de/Technische_Dokumente/Umgang-mit-Reedschaltern.pdf http://www.meder.com/fileadmin/meder/pdf/de/Technische_Dokumente/Elektrische_Schutzbeschaltung.pdf http://www.meder.com/fileadmin/meder/pdf/de/Technische_Dokumente/Sensor_Applikation.pdf http://www.meder.com/fileadmin/meder/pdf/de/Produkte/QuaderRund_Mag.pdf http://www.meder.com/fileadmin/meder/pdf/de/Technische_Dokumente/Reedschalter_und_Magnet.pdf
Hier mal ein typischer Kontakt: http://de.farnell.com/hamlin/mdsr-4-22-38/schalter-reed-spst-no-0-5a-200vdc/dp/2103636 Hat 0,6ms Ansprechzeit, ist also für die genannten Anforderungen (0,36ms) eindeutig nicht geeignet.
Peter Dannegger schrieb: > Hat 0,6ms Ansprechzeit, ist also für die genannten Anforderungen > (0,36ms) eindeutig nicht geeignet. Das kann sicherlich ein Problem werden, da stimme ich dir voll und ganz zu. Aber wie auch schon oben geschrieben wurde der Wert (0,36ms) für eine Geschwindigkeit von 100km/h und einer Magnetstreifenbreite von 1cm berechnet. Bei 70km/h und 2cm sieht das schon wieder ganz anders aus --> 1ms. Solange keiner verlässliche Daten darüber hat wie die Magnetschleifen tatsächlich ausgeführt sind, können wir hier nur vermutungen aufstellen. Da hilft nur Trial-and-Error.
So ich bin jetzt mal dazu gekommen eine runde mit dem Kart auf der Strecke zu drehen und will euch meine Ergebnisse natürlich nicht vorenthalten. Die Magnetstreifen sind ca. 1,8cm Breit, der Reed-Kontakt löst aus wenn dieser sich auch unter 2cm an den Magnetstreifen nähert. Die Rundenzeitmessung klappt problemlos. Da ich eine komplett neue Platine gelayoutet habe, hab ich mir auch gleich die Option freigehalten die Drehzahl bzw. Geschwindigkeit zu erfassen. Auch die Drehzahl erfassung geht. Natürlich will ich das ganze der Allgemeinheit keineswegs vorenthalten, deswegen werden hoffentlich mehr Infos in den nächsten Tagen auf folgender Seite zu finden sein: http://defcon-cc.dyndns.org/wiki/index.php/Laptimer
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.