0

我有一个关于使用 Raspberry Pi Pico 生成有限长度方波的问题。例如,我想生成一个有 100 个周期的 20 kHz 方波,或者生成一个精确为 1 ms 的 20 kHz 方波。我无法准确控制它。

生成无限长的方波很容易,网上有很多例子。我可以使用 PIO 来实现它。例如,以下代码可以这样做:

import rp2
from machine import Pin 
@rp2.asm_pio(set_init=rp2.PIO.OUT_LOW)
def blink():
    set(pins, 1)
    set(pins, 0)

sm = rp2.StateMachine(0, blink, freq=25000, set_base=Pin(26))

sm.active(1)

但是,我不知道如何准确控制方波的长度/周期。通过使用 time.sleep() 根本不准确。

先感谢您!

4

1 回答 1

2

使用 PIO 中的“递减 X”指令来计算所需的周期数。可能需要增加一些延迟才能恢复方波。 jmp(x_dec, "top_of_loop"). 你会挂起,等待一些输入,然后从输入 FIFO 中读取 X 值。然后你会运行方波循环,递减 X。当它达到零时,你跳到外循环,在那里你再次等待循环数的新 X 值。我想就是这样!

于 2021-08-20T02:16:50.897 回答