<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

【RTT大賽作品連載】 PWM操作蜂鳴器

閑來無事玩單片機呀 ? 2021-12-06 08:36 ? 次閱讀

蜂鳴器是一個比較常見的電子器件,主要作用是喲關于報警,提醒。

蜂鳴器有兩中類型,一種是無源蜂鳴器,沒有驅動源,需要使用PWM控制蜂鳴器響,可以通過修改PWM的占空比或者頻率來達到調整蜂鳴器聲音音調的目的;還有一種是有源蜂鳴器,有驅動源,上電接高電平就會響。

本文就將以AB32VG1作為主控,RT-thread作為操作系統來操作無源蜂鳴器。

一、創建工程

使用RT-Thread Studio來創建工程。

1. 新增加兩個文件app_beep.c和app_beep.h

poYBAGGsPhuAZr4CAAA2gKRcqmE599.png

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

pYYBAGGsPkyAR116AABbqQMsVs8663.png

二、電路連接

蜂鳴器驅動引腳連接: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
    PWM
    +關注

    關注

    114

    文章

    4901

    瀏覽量

    209930
  • 蜂鳴器
    +關注

    關注

    12

    文章

    850

    瀏覽量

    45317
  • 線程
    +關注

    關注

    0

    文章

    489

    瀏覽量

    19500
  • RT-Thread
    +關注

    關注

    31

    文章

    1149

    瀏覽量

    38900
收藏 人收藏

    評論

    相關推薦

    RTT大賽作品連載】 AB32VG1上手

    AB32VG1上手操作,修改例程運行中的問題,成功點亮RGB。
    的頭像 發表于 10-28 18:31 ?7311次閱讀
    【<b class='flag-5'>RTT</b><b class='flag-5'>大賽</b><b class='flag-5'>作品</b><b class='flag-5'>連載</b>】 AB32VG1上手

    RTT大賽作品連載】AB32VG1評估板到貨控制彩燈測試

    RTT大賽作品連載】AB32VG1評估板到貨控制彩燈測試篇;接下來看看在如何AB32VG1評估板控制彩燈! 在RT-ThreadStudio新建項目到對應開發配置及下載及驗證測試!
    的頭像 發表于 11-07 19:39 ?4854次閱讀
    【<b class='flag-5'>RTT</b><b class='flag-5'>大賽</b><b class='flag-5'>作品</b><b class='flag-5'>連載</b>】AB32VG1評估板到貨控制彩燈測試

    RTT大賽作品連載】CH32V103開發板資料及上電首測

    簡介 ? 參加論壇舉辦的rtt大賽也有幾天了,我選用的是CH32V103的板子,第一步就是收集板卡的相關資料了。 CH32V103是 沁恒微電子設計的一款RSIC-V的單片機,使用了RSIC-V3A
    的頭像 發表于 11-15 08:45 ?7628次閱讀
    【<b class='flag-5'>RTT</b><b class='flag-5'>大賽</b><b class='flag-5'>作品</b><b class='flag-5'>連載</b>】CH32V103開發板資料及上電首測

    RTT大賽作品連載】AB32VG1評估板 音樂播放器

    RTT大賽作品連載】AB32VG1評估板 音樂播放器
    的頭像 發表于 11-12 21:11 ?5885次閱讀
    【<b class='flag-5'>RTT</b><b class='flag-5'>大賽</b><b class='flag-5'>作品</b><b class='flag-5'>連載</b>】AB32VG1評估板 音樂播放器

    RTT大賽作品連載】中科藍訊AB32VG1開發板開箱篇

    介紹電路原理圖分析接口說明,AB32VG1開發板是以中科藍訊(Bluetrum)公司推出的基于RISC-V架構的高配置芯片AB5301A為核心所組成的?!?b class='flag-5'>RTT大賽作品連載】中科藍訊A
    的頭像 發表于 11-13 10:01 ?9708次閱讀
    【<b class='flag-5'>RTT</b><b class='flag-5'>大賽</b><b class='flag-5'>作品</b><b class='flag-5'>連載</b>】中科藍訊AB32VG1開發板開箱篇

    RTT大賽作品連載】CH32V RTT微秒延時的實現

    就有帶rt-thread操作系統的例程,雖然只有一個LED的,但聊勝于無,畢竟rt-thread的bsp中還沒有支持到這個芯片。 所以我就基于led功能進行了新功能的開發,但發現其中bsp這塊確實匱乏
    的頭像 發表于 11-29 08:30 ?7142次閱讀
    【<b class='flag-5'>RTT</b><b class='flag-5'>大賽</b><b class='flag-5'>作品</b><b class='flag-5'>連載</b>】CH32V <b class='flag-5'>RTT</b>微秒延時的實現

    RTT大賽作品連載】 OLED顯示中文

    使用AB32VG1操作OLED顯示文字信息,包括漢字取模方式介紹,漢字顯示函數編寫.
    的頭像 發表于 12-06 09:25 ?7921次閱讀
    【<b class='flag-5'>RTT</b><b class='flag-5'>大賽</b><b class='flag-5'>作品</b><b class='flag-5'>連載</b>】 OLED顯示中文

    RTT大賽作品連載】 按鍵濾波,按下,松手,長按,短按

    操作AB32VG1的板載按鍵,實現了按鍵濾波,按鍵按下檢測,按鍵松手檢測,按鍵按下時長判斷.
    的頭像 發表于 12-06 09:23 ?7087次閱讀
    【<b class='flag-5'>RTT</b><b class='flag-5'>大賽</b><b class='flag-5'>作品</b><b class='flag-5'>連載</b>】 按鍵濾波,按下,松手,長按,短按

    RTT大賽作品連載】 OLED顯示圖片

    使用AB32VG1驅動IIC顯示圖片。
    的頭像 發表于 12-06 09:17 ?6478次閱讀
    【<b class='flag-5'>RTT</b><b class='flag-5'>大賽</b><b class='flag-5'>作品</b><b class='flag-5'>連載</b>】 OLED顯示圖片

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

    本文主要講解如何讓linkboy支持WCH32開發板進行圖形化編程,主要是基于RT-Thread操作系統進行vos移植。
    的頭像 發表于 12-18 22:10 ?6052次閱讀
    【<b class='flag-5'>RTT</b><b class='flag-5'>大賽</b><b class='flag-5'>作品</b><b class='flag-5'>連載</b>】linkboy面向WCH移植(1)

    【星核計劃】上傳FPGA大賽作品,領取電子發燒友專屬上傳福利!

    -FPGA大賽,本次大賽獎勵豐厚,不僅有獎金,還有電子發燒友論壇為參賽者準備的上傳福利,按照下面規則上傳參賽作品即可獲得,還在等什么,快來參加吧??!作品上傳地址:【FPGA開發者項目
    發表于 05-21 15:01

    【文章連載】RT-Thread創新應用大賽文章匯總

    作品集將會持續更新,歡迎大家訂閱關注~ 凡是在本貼參與回復者將獲得10積分(在不連續樓層評論均可獲得)專欄作者:RT-thread【RTT大賽作品
    發表于 10-11 15:13

    【有獎活動】RT-Thread創新應用大賽作品連載征文

    禮品:https://jifen.elecfans.com/index.html?文章標題格式:【RTT大賽作品連載】+自擬內容?文章作品
    發表于 10-21 18:49

    【參與有獎】激揚代碼,千元現金!RT-Thread主題征文大賽

    、通俗易懂-作品言之有物、內容有一定實用性2)作品的數量—30分-發布優質原創作品數量越多,得分越高-專題類、連載類、合集類作品享受加分2.
    發表于 05-27 17:51

    國際程序設計大賽作品欣賞

    國際程序設計大賽作品欣賞,非常漂亮的程序
    發表于 08-18 17:26 ?0次下載
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>