蜂鳴器:是一種一體化結構的電子訊響器。主要分為分壓式蜂鳴器和電磁式蜂鳴器兩種類型。 一、有源/無源蜂鳴器(不是指是否帶電源,而是有沒有自帶震蕩電路) 1、有源蜂鳴器:有源蜂鳴器自帶震蕩電路,一通電就會發聲。 2、無源蜂鳴器:沒有自帶震蕩電路,需要外部提供2~5Khz左右的方波驅動,太能發聲。 二、硬 ...
蜂鳴器:是一種一體化結構的電子訊響器。主要分為分壓式蜂鳴器和電磁式蜂鳴器兩種類型。
一、有源/無源蜂鳴器(不是指是否帶電源,而是有沒有自帶震蕩電路)
1、有源蜂鳴器:有源蜂鳴器自帶震蕩電路,一通電就會發聲。
2、無源蜂鳴器:沒有自帶震蕩電路,需要外部提供2~5Khz左右的方波驅動,太能發聲。
二、硬體設計
因為STM32的單個IO口最大可以提供25mA電流,而蜂鳴器的驅動電流在30mA左右,兩者十分相近,但是STM32整個晶元的電流,最大也就150mA左右,如果用IO口直接驅動蜂鳴器,其它功能使用時可能出現電流不足。所以我們通過三極體(S8050)括流後再驅動蜂鳴器,這樣STM32的IO口只需要提供不到1mA的電流就足夠了。
R33主要用於防止蜂鳴器的誤發聲,當 PB.8 輸出高電平的時候,蜂鳴器將發聲, 當 PB.8 輸出低電平的時候,蜂鳴器停止發聲。
三、軟體設計
1 //子函數 2 #include "beep.h" 3 #include "stm32f10x.h" 4 5 6 void BEEP_Init(void) 7 { 8 GPIO_InitTypeDef GPIO_BEEP; //創建一個結構體 9 10 GPIO_BEEP.GPIO_Mode = GPIO_Mode_Out_PP; //設置該埠為推輓輸出 11 GPIO_BEEP.GPIO_Pin = GPIO_Pin_8; //PB.8埠 12 GPIO_BEEP.GPIO_Speed = GPIO_Speed_50MHz; //50MHz 13 14 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); //初始化GPIOB時鐘 15 16 GPIO_Init(GPIOB, &GPIO_BEEP); //根據參數初始化GPIO.8 17 }
主函數
1 #include "sys.h" 2 #include "delay.h" 3 #include "beep.h" 4 5 int main(void) 6 { 7 BEEP_Init(); //蜂鳴器初始化 8 delay_init(); //延時函數初始化 9 while(1) 10 { 11 GPIO_ResetBits(GPIOB, GPIO_Pin_8); //關閉蜂鳴器 12 delay_ms(1500); //延時1.5秒 13 14 GPIO_SetBits(GPIOB, GPIO_Pin_8); //打開蜂鳴器 15 delay_ms(100); //延時0.1秒 16 } 17 }