调制所有 gpio 上的复杂信号
Modulate complex signal on all gpio
我在 GIPO 的输出端需要一个大致这种形状的信号。(脉冲中的子脉冲)
如何在 PI 上使用 PWM 来实现?我试着用 RPIO 来做,但他古老的 GPIO 引出线可能不适用于我的 Rpi 3 b+。
from RPIO import PWM
servo = PWM.Servo()
servo.set_servo(12, 10000)
PWM.add_channel_pulse(0, 12, start=200, width=2000)
引脚上没有信号。
我对此感到困惑,想尝试使用内置库来处理 PWM,但我没有发现子循环的可能性。我还能如何从不同的 GPIO 输出这种形式的信号?
documentation 建议只需将频道列表作为第一个参数传递给 GPIO.setup 和 GPIO.output 即可完成您的要求。
chan_list = [11,12] # add as many channels as you want!
# you can tuples instead i.e.:
# chan_list = (11,12)
GPIO.setup(chan_list, GPIO.OUT)
GPIO.output(chan_list, GPIO.LOW) # sets all to GPIO.LOW
与 RPi.GPIO 相比,我对 pigpio 的 PWM 体验要好得多。 Wiringpi 也不错,但 pigpio 的 PWM 支持在我看来要好得多。
文档中有一些函数可以在任何引脚上生成 PWM:
http://abyz.co.uk/rpi/pigpio/python.html#set_servo_pulsewidth
http://abyz.co.uk/rpi/pigpio/python.html#set_PWM_dutycycle
你*有*使用RPi.GPIO吗?我知道这不是一个准确的答案,但我希望它至少能为您指明正确的方向。
看来,你应该使用这样的代码。不幸的是,我没有机会测试它,因为我没有频率计或示波器。
import time
import pigpio
GPIO=12
pulse = []
# ON OFF MICROS
pulse.append(pigpio.pulse(1<<GPIO, 0, 5))
pulse.append(pigpio.pulse(0, 1<<GPIO, 5))
pulse.append(pigpio.pulse(1<<GPIO, 0, 5))
pulse.append(pigpio.pulse(0, 1<<GPIO, 1e7))
pi = pigpio.pi() # connect to local Pi
pi.set_mode(GPIO, pigpio.OUTPUT)
pi.wave_add_generic(pulse)
wid = pi.wave_create()
if wid >= 0:
pi.wave_send_repeat(wid)
time.sleep(60) # or another condition for stop processing
pi.wave_tx_stop()
pi.wave_delete(wid)
pi.stop()
我在 GIPO 的输出端需要一个大致这种形状的信号。(脉冲中的子脉冲)
如何在 PI 上使用 PWM 来实现?我试着用 RPIO 来做,但他古老的 GPIO 引出线可能不适用于我的 Rpi 3 b+。
from RPIO import PWM
servo = PWM.Servo()
servo.set_servo(12, 10000)
PWM.add_channel_pulse(0, 12, start=200, width=2000)
引脚上没有信号。
documentation 建议只需将频道列表作为第一个参数传递给 GPIO.setup 和 GPIO.output 即可完成您的要求。
chan_list = [11,12] # add as many channels as you want!
# you can tuples instead i.e.:
# chan_list = (11,12)
GPIO.setup(chan_list, GPIO.OUT)
GPIO.output(chan_list, GPIO.LOW) # sets all to GPIO.LOW
与 RPi.GPIO 相比,我对 pigpio 的 PWM 体验要好得多。 Wiringpi 也不错,但 pigpio 的 PWM 支持在我看来要好得多。
文档中有一些函数可以在任何引脚上生成 PWM:
http://abyz.co.uk/rpi/pigpio/python.html#set_servo_pulsewidth http://abyz.co.uk/rpi/pigpio/python.html#set_PWM_dutycycle
你*有*使用RPi.GPIO吗?我知道这不是一个准确的答案,但我希望它至少能为您指明正确的方向。
看来,你应该使用这样的代码。不幸的是,我没有机会测试它,因为我没有频率计或示波器。
import time
import pigpio
GPIO=12
pulse = []
# ON OFF MICROS
pulse.append(pigpio.pulse(1<<GPIO, 0, 5))
pulse.append(pigpio.pulse(0, 1<<GPIO, 5))
pulse.append(pigpio.pulse(1<<GPIO, 0, 5))
pulse.append(pigpio.pulse(0, 1<<GPIO, 1e7))
pi = pigpio.pi() # connect to local Pi
pi.set_mode(GPIO, pigpio.OUTPUT)
pi.wave_add_generic(pulse)
wid = pi.wave_create()
if wid >= 0:
pi.wave_send_repeat(wid)
time.sleep(60) # or another condition for stop processing
pi.wave_tx_stop()
pi.wave_delete(wid)
pi.stop()