有源蜂鸣器与无源蜂鸣器的区别

目录

一、外观区别

二、原理区别

三、STM32代码


一、外观区别

1.其实判断拿到的蜂鸣器是有源蜂鸣器还是无源蜂鸣器最简单准确的判断就是给蜂鸣器两端接上电,能发出声音的就是有源蜂鸣器,不能发出声音的就是无源蜂鸣器

2.部分有源蜂鸣器有贴纸,无源蜂鸣器没有贴纸

二、原理区别

1.无源蜂鸣器是没有正负之分的,只要在两个腿上加载不同的频率的电信号就可以实现发声。比如PWM波形,其中占空比影响声音大小,频率影响音色。

2.有源蜂鸣器是有正负之分的,只需要在两个腿上加上电压信号就会发声,发出的声音音调单一、频率固定,这是因为有源蜂鸣器比无源蜂鸣器内部多了振荡结构。占空比影响声音大小,频率影响音色。

三、STM32代码

1.驱动有源蜂鸣器响一秒停一秒

#include "stm32f10x.h"                  // Device header
#include "Delay.h"
int main(void)
{
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
    
    GPIO_InitTypeDef GPIO_InitStructure;
    GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
    GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1;
    GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
    GPIO_Init(GPIOA,&GPIO_InitStructure);
    while(1)
    {
    GPIO_SetBits(GPIOA,GPIO_Pin_1);
    Delay_s(1);
    GPIO_ResetBits(GPIOA,GPIO_Pin_1);
    Delay_s(1);
    }
}

2.使用PWM驱动无源蜂鸣器

main.c

#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "PWM.h"

uint8_t i;

int main(void)
{
    
    PWM_Init();
    
    while (1)
    {
    TIM_SetCompare1(TIM2,50);
    }
}

PWM.C

#include "stm32f10x.h"                  // Device header

void PWM_Init(void)
{
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);
    
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);//配置GPIO
    
    GPIO_InitTypeDef GPIO_InitStructure;
     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
     GPIO_Init(GPIOA, &GPIO_InitStructure);
    
    
    TIM_InternalClockConfig(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;//ARR
    TIM_TimeBaseInitStructure.TIM_Prescaler=720-1;//PSC;注意PSC和ARR的取值都要在0~65535
    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 ;
    TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_High;
    TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;
    TIM_OCInitStructure.TIM_Pulse=50;//用来设置CCR寄存器的值
    TIM_OC1Init(TIM2,&TIM_OCInitStructure);
    
    TIM_Cmd(TIM2,ENABLE);
}

void PWM_SetCompare1(uint16_t Compare)
{
    TIM_SetCompare1(TIM2,Compare);
    
}


PWM.H

#ifndef __PWM_H
#define __PWM_H

void PWM_Init(void);
void PWM_SetCompare1(uint16_t Compare);

#endif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值