我正在研究无线通信系统。我们使用了大约 10 对发射器和接收器。我们使用 atmega16 微控制器通过 USART 端口进行编码和解码。
现在我们可以在接收端发送和接收数据,但是有一个主要问题,当我们发现 2 个发送器数据同时到来时。由于干扰,接收器无法接收。
假设一个发送器发送“SENDA”,同时另一个发送器发送“GETTS”,此时接收器无法接收到正确的数据。由于所有的发射器和接收器都工作在同一个频率上,所以这种干扰正在发生。我该如何解决这个问题?
我正在研究无线通信系统。我们使用了大约 10 对发射器和接收器。我们使用 atmega16 微控制器通过 USART 端口进行编码和解码。
现在我们可以在接收端发送和接收数据,但是有一个主要问题,当我们发现 2 个发送器数据同时到来时。由于干扰,接收器无法接收。
假设一个发送器发送“SENDA”,同时另一个发送器发送“GETTS”,此时接收器无法接收到正确的数据。由于所有的发射器和接收器都工作在同一个频率上,所以这种干扰正在发生。我该如何解决这个问题?
开发可行的射频通信协议往往是一项棘手但具有教育意义的工作。除了已经说过的内容之外,还有几点需要考虑:
如果一个人试图通过在不需要接收器时关闭接收器来节省能量,那么共识问题可能会特别令人烦恼。假设两个 P 和 Q 应该每 10 秒通信一次,所以它们通电并且 P 向 Q 发送一个数据包。Q 收到数据包,发送他的确认,然后——知道 P 在将近 10 秒内不会发送任何内容,然后关闭电源。如果 P 没有得到 Q 的确认,他会重传;然而,由于 Q 睡着了,他不会听到 P 的重传。从 Q 的角度来看,这无关紧要(他已经收到了他的数据),但这意味着无论 P 重试多少次,他都无法知道 Q 得到了他的数据包(至少直到下一次约十秒)。
如前所述,可行的射频通信协议往往是一项棘手的工作。不过,我希望您可能会从经验中学到很多东西。
如果您没有为此使用标准协议,那么您将不得不设计和实现一个,例如一个简单的示例:
所以发生的情况是,您首先尝试通过先收听来避免“干扰”,然后如果仍然发生干扰,您会通过接收节点缺乏确认来检测到这一点,然后在随机延迟后重试 - 两个干扰发射器将使用不同的随机延迟,最大限度地减少第二次碰撞的机会。
这里有两个常见的选项
1) 实施先听后说 (LBT) 算法,该算法在开始自己的传输之前检查是否正在进行传输,如果是,则回退一段时间。周期应该包含一个固定长度和一个随机长度,这样它们就不会在同一周期内全部后退。许多标准无线电协议都包含此程序,请参阅 ETSI EN 300-220-1。
2) 实施一个信标系统,其中传输从信标开始计时。每个发射器都有自己的时隙。您通常会使用设备中的序列号来确定它们的插槽,并有一个系统来确定谁发送信标。由于这依赖于具有不同插槽的所有发射器,因此让用户唯一标识所有发射器并不是一个好主意,除非您对此有可靠的程序。
正如我从评论等中了解到的那样,电源不是问题,但通信速度是问题。所以,这是我对协议的建议。
给所有节点编号,0..n-1。让每个节点知道它是哪个数字。节点 0 将成为主节点。
每 15 毫秒,节点 0 发送一条消息:“0HELO”。
1ms 后,节点 1 发送一条消息:“1DATA”。
1ms 后,节点 2 发送一条消息:“2NICE”。
1ms 后,节点 3 发送一条消息:“3”。(本节点无话可说)
1ms 后,节点 4 发送消息:“2CATS”。
...
1 毫秒后,节点 9 发送一条消息:“9MICE”。
然后有5ms的停顿。
节点总是在它们正确的时隙中发送它们的消息,即使它们无话可说。这样您就可以保证 66Hz 的通信速率,没有冲突。