【RTT大赛作品连载】 PWM操作蜂鸣器

描述

蜂鸣器是一个比较常见的电子器件,主要作用是哟关于报警,提醒。

蜂鸣器有两中类型,一种是无源蜂鸣器,没有驱动源,需要使用PWM控制蜂鸣器响,可以通过修改PWM的占空比或者频率来达到调整蜂鸣器声音音调的目的;还有一种是有源蜂鸣器,有驱动源,上电接高电平就会响。

本文就将以AB32VG1作为主控,RT-thread作为操作系统来操作无源蜂鸣器。

一、创建工程

使用RT-Thread Studio来创建工程。

    1. 新增加两个文件app_beep.c和app_beep.h

PWM

 

    2. 打开RT-Thread Settings,使能PWM2

PWM

二、电路连接

蜂鸣器驱动引脚连接: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);
    }
}

 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分