RF / FM GPIO发射机黑客如何工作?


8

不久前,一些人发现他们可以使用Raspberry Pi的GPIO端口传输FM信号,另一个人意识到他可以使用RasPi来控制他的家庭自动化设备:

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

这是为此控制收音机的文件:

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

现在,我想将此语言移植到比我更容易尝试的C语言上,例如Go或Python。但是,我不清楚如何做到这一点。

Skagmo使用谐波产生433 MHz的频率。假设您只想要100 MHz的频率,为简单起见,您如何生成该频率?据我了解,它与GPIO时钟(或SPI?我不确定)有关。

从文件中可以看到,他在某个GPIO功能选择寄存器上设置了3位,然后使用结构初始化时钟,然后在他要传输高电平或低电平时都将其设置为1。

这是在载波中吗?哪里载波?

我还发现该Python脚本声称具有相同的功能,但是我不确定它是否使用本机发送器,或者该人是否将外部脚本连接到RasPi。

基本上,我真的很希望能有一个解释或简短的参考资料,确切地讲这是如何工作的,以及如果Python / Go足够快地传输可以模仿我的车库门遥控器的信号(似乎是经过ASK调制的),或者我是否有用C做

Answers:


2

在认识到这是一个有趣而伟大的技巧的同时,我建议您不要将其用于概念验证演示以外的其他用途,因为在未经许可的频率上进行广播可能会违反法律和/或导致法律问题和/或加重处罚。

请仅使用许可的设备在允许的频率范围和输出功率限制内广播。您永远不会知道附近是否有配备心脏起搏器的人。

Raspberry Pi具有时钟发生器,可以将方波输出到GPIO引脚。如果将时钟发生器编程为所需的频率,您将获得信号,并且当您更改频率时,该信号将成为调频(FM)收音机。这种方法的坏处是:1)方波非常嘈杂-传输大量谐波和其他频率; 2)RasPi可以输出很多RF功率,从而在非常宽的频谱中阻止了其他一些传输。


3

在您所在的国家/地区中,可能存在一些无线电频段,可能允许非常低功率的无执照无线电发射(美国的FCC第15部分规则)。但是,未经过滤的GPIO输出不会仅在一个RF波段中广播。

GPIO发送器技巧使用定期的数字输出来产生无线电信号。这是由于傅立叶定理之一,它证明了非正弦但周期性的信号可以分解为许多正弦分量(谐波)。将正弦波组件连接到半波长天线,它将发射一些RF能量。但是,要切断非预期频段的能量,需要在GPIO引脚和天线之间使用低通滤波器或带通滤波器,以消除所有非预期频率(所有那些频率)下的RF能量。 Pi的周期性GPIO数字输出波形的Fourier分解中包含的其他频率)。

您不希望您的Pi干扰任何更高频率的紧急服务无线电频段,这可能会给您带来法律麻烦。

补充:FM表示频率调制,例如,RF载波频率的变化(调制)表示有关调制输入的信息(在一种常见情况下为音频幅度)。Pi具有控制寄存器,可以更改GPIO输出引脚的周期性时序。周期性定时的变化也是频率的变化。在正确的时间更改此数字频率(当音频信号改变幅度等时),此数字波形的傅立叶变换也将更改其频谱(较高或较低,例如,被调频或FM信号)。DMA有时用于更改Pi的时序寄存器,因为DMA经常发生,足以匹配音频文件采样率或其倍数下音频文件幅度的变化。

一些有关无线电设计的教科书将包含更多有关如何改变频谱以满足各种广播标准的详细信息(此处不乏几章内容)。可能还需要了解音频DSP以及Pi的控制寄存器和DMA的工作方式(同样,此处不适用几章)。


2
尽管这是最正确的答案,但有关傅立叶分解的解释并不能解释人们认为数字 GPIO信号如何转换为FM。我敢肯定,很多人希望从视觉上更好地了解信号是如何调制到FM中的。
not2qubit
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.