Hallo,
ich habe zur Drehzahlmessung eine Gabellichtschranke verbaut, an der
einmal pro Umdrehung ein Aluplättchen durchgeht. So soll die Drehzahl
meiner Kleinwindanlage gemessen werden.
Zum Problem:
Teilweise funktioniert die Messung, teilweise zeigt mir das Messgerät
auch eine Drehzahl von etwas über 700 U/min oder 400U/min an, obwohl die
Anlage höchstens 200U/min hat. Folglich muss das Interrupt direkt wieder
ausgelöst werden.
Ich habe es schon mit einem Low-Pass-Filter versucht- hat nix geholfen,
auch die Widerstände etwas anzupassen hat leider nicht den gewünschten
Erfolg gebracht.
Weiß jemand wo der Fehler liegen könnte? Vielen Dank im Voraus!
Lichtschranke:
http://www.pollin.de/shop/dt/NDA5ODc4OTk-/Bauelemente_Bauteile/Aktive_Bauelemente/Optoelektronik/Gabellichtschranke_TCST1300_TFK_847_.html
Hier der gekürzte Programmcode:
if(rotationszeit>6000)//Ist nach 6s die Anlage nicht einmal durch die Lichtschranke gegangen, wird die Zeit wieder auf 5000ms zurückgesetzt zur Begrenzung der Daten
Dein Phototransistor ist verpolt.
Auch würde ein Schmitt-Trigger für das Optokopplersignal einen sauberen
Puls formen, wenn man den mit einem angemessenen Tiefpass davor
kombiniert. Eine Totzeit nach einem Interrupt könnte Doppelpulse auch
per Software unterbinden.
Oh stimmt- Der Transistor im Datenblatt verwendet den NPN aber
andersrum- also an der Polung liegts nicht.
Eine Softwareunterbindung könnte ich versuchen. Auch einen
Schmitt-Trigger.
Würde es Sinn machen, das Signal nicht auf der Kollektorseite, sondern
auf der Emitterseite abzugreifen, also auch dementsprechend den
Widerstand auf die Emitterseite zu ziehen?
Im Anhang der Richtige Schaltplan
Die Beschaltung des Optokopplers ist etwas eigenwillig.
Im Inversbetrieb bis 5 V funktionieren die meisten
Transistoren, aber mit Eigenschaften, die nicht im
Datenblatt aufgeführt werden.
Hast du jetzt nur den Emitterpfeil an der falschen Seite
gezeichnet? Oder entspricht die zeichnerisch umständliche
Abbildung wirklich der Realität?
Also:
- entweder Kollektor direkt an 5V und R17 (unten) direkt
an Masse.
- oder Kollektor- und Emitter-Anschluss am Optokoppler
tauschen, das gibt auch eine viel schönere (weil
einfachere) Grafik.
Damit wäre das Optokoppler Signal schon mal elektrisch
optimiert.
Daniel N. schrieb:> Im Anhang der Richtige Schaltplan
Die Schaltung ist mehr als lebensgefährlich - zumindest für die
Leuchtdiode.
Ein falscher Dreh am Poti und die Diode legiert durch...
Wenn du dich schon nicht traust, einen vernünftigen Vorwiderstand für
die LED auszurechen, solltest du wenigstens einen Festwiderstand in
Serie schalten, der so dimensioniert ist, dass der Strom garantiert
deutlich unter dem zulässigen Maximalstrom bleibt.
Die aktualisierte Schaltung habe ich oben hinzugefügt- diese entspricht
der Realität.
Ich messe vor ich die Schaltung wieder anschalte den Widerstand des
Poti. Unter 200 Ohm bin ich bisher nicht gegangen- sind dann 11mA.
Die Leitung ist knappe 10m lang- ich habe mir auch schon überlegt, ob
dadurch eine Störung hervorgerufen wird. Das Kabel liegt direkt neben
den Stromführenden Kabeln der Anlage. Jedoch trat das auch auf, wenn die
Anlage nur mit 0,2A oder gar nicht belastet war.
Daniel N. schrieb:> ich habe zur Drehzahlmessung eine Gabellichtschranke verbaut, an der> einmal pro Umdrehung ein Aluplättchen durchgeht. So soll die Drehzahl> meiner Kleinwindanlage gemessen werden.
Hast du dir mal ausgerechnet, wie lange die Lichtschranke bei maximaler
Drehzahl unterbrochen wird?
Lasse mal den 1k serienwiderstand weg, nimm 1k als pullup statt 10k und
plaziere den pullup am uC und nicht 10m entfernt am optokoppler.
dann wenn möglich das signal am uC mal mit dem oszilloskop
angucken/aufzeichnen, ob da ein einigermassen digital aussehendes signal
anliegt.
Vielen Dank für eure Antworten! Oszi hab ich leider nicht, wäre gerade
jetzt natürlich geschickt..
Aber diese Konfiguration werde ich ausprobieren.
Auch werde ich noch eine Programmzeile hinzufügen:
Daniel N. schrieb:> Die Leitung ist knappe 10m lang- ich habe mir auch schon überlegt,> ob> dadurch eine Störung hervorgerufen wird.
Mit Sicherheit!
> Das Kabel liegt direkt neben> den Stromführenden Kabeln der Anlage.
Magnus M. schrieb:> Mit Sicherheit!>> Das Kabel liegt direkt neben>> den Stromführenden Kabeln der Anlage.
Da muss kein Strom drauf sein, da reichen schon "normale" Störungen,
wenn ein derartig hochohmiges Signal quer durch die Bude geführt wird...
Ich würde da auch niemals nicht auf einen Interrupt gehen, sondern das
Signal in einem 1ms Timertic pollen und dann mal anständig entprellen
und filtern. Denn so ein Interrupt kann dir ganz schön die Rechenzeit
stehlen, wenn er wegen jeder Störung aufgrufen wird.
Vielen Dank für eure Antworten! Also ich werde es jetzt mal so
versuchen, den 10k durch einen 1k zu ersetzen und den 1k wegzulassen.
Hilft das nix werde ich es nochmal über einen Tiefpass versuchen und
hilft auch das nix, werde ich einen Schmitt-Trigger verwenden oder die
Software umprogrammieren.
Daniel N. schrieb:> Also ich werde es jetzt mal so> versuchen, den 10k durch einen 1k zu ersetzen und den 1k wegzulassen.
Blind an den Widerständen zu ändern, wird nichts bringen.
Wenn du schon kein Oszi hast, prüfe mit dem Multimeter, welche
Spannungen dein Spannungsteiler bei offener bzw. unterbrochener
Lichtschranke liefert.
Das lange Kabel ist ausgesprochen ungünstig. Wenigstens sollte der 1kΩ
zum µC hin direkt beim µC sitzen, damit die Leitung nicht noch über
diesen Widerstand von einstreuenden Störungen getrennt ist - der
Lichtschrankenteiler ist der "Treiber" für die Leitung.
"Widerstand ganz weglassen" und "Tiefpass einbauen" ist ein Widerspruch.
Bevor du über einen Tiefpass nachdenkst, nochmal die Frage: "Wie lang
ist dein Unterbrechungspuls bei maximaler Drehzahl"?
Ohne irgendwelche Daten zu deinem Aufbau ist das Stochern im Nebel.
Daniel N. schrieb:> hilft auch das nix, werde ich einen Schmitt-Trigger verwenden
Das tust du bereits. Die Digitaleingänge der AVR8 sind sämtlich
Schmitt-Trigger-Eingänge. Wenn du Datenblätter lesen würdest, wüßtest du
das...
Zum Problem: Wenn überhaupt was von den Vorschlägen in diesem Thread
hilft, dann nur ein Tiefpass. Dabei ist es egal, in welcher Form der
realisiert wird. Man kann es in Hardware tun oder auf verschiedene Arten
in Software.
Das Problem ist nur: man kann die Zeitkonstante nicht beliebig hoch
wählen, sonst siehst du nämlich dein Nutzsignal auch nicht mehr. Je nach
Art der Störungen kann das letztlich durchaus dazu führen, dass es
einfach garnicht geht, wenn nämlich die untere Grenzfrequenz des
Störsignal nicht weit genug von der oberen Grenzfrequenz des Nutzsignals
entfernt ist.
Deswegen (aber nicht nur deswegen) wäre es sehr viel sinnvoller, den
Aufbau der Hardware zu ändern und zwar so:
An der Meßstelle wird nur die eigentliche Lichtschranke plaziert, und
auf der Platine fügst du zu deiner Schaltung einen Optokoppler hinzu.
Die Idee ist: die Lichtschranke steuert eine niederohmige Strohmschleife
für die lange Übertragungsstrecke. Die ist von Hause aus sehr viel
unempfindlicher gegen Störungen. Wenn du dann noch verdrilltes Kabel
benutzt, sollte es mit an Sicherheit grenzender Wahrscheinlichkeit ohne
Störungen abgehen.
Schaltung also etwa so:
----------o VCC
Lichtschranke langes Kabel Empfänger mit | Optokoppler
|
--------------------------------|===|-------*-|===|-*--o Pin
| | |
| ---------------------------|===|--- _|_ |
_|_ |/ C | \ / |/ C
\ / | | | |
| |\ E | | |\ E
| | --- |
----*-----------------------------------------------*--o GND
Gegen kurze Spikes hoher Energie kann man zusätzlich noch einen kleinen
Kondensator parallel zur LED des Optokopplers einbauen, aber vermutlich
wird das in deiner Anwendung nicht nötig sein. Schaden kann's allerdings
auch nicht, sofern der Kondensator klein genug bleibt, dass das
Nutzsignal noch durchkommt.
Bei den Gabel- und Reflexlichtschranken tauchen zwei Probleme auf:
1) Wo ist der Schaltpunkt im analogen Signal?
2) Das Signal ist durch verschiedenen Einflüsse (optischer Verlauf,
elektrische Störungen) nicht trapezförmig.
Deswegen habe ich die besten Ergebnisse erzielt, indem ich
- den Mittelwert des Signals der Lichtschranke bilde, und
- mit einem Schmitt-Trigger mit einstellbarer Hysterese
arbeite.
Das ganze kann man per SW machen. Dazu muss man dann das Analogsignal
mit AD-Wandler lesen und die o.g. Sachen in SW machen.
Ist aber die Messstelle weit entfernt, sollte man m.E. anders vorgehen:
denn man muss die Lichtschranke sowieso mit Versorgung ausstatten. Dann
kann man auch eine kleine Platine machen, auf der ein Dual-OpAmp sitzt,
wobei der eine den Mittelwert bildet und der andere der Schmitt-Trigger
ist. Zudem hat man dann eine geringer Ausgangsimpedanz und man kann das
Kabel ohne Probleme lang machen ...
Bevor du nicht ausrechnest, welche RC Kombination da rein gehört, und du
das Ergebnis nicht auch per Hardware umgesetzt hast, macht es überhaupt
keinen Sinn, weiter herum zu raten!
Martin S. schrieb:> Bevor du nicht ausrechnest, welche RC Kombination da rein gehört, und du> das Ergebnis nicht auch per Hardware umgesetzt hast, macht es überhaupt> keinen Sinn, weiter herum zu raten!
Wieso raten? Ich habe das zig mal umgesetzt ...
Die ganzen Angstäußerungen wegen Kabellänge oder Interuptverarbeitung
kann ich nicht teilen.
Wie c-hater schon schrieb, haben AVRs Schmitt-Trigger an den Eingängen,
sodaß ein gut gefiltertes Signal, welches sich um Vcc/2 herum bewegt,
für eine störungsfreie Erkennung ausreicht. Für 200 Upm (bzw. 3,3 Hz)
kann der RC-Tiefpass alle externen Störungen filtern, muß aber direkt am
µC liegen und bei 10 kOhm Pullup einen Widerstand >= 100 KOhm verwenden.
Beim Optokoppler ist darauf zu achten, daß der Pullup-Widerstand in der
Kollektorleitung (Schaltbild: "Einfacher.png")liegt und das
Tastverhältnis möglichst 50% beträgt. Dann lassen sich die Pegel für
hell und dunkel auch mit einem Voltmeter ermitteln. Der Tiefpass kann
dann für < 10 Hz ausgelegt werden.
Das Programm zur Auswertung ist ja sehr schlicht.
Wilhelm M. schrieb:> Martin S. schrieb:>> Bevor du nicht ausrechnest, welche RC Kombination da rein gehört, und du>> das Ergebnis nicht auch per Hardware umgesetzt hast, macht es überhaupt>> keinen Sinn, weiter herum zu raten!>> Wieso raten? Ich habe das zig mal umgesetzt ...
Doch nicht Du :)
Der TO!
Es ist doch ganz klar, dass eine Gabellichtschranke nahe der
Schaltschwelle einfach ein Zappeln erzeugt - selbst mit Hysterese, weil
das Licht des Senders nicht homogen und parallel erzeugt wird. Es
handelt sich sicher nicht um eine Laserlichtschranke.
Ein Tiefpass ist hier schon abhilfe genug, wenn der Rest der Schaltung
stimmt. Alles andere ist herumgedokter an Symptomen, obwohl zwei
primitive Bauteile das Problem weitgehend lösen werden.
Hast du mal mit einem Oszilloskop gemessen, was am Prozessorbeinchen
überhaupt anliegt? Erst wenn man kennt, was dort ankommt kann man
Gegenmaßnahmen ergreifen.
Ansonsten ist das doch ein Stochern im Nebel. Ein Widerstand hier, ein
Programmzeile da, und bei Sonnenschein funktioniert es wieder nicht.
Also erst mal Fakten sammeln.
m.n. schrieb:> Die ganzen Angstäußerungen wegen Kabellänge oder Interuptverarbeitung> kann ich nicht teilen.>> Wie c-hater schon schrieb, haben AVRs Schmitt-Trigger an den Eingängen,> sodaß ein gut gefiltertes Signal, welches sich um Vcc/2 herum bewegt,> für eine störungsfreie Erkennung ausreicht.
Genau, Du musst den Arbeitspunkt der Lichtschranke auf Vcc/2 einstellen
... was aus vielen Gründen nicht immer gelingt bzw. durch externe
Faktoren driften kann.
Deswegen mein Vorschlag mit der adaptiven Schaltung, aka
Mittelwertbildung. Und der zweite OpAmp als Schmitt-Trigger ist
Ausgangstreiber. Wenn man dann noch die Adern verdrillt, kann man locker
100m Kabel verwenden ...
Wer es noch eleganter haben möchte, spendiert direkt auf dem Platinchen
einen tiny85 o.ä., um die Daten per nrf24l01 o.ä. über Funk zu senden.
Vielen vielen Dank für eure Beiträge!
Also die Sache mit dem OPV zur Signalübertragung ist für mich mit sehr
hohem Aufwand verbunden, da die Anlage schon aufgestellt ist.
Wolfgang schrieb:> "Wie lang> ist dein Unterbrechungspuls bei maximaler Drehzahl"?
Sorry- die Frage ist etwas untergegangen. Also die Drehzahl sollte
eigentlich nicht höher als 400U/min gehen- messen möchte ich aber bis
600U/min. Das Aluplättchen mit 12mm Breite bewegt sich auf einem Radius
von etwa 180mm.
=> f= (600/60)Hz *2*pi*180mm/12mmm = 942Hz.
Die Zeit, in der die Lichtschranke unterbrochen wird, also das Signal
"high" sein sollte, ist dann etwas mehr als 1ms.
m.n. schrieb:> Dann lassen sich die Pegel für> hell und dunkel auch mit einem Voltmeter ermitteln.
Problem dabei ist, dass ich die Anlage nicht in einer solchen Stellung
halten kann, in der das Plättchen die Schranke verdeckt. Und das
Multimeter ist zu langsam, um einen schnellen Puls zu messen- da springt
die Anzeige nur irgendwie hoch.
Ich werde jetzt folgende Dinge versuchen und arbeite mich vom primitiven
zum komplizierteren:
1) 1kOhm statt 10kOhm verwenden und direkt am AVR, den 1kOhm lasse ich
weg
2) Software"filterung":
Idee dabei ist, einfach mal zu zählen, wie oft denn ein fehlerhaftes
Interrupt ausgelöst wird. Somit kann ich auch ohne Oszi ganz grob
erkennen, wie das Signal in etwa aussehen muss.
3) Tiefpass.
4) Mittelwertbildung über ADC
Ich denke aus diesen Dingen müsste ich erstens erkennen, wie fehlerhaft
das Signal wirklich ist und kann dann entsprechende Gegenmaßnahmen
einleiten.
Daniel N. schrieb:> => f= (600/60)Hz *2*pi*180mm/12mmm = 942Hz.
Ach so! Bei einem Tastverhältnis 1:100 kannst Du jeden Tiefpass
vergessen, sondern mußt die Impulsübertragung vom Optokoppler zum µC
niederomhig ausführen. Dafür gibt es 1000 und eine Möglichkeit vom
Transistor als Inverter oder Emitterfolger mit 100 - 200 Ohm
Lastwiderstand, über einen einfachen Logik-Inverter bis zum speziellen
Treiberbaustein.
Ich weiß nicht, wieweit Deine Programmiererfahrung reicht. Aber zur
Übersicht gebe ich Dir Beispiele für Frequenz/Drehzahlmessung auf AVRs,
die auch einfach anzupassen sind.
Einmal hier u.a. auch für Arduino oder als Frequenz-Spannungswandler:
http://mino-elektronik.de/fmeter/fm_software.htm
und mit kleinerer Auflösung und Anzeige:
http://mino-elektronik.de/7-Segment-Variationen/LCD.htm#lcd2
Ergänzung: Wenn Du unbedingt noch eine Totzeit per Hardware einfügen
möchtest, geht das mit RC-Glied + Diode, womit der 1 ms Impuls gedehnt
werden kann.
Nun die ersten Testergebnisse:
Mit dem 10k und 1k zusammen und dem "Softwarefilter" hat es nicht
funktioniert. In der kurzen Zeit, in der ich den Drehzahlmesser getestet
habe, bin ich auf maximal 7 Interrupts wärend den 80ms Wartezeit
gekommen. Trotzdem muss es danach auch noch ein Interrupt gegeben haben,
denn es wurde mir als höchste Drehzahl 722,8rpm angezeigt, was natürlich
nicht sein kann, denn es war nahezu windstill und die Anlage hat nur mit
geschätzt 120rpm gedreht.
Aber auch der Test ohne den 1k Widerstand zum AVR hin und mit 1k statt
10k hat keinen Erfolg gebracht- wieder 6 Interrupts und maximaler
Drehzahlwert: 722,8rpm.
Auffällig ist, dass die Drehzahl bis etwa 120rpm oder so meist korrekt
angezeigt wird, ab dann, evtl. da die Anlage belastet wird, aber nicht
mehr und als maximaler Wert werden die 722,8rpm angegeben.
@m.n.: Danke für die Links- ich werde mir das anschauen!
Man kann natürlich auch ganz einfach eine Totzeit mit einem Timer
aufsetzen, die etwas kürzer als die maximale Drehzahl ist.
Der Flankeninterrupt disabled sich selbst und startet den Timer. Der
Timerinterrupt löscht das Pendingflag (d.h. setzt es auf 1!) und enabled
ihn wieder.
@Peter:
Ja das habe ich mir auch gedacht und mit einer if-Bedingung wollte ich
im Prinzip dasselbe machen, leider muss es auch nach dieser Zeit zu
einem Interrupt gekommen sein, obwohl die Drehzahl eigentlich zu gering
ist, um nach der kurzen Zeit wieder ein Interrupt auslösen zu können.
Dann wird wohl der Arbeitpunkt deiner Schaltung nicht stimmen.
Miß am Eingang des MC mit einem Multimeter und drehe die Scheibe langsam
durch. Es müssen <1V bzw. >4V zu messen sein.
Daniel N. schrieb:> Das Aluplättchen mit 12mm Breite bewegt sich auf einem Radius> von etwa 180mm.
Kann man den Unterbrecher eigentlich nicht breiter als 1% des Umfanges
machen?
So kommst du bei 200U/min auf eine Unterbrechungszeit von ca. 33ms.
Was für eine Gabellichtschranke ist das eigentlich genau
(Hersteller/Modell)?
Frueher (als noch Alles besser war) haben wir in solchen Faellen eine
Stromschleife verwendet. 20mA fliessen = 1, 0mA=0. Stoereinflusse auf
Hin- und Rueckleiter heben sich auf, wenn diese im selben Kabel sind.
Sien sie verdrillt, noch besser.
wendelsberg
Korrektur: Unterbrechungszeit ist sogar nur 3ms (1/(200/60))*0,01
wendelsberg schrieb:> Frueher (als noch Alles besser war) haben wir in solchen Faellen eine> Stromschleife verwendet. 20mA fliessen = 1, 0mA=0.
Naja, das erreicht man ja, wenn man den Pullup am uC plaziert, und
entsprechend niederohmig dimensioniert.
Mit 1K fließen dann schon mal 5mA.
Das Problem dabei ist, dass der Transistor in der Lichtschranke auch
genügend durchsteuern muss, um den Strom zu liefern.
@Joe:
Es handelt sich um folgende Schranke:
http://www.pollin.de/shop/dt/NDA5ODc4OTk-/Bauelemente_Bauteile/Aktive_Bauelemente/Optoelektronik/Gabellichtschranke_TCST1300_TFK_847_.html
Leider kann ich am Aufbau nichts ändern.
Peter D. schrieb:> Dann wird wohl der Arbeitpunkt deiner Schaltung nicht stimmen.> Miß am Eingang des MC mit einem Multimeter und drehe die Scheibe langsam> durch. Es müssen <1V bzw. >4V zu messen sein.
Das werde ich wohl mal machen müssen. Den Arbeitspunkt muss ich dann
über den Kollektorwiderstand einstellen. Im Stillstand kann ich auch von
unten messen- da hatte ich etwa 4,5V- je nach Widerstand. Nur im
unterbrochenen Zustand kann ich auf die Schnelle nicht messen.
Und welche von diesen?
TCST1103, TCST2103
TCST1202, TCST2202
TCST1300, TCST2300
Die sind jedenfalls alle ziemlich schlecht.
Das Transferverhältnis ist je nach Modell nur 1.5% .. 20%
D.h. wenn du die LED mit 11mA betreibst, kannst du am Ausgang max. 2.2mA
bis im schlechtesten Fall nur 0,16mA erwarten.
Bei einer so langen Leitung reicht das nicht.
Joe F. schrieb:> Das Problem dabei ist, dass der Transistor in der Lichtschranke auch> genügend durchsteuern muss, um den Strom zu liefern.
Dann muss vor Ort eben noch verstaerkt werden.
Grundsaetzlich gilt ja, dass ein starkes Signal schwieriger zu stoeren
ist.
Allerdings koennte man ja das Segment eine halbe Umdrehung gross machen,
dann sollten die Ein- und Auszeit immer etwa gleich lang sein. Auch die
vorkommende Beschleunigung kann man abschaetzen und das Signal mit
diesen Informationen auf Plausibilitaet pruefen.
wendelsberg
Daniel N. schrieb:> Leider kann ich am Aufbau nichts ändern.
Welchen AVR verwendest Du denn? ATmega328 auf einem Arduino-Board?
Dann versuch doch ersteinmal das Programm zum Laufen zu bringen, damit
Du nicht auf zwei Baustellen gleichzeitig schaffen mußt.
Ein 50 Hz Signal muß 3000 Upm liefern. Das sollte doch einfach
aufbereitet werden können: kleiner Trafo + Optokoppler.
Daniel N. schrieb:> Nur im unterbrochenen Zustand kann ich auf die Schnelle nicht messen.
Kommst du an die Lichtschranke nicht heran um da was zwischenzuschieben,
zum Beispiel eine Pappe?
Alternativ kannst du auch das Poti vor der LED auf maximalen Widerstand
und damit minimalen LED-Strom stellen (oder diese Leitung auftrennen
wenn das geht), das sollte dem unterbrochenen Zustand zumindest
näherkommen.
wendelsberg schrieb:> Dann muss vor Ort eben noch verstaerkt werden.
Warum, frage ich mich, verwendet man da nicht einfach einen
kommerziellen Sensor, der gleich nach dem Anlegen einer Spannung sicher
funktioniert?
Und wenn das dann tadellos läuft und die Schaltung 10000 mal aufgebaut
werden muss, dann kann man sich selber eine billigere Lösung stricken...
Ich verwende einen normalen ATmega32 ohne Arduino.
Stimmt, die LED könnte ich abschalten- das müsste funktionieren! Ich
werde das direkt testen, danke.
Das liest sich ja grauselig!
Ich sag dazu nur: Einfach mal 22nF zwischen µC-Eingang und Masse
schalten und den Schlitz in der Schlitzscheibe so breit machen, daß er
die halbe Scheibe beträgt. Alternativ die Breite der "durchgehenden
Alu-Scheibe" so breit machen, daß sie für ne halbe Umdrehung gut ist.
Kurzum: HALBKREIS.
Das sollte dicke ausreichen.
W.S.
Es kann doch nicht sein, dass eine einfache Gabellichtschranke nicht
funktioniert. Ich habe deshalb mal getestet, welchen Einfluss die Kabel
wirklich haben- ich habe die LED komplett abgetrennt, trotzdem reagierte
der Controller ab und an mal. Damit ist klar, dass die Messung entweder
durch die Kabel verfälscht oder sogar so gestört wird, dass eine präzise
Messung nicht möglich ist.
Ich werde nun noch versuchen, den Interrupt auf 0V am Eingang des
Controllers sodass wenn die Lichtschranke durchschält, ein high-Pegel am
Eingang anliegt. Evtl. können so die Störungen behoben werden.
Wenn nicht, werde ich mir einen Schmitt-Trigger mit OPV zusammenbauen
und oben an der Anlage anbringen.
Daniel N. schrieb:> Ich habe deshalb mal getestet, welchen Einfluss die Kabel> wirklich haben- ich habe die LED komplett abgetrennt, trotzdem reagierte> der Controller ab und an mal.
Dann sind die von deiner Leitung eingefangenen Störungen so kräftig,
dass sie deine Schaltschwelle überschreiten.
Mögliche Gegenmaßnahmen:
* Signal kräftiger machen (mehr Strom, höherer Spannungshub)
* Impulsstörungen durch Tiefpass platt machen
* Signal so langsam machen, dass es gut durch den Tiefpass durch kommt
* Störungen durch Abschirmung und/oder verdrillen der Leitungen
verringern
Das mit dem Tiefpass hat zur Besserung verholfen- erst ab einer Drehzahl
von etwa 220U/min kamen die Störungen, aber funktionierte eben auch
nicht einwandfrei. Kabel verdrillen ist relativ schwer, da sie in einem
Rohr geführt werden und ich schlecht an die Kabel selbst komme.
Daniel N. schrieb:> ... erst ab einer Drehzahl von etwa 220U/min kamen die Störungen
Sitzt deine Störquelle vielleicht direkt neben der Lichtschranke?
Wieviel Strom lässt du durch deine LED fließen und wieviel Strom kannst
du dann auf der Empfängerseite damit steuern. Wie weit nutzt du das aus
und wieviel Reserve hast du ggf. noch beim (sinnvoll) zulässigen LED
Strom?
Welche Grenzfrequenz hat dein Tiefpass und wie sieht dahinter dein
Nutzsignal aus?
Du könntest beispielsweise mit deinem µC einfach mal messen, in welchem
Zeitabstand die Pulse kommen. Wenn du seriell mit 115kBd ausgibst und
keine Romane schreibst, sollte zumindest zu erkennen sein, ob die
Störpulse von schlechte Flanken deines Unterbrechersignals kommen, i.e.
als Burst immer nahe deiner Marke auftreten oder allgemein eingestreut
werden und mehr oder weniger gleichmäßig über die Zeit verteilt sind. Es
reicht doch, wenn du immer über bspw. 10ms die Impulse zählst, die Zahl
ausgibst und das mit einem Terminalprogramm mitloggst.
Ich sehe hier bei der unübersichtlichen Rechnung einen tiefen Eingriff
der geheimen Timer1 Initialisierung und der unbekannten F_CPU.. ohne die
eine fremde Begutachtung des Problems einfach nicht möglich ist.
Vorher ist das nur die Glaskugel..
Wieso überhaupt:
drehzahl = (uint16_t)(600000UL / rotationszeit); //zähler/zeit= f[1/ms]
=> n[1/10min]= f[1/ms] * 600s/min * 1000ms/s
Ich mache selbst viel mit Timern.. aber irgendwie ist das ganze komisch
kommentiert.. wäre es nicht 60000UL bei Z.B: Timer1 Prescaler1
ocra=16000
Klemme doch die Lichtschranke vom AVR ab und baue eine Lichtschranke
auf Deinem Tisch auf. Nur so kommst Du voran.
Kläre ob Schaltung und Programm überhaupt separat funktionieren.