蜂鸣器工作原理
有源蜂鸣器
有源蜂鸣器只要接上额定电源就可以发出声音
无源蜂鸣器
无源蜂鸣器利用电磁感应原理,为音圈接入交变电流后形成的电磁铁与永磁铁相吸或相斥而推动振膜发声
GPIO控制
while(1)
{
GPX2.DAT=GPX2.DAT | (1 << 7);
Delay(1000000);
GPX2.DAT=GPX2.DAT & (~(1 << 7));
Delay(1000000);
}
PWM控制
PWM
PWM(Pulse Width Modulation)即脉冲宽度调制,通过对脉冲的宽度进行调制,来获得所需要波形
PWM参数
周期
占空比
一个周期中高电平时间与整个周期的比例称为占空比
PWM 概述
PWM实验小例子:
GPD0CON[0]寄存器:设置成XpwmTOUT_O功能,PWM0输出功能
TCFG0寄存器:设置一级分频器
TCFG1寄存器:设置二级分频器 经过两次的分频器就可以得到递减频率
将PWM0设置成能够连续产生脉冲信号
设置PWM0的周期
比如设置PWM0的频率为500HZ,周期 = (1/500HZ) / (1/递减频率)
设置PWM0的占空比:高电平的占比
将TCNTB0中的值手动装载到递减计数器(TCMPB0)
使能PWM0,递减计数器开始递减
实现蜂鸣器一直响
代码:
#include "exynos_4412.h"
int main()
{
/*1. 将GPD0_0引脚设置成PWM0的输出引脚*/
GPD0.CON = GPD0.CON & (~(0xF)) | (0x2);
/*2. 设置PWM0的一级分频 一级分频倍数设置为100倍*/
PWM.TCFG0 = PWM.TCFG0 & (~(0xFF)) | (99);
/*3. 设置PWM0的二级分频 二级分频倍数设置为1倍 递减计数器频率 = PLCK / (99+1) / 1 = 1M*/
PWM.TCFG1 = PWM.TCFG1 & (~(0xF));
/*4. 设置PWM0为自动重装载,使其能够产生连续的脉冲信号*/
PWM.TCON = PWM.TCON | (1 << 3);
/*5. 设置PWM0的频率为500HZ 500 / 1M = 2000*/
PWM.TCNTB0 = 2000;
/*6. 设置PWM0的占空比为50%*/
PWM.TCMPB0 = 1600;
/*7. 将TCNTB0中的值手动装载到递减计数器*/
PWM.TCON = PWM.TCON | (1 << 1);
/*8. 关闭手动更新*/
PWM.TCON = PWM.TCON & (~(1 << 1));
/*9. 使能PWM0,递减计数器开始递减*/
PWM.TCON = PWM.TCON | 1;
while(1);
return 0;
}
实验小例子:
实现功能:编程实现通过PWM控制蜂鸣器产生"嘀嘀"的声音
注:PWM的频率1000HZ,占空比%60
#include "exynos_4412.h"
void Delay(unsigned int Time) {
while(Time--);
}
int main()
{
/*1. 将GPD0_0引脚设置成PWM0的输出引脚*/
GPD0.CON = GPD0.CON & (~(0xF)) | (0x2);
/*2. 设置PWM0的一级分频 一级分频倍数设置为100倍*/
PWM.TCFG0 = PWM.TCFG0 & (~(0xFF)) | (99);
/*3. 设置PWM0的二级分频 二级分频倍数设置为1倍 递减计数器频率 = PLCK / (99+1) / 1 = 1M*/
PWM.TCFG1 = PWM.TCFG1 & (~(0xF));
/*4. 设置PWM0为自动重装载,使其能够产生连续的脉冲信号*/
PWM.TCON = PWM.TCON | (1 << 3);
/*5. 设置PWM0的频率为500HZ (1/1000) / (1/1M) = 1000*/
PWM.TCNTB0 = 1000;
/*6. 设置PWM0的占空比为60%*/
PWM.TCMPB0 = 600;
/*7. 将TCNTB0中的值手动装载到递减计数器*/
PWM.TCON = PWM.TCON | (1 << 1);
/*8. 关闭手动更新*/
PWM.TCON = PWM.TCON & (~(1 << 1));
/*9. 使能PWM0,递减计数器开始递减*/
PWM.TCON = PWM.TCON | 1;
while(1)
{
PWM.TCON = PWM.TCON & (~(1));
Delay(1000000);
PWM.TCON = PWM.TCON | 1;
Delay(1000000);
}
return 0;
}