1.实验原理
常用的蜂鸣器有两种:有源蜂鸣器和无源蜂鸣器,这里的有“源”不是电源,而是震荡源,有源蜂鸣器内部带有震荡源,所以有源蜂鸣器只要通电就会叫。无源蜂鸣器内部不带震荡源,直接用直流电是驱动不起来的,需要 2K-5K 的方波去驱动
阿尔法开发板上的蜂鸣器属于有源蜂鸣器,所以只要连接一个供电电路即可。供电电路可以由一个 IO来控制其通断,一般使用三极管来搭建这个电路。因为蜂鸣器工作的电流比较大,直接将蜂鸣器接到 I.MX6U 的 GPIO 上有可能会烧毁 IO,所以需要通过一个三极管来间接的控制蜂鸣器的通断,相当于加了一层隔离 ?
电路原理图:
通过一个 PNP 型的三极管 8550 来驱动蜂鸣器,通过 SNVS_TAMPER1 这个 IO来控制三极管 Q1 的导通,当 SNVS_TAMPER1 输出低电平的时候 Q1 导通,相当于蜂鸣器的正极连接到DCDC_3V3,蜂鸣器形成一个通路,因此蜂鸣器会鸣叫;当 SNVS_TAMPER1输出高电平的时候 Q1 不导通,那么蜂鸣器就没有形成一个通路,蜂鸣器也就不会鸣叫 ?
2.实验步骤
实验步骤和前面LED的一样
(1)使能时钟
(2)配置MX6U IO复用
/* 1、初始化 IO 复用,复用为 GPIO5_IO01 */
IOMUXC_SetPinMux(IOMUXC_SNVS_SNVS_TAMPER1_GPIO5_IO01,0);
(3)配置MX6U IO电气属性配置(
/* 2、配置 GPIO1_IO03 的 IO 属性 */
IOMUXC_SetPinConfig(IOMUXC_SNVS_SNVS_TAMPER1_GPIO5_IO01,0X10B0);
(4)GPIO 配置 输出高低电平
/* 3、初始化 GPIO,GPIO5_IO01 设置为输出 */
GPIO5->GDIR |= (1 << 1);
/* 4、设置 GPIO5_IO01 输出高电平,关闭蜂鸣器 */
GPIO5->DR |= (1 << 1);
3.修改Makefile
修改变量 TARGET 为 beep,在变量 INCDIRS和 SRCDIRS 中追加“bsp/beep”,链接脚本文件不变
|