蜂鳴器是一個比較常見的電子器件,主要作用是喲關于報警,提醒。
蜂鳴器有兩中類型,一種是無源蜂鳴器,沒有驅動源,需要使用PWM控制蜂鳴器響,可以通過修改PWM的占空比或者頻率來達到調整蜂鳴器聲音音調的目的;還有一種是有源蜂鳴器,有驅動源,上電接高電平就會響。
本文就將以AB32VG1作為主控,RT-thread作為操作系統來操作無源蜂鳴器。
一、創建工程
使用RT-Thread Studio來創建工程。
1. 新增加兩個文件app_beep.c和app_beep.h
2. 打開RT-Thread Settings,使能PWM2
二、電路連接
蜂鳴器驅動引腳連接:PE0 → Beep驅動引腳
三、無源蜂鳴器操作原理
無源蜂鳴器需要自己提供驅動源,也就是PWM信號,通過控制PWM驅動頻率可以控制蜂鳴器輸出音符。
本程序通過period來控制PWM頻率,頻率為1MHz/period KHz
人耳能夠聽到的聲音頻率為20Hz~20KHz,所以操作20KHz頻率是聽不見的。
驅動程序控制PWM循環輸出1KHz~20KHz,當聲音越接近20KHz,我們能聽到的聲音越小,占空比為50%,相對而言聲音最大。占空比大小可以自己調節輸出聲音的大小。
四、操作代碼
1. 創建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,初始化函數在main中while循環之前調用
#define PWM_DEV_NAME "lpwm2" /* PWM 設備名稱 */
#define PWM_DEV_CHANNEL 1 /* PWM 通道 */
#define PWM_PERIOD (1000000u) // 1000000u
struct rt_device_pwm *pwm_dev; /* PWM 設備句柄 */
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);
/* 設置 PWM 周期和脈沖寬度 */
rt_pwm_set(pwm_dev, PWM_DEV_CHANNEL, period, 0);
/* 使能設備 */
rt_pwm_enable(pwm_dev, PWM_DEV_CHANNEL);
Pwm_Thread_Init();
}
3. PWM Beep驅動函數
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
+關注
關注
114文章
5143瀏覽量
213399 -
蜂鳴器
+關注
關注
12文章
889瀏覽量
45869 -
線程
+關注
關注
0文章
504瀏覽量
19651 -
RT-Thread
+關注
關注
31文章
1272瀏覽量
39920
發布評論請先 登錄
相關推薦
評論