调制所有 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()