PWM控制无源蜂鸣器发声

本文详细介绍了如何在树莓派上利用sysfs接口管理和配置硬件PWM,包括确定可用引脚、设置PWM周期和占空比,以及使用WiringPi库控制无源蜂鸣器生成音乐。同时,讲解了WiringPi库的相关函数和PWM工作模式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 使用PWM控制sysfs接口

直接使用ls /sys/class/pwm命令得到的结果为空
因此要想使用硬件PWM,首先得确认哪些引脚可以输出硬件PWM。在/boot/overlays/README中提到,只有GPIO18是在全树莓派平台上都能作为硬件PWM输出脚的。其他引脚是否可用于PWM输出,可以使用raspi-gpio查看。例如:

pi@raspberrypi:~ $ raspi-gpio funcs 12
GPIO, DEFAULT PULL, ALT0, ALT1, ALT2, ALT3, ALT4, ALT5
12, DOWN, PWM0, SD4, DPI_D8, AVEOUT_VID8, AVEIN_VID8, ARM_TMS
pi@raspberrypi:~ $ raspi-gpio funcs 41
GPIO, DEFAULT PULL, ALT0, ALT1, ALT2, ALT3, ALT4, ALT5
41, DOWN, PWM1, SD5, TE0, SD1_DAT5, SPI2_MOSI, RXD1

可以看到GPIO12的第零号替代功能是PWM0,而GPIO41的第零号替代功能是PWM1。

然后需要在树莓派的启动配置文件/boot/config.txt里面加载对应的设备树overlay,并设置参数,比如:
dtoverlay=pwm,pin=12,func=4
就会将PWM开启在12号GPIO上。注意此处的func号必须与引脚的alt功能序号匹配,有个很奇怪的顺序:

Func 0 = Input
Func 1 = Output
Func 2 = Alt 5
Func 3 = Alt 4
Func 4 = Alt 0
Func 5 = Alt 1
Func 6 = Alt 2
Func 7 = Alt 3

所以这里func设为4,对应alt0,因为raspi-gpio告诉我们12号GPIO的PWM功能在alt0上。

1.1 硬件PWM的使用

Linux内核通过sysfs支持硬件PWM,所以这个部分的内容不仅限于树莓派,实际上所有实现了对应驱动的开发板都一样。
树莓派的raspbian系统映像已经提供了对应的驱动,可以直接使用。修改并保存/boot/config.txt之后重启设备,如果设置正确,可以在目录/sys/class/pwm中看到一些东西,比如:

pi@raspberrypi:~ $ ls /sys/class/pwm
pwmchip0
pi@raspberrypi:~ $ ls /sys/class/pwm//pwmchip0
device  export  npwm  power  subsystem  uevent  unexport

这些伪文件就是Linux内核PWM驱动提供的操纵接口,在shell里可以通过cat读,通过echo重定向写。在任意编程语言里也可以通过读写文件的接口进行同样的操作。

每个控制器的通道数可以在 npwm 中读取(只读)

pi@raspberrypi:~ $ cat /sys/class/pwm//pwmchip0/npwm
2
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值