注意:我能找到的唯一的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)
这会发出1000 Hz的蜂鸣音,持续80毫秒,但只有在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, duty_cycle = 50, 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对我来说是相当新的
我被难住了
涉及的组件(据我所知,所有组件都是最新的):
目前没有回答
相关问题 更多 >
编程相关推荐