Arduino 如何发送 433 MHz 的射频信号?

电器工程 Arduino 射频 频率
2022-01-07 19:22:23

我问这个问题主要是为了学习。

我了解到Hz是一秒钟内的周期数。

考虑到这一点,我尝试了以下示例。

示例 1

void loop() {     
  digitalWrite(3,HIGH); // make pin 3 have a voltage of ~ 5V
  delay(500); // wait 0.5 seconds
  digitalWrite(3,LOW); // make pin 3 have a voltage of ~ 0V
  delay(500); // wait 0.5 seconds
}

该代码的频率为 1 Hz,因为电压上升 0.5 秒,下降 0.5 秒。我的电压表显示 .99999 Hz

在此处输入图像描述

占空比为 50%,因为电压是上升时间的一半和下降时间的一半。

示例 2

void loop() {     
  digitalWrite(3,HIGH); // make pin 3 have a voltage of ~ 5V
  delay(90); // wait 0.09 seconds
  digitalWrite(3,LOW); // make pin 3 have a voltage of ~ 0V
  delay(10); // wait 0.01 seconds
}

该代码的频率为 10 Hz,因为每个周期为 0.1 秒(90 ms + 10 ms)。在 10 个周期内,您将达到 1 秒。此代码的占空比为 10%。


以下示例基本上是问题:


示例 3

void loop() {     
  digitalWrite(3,HIGH); // make pin 3 have a voltage of ~ 5V
  // Do not delay
  digitalWrite(3,LOW); // make pin 3 have a voltage of ~ 0V
  // Do not delay
}

如果我运行此代码,我的电压表显示的频率为 112,000 Hz 或 112 kHz:

在此处输入图像描述

我相信这是我能得到的最高频率。我不会在周期之间拖延。为什么当我用谷歌搜索 Arduino Uno 的频率时,它会说:

在此处输入图像描述

示例 4

谷歌可能是正确的,Arduino 的频率是 16 MHz。如果这是真的,那么 Arduino 怎么能发送 433 MHz 的频率呢?我想要买这个东西:

在此处输入图像描述

当我现在将延迟设置为 时Example 3,我可以获得的最高频率是 112 kHz(使用 ak)。如何发送 433 MHz 频率(带有 M)?

4个回答

简短的回答:它没有。
Arduino 不会发送任何接近那么高的东西。它只能通过使用另一个产生非常高频率(射频)的设备/模块以通过无线电波进行通信,在 433MHz 载波频率(或任何其他频率)上发送较低频率(较低比特率)的信号。
在这种情况下,433MHz不是数据/比特的速率,而是传输/接收数据的无线电信号的频率。您的问题表明对处理器时钟
的含义和区别缺乏了解频率、处理速度、数据速率和“载波”频率作为无线电通信的手段,因此您应该阅读和了解更多关于基本计算机处理及其相关术语,以及通过无线电波传输信息的手段和方式。
基本上,载波/无线电频率由您要传输的信息/数据调制/更改,因此代表信息的正是这些更改。
根据变化的类型,调制有 3 种基本类型。
幅度调制 (AM)、频率调制 (FM)、相位调制 (PM)。
使用 AM,载波频率保持稳定/相同,而载波频率的幅度/功率发生变化以传输信息。
FM 保持载波幅度相同(最大),而频率上下变化一定量表示信息。
PM 与 FM 类似,它通过对载波频率进行相移来传递信息。

为什么当我谷歌 arduino uno 的频率时它说:

16 MHz 是处理器的时钟频率,基本上是 CPU 内核运行的速度。

如果这是真的,那么 Arduino 怎么能发送 433 MHz 的频率呢?

您将购买以 433 MHz 中心频率发射的收音机。CPU 的速度与无线电发射的频率无关。例如,在光纤的极端情况下,光频率为 300,000 GHz,但您的 CPU 仍为 16 MHz。

当我现在在示例 3 上设置延迟时,我可以获得的最高频率是 112 kHz(使用 ak)。如何发送 433 MHz 频率(带有 M)?

无线电数据表应该让您了解如何连接它,但基本上它会通过某些总线(例如 USB)连接或为您提供一些您可以读取的数据信号。无线电数据表说要做什么?

这些“例子”似乎是可以回答的问题:

3) 使用 DigitalWrite 功能在循环中切换引脚很慢。这就是为什么您只能获得 112 kHz 的原因。微控制器仍以 16 MHz 时钟运行。

4) 发射机产生自己的射频载波。您可以发送慢速数据供模块传输。

Arduino 以 16MHz 运行。这意味着如果您在汇编中对其进行编程,则每条指令都需要\$\frac{1}{16\times10^{6}} = 62.5\mathrm{nS}\$您可能不想进行组装。编译器的效率足以将您的代码转换为汇编,然后转换为十六进制。

我相信这是我能得到的最高频率

您获得低于 8MHz 的频率(16/2;1 条指令打开引脚 1,指令将其关闭)的原因是 Arduino 有很多开销,这使得初学者更容易开始编码,但是使程序相对较慢。

复制并粘贴以下代码以替换您的 loop() 函数:

loop()
{
    PORTD ^= (1<<PD3);  
}

没有延迟,只有那 1 行。当我最后一次尝试时,它给了我一个 3MHz 的方波。这仍然不是预测的 8MHz。现在让我们尝试通过在其中添加无限 while 循环来绕过 loop() 函数。

loop()
{
    while(1)
    {
      PORTD ^= (1<<PD3);
    }
}

多多!!!您现在应该得到 8MHz 信号。

很多人已经解释了 433MHz 的问题。我只是想我应该在频率上添加我的咒语。如果您愿意,我很乐意解释代码中发生了什么