Hallo,
ich habe ein Problem mit meinem Arduiono und den Interrupts.
Ich habe ein Signal, das 2,5 Volt hat. In das Signal sind negative Peaks
auf ca. 0,5 bis 1 V geprägt.
Also so:
----- ------- 2,5V
| |
| |
|_| 0,5V
_____________0V (Gnd)
Mit dem Arduino möchte ich nun die positiven und negativen Flanken
detektieren um eine LED ein, bzw. auszuschalten. Außerdem sollen die
negativen Flanken gezählt werden.
Zum Testen habe ich das Signal mit einem Taster näherungsweise
dargestellt. Alles hat funktioniert.
Wenn ich aber mein reales Signal, dass ich habe an den Pin anlege
funktioniert es nicht mehr, da das Signal anscheinend zu stark rauscht.
Es gibt kleinere Peaks, die ich nicht haben will, die von 2,5V aus ca.
200mW nach oben und untern reichen. Also insgesamt rauscht das Signal
ungefähr 400mW breit.
Die LED flackert nur noch uns es werden viel zu viele negative Flanken
gezählt.
Werden diese Peaks auch schon als Flanken detektiert?
Was kann ich dagegen tun?
rollmops schrieb:> ich habe ein Problem mit meinem Arduiono und den Interrupts.
Wenn es ein 5V-Arduino ist dann hast du schon deswegen
Probleme weil dein Signal sich in einem undefinierten
Bereich bewegt.
Um dein Signal sauber zu detektieren brauchst du einen
Komparator dazwischengeschaltet.
rollmops schrieb:> Was kann ich dagegen tun?
Eine ordentliche Schaltung aufbauen ?
Ein Eingang ist doch nicht per Definition für jedes noch so krude Signal
geeignet was du da reinstopfst.
Sondern man muss sich schon an die Datenblattvorschläge was als high und
was als low erkannt wird halten.
Also brauchst du bei deinem schlechten Signal eine
Signalpräkonditionierung, die Rauschen entfernt und die Signalpegel auf
high und low verstärkt.
Vielleicht ein externer Komparator.
Vielleicht ist dein Signal auch ok, und man kann elektronisch entstören,
so wie man Taster entprellt, weil man weiss, was ein zulässiges Signal
wäre und was Störungen sein müssen.
Übrigens liefern Taster auch kein saoberes Signal bei dem man Flanken
zählen kann. Wenn es damals also funktionierte, hast du die Fehlfunktion
bloss nicht gesehen....
Beim testen hat mein Programm natürlich die Flanken mitgezählt, als der
Taster geprellt ist. Aber ich wusste ja, dass das passiert und habe es
toleriert. Ich wollte ja nur sehen on mein Programm so funktioniert.
Ich habe schon eine kleine Schaltung gebaut. Die ist aber noch falsch.
Ich weiß leider nicht wie ich die Zeitkonstante ausrechne. Ich habe nur
einen Kondensator mit 1µF, Widerstände habe ich aber alles bis 1 Mega
Ohm. Würde es mit einem Spannungsteiler machen ( vllt. 1:10).
Kann es sein, dass man bei meiner Schaltung fie Zeitkonstante so
ausrechnet: ((R1*R2)/(R1+R2))/C = tau ???
Kann mir bitte jemand die richtige Gleichung sagen?
Ein weiteres Problem, das ich habe, ist dass die Peaks beim
Ausgangssignal (roh) von 0 bis auf -5 Volt fallen. An meinem Arduino
Anschluss geht das Signal aber nur von 2,5 V los. Liegt aber am
Spannungsteiler.
Ich bin mir nicht sicher was mit meinem Kondensator nicht stimmt (bzw.
Schaltung), wenn ich den Aufbau eine Weile laufen lasse, dann
verschwinden die negativen Peaks auf dem Oszi. Der Kondensator lässt sie
nicht mehr durch. Wenn ich dann die Masse von meinem Eingangssignal kurz
von der Masse des Arduinos trenne und dann wieder anschließe, passt
wieder alles. Aber man kann zuschauen wie in einer bis zwei Minuten die
Peaks immer näher an 2,5 V rangehen, bis sie im rauschen untergehen.
Hallo,
schöne Idee um Informationen zwischen verschiedenen Potenzialen zu
übertragen. Ich habe so etwas schon mal im LTSpice simuliert und hat gut
funktioniert.
Entferne einfach den unteren 1 MOhm. Die Pulse hinter dem Kondensator
müssen ja von 5 V nach 0 V gezogen werden, nicht von 2,5 V.
Schöne Grüße
Michal
rollmops schrieb:> Ich habe schon eine kleine Schaltung gebaut.
Du willst es nicht kapieren? Dein 5V Arduino weiss
nicht was er mit einem Pegel von 2.5V anfangen soll.
Arduinoquäler schrieb:> Du willst es nicht kapieren? Dein 5V Arduino weiss> nicht was er mit einem Pegel von 2.5V anfangen soll.
Ich sag doch, dass ich weiß, dass der Spannungsteiler falsch ist. Bei
1:1 werden die 5V auf 2,5V geteilt.
Ich will aber noch nichts neues bauen, weil ich nicht weiß wie ich die
Zeitkonstante ausrechne.
Du brauchst nich viel rechnen. In meinen Simulationen hat es mit breitem
Spektrum von R und C sehr gut funktioniert, auch runter in nF und kOhm
Bereich.
Das Konzept ist gut.
Das einzige was wichtig ist, die High Zeiten müssen wesentlich länger
als die Low Pulse dazwischen sein, damit sich das High Level über den
oberen pull up Widerstand wieder aufladen kann. Sonst wandert das Low
Pegel langram hoch.
Gräße
Michal
Michal P. schrieb:> Das einzige was wichtig ist, die High Zeiten müssen wesentlich länger> als die Low Pulse dazwischen sein, damit sich das High Level über den> oberen pull up Widerstand wieder aufladen kann.
Das muß garnicht sein. Die Eingangsdioden beim AVR 'klemmen' das Signal
auf den richtigen Pegel.
m.n. schrieb:> Die Eingangsdioden beim AVR 'klemmen' das Signal> auf den richtigen Pegel.
??? Nö. Was das Signal am Arduino-Eingang wieder hochzieht ist einzig
und alleine der pull up Widerstand. Es würde sogar der µC interne 40
kOhm funktionieren. Sonst ist der Eingang alleine ja hochimpedant
passiv.
Habe es jetzt hinbekommen.
Habe einen Optokoppler von meinem Kollegen vorgeschlagen bekommen, damit
funktioniert es einwandfrei.
Vielen Dank für eure Hilfe!!!
rollmops schrieb:> Ich habe schon eine kleine Schaltung gebaut.
Wenn die eingetragenen Signalpegel und Formen richtig sind:
Einfach GND der Quelle mit +5V des uC verbinden.
Wenn das nicht geht: Einfach die unteren 1M entfernen, ich würde auch R
mit 19k und C mit 100nF dimensionieren, weil sonst die Einschwingzeit,
also die Zeit zwischen einschalten der Versorgung und Funktion der
Schaltung zu lange dauert.
Falls deine Quelle niederohmig ist (mehr als 20mA liefern kann): Noch
zumindest 4k7, besser 10k vor den C in Reihe.