Wie funktioniert der RF / FM GPIO Sender Hack?

8

Vor einiger Zeit haben einige Leute herausgefunden, dass sie FM-Signale über die GPIO-Ports des Raspberry Pi übertragen können, und eine andere Person hat erkannt, dass er den RasPi zur Steuerung seiner Hausautomationsgeräte verwenden kann:

http://www.skagmo.com/page.php?p=projects/22_pihat

Dies ist die Datei, die das Radio dafür steuert:

https://github.com/s7mx1/pihat/blob/master/radio.c

Jetzt möchte ich dies auf eine Sprache portieren, mit der ich leichter experimentieren kann als mit C, wie Go oder Python. Ich bin mir jedoch nicht ganz sicher, wie das gemacht wird.

Skagmo verwendet die Harmonischen, um eine Frequenz von 433 MHz zu erzeugen. Angenommen, Sie möchten nur eine Frequenz von 100 MHz. Der Einfachheit halber, wie erzeugen Sie diese? Soweit ich weiß, hat dies etwas mit einer GPIO-Uhr zu tun (oder vielleicht mit SPI? Ich bin mir nicht sicher).

Nach dem, was ich in der Datei sehen kann, setzt er drei Bits in ein GPIO-Funktionsauswahlregister, initialisiert dann die Uhr mit einer Struktur und setzt dann ein Bit, wann immer er hoch oder niedrig senden möchte.

Ist das in der Trägerwelle? Wo ist die Trägerwelle?

Ich habe auch dieses Python-Skript gefunden, das behauptet, dasselbe zu tun , aber ich bin mir nicht sicher, ob es den nativen Sender verwendet oder ob die Person einen externen mit dem RasPi verbunden hat.

Grundsätzlich würde ich mich sehr über eine Erklärung oder eine kurze Referenz darüber freuen, wie dies genau funktioniert und ob Python / Go schnell genug sind, um Signale zu übertragen, die meine Garagentorfernbedienung imitieren können (ASK-moduliert, wie es scheint), oder ob ich dies getan habe um es in C. zu tun.

Stavros Korokithakis
quelle

Antworten:

2

Obwohl ich dies als einen lustigen und großartigen Hack erkenne, würde ich davon abraten, es für irgendetwas anderes als die Proof-of-Concept-Demo zu verwenden, da das Senden auf nicht lizenzierten Frequenzen gegen das Gesetz verstoßen und / oder zu rechtlichen Problemen und / oder schweren Strafen führen kann.

Bitte verwenden Sie nur lizenzierte Geräte, um innerhalb der zulässigen Frequenzbereiche und Ausgangsleistungsgrenzen zu senden. Sie werden nie erfahren, ob sich in Ihrer Nachbarschaft eine mit Herzschrittmachern ausgestattete Person befindet.

Raspberry Pi verfügt über Taktgeneratoren, die Rechteckwellen an die GPIO-Pins ausgeben können. Wenn Sie den Taktgenerator auf die gewünschte Frequenz programmieren, erhalten Sie das Signal. Wenn Sie die Frequenz ändern, wird das Signal zu einem frequenzmodulierten (FM) Radio. Schlechte Punkte dieses Ansatzes sind: 1) Rechteckwelle ist sehr verrauscht - es werden viele Harmonische und andere Frequenzen übertragen, 2) RasPi kann viel HF-Leistung ausgeben und einige andere Übertragungen im sehr breiten Frequenzspektrum blockieren.

lenik
quelle
3

In Ihrem Land gibt es möglicherweise Funkfrequenzbänder, in denen möglicherweise nicht lizenzierte Funkemissionen mit sehr geringem Stromverbrauch zulässig sind (FCC Part 15-Regeln in den USA). Ein ungefilterter GPIO-Ausgang sendet jedoch nicht nur in einem HF-Band.

Der GPIO-Sendertrick verwendet einen periodischen digitalen Ausgang, um ein Funksignal zu erzeugen. Dies ist auf einen von Fouriers Theoremen zurückzuführen, der beweist, dass ein nicht sinusförmiges, aber periodisches Signal in viele sinusförmige Komponenten (Harmonische) zerlegt werden kann. Schließen Sie eine sinusförmige Komponente an eine Antenne mit halber Wellenlänge an, die etwas HF-Energie aussendet. Um jedoch Energie in anderen als den vorgesehenen Frequenzbändern auszuschalten, muss ein Tiefpassfilter oder ein Bandpassfilter zwischen dem GPIO-Pin und der Antenne verwendet werden, um HF-Energie bei allen unbeabsichtigten Frequenzen (all diesen) zu entfernen andere Frequenzen, die in der Fourier-Zerlegung der periodischen GPIO-Digitalausgangswellenform Ihres Pi enthalten sind).

Sie möchten nicht, dass Ihr Pi Funkbänder mit höherfrequenten Notdiensten stört, die rechtliche Probleme verursachen könnten.

Hinzugefügt: FM bedeutet Frequenzmodulation, z. B. Änderungen (Modulationen) der Frequenz des HF-Trägers stellen Informationen über den modulierenden Eingang dar (Audioamplitude in einem häufigen Fall). Der Pi verfügt über Steuerregister, die das periodische Timing des GPIO-Ausgangspins ändern können. Änderungen des periodischen Timings sind auch Änderungen der Frequenz. Ändern Sie diese digitale Frequenz genau zum richtigen Zeitpunkt (wenn das Audiosignal die Amplitude ändert usw.), und die Fourier-Transformation dieser digitalen Wellenform ändert auch ihr Frequenzspektrum (höher oder niedriger, z. B. frequenzmoduliert oder ein FM-Signal). DMA wird manchmal verwendet, um die Timing-Register des Pi zu ändern, da DMA häufig genug auftreten kann, um Änderungen der Amplitude einer Audiodatei mit der Audio-Abtastrate oder einem Vielfachen davon anzupassen.

Einige Lehrbücher zum Thema Radio-Design enthalten weitaus mehr Details darüber, wie sich das Spektrum ändern muss, um verschiedene Sendestandards zu erfüllen (mehrere Kapitel passen mehr als hierher). Kenntnisse über Audio-DSP und die Funktionsweise der Pi-Steuerregister und des DMA können ebenfalls erforderlich sein (auch hier passen einige Kapitel mehr als hierher).

hotpaw2
quelle
2
Obwohl dies die richtigste Antwort ist, erklärt die Erklärung der Fourier-Zerlegung nicht, wie das digitale GPIO-Signal in FM umgewandelt wird, was die Leute für analog halten. Ich bin sicher, dass viele Leute visuell besser verstehen möchten, wie das Signal in FM moduliert wird.
not2qubit