Forum: Mikrocontroller und Digitale Elektronik Erkennung zweier Frequenzen


von Simon (Gast)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,
es gibt zwei Signalquellen die die beiden Impulsmuster, welche im Anhang 
dargestellt sind, aussenden. Sie sind nicht sehr Frequenzstabil. ca+/- 
20%.

Das Problem ist mit einem Mikrocontroller zu erkennen ob eine der 
Quellen nicht mehr sendet.

Habt ihr eine Idee wie man da am besten vorgeht?

Herzlichen Dank!

Simon

von oszi40 (Gast)


Lesenswert?

Digital: Imulse zählen in einer bestimmten Zeit wenn es weniger sind: 
nochmals zählen und dann Fehler melden?

Analog: Signal gleichrichten, Pegel messen, mit Komparator auswerten.

von MaWin (Gast)


Lesenswert?

Je eine Quelle an einen Eingangspin und gucken, ob dort innerhalb der 
Impulszeit auch ein Impuls kommt kann doch nicht so schwer zu 
programmieren sein, die Frage ist eher, ob man einzelne fehlende Impulse 
erlauben will, und ob man bei zu vielen Impulsen Alarm geben will.

von Simon (Gast)


Lesenswert?

oszi40 schrieb:
> Digital: Imulse zählen in einer bestimmten Zeit wenn es weniger sind:
> nochmals zählen und dann Fehler melden?

Leider muß ich feststellen welche Quelle ausgefallen ist.

oszi40 schrieb:
> Analog: Signal gleichrichten, Pegel messen, mit Komparator auswerten.

eine analoge Lösung kommt leider nicht in Frage da die externen Bauteile 
auf ein Minimum beschränkt bleiben sollen.

MaWin schrieb:
> Je eine Quelle an einen Eingangspin und gucken, ob dort innerhalb der
> Impulszeit auch ein Impuls kommt kann doch nicht so schwer zu
> programmieren sein, die Frage ist eher, ob man einzelne fehlende Impulse
> erlauben will, und ob man bei zu vielen Impulsen Alarm geben will.

Die Quellen lassen sich leider nicht trennen, da beide über ein Medium 
senden.

Weiterhin ist zu sagen, daß die Signale auch ineinander laufen können.

von Davis (Gast)


Lesenswert?

"Die Quellen lassen sich leider nicht trennen, da beide über ein Medium
senden.

Weiterhin ist zu sagen, daß die Signale auch ineinander laufen können."

Wie sieht das "Medium" aus?

von Simon (Gast)


Lesenswert?

mein jetziger Ansatz sieht wie folgt aus:

Ich lasse einen Timer laufen. Immer wenn ein Impuls kommt wird der 
Timer-Wert in einem Ringspeicher abgelegt.
Der Ringspeicher wird ausgewertet.

Kommt kein Impuls läuft der Timer über und beide Quellen sind 
ausgefallen.

Das Problem ist aber, daß ich nur einen ATTiny13, also nicht allzuviel 
Speicher, habe.

von oszi40 (Gast)


Lesenswert?

Wo ist das Problem? Wenn Du in bestimmter Zeit immer 17 Impule zählst 
und es kommen z.B. nur 5 dann ist x < 17 = Fehler

Wenn beide Impule natärlich auf einer gemeinsamen Leitung liegen, wird 
es mathematischer. Dann könntest Du aber das Fenster verkleinern auf 
etwas größer als Impulslänge.

von Simon (Gast)


Lesenswert?

Davis schrieb:
> Wie sieht das "Medium" aus?

Die Signale sind Lichtimpulse die durch die Luft übertragen werden.

von c-hater (Gast)


Lesenswert?

Simon schrieb:

> Das Problem ist mit einem Mikrocontroller zu erkennen ob eine der
> Quellen nicht mehr sendet.

Das Problem besteht eigentlich nur darin, wie schnell die Entscheidung 
gefällt werden muß. Wenn diese Entscheidung ungefähr zehn Zyklen der 
langsameren Quelle warten kann, ist das absolut kein Problem. Muß sie 
schneller als in einem Zyklus der langsameren Quelle gefällt werden, ist 
es mit Sicherheit unmöglich.

Alles dazwischen ist eine Frage von verfügbarer Rechenleistung und 
Programmierfähigkeiten...

von Anja (Gast)


Lesenswert?

Simon schrieb:
> Habt ihr eine Idee wie man da am besten vorgeht?

Das Problem ist daß die Codes nicht genügend orthogonal sind.
Einfacher wäre es wenn das 2. Signal z.B. nominal alle 7.5 us senden 
würde.

Damit wäre sichergstellt daß innerhalb der ersten Periode 20-30 us 
mindestens 2 Pulse mit Abstand 6.3 - 9 us liegen. Das funktioniert 
natürlich auch nur wenn die Pulse kurz genug sind daß Du die Doppelpulse 
noch erkennen kannst wenn systematisch das 2. Signal irgendwo zwischen 
den Doppelpulsen liegt. -> ggf. den Abstand der Doppelpulse etwas 
vergrößern.

Gruß Anja

von Michael S. (msb)


Lesenswert?

Ich glaube Impulse zählen über einen bekannten Zeitraum ist das 
einfachste.
Sagen wir mal Du erwartest 300 Impulse (200 von der einen, 100 von der 
anderen Quelle).
Dann kann man vom Prinzip sagen:
<50 beide Quellen ausgefallen
<150 schnelle Quelle ausgefallen
<250 langsame Quelle ausgefallen
Über die genauen Grenzen kann man noch etwas tiefer nachdenken.

von alfredo (Gast)


Lesenswert?

Die Impulse würde ich auf ein D-FF geben, also auf den Clock eines 
74HC74. Dann /Q mit D verbinden. Das erzeugt ein Rechteck.

Interrupt alle 5 µs auslösen.
Variable falls Rechteck auf LOW ist Variable auf 0 zu setzen.
Falls Rechteck auf auf HIGH ist die Variable zu incrementieren. Falls 
der höchste Wert 4 ist, wurde das erste Signal erkannt. (sonst das 
zweite)

Man könnte das D-FF noch einsparen indem man mit der Flanke des Signals 
einen Interrupt auslöst und in der ISR doggelt.

von Michael A. (Gast)


Lesenswert?

alfredo schrieb:
> Interrupt alle 5 µs auslösen.
Klasse Vorschlag :-(

Mit einem 1MHz-Prozessor sollte man dann allerdings gar nicht erst 
anfangen.

von Ralph (Gast)


Lesenswert?

Alle Pulse in ein Array aufzeichnen.
Das Array anlegen als Ringspeicher.

Dann zyklisch das Array mit einer FFT analysieren.
Damit sollten die beiden Frequenzen als Ergebnis raus kommen.

von Hammerschlag (Gast)


Lesenswert?

> Das Problem ist mit einem Mikrocontroller zu erkennen ob eine der
> Quellen nicht mehr sendet.

Erst mal muss definiert werden, was "nicht mehr sendet" bedeutet:

- Falsches Muster? (Doppelpuls von Kanal A)
- Timing?
- Synchronität der Kanäle?
- In welcher Zeit muss was erkannt werden?

...etc.

von Simon (Gast)


Lesenswert?

Vielen Dank für die vielen konstruktiven Vorschläge.

Anja schrieb:
> Das Problem ist daß die Codes nicht genügend orthogonal sind.
> Einfacher wäre es wenn das 2. Signal z.B. nominal alle 7.5 us senden
> würde.
>
Leider sind die Codes nicht mehr veränderbar.

Michael S1. schrieb:
> Ich glaube Impulse zählen über einen bekannten Zeitraum ist das
> einfachste.
Da beide Quellen pro Zeit die selbe Anzahl Impulse erzeugen fällt 
einfaches Zählen leider aus.

> Dann zyklisch das Array mit einer FFT analysieren.
> Damit sollten die beiden Frequenzen als Ergebnis raus kommen.
Ich befürchte der Tiny13 hat dafür leider nicht den nötigen Speicher.

Hammerschlag schrieb:
> Erst mal muss definiert werden, was "nicht mehr sendet" bedeutet:

- Es muß erkannt werden welcher der Kanäle ausgefalle ist. d. seine 
Impulse kommen nicht mehr vollständig an.

- Es muß relativ störunempfindlich sein, da die Luftschnittstelle 
duchaus gestört sein kann.

Hammerschlag schrieb:
> - Timing?
> - Synchronität der Kanäle?
- Die Signale sind nicht sehr Frequenzstabil. Dies muß berücksichtigt 
werden. Soll aber nicht überwacht werden.

Hammerschlag schrieb:
> - In welcher Zeit muss was erkannt werden?
- Das verlust eines Kanals sollte in ca. 100ms erkannt werden.
- Das Wiedereinsetzten sollte innerhalb von ca 500ms erkannt werden.

Hammerschlag schrieb:
> - Falsches Muster? (Doppelpuls von Kanal A)
Der doppelimpuls dient dazu, daß beide Kanäle die selbe Sendeenergie 
haben und als Unterscheidungsmerkmal.

von Karl H. (kbuchegg)


Lesenswert?

Ich denke hier ist eine Information in deinen Zeichnungen untergegangen.

Signal 1 ist ein Doppelpuls mit einer relativ langen Pause dazwischen
Signal 2 ist ein Einfachpuls mit einer Pause zwischen den Pulsen, die 
der Hälfte der Pause zwischen den Doppelpulsen ausmacht.

Die Phasenbeziehung zwischen den beiden Signalen ist nicht bekannt und 
kann sich (durch Frequenzvariation) auch verändern.

von amateur (Gast)


Lesenswert?

Da hilft nur die Beobachtung über einen "längeren" Zeitraum. Andernfalls 
kannst Du nicht unterscheiden, ob beide Quellen pseudo-synchron senden.

Das Hauptproblem dabei ist, das die eine Quelle mit einem vielfachen der 
anderen Sendet. Also ab wann gibst Du eine Warnung aus.

Praktisch könnte das so aussehen, dass Du die Impulse (deren Zeiten) 
speicherst und zyklisch die Abstände analysierst. Die Oldies später aufs 
Altenteil schickst. Z.B. in einem Ringpuffer.

Natürlich geht dieses, wie auch die meisten anderen Verfahren in die 
Hose, wenn echte Synchronität vorliegt.
Auch ein eventueller Phasensprung, bzw. Ungenauigkeiten in der Frequenz 
beider Signale können das Ergebnis ebenfalls vermiesen.

von Dave C. (dave_chappelle)


Lesenswert?

Du hast also auf einem Kanal zwei unterschiedliche Signale mit einer 
Abständen von 25µs und 12.5µs mit jeweils 20% Toleranz.

Dazu die Frage -> sind das die Zeiten zwischen zwei High-Flanken oder 
zwischen einer High und eine Low Flanke? Ist nicht sehr schön 
eingezeichnet.

Zum besseren Verständnis benenne ich jetzt das Signal mit 25µs s_25 und 
das andere s_12_5

Ich würde so vorgehen:

Du misst 1ms lang was reinkommt.
In dieser Zeit sollten also maximal 50 Takte (1ms/(25µs-20%) von s_25 
und 100 Takte von s_12_5 kommen.

Deine Obergrenze ist demnach 150. Wenn weniger als 150 Takte 
reingekommen sind, stimmt etwas nicht.

Minimal kommen von s_25 33 Takte(1ms/(25µs+20% = 33 1/3) und von s_12_5 
66 Takte (66 2/3) rein. Also ist deine Untergrenze 100.


Wenn du also jetzt irgend eine Zahl bekommst zwischen 100 und 150 
funktioniert das System einwandfrei.

EDIT:

Eine einwandfreie Erkennung ist aber aus meiner Sicht gar nicht möglich, 
da z.B. ein Signal ganz ausfallen könnte und das andere auch irgendwie 
rumspinnt.

von Uwe (Gast)


Lesenswert?

Wie wärs mit zwei Bandpässen und ... hmm ... nen Gleichrichter + C + nen 
R zum Entladen und Anpassen der Detektionsenpfindlichkeit.
>- Das verlust eines Kanals sollte in ca. 100ms erkannt werden.
>- Das Wiedereinsetzten sollte innerhalb von ca 500ms erkannt werden.
Sollte ja wohl kein Problem darstellen.

von Ralph (Gast)


Lesenswert?

Simon schrieb:
> Leider sind die Codes nicht mehr veränderbar.

Simon schrieb:
> Ich befürchte der Tiny13 hat dafür leider nicht den nötigen Speicher.

Also wieder mal das typische Bastler Verfahren.

Erst mal was Basteln für einen Bereich, damit Fakten schaffen, Geld 
investieren.......
Und hinterher die gewaltigsten Umwege machen nur um mit diesen Fakten 
klarzukommen.

Ist das denn soooo schwer erst mal das komplette Projekt durchzuplanen 
und dann systematisch aufzubauen.
Das würde viele solche Probleme von Anfang an vermeiden.


Ohne eine FFT wirst du die beiden Signale nicht sauber trennen können. 
Ansonsten wird eine Fehlererkennung sehr schwer. Langsam, Instabil,...

Ich sehe da 2 Mögliche Optionen für dich.
1. Übertragung der beiden Signale auf getrennten Leitungen und damit 
getrennten Pins am µC
2. leistungsstärkeren µC der eine FFT in der benötigten Auflösung 
verarbeiten kann.

von 6A66 (Gast)


Lesenswert?

Simon schrieb:
> es gibt zwei Signalquellen die die beiden Impulsmuster, welche im Anhang
> dargestellt sind, aussenden. Sie sind nicht sehr Frequenzstabil. ca+/-
> 20%.

Also ich hab's ja nicht ganz mit verfolgt.
Aber was spricht dagegebn, zwei Timer (je einen für ein Signal) 
aufzuziehen die jeweils mit dem Signal neu geladen werden. Beim beiden 
Timern setze ich dann einen Comparewert so, dass er bei +30% einen 
Interrupt auslöst. Damit habe ich bereits nach Ausfall EINES Impulses 
eine Antwort.

Zum 1. Fall:
Der Timer wird nach 0,5us wieder geladen. Solange "Ausfall" im Sinne 
von "Totalausfall = Signal ganz aus" gilt funktioniert das oben auch. 
Wenn nicht könnte man darüber nachdenken, das ganze mit einen FlipFlop 
vorzuverarbeiten.

rgds

von Peter D. (peda)


Lesenswert?

Simon schrieb:
> Die Quellen lassen sich leider nicht trennen, da beide über ein Medium
> senden.
>
> Weiterhin ist zu sagen, daß die Signale auch ineinander laufen können.

D.h. das eine kann sich in dem anderen verstecken.
Na dann viel Vergnügen damit.

Sowas ist nicht zuverlässig zu lösen. Der Attiny13 kann die 500ns 
Doppelpulse nicht auflösen. Wie breit sind die Pulse eigentlich?

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.