问题描述
注意:我能找到的唯一 BeagleBone 标签是黑色的,这是一个绿色 Wifi,但我没有理由相信绿色和黑色在这件事上表现不同。欢迎提供替代标记建议。
对于嵌入式应用程序,我正在使用 BeagleBone Green Wireless 和 Adafruit python3 库,我正在尝试生成一些 PWM(脉宽调制)以向机器操作员发出音频蜂鸣警报,并发现它需要 ~设置 PWM 命令需要 240 毫秒,这感觉就像是一段疯狂的时间。
将 PWM 引脚连接到扬声器(通过晶体管)的最小 python 代码:
import time
import Adafruit_BBIO.PWM as PWM
pwmPin = "P8_46"
PWM.start(pwmPin,duty_cycle = 50,frequency = 1000)
time.sleep(0.080)
PWM.stop(pwmPin)
这会按预期发出 80 毫秒的 1000 Hz 蜂鸣声,但仅在 PWM 设置后大约 240 毫秒的延迟之后才会发出。
为了充分检测这一点,我使用了另一个 GPIO 引脚并将两个引脚连接到示波器,切换 I/O 引脚以帮助我将代码与我看到的内容同步。
上面的轨迹是 PWM 输出,这是正确的,下面的轨迹显示来自代码的各种同步脉冲,让我知道我看到了什么。 242 毫秒长脉冲(仅在 PWM 设置语句期间有效)。
import time
import Adafruit_BBIO.GPIO as GPIOn
import Adafruit_BBIO.PWM as PWM
bitPin = "P8_10"
pwmPin = "P8_46"
GPIO.setup(bitPin,GPIO.OUT)
currentBit = GPIO.input(bitPin)
def toggleBit():
global bitPin
global currentBit
currentBit = not currentBit
GPIO.output(bitPin,currentBit)
# INITIAL SYNC pulse -- 92 microseconds
toggleBit()
toggleBit()
# Now generate PWM beep
toggleBit() # rising edge of 242 msec pulse
PWM.start(pwmPin,frequency = 1000)
toggleBit() # trailing edge of 242 msec pulse
time.sleep(0.080) # beep for 80 msec
toggleBit()
PWM.stop(pwmPin)
toggleBit()
为了排除python只是让all有点慢,就在242毫秒长高脉冲之前是一个非常短的blippy同步脉冲:这是显示图像左上角的插图那个脉冲92微秒。这似乎完全合理,所以我无法解释疯狂缓慢的 PWM 设置。
我查看了 Adafruit 库中的 C 代码,我感觉到在执行 PWM 时存在一次性设置成本,但是这个大约 240 毫秒的事情反复出现。更改 PWM 引脚没有任何区别,以 root 身份运行也没有任何区别(我的非 root 用户是正确的 pwm
和 gpio
组的成员)。在执行所有这些操作之前,我运行了正确的 config-pin
命令。
我对 Linux/C 非常熟悉,使用 BeagleBone 也很舒服,但 Python 对我来说还很陌生。
我被难住了。
涉及的组件(据我所知都是最新的):
- BeagleBone 绿色无线
- Debian Buster IoT 映像 2020-04-06
- 内核版本 4.19.94-ti-r42
- Python 3.7.3
- Adafruit-BBIO 1.2.0
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)