首页 > 解决方案 > 以固定频率切换 Raspberry Pi 的 GPIO

问题描述

我有一个 208 - 232 位长的二进制信号,我想通过树莓派的 GPIO 发送。位之间的延迟需要保持不变。我怎样才能做到这一点?

我想到的最简单的解决方案是这个(伪代码):

send(gpio, message, delay){
  for(int i = 0; i < lenght(message); i++){
    if (message[i] == 1){
      gpio.high()
    }
    else{
      gpio.low()
    }
    sleep(delay)
  }
}

但是我想发送这个消息的频率大约是 40kHz,所以两个比特之间的延迟只有 25us。我怎么能保证它确实&持续地延迟那么多。

标签: c++craspberry-pi

解决方案


在用户空间中,无法保证任何事情都是“实时”发生的。

因此,我决定使用一个单独的微控制器,该微控制器负责通过 I2C 或 UART 与 RaspberryPi 进行通信的时间关键型功能。

这样,RaspberryPi 可以进行高抽象级别的决策并向用户显示动画,同时能够通过超声波发送消息。

我想出的另一种方法是创建一个类似于 .wav 的文件,然后使用 DMA 或其他技术,如音频。但由于我没有尝试过,我不知道 Pi 是否足以在更高的采样率下做到这一点。


推荐阅读