一、有源蜂鸣器简介
蜂鸣器常用于计算机、打印机、报警器、电子玩具等电子产品中,常用的蜂鸣器有两种:有源蜂鸣器和无源蜂鸣器,这里的有“源”不是电源,而是震荡源,有源蜂鸣器内部带有震荡源(晶体振荡器、RC振荡器、LC振荡器
),所以有源蜂鸣器只要通电就会叫。无源蜂鸣器内部不带震荡源,直接用直流电是驱动不起来的,需要 2K-5K 的方波去驱动。
![](https://img-blog.csdnimg.cn/direct/aeab70c4d74442cb9979b60477f7d763.png)
有源蜂鸣器只要通电就会叫,所以我们可以做一个供电电路,这个供电电路可以由一个
IO来控制其通断,一般使用三极管来搭建这个电路。为什么我们不能像控制 LED
灯一样,直接将GPIO 接到蜂鸣器的负极,通过
IO
输出高低来控制蜂鸣器的通断。因为蜂鸣器工作的电流比LED 灯要大,直接将蜂鸣器接到
I.MX6U
的
GPIO
上有可能会烧毁
IO
,所以我们需要通过一个三极管来间接的控制蜂鸣器的通断,相当于加了一层隔离。
二、硬件原理分析
蜂鸣器的硬件原理图如图
![](https://img-blog.csdnimg.cn/direct/814ab669f05a4589b0d05ce1fd6d6d81.png)
通过一个
PNP
型的三极管
8550
来驱动蜂鸣器,通过
SNVS_TAMPER1
这个
IO来控制三极管 Q1
的导通,当
SNVS_TAMPER1
输出低电平的时候
Q1
导通,相当于蜂鸣器的正极连接到 DCDC_3V3
,蜂鸣器形成一个通路,因此蜂鸣器会鸣叫。同理,当
SNVS_TAMPER1输出高电平的时候 Q1
不导通,那么蜂鸣器就没有形成一个通路,因此蜂鸣器也就不会鸣叫。
三、添加设备树
1
、添加
pinctrl
节点
I.MX6U-ALPHA
开发板上的
BEEP
使用了
SNVS_TAMPER1
这个
PIN
,打开
imx6ull-alientek
emmc.dts
,在
iomuxc
节点的
imx6ul-evk
子节点下创建一个名为“
pinctrl_beep
”的子节点
![](https://img-blog.csdnimg.cn/direct/063af28624a8486fb4f05dca2f4db3c8.png)
2
、添加
BEEP
设备节点
在根节点“
/
”下创建
BEEP
节点,节点名为“
beep
”
![](https://img-blog.csdnimg.cn/direct/1ce183ae9ab84f8a9fa020188c4de072.png)
3
、检查
PIN 、gpio
是否被其他外设使用
1)检查IO口
SNVS_TAMPER1有没有冲突
2)检查gpio GPIO5_IO01有没有被其他外设使用
设备树编写完成以后使用“
make dtbs
”命令重新编译设备树,然后使用新编译出来的imx6ull-alientek-emmc.dtb 文件启动
Linux
系统。启动成功以后进入“
/proc/device-tree
”目录中查看“beep
”节点是否存在,如果存在的话就说明设备树基本修改成功
(
具体还要驱动验证
)