Mal ne Laien-Frage:
Zur Fremdlichtunterdrückung bei optischen Sensoren (und bei vielen
anderen Übertragung en) wird moduliert, zB. OOK/Trägerfrequenz.
Per Filter demoduliert.
Bis zur Sättigung des Detektors (Sonneneinstrahlung) spielt der
Gleichanteil keine Rolle.
Um das rein digital mit Mikrocontroller (AVR) zu basteln, liegt es nahe,
den Gleichanteil einfach dadurch zu eliminieren, den Signalwert ohne
Sendesignal vom Signal mit Sendesignal abzuziehen.
Entspricht das schon der o.g. Modulation?
Hatschi Puh schrieb:> Entspricht das schon der o.g. Modulation?
Nö, das wäre eine Basisband-Übertragung mit Offsetkorrektur.
Die Offsetkorrektur kann bei Nutzung eines Trägers ebenfalls
durchgeführt werden, indem der Bias der Photodiode verschoben wird.
mfg mf
Hatschi Puh schrieb:> Entspricht das schon der o.g. Modulation?
Nein.
Dazu muss der Sender eine zeitlich schwankende Helligkeit haben
(Phasenmodulation kann man bei Licht ja vergessen)
Zwei Empfänger, einer vom Lichtschrankensender beschienen, der andere
knapp daneben, könnte man zur Subtraktion verwenden.
Achim M. schrieb:> Nö, das wäre eine Basisband-Übertragung mit Offsetkorrektur.MaWin schrieb:> Dazu muss der Sender eine zeitlich schwankende Helligkeit haben> (Phasenmodulation kann man bei Licht ja vergessen)>> Zwei Empfänger, einer vom Lichtschrankensender beschienen, der andere> knapp daneben, könnte man zur Subtraktion verwenden.
Danke, leider verstehe ich das nicht.
Trifft das auch zu, wenn der Sender mit z.B. 40 kHz gepulst wird (also
an, messen, aus, messen, Differenz, ...)?
Ist das immer noch Basisband?
Ich habe keine Ahnung von Nachrichtentechnik. Ich würde mich freuen,
wenn es jemand etwas ausführlicher erklären mag, oder mich auf
Stichworte und zugängliche Literatur verweisen könnte.
Oder bin ich hier im falschen Forum, weil keine nennenswerte
Verarbeitung gemacht wird?
Also ist das "Verfahren" doch analog zu .. einem Bandpass beim
Empfänger? Lock-In? Synchrondemodulator?
Ist es ein brauchbarer Ansatz (für einen einzelnen Sensor)?
Hatschi Puh schrieb:> Ich habe keine Ahnung von Nachrichtentechnik.
Dann ist es das Beste, Du hälst Dich an die erpobte Technik,
und das ist die Modulation im kHz-Bereich. Zumal es da ja
bereits fertige, billige Empfangs-ICs gibt.
Wenn es so wäre, müsste es einem digitalen Filter entsprechen (ein
Filter in Softwre wird eingespart, da es synchron ist und der
Gleichanteil subtrahiert wird)?
Hatschi Puh schrieb:> Also ist das "Verfahren" doch analog zu .. einem Bandpass beim> Empfänger? Lock-In? Synchrondemodulator?
vielleicht beschreibst du "das Verfahren" mal möglichst eindeutig, dann
kann man auch eindeutig antworten.
Wenn du diese Beschreibung meinst:
Hatschi Puh schrieb:> wenn der Sender mit z.B. 40 kHz gepulst wird (also> an, messen, aus, messen, Differenz, ...)?
Das ist nicht "analog zu einem Bandpass beim Empfänger". Aus einem
Bandpass würde das 40kHz-Signal rauskommen. Aus deiner Messung würde ein
Differenzsignal rauskommen, das nicht 40kHz hat sondern niedrige
Frequenzen ("im Basisband"). Als eine mögliche Implementierung eines
Lock-Ins oder eines Synchrondemodulators könnte man dein Verfahren
allerdings schon bezeichen (wobei dabei im Normalfall noch eine
Tiefpassfilterung des Differenzsignals angeschlossen wird).
Danke für die Hilfe!
Achim S. schrieb:> vielleicht beschreibst du "das Verfahren" mal möglichst eindeutig, dann> kann man auch eindeutig antworten.
Wie gesagt, kenne ich mich nicht aus.
Ich möchte eine Lichtschranke mit Fremdlichtunterdrückung mit (möglichst
nur) einem Mikrocontroller basteln. Ich suche ein geeignetes (einfaches)
Verfahren.
Das angesprochene wäre einfach zu realisieren, ich kann es aber nicht
einordnen und bewerten.
Da es nur eine erste Überlegung ist, lässt es sich nicht "möglichst
eindeutig" beschreiben.
> Wenn du diese Beschreibung meinst:
Ja.
Achim S. schrieb:> Aus einem> Bandpass würde das 40kHz-Signal rauskommen.
Stimmt, das müsste dann wohl noch gleichgerichtet und
detektiert/bewertet werden. Keine Ahnung, daher will ich es ja möglichst
rein digital machen.
Achim S. schrieb:> Aus deiner Messung würde ein> Differenzsignal rauskommen, das nicht 40kHz hat sondern niedrige> Frequenzen ("im Basisband").
Also doch genau das gesuchte, ist doch gut.
Achim S. schrieb:> wobei dabei im Normalfall noch eine> Tiefpassfilterung des Differenzsignals angeschlossen wird
Um Störungen zu glätten oder prinzipbedingt?
Hatschi Puh schrieb:> Ich möchte eine Lichtschranke mit Fremdlichtunterdrückung mit (möglichst> nur) einem Mikrocontroller basteln. Ich suche ein geeignetes (einfaches)> Verfahren.
ok, das ist für mich mal eine klare Aussage. Bei den bisherigen
Beiträgen wurde mir ehrlich nicht klar, ob du etwas vernüftiges bauen
willst. Oder ob du die Korrektheit und Anwendbarkeit von
Fachbezeichnungen klären (denn du hast imho ziemlich wild mit
Fachbegriffen um dich geworfen und nach deren Anwendbarkeit gefragt).
Also du willst etwas bauen. Die nächste Frage für mich wäre: soll es
eine einfache Lichtschranke werden (moduliertes Licht kommt an oder
kommt nicht an). Oder willst du über den optischen Kanal Information
übertragen (so wie z.B. die IR-Fernbedienung für den Fernseher).
Für diesen Zweck gibt es integrierte Sender und Detektoren, die die
Modulation/Demodulation selbst durchführen und dir damit das Leben
erleichtern. Je nachdem, was du übertragen willst, wären aber
unterschiedliche Varianten sinnvoll (was z.B. die AutoGainControl beim
Empfänger angeht und dadurch den Dynamikbereich zu verbessern).
Hatschi Puh schrieb:> Um Störungen zu glätten oder prinzipbedingt?
durch dein bisheriges Vorgehen ohne Tiefpass unterdrückst du den
Einfluss von DC-Störungen (du benutzt dafür den Begriff Gleichanteil).
Je nach Beleuchtungssituationen können aber auch Störungen bei ganz
anderen Frequenzen vorliegen. Um möglichst viele Störungen loszuwerden,
musst du
- die Modulationsfrequenz sinnvoll wählen (40kHz ist nicht so schlecht).
- daneben aber auch noch die Bandbreite deiner Detektion durch den
Tiefpass entsprechend einschränken - sonst werden dir die Störungen der
anderen Frequenzen in dein Ergebnis reingemischt.
Die "Basismaßnahmen" sind aber mindestens ebenso wichtig:
- Detektor mit Tageslichtunterdrückung
- ggf. Verstärker, der bevorzugt bei der Modulationsfrequenz verstärkt
(muss kein ganz enger Bandpass sein: darum kümmert sich ja schon die
phasenelektiver Gleichrichtung, wenn du noch einen Tiefpass
nachschaltest).
Ja, meine Zusammenfassung war etwas knapp.
Datenübertragung nicht direkt - Kodierung für mehrere "Geräte" evtl.
schon, aber das ist dann ja schon "echtes" DSP. Da werde ich etwas
"vorgekautes" brauchen, sonst reicht die Zeit nicht. Also, im ersten
Schritt reicht einfach "Signal vorhanden" und ggf. noch die
Signalstärke.
Empfänger für IR kenne ich, danke. Aber ich möchte ja ein wenig die
Prinzipien kennenlernen.
Verstärker / AGC ist für mich der zweite Schritt. Eigentlich ist bei
allem, was nicht Fernbedienung ist, der Aufbau fix und daher das Signal
gleichbleibend. Zumindest bei mir. Nennenswerte Entfernungen und
Nebelschwaden erwarte ich nicht. Direkte Sonneneinstrahlung auch erstmal
nicht ;-)
Achim S. schrieb:> die Bandbreite deiner Detektion durch den> Tiefpass entsprechend einschränken - sonst werden dir die Störungen der> anderen Frequenzen in dein Ergebnis reingemischt.
Das leuchtet ein.
Danke dir.
Hatschi Puh schrieb:> Da werde ich etwas> "vorgekautes" brauchen, sonst reicht die Zeit nicht.Hatschi Puh schrieb:> Empfänger für IR kenne ich, danke. Aber ich möchte ja ein wenig die> Prinzipien kennenlernen.
Das passt für mich auch wieder nicht ganz zueinander. Entweder dir fehlt
die Zeit und die willst schnell etwas funktionierendes auf die Beine
stellen. Dann sind integrierte Empfänger mit Demodulator der passende
Einstieg, und mit denen ist es auch einfach, ein paar Byte seriell zu
übertragen.
Oder du willst dich mit den Prinzipien auseinandersetzen und selbst
etwas umsetzen. Dann brauchst du aber halt die dafür notwendige Zeit. Es
ist keine "Raketentechnik" mit dem µC einen Sender auf 40kHz zu
modulieren. Wenn der Empfänger vom selben µC ausgewertet wird, dann ist
auch das Demodulieren machbar (wenn es zwei unabhängige µC sind wird es
schon schwieriger).
Aber selbst wenn beide Arbeitsschritte im selben Controller durchgeführt
werden ist es nicht trivial, dass das gut funktioniert. Du musst dir
Gedanken machen, dass dein Empfänger im linearen Bereich arbeitet
(sowohl zu große als auch zu kleine Signale führen z.B. bei
Fototransistoren zu einem Absinken der Empfindlichkeit). Du musst dir
überlegen, wie schnell dein Empfänger auf das Schalten der Quelle
moduliert und wie du das Timing des ADCs richtig hinbiegst, dass er
gerade in den "richtigen" 1-2 µs seinen Sampling-Kondensator öffnet.
Nicht unmöglich, aber für den Einstieg in das Thema auch nicht
trivial...
Ich meinte die Kodierung. Angedacht, aber ich glaube nicht, dass ich
dafür Zeit finden werde.
Das Timing hielt ich bislang für unkritisch, die LEDs wollte ich vorerst
nicht mit Pulsströmen betreiben, sie dürfen also länger als µs leuchten.
Evtl. kann ich das kommende Woche mal ausprobieren.
Hatschi Puh schrieb:> sie dürfen also länger als µs leuchten.
40kHz Modulationsfrequenz heißt: die Periode beträgt 25µs. Man hat also
bei 50% Duty-Cycle 12µs On-Zeit und 12µs Off-Zeit.
Der Fotodetektor (und ein eventueller Verstärker) haben vielleicht nicht
beliebig viel Bandbreite (sie sollen ja das Signal bei 40kHz
detektieren, nicht alle möglichen Störsignale bei allen möglichen
Frequenzen). Eine Bandbreite von 100kHz bedeutet: die Anstiegs- und
Abfallzeit des gemessenen Signals beträgt 3,5µs (von 10% bis 90%). Es
wäre also geschickt, nach der Schaltflanke am Sender erst mal 5µs zu
warten, bis sich das Signal am Detektor eingeschwungen hat. Dann braucht
auch der Sampling-Kondensator des ADC irgendwas im µs-Bereich, um den
Wert korrekt zu übernehmen. Die Ansteuerung des ADCs wird also auf
wenige µs genau sein müssen (synchronisiert mit dem Sender).
Wie schon gesagt: das lässt sich hinkriegen. Aber ich wollte halt darauf
hinweisen, dass es für den Einstieg auch nicht trivial ist. Und dass
integrierte IR-Empfänger einem diese Arbeit abnehmen können.
Umgebaut auf differentielle Messung, um später den 20x gain des ADC
nutzen zu können.
Ansonsten ist es schonmal eine funktionierende Lichtschranke, aber bei
der Signalstärke ja keine Kunst.
Der nächste Schritt ist dann wohl, zur Auswertung einen "richtigen"
Integrator zu benutzen...
Es wird nun 64 mal abwechselnd mit und ohne Licht die Ausgangsspannung
vom TIA gemessen und multipliziert und integriert: die Messungen mit
Licht werden zur Summe addiert, die Messungen ohne Licht davon
abgezogen.
Da das ganze vorerst stur in einer Schleife steckt und Messwerte über
eine serielle Schnittstelle ausgegeben werden, passiert das nur mit ca.
1 kHz.
Das lässt sich aber noch beschleunigen.
Durch die Integration vieler Messungen kann nun auch ein stark
gedämpftes Signal erkannt werden (Papier im Lichtweg), das auf dem Oszi
(siehe Anhang, 5 ms, 500 mV) noch erkennbar, aber auf den ersten Blick
in den ADC-Werten nicht mehr sichtbar ist.
Eine "einfache Doppel-Messung" mit Offsetkompensation und Schwellwert
schafft das nicht.
Die Offsetkompensation steckt beim Integrator mit drin.
Also ist eine analoge AC-Kopplung (via Koppel-Kondensator / Hochpass)
wohl nicht zwingend erforderlich. Solange der Empfänger durch
DC-Einstrahlung nicht in Sättigung gerät, und der ADC hoch genug
auflöst, müsste das Nutzsignal erfasst werden können.
Auch wenn ich das Prinzip nun begreife, dürfte das Ganze noch kein
"richtiger" lock-in sein, da ein Sample pro Puls sehr weit von
kontinuierlicher Integration entfernt ist - oder?
Wie hängen denn Referenzfrequenz (also Pulsfrequenz) und Samplefrequenz
zusammen? Was wäre, wenn bei gleicher Pulsfrequenz mehr Samples
integriert würden? Steigt die Empfindlichkeit?
Als nächstes werde ich mich an einer Art AGC versuchen (Referenzspannung
und 20x Gain des ADCs).
Siehe auch:
Beitrag "Fotodiode Umgebungslicht filtern"Beitrag "Photodiode vor Fremdlicht schützen-Lock-in-Verstärker?"Beitrag "Lock-In Verstärker oder Korrelation?"
Hatschi Puh schrieb:> Auch wenn ich das Prinzip nun begreife, dürfte das Ganze noch kein> "richtiger" lock-in sein, da ein Sample pro Puls sehr weit von> kontinuierlicher Integration entfernt ist - oder?
ich denke nicht, dass es irgendwo eine verbindliche Regelung gibt, wie
viele Samples pro Periode ein digitaler Lock-In aufnehmen muss. Für mich
darf man es dann einen lock in nennen, wenn
- die Messung mit definiertem Phasenbezug zur Modulation stattfindet
- die Modulationsfrequenz (oder bei manchen Anwendungen auch vielfache
der Modulationsfrequenz) auf DC heruntergemischt/demoduliert wird
- eine Tiefpassfilterung des demodulierten Signals stattfindet.
Alle drei Kriterien dürfte deine aktuelle Umsetzung erfüllen. Ein
Lock-In könnte auch per zeitkontinuierlicher Multiplikation mit einem
Sinussignal realisiert werden, muss aber nicht.
Du zeigst eine Menge Messungen. Aber ich tue mich schwer zu
interpretieren, was genau da dargestellt sein soll, wenn nicht
wenigstens ein bisschen was zu den Signalen gesagt wird. Messkurven, bei
denen die Skalierung abgeschnitten wurde oder wenig aussagekräftig ist
("count, sample") ist auch nicht ideal. Wie groß sind denn bei deinen
aktuellen Messungen konkret die Anteile von Signal (moduliert) und
Störsignal?
Achim S. schrieb:> schwer zu interpretieren, was genau da dargestellt sein soll, wenn nicht
wenigstens ein bisschen was zu den Signalen gesagt wird.
Stimmt:
Figure_1.png zeigt die 10-Bit-ADC-Werte (count) mit (on) und ohne (off)
Licht. delta ist die Differenz der beiden. filtered ist ein gleitender
Mittelwert über - ich glaube - 8 Werte. Wenn dieser den Schwellwert
unterschreitet, geht output auf 0.
Die samplerate war 8 kHz (-> Rechtecksignal mit ca. 4 kHz).
Es sind also ein paar Sekunden dargestellt, in denen ich die
Lichtschranke händisch unterbreche und ein bisschen mit der Taschenlampe
auf den Empfänger leuchte.
Aber das ist ja schon Schnee von gestern.
opto.png zeigt mit 5 ms bzw. 500 mV Teilung in cyan die Pulse an die
LED, in gelb den Ausgang vom TIA, und in magenta den Ausgang (Summe >
0).
De Lichtschranke ist erst unterbrochen, dann ziehe ich das Hindernis
heraus.
Man sieht auch die kleine Denkpause, in der die 64 Werte verarbeitet
werden.
Achim S. schrieb:> Ein> Lock-In könnte auch per zeitkontinuierlicher Multiplikation mit einem> Sinussignal realisiert werden, muss aber nicht.
Ja, das wäre wohl besser, aber ist natürlich aufwändiger. Als Kompromiss
kann offenbar auch das Signal ein Rechteck, aber die Referenz ein Sinus
sein.
Das SNR wäre interessant, ich versuche das bei Gelegenheit mal zu
ermitteln.
Achim S. schrieb:> Alle drei Kriterien dürfte deine aktuelle Umsetzung erfüllen.
Erstaunlich, dass es scheinbar funktioniert - auf den ersten Blick sah
es nicht so simpel aus (die praktische Minimal-Umsetzung).
Danke für die Begleitung ;-)
Nach Beseitigung der Störungen durch Netzbrumm und mit einem Bias, um
den Ausgang am TIA in den funktionsfähigen Bereich zu heben, erreiche
ich jetzt im abgedunkelten Raum und bei Fremdlicht ca. 50 cm Abstand mit
wenigen mA Sendestrom (rote LED und 1k Vorwiderstand an 5 V).
Das lässt sich mit richtiger Fotodiode, einem besseren Verstärker und
AC-Kopplung mit Sicherheit vervielfachen (mit Offset lässt sich die
interne 20x Verstärkung des Mikrocontrollers nicht nutzen). Pulsbetrieb
vom Sender geht natürlich auch noch.
Die Messfrequenz ist immer noch etwas langsam, so dass ein "Blitz" einer
Taschenlampe schon zu einer Erkennung führt (eine einzelne Messung über
Rauschen reicht, um die Summe über den Schwellwert zu bringen).
Das lässt sich filtern. Und momentan ist alles noch "freilaufend", das
wird Timer/Interrupt gesteuert noch schneller.
Aber schonmal die nächsten Schritte angedacht (bitte korrigieren!):
Momentan wird nur ein Rechteck mit 32 Pulsen "gesendet" (32, da 64 Werte
gut in den Speicher passen).
Um mehrere Sensoren gleichzeitig betreiben zu können, müsste ich im
Idealfall Rauschen senden. Da Sender und Empfänger eine Einheit sind,
also keine Synchronisierung erforderlich ist, könnte das vermutlich
sogar echtes Rauschen sein.
Habe ich nicht, also eine Pseudozufallsfolge. Diese muss aber so
beschaffen sein, dass nicht mehrere Sender dieselbe (oder ähnliche)
Folgen erzeugen;
also eine möglichst kleine Kreuzkorrelation haben -> orthogonale
Signale.
Dann gehen die jeweils anderen Folgen ins Rauschen ein.
Und falls doch mal Sender und Empfänger getrennt sind, muss der
Empfänger sich auf den Sender bzw. auf den gesendeten Code
synchronisieren und dazu diesen (in Software) autokorrelieren. Es gibt
(wenige) Codes, bei denen die Autokorrelation ideal ist
(https://de.wikipedia.org/wiki/Barker-Code).
Es kann dann wohl auch gemischt werden: eine Art Code für die
Synchronisierung und ein anderer für die Daten.
Nun mal angenommen, ich möchte zwei Sensoren betreiben, was wäre der
einfachste Ansatz?
Barker Code (da kurz) einmal normal und einmal invertiert
Manchester-Kodieren und dann senden?
Hatschi Puh schrieb:> Barker Code (da kurz) einmal normal und einmal invertiert> Manchester-Kodieren und dann senden?
Nein, die sind nicht "orthogonal".