2026/10/24 1:43:08

低通滤波的实践(PWM)

低通滤波的实践(PWM) 1 声卡项目写这个其实是做RP2040 USB声卡的一部分。因为现在树莓派5板子没有3.5的音频输出了树莓派3的板子反而有所以想自制一个USB声卡通过这个制作打算学一下制板USB/UACRTOS。。。都是我很感兴趣的内容。这个声卡应该能写好几篇文章。。。网上也看了不少USB声卡硬件部分都提到有两个部分1是要做电流放大。2是低通滤波。所以这次先看的这两个部分。我不是真正的硬件出身很多内容也是刚开始学习。如果内容有误或者太粗浅还见谅。2 环境和软件这次用的还是老朋友树莓派PICO本来是想直接用PICO SDKRTOS奈何编出来的固件PWM口没反应此时软硬件问题都挺多所以干脆还是先换回了老朋友micropython。代码如下import machine import time # 定义音符与频率的对应关系 notes { C4: 261.63, D4: 293.66, E4: 329.63, F4: 349.23, G4: 392.00, A4: 440.00, B4: 493.88, C5: 523.25 } # 设置PWM输出的引脚 pwm_left machine.Pin(15) # 左声道GPIO 15 pwm_right machine.Pin(16) # 右声道GPIO 16 pwm_left machine.PWM(pwm_left) pwm_right machine.PWM(pwm_right) # 设置PWM频率和占空比 pwm_left.duty_u16(32768) # 占空比50% pwm_right.duty_u16(32768) # 播放单个音符 def play_note_left(frequency, duration): pwm_left.freq(int(frequency)) # 设置左声道音符的频率 time.sleep(duration) # 播放该音符的持续时间 #pwm_left.duty_u16(0) # 停止左声道信号 def play_note_right(frequency, duration): pwm_right.freq(int(frequency)) # 设置右声道音符的频率 time.sleep(duration) # 播放该音符的持续时间 #pwm_right.duty_u16(0) # 停止右声道信号 # 播放一段简单的旋律 def play_melody(): melody [ (C4, 0.5), (D4, 0.5), (E4, 0.5), (F4, 0.5), (G4, 0.5), (A4, 0.5), (B4, 0.5), (C5, 0.5) ] for note, duration in melody: play_note_left(notes[note], duration) play_note_right(notes[note], duration) # 播放旋律 while 1: play_melody() time.sleep(1)代码很简单就是在GPIO 15口输出PWM音乐。关于PWM如何模拟音乐可以看这两篇PWM: Pulse Width Modulation: What is it and how does it work?Playing Musical Notes on a Raspberry Pi Pico with PWM Audio Using CircuitPython3 电流放大网上很多文章说树莓派PICO的PWM输出电流不够无法推动耳机所以要进行电流放大。我是硬件小白所以用的最简单的三极管放大。三极管放大的原理还是不难基本上就是另外外接一个大电流进来然后原来的输出作为控制接到三极管的基级。不过要控制的准确和输出的精确电路里面还有不少电阻和电容要算不少东西。找了一个2N222还有一个电阻就开始干。但是无论怎么接喇叭还是不出声音顿时有点一筹莫展。后面又试了耳机是好的。网上查了一下四口耳机线的定义。有国标和美标的区别我的是国标。可以看到最里面的是地。但是网上买的插座长这样。它标注的左右声道在中间一开始地也插错了。索性直接把耳机接到树莓派的GPIO上一下就有声音了。再查了一下树莓派PICO的PWM输出电流大概是10mA左右一般推动一个耳机也就只要5mA的样子所以说事实上是够的。。。不用电流放大。好吧又失去了学习的机会。参考三个最简单的三极管放大电路https://component.eetrend.com/content/2022/100564778.html4 低通滤波放大是可以不要了但是看了很多资料说滤波还是要的。看了一下书大概是这样的。电路其实还蛮简单的。说到滤波顿时想起了之前蛋疼的卡尔曼滤波。不过这里的滤波比它还是简单多了就是将指定频率范围的波形给滤掉仅此而已。根据说明很快就搭好了电路。电容用的100nf电阻是10kΩ。根据计算159Hz以上的频率将被过滤掉。可是实际效果除了声音小了没有区别。。。:)抓了一下前后波形进行对比。滤波前滤波后好吧看起来效果并不理想还要再分析。只是没法今天了因为真的太困了。。。