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
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.
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.
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.
"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?
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.
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.
Davis schrieb: > Wie sieht das "Medium" aus? Die Signale sind Lichtimpulse die durch die Luft übertragen werden.
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...
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
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.
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.
alfredo schrieb: > Interrupt alle 5 µs auslösen. Klasse Vorschlag :-( Mit einem 1MHz-Prozessor sollte man dann allerdings gar nicht erst anfangen.
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.
> 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.
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.
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.
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.
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.
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.
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.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.