有源蜂鸣器与无源蜂鸣器的区别及单片机驱动方法详解
创作时间:
作者:
@小白创作中心
有源蜂鸣器与无源蜂鸣器的区别及单片机驱动方法详解
引用
CSDN
1.
https://blog.csdn.net/qq_42250136/article/details/142332886
蜂鸣器是电子项目中常用的声学元件,用于产生声音提示。根据内部结构的不同,蜂鸣器可分为有源蜂鸣器和无源蜂鸣器两种类型。本文将详细介绍这两种蜂鸣器的区别,并提供使用单片机驱动它们的具体方法和代码示例。
有源蜂鸣器与无源蜂鸣器区别
有源蜂鸣器与无源蜂鸣器的主要区别在于是否有振荡源。
- 有源蜂鸣器:内部自带振荡源,只需在正负极上加对应的供电电压即可驱动发声。
- 无源蜂鸣器:没有振荡源,需要外接驱动电路才能发声。
有源蜂鸣器
有源蜂鸣器内部已经集成了驱动电路,使用时只需在两端加上对应的电压即可。通常,有源蜂鸣器的引脚区分正负极,且输出频率是固定的。
无源蜂鸣器
无源蜂鸣器需要外接驱动电路才能发声,引脚不分正负极。驱动电路通常使用PWM信号,通过控制频率和占空比来产生声音。
模块化有源蜂鸣器及无源蜂鸣器驱动方式的说明
模块化的蜂鸣器外观相似,可通过以下方法区分:
- 供电测试:给VCC和GND供电,然后在I/O口输入低电平(或高电平,取决于模块规格)。
- 如果蜂鸣器发声,则为有源蜂鸣器。
- 如果蜂鸣器无声,可能是无源蜂鸣器或模块损坏。
- 方波信号测试:在I/O口输入方波信号。
- 如果蜂鸣器发声,则为无源蜂鸣器。
- 如果依旧无声,需要检查信号驱动能力和地线连接情况。
有源、无源蜂鸣器代码驱动
有源蜂鸣器驱动代码
有源蜂鸣器只需通过单片机IO口输出一个高/低电平信号即可驱动。
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); //延时100ms
GPIO_SetBits(GPIOB, GPIO_Pin_9); //将PB9引脚设置为高电平,蜂鸣器停止
Delay_ms(200); //延时100ms
}
}
无源蜂鸣器驱动代码
无源蜂鸣器需要通过单片机IO口输出一个方波信号来驱动。
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默认也为内部时钟
/*时基单元初始化*/
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure; //定义结构体变量
TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1; //时钟分频,选择不分频,此参数用于配置滤波器时钟,不影响时基单元功能
TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up; //计数器模式,选择向上计数
TIM_TimeBaseInitStructure.TIM_Period = 100 - 1; //计数周期,即ARR的值
TIM_TimeBaseInitStructure.TIM_Prescaler = 720 - 1; //预分频器,即PSC的值
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); //将结构体变量交给TIM_OC1Init,配置TIM2的输出比较通道1
/*TIM使能*/
TIM_Cmd(TIM2, ENABLE); //使能TIM2,定时器开始运行
}
void PWM_SetCompare1(uint16_t Compare)
{
TIM_SetCompare1(TIM2, Compare); //设置CCR1的值
//这里的ARR+1正好是100 所以CCR设置为多少占空比就是多少
}
无源蜂鸣器驱动代码主要是PWM的输出,通过改变频率可以改变输出声音的音调。
总结
- 区分好有源、无源蜂鸣器后再进行驱动,不要不发声就认为模块是坏的。
- 有些贴片式的无源蜂鸣器有多个引脚,需要查看手册区分引脚功能。
- 有源蜂鸣器区分正负,一般长脚正、短脚负;无源蜂鸣器不分正负。
热门推荐
新突破?哈佛医学院首次证实:氧气浓度降低52%,生理寿命延长50%
热量限制延缓衰老,遗传因素决定寿命长短
《热血传奇手机版》胜者为王活动积分获取秘籍
下眼睑跳动,你最常用哪种缓解方法?
元稹《离思五首》:深情追忆亡妻的千古绝唱
唐代宫怨诗精选:八首诗里的深宫女性世界
深入失落森林:露玛岛铁矿石采集完全指南
深圳航空中转住宿攻略:住得好,玩得嗨!
中医推荐:米汤缓解胃胀气,附科学依据与制作方法
石墨烯在新型建材的应用
企业债务重组指南:5种方式助企业摆脱财务困境
《哈尔滨一九四四》拍摄地揭秘:沈阳关东影视城
高血压患者服用复方甘草片致血压升高,专家:连续使用不超一周
奶茶非情绪良药:高糖咖啡因或增抑郁焦虑风险
碘伏使用指南:正确使用方法与注意事项
中国城市化:从古代城邑兴起至现代智慧城市发展
深圳南山核心区域23万㎡住宅供应:两大旧改项目加速推进
简单4步发酵红茶菌,还能炒菜炖汤,DIY健康饮品新选择
白切鸡腿的正确打开方式,你get了吗?
马桶选购与安装:关键尺寸参数及特殊需求全解析
告别死记硬背:《四季里的中国节》用故事和游戏破解节日记忆难题
全国首个“村”字号国家级度假区落户黟县,引领乡村旅游新标杆
狗狗摔伤康复训练指南
从抖音寻亲到人贩子伏法:杨妞花26年回家路
自驾游济南,这些驾车注意事项你知道吗?
心理健康与左胸疼痛的关系揭秘
浦东机场5家精选酒店:地铁2号线沿线景点全攻略
西安教育资源最佳居住区:碑林区&南郊
林子带你玩转镇远古镇两日游
镇远古镇必打卡三大景点揭秘