蜂鳴器是一個(gè)比較常見(jiàn)的電子器件,主要作用是喲關(guān)于報(bào)警,提醒。
蜂鳴器有兩中類(lèi)型,一種是無(wú)源蜂鳴器,沒(méi)有驅(qū)動(dòng)源,需要使用PWM控制蜂鳴器響,可以通過(guò)修改PWM的占空比或者頻率來(lái)達(dá)到調(diào)整蜂鳴器聲音音調(diào)的目的;還有一種是有源蜂鳴器,有驅(qū)動(dòng)源,上電接高電平就會(huì)響。
本文就將以AB32VG1作為主控,RT-thread作為操作系統(tǒng)來(lái)操作無(wú)源蜂鳴器。
一、創(chuàng)建工程
使用RT-Thread Studio來(lái)創(chuàng)建工程。
1. 新增加兩個(gè)文件app_beep.c和app_beep.h

2. 打開(kāi)RT-Thread Settings,使能PWM2

二、電路連接
蜂鳴器驅(qū)動(dòng)引腳連接:PE0 → Beep驅(qū)動(dòng)引腳
三、無(wú)源蜂鳴器操作原理
無(wú)源蜂鳴器需要自己提供驅(qū)動(dòng)源,也就是PWM信號(hào),通過(guò)控制PWM驅(qū)動(dòng)頻率可以控制蜂鳴器輸出音符。
本程序通過(guò)period來(lái)控制PWM頻率,頻率為1MHz/period KHz
人耳能夠聽(tīng)到的聲音頻率為20Hz~20KHz,所以操作20KHz頻率是聽(tīng)不見(jiàn)的。
驅(qū)動(dòng)程序控制PWM循環(huán)輸出1KHz~20KHz,當(dāng)聲音越接近20KHz,我們能聽(tīng)到的聲音越小,占空比為50%,相對(duì)而言聲音最大。占空比大小可以自己調(diào)節(jié)輸出聲音的大小。
四、操作代碼
1. 創(chuàng)建Beep線程
static int Pwm_Thread_Init(void)
{
rt_thread_t beep_thread;
beep_thread = rt_thread_create("Beep_thread",
PWM_Thread_Entry,
RT_NULL,
512,
10,
10);
rt_thread_startup(beep_thread);
return 0;
}
2. 初始化PWM,初始化函數(shù)在main中while循環(huán)之前調(diào)用
#define PWM_DEV_NAME "lpwm2" /* PWM 設(shè)備名稱(chēng) */
#define PWM_DEV_CHANNEL 1 /* PWM 通道 */
#define PWM_PERIOD (1000000u) // 1000000u
struct rt_device_pwm *pwm_dev; /* PWM 設(shè)備句柄 */
rt_uint32_t period, pulse;
void Pwm_Init(void)
{
period = PWM_PERIOD; /* 周期 = 1M/period kHz */
pulse = 0; /* PWM 脈沖寬度值(0 - period) */
pwm_dev = (struct rt_device_pwm *)rt_device_find(PWM_DEV_NAME);
RT_ASSERT(pwm_dev != RT_NULL);
/* 設(shè)置 PWM 周期和脈沖寬度 */
rt_pwm_set(pwm_dev, PWM_DEV_CHANNEL, period, 0);
/* 使能設(shè)備 */
rt_pwm_enable(pwm_dev, PWM_DEV_CHANNEL);
Pwm_Thread_Init();
}
3. PWM Beep驅(qū)動(dòng)函數(shù)
static void PWM_Thread_Entry(void *para)
{
uint8_t i = 1;
while(1)
{
period = (uint32_t)(1000000/i);
rt_pwm_set(pwm_dev, PWM_DEV_CHANNEL, period, period-1);
i++;
if(i > 20)
i = 1;
rt_thread_mdelay(1000);
}
}
-
PWM
+關(guān)注
關(guān)注
116文章
5522瀏覽量
219471 -
蜂鳴器
+關(guān)注
關(guān)注
12文章
895瀏覽量
46965 -
線程
+關(guān)注
關(guān)注
0文章
508瀏覽量
20231 -
RT-Thread
+關(guān)注
關(guān)注
32文章
1412瀏覽量
41971
發(fā)布評(píng)論請(qǐng)先 登錄
【RTT大賽作品連載】AB32VG1評(píng)估板到貨控制彩燈測(cè)試

【RTT大賽作品連載】CH32V103開(kāi)發(fā)板資料及上電首測(cè)

【RTT大賽作品連載】中科藍(lán)訊AB32VG1開(kāi)發(fā)板開(kāi)箱篇

【RTT大賽作品連載】linkboy面向WCH移植(1)

【星核計(jì)劃】上傳FPGA大賽作品,領(lǐng)取電子發(fā)燒友專(zhuān)屬上傳福利!
【文章連載】RT-Thread創(chuàng)新應(yīng)用大賽文章匯總
【有獎(jiǎng)活動(dòng)】RT-Thread創(chuàng)新應(yīng)用大賽作品連載征文
【參與有獎(jiǎng)】激揚(yáng)代碼,千元現(xiàn)金!RT-Thread主題征文大賽
全國(guó)虛擬儀器設(shè)計(jì)大賽獲獎(jiǎng)作品集

評(píng)論