- fchao-Sinus-Wechselrichter AliExpress         
Seite 3 von 4 ErsteErste 1234 LetzteLetzte
Ergebnis 21 bis 30 von 39

Thema: Zeitmessstrecke mit Funkübertragung

  1. #21
    Erfahrener Benutzer Roboter-Spezialist Avatar von sast
    Registriert seit
    30.11.2004
    Alter
    54
    Beiträge
    502
    Anzeige

    E-Bike
    Mein Problem befindet sich in einer Schicht die viel weiter unten liegt.

    Ich empfange Sinus mit 1200Hz und mit 2200Hz, nach dem whereAVR Prinzip werden, wenn ichs richtig verstanden habe, die Nulldurchgänge zum Erkennen der jeweiligen Frequenz genutzt. Bei einer Messung über einer Frequenz von 1200Hz habe ich mit einem Zähler in der Zeit X ca. Y mal einen Zähler inkrementiert und bei 2200Hz sind es Z mal, wobwei Y größer als Z ist. bei 2200Hz gehören aber 4 Nulldurchgänge zu einem Bit und bei 1200 sind es nur 2. Wenn ich nun aus irgendeinem Grund in der Mitte des 2200Hz Bits anfange zu interpretieren,habe ich doch nicht 4 Nulldurchgänge sondern nur 2 oder vielleicht drei.

    Oder liege ich da falsch mit meiner Überlegung, und sowas passiert nie?

    雅思特史特芬
    开发及研究

  2. #22
    Erfahrener Benutzer Robotik Einstein Avatar von wkrug
    Registriert seit
    17.08.2006
    Ort
    Dietfurt
    Beiträge
    2.232
    Bei einem Atmel Controller würde ich das Problem mit dem Analog Komperator lösen.
    Diesen kann man so programmieren das er entweder bei einer steigenden, einer fallenden, oder einem Wechsel der Polarität einen Interrupt triggert.

    Was dein 8051 Derivat da hergibt kann ich natürlich nicht wissen.

    Du wartest auf die steigende Flanke und startest einen Timer (oder liest einen freilaufenden Timer aus). Beim nächsten Nulldurchgangs- Interrupt (= eine vollständige Periode weil wir ja auf steigende Flanke triggern) wird der Timer erneut (evtl. Subtrahiert) ausgelesen und mit einem Zeitfenster für 1200 und 2200Hz verglichen (toleranzen). Passt der Wert für eine der beiden Frequenzen hast Du eine 1 bzw. eine 0 anliegen. Zeiten die nicht in das Zeitfenster passen werden Ignoriert (=Störung). Der Timer ist nach jedem Nulldurchgang wieder zu resetten.
    Läuft der Timer irgendwann über wurde nichts (auch keine Störung) empfangen. Das geht natürlich nur mit resetteten Timern.
    Das bei 2200Hz zwei Wellenzüge übertragen werden ist dann eigentlich nur noch ein Softwareproblem das sich mit einem Flag lösen ließe.
    Die empfangenen Bits werden in ein Software- Schieberegister geschoben, das bei Timeouts wieder gelöscht wird.
    Die Auswertung des im Schieberegister hinterlegten Daten erfolgt über eine der übergeordneten Schichten, kann aber auch durch den Nulldurchgansinterrupt getriggert werden.

    Ich hab sowas schon mal als normalen Interrupt für RC- Servoimpulse gemacht - funktioniert tadellos.

  3. #23
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    02.09.2005
    Ort
    Osnabrücker Land
    Alter
    63
    Beiträge
    534
    .. zu den Ausführungen von wkrug kann ich nur ergänzen, daß ich immer einen Timer verwende und entsp. Teiler- / Countervariablen (volatile) nutze. Somit läßt sich eben auch gleich ein Timeout integrieren.
    Ich kann mir keine Signatur leisten - bin selbständig!

  4. #24
    Erfahrener Benutzer Robotik Einstein Avatar von Vitis
    Registriert seit
    06.01.2005
    Ort
    Südpfalz
    Alter
    50
    Beiträge
    2.253
    hmmm, ne RTC synchronisieren ist nicht unbedingt die schwierigste Aufgabe,
    aber der Messbereich ist dann schon recht grob, die bringt ja nur
    auflösung im Sekundentakt, reicht Euch das ?

    @vajk:
    Das nennt sich dann Ringspeicher. Ich hab sowas mal gemacht indem ich die
    Start und Stop-Kondition aus den oberen 4 Bit eines gesendeten Byte verwendet hab.
    Vor den Erfolg haben die Götter den Schweiß gesetzt

  5. #25
    Erfahrener Benutzer Robotik Einstein Avatar von wkrug
    Registriert seit
    17.08.2006
    Ort
    Dietfurt
    Beiträge
    2.232
    @vitis
    Wir reden hier (vermutlich) schon von einer Auflösung im 1/100 Sekunden Bereich.
    Uhren in einem so engen Zeitraster über eine Funkstrecke mit relativ langen Laufzeiten zu Synchronisieren dürfte nicht ganz einfach sein.
    Schön wäre es natürlich wenn man eine Referenzuhr hätte die alle Angeschlossenen Teilnehmer (Master + Slave) gleichzeitig versorgt.
    Denn dabei wären ja alle Laufzeiten (fast) gleich und die interenen Uhren würden alle Synchron laufen.
    Das ginge vermutlich mit DCF 77 oder GPS allerdings nur mit nicht unbeträchtlichem Aufwand (Gps Empfänger oder PLL Frequenzvervielfacher).
    Bei Ethernet gibt es dafür eigene Chips, die diese Aufgabe erledigen.
    Aber ich hab da aber schon ein paar Ideen...
    Ich möchte den Quarztakt des uC verwenden, der aber abgeglichen werden kann. Siehe diesen Threat weiter oben.
    An eine RTC hab ich auch schon gedacht allerdings noch keine gefunden die 1/100 Sekunden macht.

  6. #26
    Erfahrener Benutzer Roboter-Spezialist Avatar von sast
    Registriert seit
    30.11.2004
    Alter
    54
    Beiträge
    502
    RTC:
    Als RTC hab ich den M41T81 von ST. Da hab ich ne Auflösung bis 1/100 Sekunden.

    Leider hab ich noch keine Idee wie man das so genau synchronisiert.

    Mit mal über den Daumen peilen ist da nichts mehr.

    Funksync:
    Was mein eigentliches Problem mit der Synchronisation angeht, hab ich das jetzt so verstanden, dass ich mir mal um die Verschiebung um ein halbes Bit in einem 2200Hz Signal keine Sorgen machen muss, da ich dann einfach beim nächsten 1200Hz Signal merke, dass da irgendwas nicht stimmt. Ich gehe jetzt einfach mal davon aus, dass ich immer alle Nulldurchgänge mitbekomme.

    Wenn das so falsch gedacht ist gebt mir bitte einen Wink.

    sast

    雅思特史特芬
    开发及研究

  7. #27
    Erfahrener Benutzer Robotik Einstein Avatar von wkrug
    Registriert seit
    17.08.2006
    Ort
    Dietfurt
    Beiträge
    2.232
    @sast
    Ich seh das auch so das Du alle Nulldurchgänge mitbekommen musst, damit eine klare Aussage 1 oder 0 getroffen werden kann.
    Ich würd aber in den Rahmen am Anfang mehrere Bytes Preambel einbauen, damit sich Sender und Empfänger mal "warmlaufen" können.
    Diese Preambel wird dann beim Empfänger wieder verworfen leitet aber den Empfang der eigentlichen Bytes ein. Ich würd trotz allem einen Leitungscode verwenden, dadurch wären dann unverwechselbare Bytes für die Preambel möglich.

    Für die Synchronisierung der Uhren hab ich mir das so gedacht.
    Die Master Uhr sendet ihre aktuelle Zeit und einen leeren Offsetwert aus.
    Die Slave Uhr nimmt diese Zeitinformation auf und übergibt Sie ihrer RTC.
    Der Slave sendet nun ebenfalls seine aktuelle Zeit wieder an den Master zurück.
    Der Master subtrahiert nach dem Empfang die empfangene Zeit von seiner internen RTC und teilt das Ergebnis durch 2.
    Der Master sendet nun wiederum seine aktuelle RTC Zeit und versendet im selben Rahmen noch den errechneten Offset mit.
    Die Slave RTC nimmt die Zeitinformation auf und addiert den Offset dazu.
    Das Ergebnis wird der RTC des Slaves übergeben.
    Dadurch sollten beide Uhren jetzt synchron laufen.
    Bei den nachfolgenden Synchronisationsläufen kann man noch eine Filterfunktion einbauen, die den neuen Wert mit dem gespeicherten Offsetwert gewichtet verrechnet und Extremwerte verwirft.
    Vorraussetzung für das funktionieren dieses Systems ist, das beide Richtungen die gleiche Laufzeit haben und die Anzahl der übertragenen Bytes gleich ist (Rahmendauer). Zumindest für die Pakete die der Synchronisierung dienen.
    Dadurch scheiden für mich auch Funkmodule mit sich verändernder Durchlaufzeit aus.
    Das Synchronisationsproblem ist auch der Grund warum ich nur maximal eine Durchschaltestelle haben will, da ich sonst den Offset für jede Station neu berechnen muß. Im Master muss ich das ohnehin machen.
    Der Königsweg wäre für mich immer noch eine zentrale Taktquelle, allerdings scheidet das wegen der nicht unerheblichen Kosten leider aus.

  8. #28
    Erfahrener Benutzer Roboter-Spezialist Avatar von sast
    Registriert seit
    30.11.2004
    Alter
    54
    Beiträge
    502
    @wkrug

    was ist denn ein Leitungscode?

    Also mit dem durch 2 teilen bin ich noch nicht so ganz zu frieden. Da fällt ja noch die Kommunikation mit dem RTC und die eigentliche Verarbeitungszeit mit rein. Die ist ja beim Empfangen und Senden höchstwahrscheinlich unterschiedlich. Immerhin bewegen wir uns hier im ms-Bereich und die Weiterleitungsmethode möchte ich eigentlich nur ungern einschränken.

    Aber vielleicht sehe ich da schon wieder Probleme wo gar keine sind.

    Mir ist da gerade eine Idee gekommen.
    Man könnte einen Ping an den Slave schicken, den dieser einfach zurückgibt (ohne irgendwelche Verarbeitungsschritte).
    Dann halbiert der Master die zwischenzeitlich vergangene Differenz und addiert sie zu einer Zeit die er jetzt an den Slave schickt.
    Und dieser muss sie nur noch eintragen.
    Damit ist erst mal eine Grundsynchronisation da.
    Dann sollte man mal über deine Filteridee nachdenken um ein resync zu machen. Obwohl ich davon ausgehe, dass die Synchronisation solange bestehenbleibt, solange die RTCs unter Saft stehen und die Controller immer noch aktiv sind.

    sast

    Edit: Naja das in Klammern nehme ich zurüch, da ja auch beim Ping der Kommunikationsweg klar sein muss. Aber er geht ja hin und zurück über die selben Kanäle.

    雅思特史特芬
    开发及研究

  9. #29
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    02.09.2005
    Ort
    Osnabrücker Land
    Alter
    63
    Beiträge
    534
    ... das mit den Antwortzeiten messen ist eine Möglichkeit, das "ping" sollte auch auf untester Ebene sofort durchgereicht werden, das müßte auch über die Relaisstationen funktionieren.
    Alternativ würde denn eine DCF77-Empfang jedes Slaves nicht auch funktionieren ? Kontrolle in Kombination mit "ping" ?
    Ich kann mir keine Signatur leisten - bin selbständig!

  10. #30
    Erfahrener Benutzer Roboter-Spezialist Avatar von sast
    Registriert seit
    30.11.2004
    Alter
    54
    Beiträge
    502
    @vajk
    Ich dachte immer wir befinden uns hier auf der untersten Ebene.
    Ping sollte nur aus Addresse des Empfängers, Zwischenstationen und Absenderadresse bestehen, wobei der Adressheader ja nach dem Init im Slave fest gespeichert werden kann, bis zum Ausfall einer Komponente.
    Und irgendein Pingzeichen.

    Sollte man eigentlich den Header beim Durchreichen verändern, durch Anhängsel oder Wegschneiden von Headerteilen?

    Das bedeutet dann ja immer Verarbeitungszeit im Relais.

    Meine Idee war in jeder Relaisstation die Zieladresse abzuschneiden, damit die Nächste vorn steht. Das würde aber bedeuten, dass ich den Weg zurück irgendwie anders bekannmachen muss.

    sast

    雅思特史特芬
    开发及研究

Seite 3 von 4 ErsteErste 1234 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Labornetzteil AliExpress