有源蜂鸣器与无源蜂鸣器的区别及单片机驱动详解
创作时间:
作者:
@小白创作中心
有源蜂鸣器与无源蜂鸣器的区别及单片机驱动详解
引用
CSDN
1.
https://m.blog.csdn.net/qq_42250136/article/details/142332886
蜂鸣器作为电子工程中最常见的声学反馈设备,其工作原理和驱动方式是每个嵌入式开发者都需要掌握的基础知识。本文将详细介绍有源蜂鸣器和无源蜂鸣器的区别,并通过具体的单片机驱动案例,帮助读者更好地理解和应用这两种蜂鸣器。
有源蜂鸣器与无源蜂鸣器区别
有源蜂鸣器与无源蜂鸣器的主要区别在于是否有振荡源。
- 有源蜂鸣器:内部自带振荡源,只需在正负极上加对应的供电电压即可驱动发声。
- 无源蜂鸣器:没有内置振荡源,需要外接驱动电路才能发声。
有源蜂鸣器
有源蜂鸣器内部已经集成了驱动电路,使用时只需在两端加上对应的电压即可。通常,有源蜂鸣器的引脚区分正负,且输出频率是固定的。例如,常见的有源蜂鸣器驱动电压为5V,输出频率约为2.3KHz。
无源蜂鸣器
无源蜂鸣器需要外接驱动电路,其引脚不分正负。使用时需要关注两个关键参数:驱动电压和驱动频率(常见范围为2-5KHz)。下面是一个简单的驱动电路示例:
这个电路使用PWM发生器产生方波信号来驱动蜂鸣器发声。实际接线时,可以使用2KHz的驱动频率进行测试。
模块化有源蜂鸣器及无源蜂鸣器驱动方式的说明
在实际应用中,模块化的蜂鸣器外观相似,难以区分。可以通过以下方法判断:
- 给模块供电(建议使用稳压电源)。
- 在I/O口输入低电平(或高电平,取决于模块规格):
- 如果蜂鸣器发声,则为有源蜂鸣器。
- 如果无声,尝试输入方波信号:
- 发声则为无源蜂鸣器。
- 依旧无声则可能是模块损坏或驱动能力不足。
有源、无源蜂鸣器代码驱动
有源蜂鸣器驱动代码
有源蜂鸣器只需通过单片机IO口输出高/低电平信号即可。以下是一个STM32F103C8T6的驱动示例:
int main(void)
{
/* 开启时钟 */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); // 开启GPIOB的时钟
/* GPIO初始化 */
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; // GPIO模式,赋值为推挽输出模式
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; // GPIO引脚
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; // GPIO速度,赋值为50MHz
GPIO_Init(GPIOB, &GPIO_InitStructure); // 实现GPIOB的初始化
while (1)
{
GPIO_ResetBits(GPIOB, GPIO_Pin_9); // 将PB9引脚设置为低电平,蜂鸣器鸣叫
Delay_ms(200); // 延时200ms
GPIO_SetBits(GPIOB, GPIO_Pin_9); // 将PB9引脚设置为高电平,蜂鸣器停止
Delay_ms(200); // 延时200ms
}
}
无源蜂鸣器驱动代码
无源蜂鸣器需要通过单片机IO口输出方波信号。以下是一个STM32F103C8T6的PWM驱动示例:
void PWM_Init(void)
{
/* 开启时钟 */
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); // 开启TIM2的时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); // 开启GPIOA的时钟
/* GPIO初始化 */
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure); // 将PA0引脚初始化为复用推挽输出
/* 配置时钟源 */
TIM_InternalClockConfig(TIM2); // 选择TIM2为内部时钟
/* 时基单元初始化 */
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1; // 时钟分频,选择不分频
TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up; // 计数器模式,选择向上计数
TIM_TimeBaseInitStructure.TIM_Period = 100 - 1; // 计数周期
TIM_TimeBaseInitStructure.TIM_Prescaler = 720 - 1; // 预分频器
TIM_TimeBaseInitStructure.TIM_RepetitionCounter = 0; // 重复计数器
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseInitStructure);
/* 输出比较初始化 */
TIM_OCInitTypeDef TIM_OCInitStructure;
TIM_OCStructInit(&TIM_OCInitStructure);
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; // 输出比较模式,选择PWM模式1
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; // 输出极性,选择为高
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; // 输出使能
TIM_OCInitStructure.TIM_Pulse = 0; // 初始的CCR值
TIM_OC1Init(TIM2, &TIM_OCInitStructure); // 配置TIM2的输出比较通道1
/* TIM使能 */
TIM_Cmd(TIM2, ENABLE); // 使能TIM2,定时器开始运行
}
void PWM_SetCompare1(uint16_t Compare)
{
TIM_SetCompare1(TIM2, Compare); // 设置CCR1的值
// 这里的ARR+1正好是100,所以CCR设置为多少占空比就是多少
}
无源蜂鸣器的驱动代码主要涉及PWM输出,通过改变频率可以改变声音的音调。
总结
- 区分好有源、无源蜂鸣器后再进行驱动,不要不发声就认为模块是坏的。
- 有些贴片式的无源蜂鸣器有多个引脚,需要查看手册区分引脚功能。
- 有源蜂鸣器区分正负,一般长脚正、短脚负;无源蜂鸣器不分正负。
热门推荐
广西到贵州自驾游,小心暴雨暴雪!
武乡县八路军文化旅游节:红色旅游新体验
清朝僵尸传说大揭秘:从忠臣到恐怖怪兽的演变
交行面试中对于数据分析能力的考核体现在哪些题目上?
瓶装水价格战 生命之泉你喝对了吗?
泰罗奥特曼游戏大集合!你最爱哪款?
春节必备:家庭平安对联的历史与文化
笔记本电池保养全攻略:从充电器选择到日常使用
东方明珠广播电视塔:上海必打卡景点
双鱼座与天秤座:爱情蜜糖还是友情平淡?
北外滩最佳摄影点推荐:上海最美拍照地
双鱼座&天秤座:如何成为最佳拍档?
上海特色景点深度游:新场古镇、海昌海洋公园、周浦花海全攻略
看完兵马俑 别忘了游丽山园 秦始皇陵国家考古遗址公园大有“看头”
节假日高速堵车调查报告
苏州出发,必打卡鼓浪屿和南普陀寺!
拙政园和寒山寺:苏州的文化双璧
自动化如何应对当今超市的挑战
广州动物园游玩攻略:门票、开放时间、交通指南全攻略
日照天台山太阳文化节:千年文化传承的现代演绎
哈尼太阳节:旅游新宠还是文化传承?
太阳崇拜:从古蜀“太阳神鸟”到古埃及太阳神“拉”
航班取消如何确认?四种主流方式优缺点全解析
最全的猕猴桃种类
滑雪小白入门指南:从基础技巧到雪场推荐,这份攻略请收好!
滑雪服VS冲锋衣:冬季运动装备选择全攻略
《论语》精华:30句让你更懂人生的儒家名言
诺贝尔文学奖最值得看的10部神作,人生至少要读一次
太岁冲年柱还是日柱:八字流年运势解析
《本草纲目》认证:竹叶的神奇功效