有源蜂鳴器與無源蜂鳴器區(qū)別
有源蜂鳴器與無源蜂鳴器區(qū)別在于是否有振蕩源。
有源蜂鳴器即有震蕩源的蜂鳴器,通常只需要在正負(fù)極上加對應(yīng)的供電電壓就可以驅(qū)動發(fā)聲。
無源蜂鳴器即無震蕩源的蜂鳴器,這個時候就需要搭建驅(qū)動電路(后面章節(jié)會提到相關(guān)驅(qū)動電路)進(jìn)行驅(qū)動蜂鳴器進(jìn)行發(fā)聲了。
有源蜂鳴器
有源蜂鳴器的話相當(dāng)于在這個模塊內(nèi)部已經(jīng)為我們搭建好了驅(qū)動電路了,這個時候我們只需要在蜂鳴器兩端加上對應(yīng)的電壓驅(qū)動即可(注意有源蜂鳴器引腳區(qū)分正負(fù))。
例如下面的這張圖可以看到一般有源蜂鳴器會清楚的寫出驅(qū)動的電壓參數(shù)以及輸出的頻率是多少的,因為內(nèi)部加了震蕩源了,所以一般輸出頻率都是固定的(通常引腳是長腳正,短腳負(fù) )。
圖中的這個有源蜂鳴器的驅(qū)動電壓是5V,輸出頻率是2.3KHz左右的。
無源蜂鳴器
無源蜂鳴器需要自己外搭驅(qū)動電路,此時對于蜂鳴器本身來說引腳是不分正負(fù)的。
同樣可以查看自己手中的無源蜂鳴器提供的參數(shù),重要的就是兩個,一個驅(qū)動電壓,一個是驅(qū)動的頻率(常見:2-5KHz)。這里給出一個簡單的驅(qū)動電路可以用來驅(qū)動無源蜂鳴器發(fā)聲的。

這里我用來試驗的是輸入2KHz驅(qū)動的蜂鳴器,看下實際接線圖:

這里使用的是PWM發(fā)生器來給蜂鳴器提供一個方波信號驅(qū)動其發(fā)聲,最快速方法就是搭建洞洞板來驅(qū)動就能快速知道這個無源蜂鳴器是否可以正常驅(qū)動及好壞。
模塊化有源蜂鳴器及無源蜂鳴器驅(qū)動方式的說明

單片機(jī)驅(qū)動比較常用的是這種模塊化的蜂鳴器,可以看到兩者之間的外觀是一模一樣的(這里有些廠商會用貼紙區(qū)分,有些是一樣的),如果是貼紙是一樣的,只能通過輸入信號聽蜂鳴器是否發(fā)聲分辨是有源還是無源。
VCC,GND按參數(shù)供電5V,這里供電建議還是使用穩(wěn)壓電源會好些(有些人用USB轉(zhuǎn)TTL或者STlink進(jìn)行供電發(fā)現(xiàn)無法驅(qū)動的情況,市面上還是有部分USB轉(zhuǎn)串口和stlink是劣質(zhì)的,很容易出現(xiàn)供電不足的情況,所以模塊的供電都是建議使用穩(wěn)壓電壓進(jìn)行供電),然后在I/O口輸入一個低電平(看自己手中的模塊寫的是高/低電平驅(qū)動然后輸入對應(yīng)的電平,這里是低電平驅(qū)動)看蜂鳴器是否發(fā)聲:
- 蜂鳴器發(fā)聲-->模塊為有源蜂鳴器
- 蜂鳴器無聲-->壞了或者為無源蜂鳴器
然后把 I/O口輸入從低電平換成一個方波信號來驅(qū)動,輸入方波信號后可以聽到蜂鳴器發(fā)聲就是無源蜂鳴器,依舊無聲的話,排查自己的方波信號是否驅(qū)動能力不夠大/信號地和電源地沒有共地的問題,如果驅(qū)動能力足夠且都有共地的話那可能就是模塊壞了。
有源、無源蜂鳴器代碼驅(qū)動
有源蜂鳴器:單片機(jī)IO口輸出一個高/低電平信號
無源蜂鳴器:單片機(jī)IO口輸出一個方波(占空比不為0%或者100%的)
這里只舉例STM32F103C8T6的驅(qū)動主函數(shù)代碼,需要整個工程的可以評論區(qū)留言!(其他單片機(jī)arduino,51等都是同理,配置好IO口輸出即可)
有源蜂鳴器驅(qū)動代碼(main.c):
##現(xiàn)象:蜂鳴器響一下停一下,按這樣一直循環(huán)
int main(void)
{
/*開啟時鐘*/
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); //開啟GPIOB的時鐘
/*GPIO初始化*/
GPIO_InitTypeDef GPIO_InitStructure; //定義結(jié)構(gòu)體變量
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); //實現(xiàn)GPIOB的初始化
while (1)
{
GPIO_ResetBits(GPIOB, GPIO_Pin_9); //將PB9引腳設(shè)置為低電平,蜂鳴器鳴叫
Delay_ms(200); //延時100ms
GPIO_SetBits(GPIOB, GPIO_Pin_9); //將PB9引腳設(shè)置為高電平,蜂鳴器停止
Delay_ms(200); //延時100ms
}
}
無源蜂鳴器驅(qū)動代碼(pwm.c)
#這個的現(xiàn)象主要和設(shè)置的頻率和占空比有關(guān),自行在主函數(shù)確定好即可輸出對應(yīng)的現(xiàn)象
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引腳初始化為復(fù)用推挽輸出
/*配置時鐘源*/
TIM_InternalClockConfig(TIM2); //選擇TIM2為內(nèi)部時鐘,若不調(diào)用此函數(shù),TIM默認(rèn)也為內(nèi)部時鐘
/*時基單元初始化*/
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure; //定義結(jié)構(gòu)體變量
TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1; //時鐘分頻,選擇不分頻,此參數(shù)用于配置濾波器時鐘,不影響時基單元功能
TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up; //計數(shù)器模式,選擇向上計數(shù)
TIM_TimeBaseInitStructure.TIM_Period = 100 - 1; //計數(shù)周期,即ARR的值
TIM_TimeBaseInitStructure.TIM_Prescaler = 720 - 1; //預(yù)分頻器,即PSC的值
TIM_TimeBaseInitStructure.TIM_RepetitionCounter = 0; //重復(fù)計數(shù)器,高級定時器才會用到
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseInitStructure);
/*輸出比較初始化*/
TIM_OCInitTypeDef TIM_OCInitStructure; //定義結(jié)構(gòu)體變量
TIM_OCStructInit(&TIM_OCInitStructure); //結(jié)構(gòu)體初始化,若結(jié)構(gòu)體沒有完整賦值
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); //將結(jié)構(gòu)體變量交給TIM_OC1Init,配置TIM2的輸出比較通道1
/*TIM使能*/
TIM_Cmd(TIM2, ENABLE); //使能TIM2,定時器開始運(yùn)行
}
/**
* 函 數(shù):PWM設(shè)置CCR
* 參 數(shù):Compare 要寫入的CCR的值,范圍:0~100
* 注意事項:CCR和ARR共同決定占空比,此函數(shù)僅設(shè)置CCR的值,并不直接是占空比
* 占空比Duty = CCR / (ARR + 1)
*/
void PWM_SetCompare1(uint16_t Compare)
{
TIM_SetCompare1(TIM2, Compare); //設(shè)置CCR1的值
//這里的ARR+1正好是100 所以CCR設(shè)置為多少占空比就是多少
}
無源蜂鳴器驅(qū)動代碼主要是PWM的輸出,這個時候改變頻率改變的是輸出聲音的音調(diào)。
總結(jié)
1.區(qū)分好有源、無源蜂鳴器后再進(jìn)行驅(qū)動,不要不發(fā)聲就認(rèn)為模塊是壞的。
2.有些貼片式的無源蜂鳴器有多個引腳,有些是固定引腳要看手冊區(qū)分好引腳的功能。
3.有源區(qū)分正負(fù),一般長腳正,短腳負(fù);無源不分正負(fù)。
審核編輯 黃宇
-
有源蜂鳴器
+關(guān)注
關(guān)注
0文章
31瀏覽量
12039 -
無源蜂鳴器
+關(guān)注
關(guān)注
0文章
43瀏覽量
11610
發(fā)布評論請先 登錄
有源晶振與無源晶振的不同點有哪些呢
開發(fā)單片機(jī)需要具備多少的模電技能
電子產(chǎn)品如何區(qū)分有源和無源
淺談有源晶振與無源晶振的關(guān)鍵參數(shù)
有源晶振與無源晶振的優(yōu)缺點
無源探頭與有源探頭的安全性差異解析
單片機(jī)怎么驅(qū)動電機(jī)?
伺服系統(tǒng)和單片機(jī)有什么區(qū)別
有源濾波器與無源濾波器的區(qū)別
單片機(jī)和伺服有什么區(qū)別
無源晶振vs有源晶振:參數(shù)差異如何影響系統(tǒng)設(shè)計
關(guān)于有源蜂鳴器及無源蜂鳴器的區(qū)別及驅(qū)動各類單片機(jī)案例
評論