chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

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

3天內(nèi)不再提示

CW32L012/F030靈眸X1智能小車——板載紅外接收開發(fā)

CW32生態(tài)社區(qū) ? 來源:CW32生態(tài)社區(qū) ? 作者:CW32生態(tài)社區(qū) ? 2026-01-05 16:52 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

紅外通信介紹

在光譜中波長自760nm至400um的電磁波稱為紅外線,它是一種不可見光。紅外線通信的例子我們每個人應(yīng)該都很熟悉,目前常用的家電設(shè)備幾乎都可以通過紅外遙控的方式進行遙控,比如電視機、空調(diào)、投影儀等,都可以見到紅外遙控的影子。這種技術(shù)應(yīng)用廣泛,相應(yīng)的應(yīng)用器件都十分廉價,因此紅外遙控是我們?nèi)粘TO(shè)備控制的理想方式。

紅外通訊原理

紅外光是以特定的頻率脈沖形式發(fā)射,接收端收到到信號后,按照約定的協(xié)議進行解碼,完成數(shù)據(jù)傳輸。在消費類電子產(chǎn)品里,脈沖頻率普遍采用 30KHz 到 60KHz 這個頻段,NEC協(xié)議的頻率就是38KHZ。 這個以特定的頻率發(fā)射其實就可以理解為點燈,不要被復(fù)雜的詞匯難住了,就是控制燈的閃爍頻率(亮滅),和剛學(xué)單片機完成閃爍燈一樣的意思,只不過是燈換了一種類型,都是燈。

接收端的原理: 接收端的芯片對這個紅外光比較敏感,可以根據(jù)有沒有光輸出高低電平,如果發(fā)送端的閃爍頻率是有規(guī)律的,接收端收到后輸出的高電平和低電平也是有規(guī)律對應(yīng)的,這樣發(fā)送端和接收端只要約定好,那就可以做數(shù)據(jù)傳輸了。

紅外線傳輸協(xié)議可以說是所有無線傳輸協(xié)議里成本最低,最方便的傳輸協(xié)議了,但是也有缺點,距離不夠長,速度不夠快;當(dāng)然,每個傳輸協(xié)議應(yīng)用的環(huán)境不一樣,定位不一樣,好壞沒法比較,具體要看自己的實際場景選擇合適的通信方式。

NEC協(xié)議介紹

NEC協(xié)議是眾多紅外線協(xié)議中的一種(這里說的協(xié)議就是他們數(shù)據(jù)幀格式定義不一樣,數(shù)據(jù)傳輸原理都是一樣的),我們購買的外能遙控器、淘寶買的mini遙控器、電視機、投影儀幾乎都是NEC協(xié)議。 像格力空調(diào)、美的空調(diào)這些設(shè)備使用的就是其他協(xié)議格式,不是NEC協(xié)議,但是只要學(xué)會一種協(xié)議解析方式,明白了紅外線傳輸原理,其他遙控器協(xié)議都可以解出來。

NEC協(xié)議一次完整的傳輸包含: 引導(dǎo)碼、8位地址碼、8位地址反碼、8位命令碼、8位命令反碼。這里我們主要講解如何接收紅外發(fā)送端發(fā)送的NEC協(xié)議內(nèi)容。

圖片

引導(dǎo)碼:由9ms的低電平+4.5ms的高電平組成。

圖片

4個字節(jié)的數(shù)據(jù): 地址碼+地址反碼+命令碼+命令反碼。 這里的反碼可以用來校驗數(shù)據(jù)是否傳輸正確,有沒有丟包。

重點: NEC協(xié)議傳輸數(shù)據(jù)位的時候,0和1的區(qū)分是依靠收到的高、低電平的持續(xù)時間來進行區(qū)分的。這是解碼關(guān)鍵。

數(shù)據(jù)發(fā)送0碼:0.56ms低電平+ 0.56ms的高電平。

圖片

數(shù)據(jù)發(fā)送1碼:0.56ms低電平+1.68ms的高電平

wKgZPGlVHeiAXGzOAABrxrR9HUg381.jpg

所以,收到一個數(shù)據(jù)位的完整時間表示方法是這樣的:

    收到數(shù)據(jù)位0:   0.56ms低電平+ 0.56ms的高電平
    收到數(shù)據(jù)位1:  0.56ms低電平+1.68ms的高電平

還有一個重復(fù)碼,它是由一個 9ms 的低電平和一個 2.5ms 的高電平組成。當(dāng)一個紅外信號連續(xù)發(fā)送時,可以通過發(fā)送重復(fù)碼的方式快速發(fā)送。

wKgZPGlbe12AH8IyAAIVd671ZIc268.jpg

電路設(shè)計

當(dāng)紅外線接收頭感應(yīng)到有紅外光就輸出低電平,沒有感應(yīng)到紅外光就輸出高電平。因此我們配置紅外引腳為外部中斷下降沿觸發(fā)方式,當(dāng)紅外引腳有下降沿時,我們馬上進入中斷處理并接收紅外信號。

紅外接收電路如圖,連接到CW32L012/F030的PB10引腳。

圖片

工程代碼:

引腳配置如下:

//紅外引腳初始化
void infrared_goio_config(void)
{
    IR_RCC_GPIO_ENABLE();      // 使能GPIO時鐘
    GPIO_InitTypeDef GPIO_InitStruct;                   // GPIO初始化結(jié)構(gòu)體
    GPIO_InitStruct.Pins  = IR_PIN;                     // GPIO引腳
    GPIO_InitStruct.Mode  = GPIO_MODE_INPUT_PULLUP;     // 上拉輸入
    GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;            // 速度高
    GPIO_InitStruct.IT    = GPIO_IT_FALLING;            // 下降沿觸發(fā)中斷
    GPIO_Init(IR_PORT, &GPIO_InitStruct);               // 初始化
    // 清除PB0中斷標(biāo)志
    GPIOA_INTFLAG_CLR(EXTI_BV);
    // 使能NVIC
    NVIC_EnableIRQ(EXTI_IRQ);
}

紅外信號的數(shù)據(jù),全部是以時間長度來確定數(shù)據(jù)是0還是1,而最小的單位要求有560us,已經(jīng)達到了us級的測量。

獲取低電平時間的實現(xiàn)代碼如下:

//獲取紅外低電平時間
//以微秒us作為時間參考
void get_infrared_low_time( uint32_t *low_time )
{
    uint32_t time_val = 0;
    while( GPIO_ReadPin(IR_PORT, IR_PIN) == 0 )
    {
        if( time_val>= 500 )
        {
            *low_time = time_val;
            return;
        }
        delay_us(20);
        time_val++;
    }
    *low_time = time_val;
}

當(dāng)引腳為低電平時,將進入 while 循環(huán),直到不為低電平時就結(jié)束循環(huán)。在循環(huán)之中不斷的讓時間變量time_val累加, 每加一次需要經(jīng)過20us。當(dāng)time_val變量累加時間大于 500 * 20 = 10000us = 10ms時,判斷為超時,強行結(jié)束該函數(shù),防止阻礙系統(tǒng)運行。

獲取高電平時間的代碼同理:

//獲取紅外高電平時間
//以微秒us作為時間參考
void get_infrared_high_time(uint32_t *high_time)
{
    uint32_t time_val = 0;
    while( GPIO_ReadPin(IR_PORT, IR_PIN) == 1 )
    {
        if( time_val >= 250 )
        {
            *high_time = time_val;
            return;
        }
        delay_us(20);
        time_val++;
    }
    *high_time = time_val;
}

引導(dǎo)碼與重復(fù)碼判斷

引導(dǎo)碼是由一個 9ms 的低電平和一個 4.5ms 的高電平組成。每當(dāng)接收到一個紅外信號時,第一個數(shù)據(jù)就是引導(dǎo)碼。我們通過判斷紅外信號的第一個數(shù)據(jù)是否是引導(dǎo)碼,來決定是否要進行后面的數(shù)據(jù)接收處理。

重復(fù)碼是由一個 9ms 的低電平和一個 2.5ms 的高電平組成。當(dāng)我們的紅外遙控一直按住按鍵時,就會發(fā)出重復(fù)碼,我們可以檢測重復(fù)碼,來確定是否要連續(xù)觸發(fā)重復(fù)動作,比如長按開機,長按加速等等。

/******************************************************************
 * 函 數(shù) 名 稱:guide_and_repeat_code_judgment
 * 函 數(shù) 說 明:引導(dǎo) 和 重復(fù) 碼 判斷
 * 函 數(shù) 形 參:無
 * 函 數(shù) 返 回:1:不是引導(dǎo)碼   2:重復(fù)碼  0:引導(dǎo)碼
 * 作       者:LC
 * 備       注:以20微秒us作為時間參考
                引導(dǎo)碼:由一個 9ms 的低電平和一個 4.5ms 的高電平組成
                重復(fù)碼:由一個 9ms 的低電平和一個 2.5ms 的高電平組成
******************************************************************/
uint8_t guide_and_repeat_code_judgment(void)
{
    uint32_t out_time=0;
    get_infrared_low_time(&out_time);
    //time>10ms             time  500) || (out_time < 400))
    {
        return 1;
    }
    get_infrared_high_time(&out_time);
    // x?>5ms  或者 x 250) || (out_time < 100))
    {
        return 1;
    }
    //如果是重復(fù)碼  2ms < time < 3ms
    if((out_time > 100) && (out_time < 150))
    {
        return 2;
    }
    return 0;
}

完整紅外數(shù)據(jù)接收

具體接收流程:【判斷是否接收到引導(dǎo)碼】->【接收數(shù)據(jù)】->【判斷數(shù)據(jù)是否正確】。

//接收紅外數(shù)據(jù)
void receiving_infrared_data(void)
{
    uint16_t group_num = 0,data_num = 0;
    uint32_t time=0;
    uint8_t bit_data = 0;
    uint8_t ir_value[5] = {0};
    uint8_t guide_and_repeat_code = 0;
    //等待引導(dǎo)碼
    guide_and_repeat_code = guide_and_repeat_code_judgment();
    //如果不是引導(dǎo)碼則結(jié)束解析
    if(  guide_and_repeat_code == 1 ) return;
    //共有4組數(shù)據(jù)
    //地址碼+地址反碼+命令碼+命令反碼
    for(group_num = 0; group_num < 4; group_num++ )
        {
        //接收一組8位的數(shù)據(jù)
        for( data_num = 0; data_num < 8; data_num++ )
        {
            //接收低電平
            get_infrared_low_time(&time);
            //如果不在0.56ms內(nèi)的低電平,數(shù)據(jù)錯誤
            if((time > 60) || (time < 20))
            {
                return ;
            }
            time = 0;
            //接收高電平
            get_infrared_high_time(&time);
            //如果是在1200us=60) && (time < 100))
            {
                bit_data = 1;
            }
            //如果是在200us=10) && (time < 50))
            {
                bit_data = 0;
            }
            //groupNum表示第幾組數(shù)據(jù)
            ir_value[ group_num ] 

判斷數(shù)據(jù)是否正確,可以通過將正常數(shù)據(jù)取反,與反碼比較。如果不一致說明數(shù)據(jù)不對。

typedef struct INFRARED_DATA{
    uint8_t AddressCode;            //地址碼
    uint8_t AddressInverseCode;     //地址反碼
    uint8_t CommandCode;            //命令碼
    uint8_t CommandInverseCode;     //命令反碼
}_INFRARED_DATA_STRUCT_;
_INFRARED_DATA_STRUCT_ InfraredData;
//紅外數(shù)據(jù)是否正確判斷
uint8_t infrared_data_true_judgment(uint8_t *value)
{
    //判斷地址碼是否正確
    if( value[0] != (uint8_t)(~value[1]) )  return 0;
    //判斷命令碼是否正確
    if( value[2] != (uint8_t)(~value[3]) )  return 1;
    //串口輸出查看接收到的數(shù)據(jù)
    printf("%x %x %x %xrn",value[0],value[1],value[2],value[3]);
    //保存正確數(shù)據(jù)
    InfraredData.AddressCode        = value[0];
    InfraredData.AddressInverseCode = value[1];
    InfraredData.CommandCode        = value[2];
    InfraredData.CommandInverseCode = value[3];
}
//獲取紅外發(fā)送過來的命令
uint8_t get_infrared_command(void)
{
    return InfraredData.CommandCode;
}
//清除紅外發(fā)送過來的數(shù)據(jù)
void clear_infrared_command(void)
{
    InfraredData.CommandCode = 0x00;
}

最后,記得在外部中斷服務(wù)函數(shù)中,調(diào)用紅外接收函數(shù)。

void EXTI_HANDLER(void)
{
        if(IR_PORT->ISR_f.EXTI_PIN)   // 中斷標(biāo)志位
        {
                if(GPIO_ReadPin(IR_PORT, IR_PIN) == GPIO_Pin_RESET)  // 如果是低電平
                {
                        //接收一次紅外數(shù)據(jù)
                        receiving_infrared_data();
                }
                GPIOA_INTFLAG_CLR(EXTI_BV); // 清除標(biāo)志位
        }
}

最后在main函數(shù)中編寫以下代碼(delay_us函數(shù)不在此展開說明)

uint8_t val;
int main(void)
{
        OLED_Init();//初始化
        infrared_goio_config();//紅外初始化
        OLED_ShowString(1,1,"hello");//OLED顯示字符串
        while(1)
        {
                val=get_infrared_command();//接收紅外發(fā)過來的數(shù)據(jù)
                OLED_ShowHexNum(2,1,val,2);//顯示數(shù)據(jù)
        }
}

工作現(xiàn)象

將代碼燒入開發(fā)板之后,可以觀察到以下現(xiàn)象

OLED顯示屏第一行第一列顯示字符串hello

未按下遙控器,第二行顯示00

按下遙控器之后,第二行顯示接收到的數(shù)據(jù)


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 智能小車
    +關(guān)注

    關(guān)注

    87

    文章

    560

    瀏覽量

    83416
  • 紅外通信
    +關(guān)注

    關(guān)注

    1

    文章

    54

    瀏覽量

    10286
  • 紅外模塊
    +關(guān)注

    關(guān)注

    0

    文章

    17

    瀏覽量

    9901
  • CW32
    +關(guān)注

    關(guān)注

    1

    文章

    299

    瀏覽量

    1827
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    CW32L012/F030X1智能小車——板載WS2812驅(qū)動示例

    WS2812是一種廣泛使用的地址可控制的RGB LED模塊,其內(nèi)置驅(qū)動電路和控制芯片,允許用戶通過單線信號控制多個LED的顏色和亮度。
    的頭像 發(fā)表于 01-05 16:35 ?2541次閱讀
    <b class='flag-5'>CW32L012</b>/<b class='flag-5'>F030</b><b class='flag-5'>靈</b><b class='flag-5'>眸</b><b class='flag-5'>X1</b><b class='flag-5'>智能</b><b class='flag-5'>小車</b>——<b class='flag-5'>板載</b>WS2812驅(qū)動示例

    CW32L012/F030X1智能小車——超聲波模塊配置

    SR04超聲波模塊是一款廣泛應(yīng)用的測距傳感器,主要用于使用超聲波測量物體與傳感器之間的距離。它是一個成本低廉、精度較高且易于使用的傳感器,常用于機器人、智能家居、無人機、汽車防撞系統(tǒng)等項目。
    的頭像 發(fā)表于 01-05 16:54 ?2589次閱讀
    <b class='flag-5'>CW32L012</b>/<b class='flag-5'>F030</b><b class='flag-5'>靈</b><b class='flag-5'>眸</b><b class='flag-5'>X1</b><b class='flag-5'>智能</b><b class='flag-5'>小車</b>——超聲波模塊配置

    堅持繼續(xù)布局32位MCU,進一步完善產(chǎn)品陣容,96Mhz主頻CW32L012新品發(fā)布!

    基于CW32L01x系列低功耗微控制器家族的全新成員:CW32L012系列產(chǎn)品。 CW32L012基于ARM? Cortex-M0+內(nèi)核,主頻高達96MHz,同時集成了CORDIC硬件單元、擴展算術(shù)運算單元
    發(fā)表于 07-16 16:32

    白嫖的CW32小車的藍牙模式使用教程

    00,速度也是同樣如此,我們把這個指令編輯到這個藍牙編輯界面中,像這樣: 每個按鍵都編輯好對應(yīng)的指令,這樣藍牙上位機的配置也配置好了,按照這樣的步驟,我很流暢的通過藍牙遙控上了這款CW32L012小車,整個過程還是很順利的。
    發(fā)表于 11-21 15:38

    **CW32L012****開發(fā)評估板的第一個程序**

    CW32L012****開發(fā)評估板的第一個程序 最近以15.99在CW32生態(tài)社區(qū)入手了這塊CW32L012開發(fā)評估板,我迫不及待的燒錄進電
    發(fā)表于 11-22 00:09

    CW32L012小型機器人控制評估板活動 四足機器人+智能小車 開箱評測

    CW32L012活動相關(guān)資料鏈接:https://dwi41yhz703.feishu.cn/wiki/B1Ihw31ebiX0vkkhQr2cINnkn1g 小型機器人+智能小車
    發(fā)表于 11-24 23:44

    CW32F030CxTx StartKit用戶使用手冊

    VBUS 供電,3.3V 供電(LD1117AS33TR),外接 1.65V ~ 5.5V 供電 ?CW32F030-StdPeriph-Lib 軟件包提供全面免費的固件庫和例程 ?支持多種集成開發(fā)環(huán)境,IAR ?,Keil?
    發(fā)表于 09-15 08:28

    紅外遙控小車

    紅外遙控小車【材料】1、NEC編碼紅外遙控器;2、紅外接收器 VS1838B;3、Arduino uno 一塊4、
    發(fā)表于 12-17 17:48 ?21次下載
    <b class='flag-5'>紅外</b>遙控<b class='flag-5'>小車</b>

    武漢芯源CW32F030評估板介紹

    CW32F030CxTxStartKit評估板為用戶提供一種經(jīng)濟且靈活的方式使用CW32F030CxTx芯片構(gòu)建系統(tǒng)原型,可進行性能、功耗、功能等各方面快速驗證
    的頭像 發(fā)表于 10-20 11:18 ?2013次閱讀
    武漢芯源<b class='flag-5'>CW32F030</b>評估板介紹

    CW32模塊使用 紅外接收模塊

    靜態(tài)電流3-5uA,動態(tài)電流3-5mA。 以上信息見廠家資料文件 三、移植過程 我們的目標(biāo)是將例程移植至CW32F030C8T6開發(fā)板上【能夠?qū)崿F(xiàn)紅外信號接收的功能】。首先要獲取資料
    的頭像 發(fā)表于 01-23 13:16 ?988次閱讀
    <b class='flag-5'>CW</b>32模塊使用 <b class='flag-5'>紅外接收</b>模塊

    使用芯源CW32的CW32L012開發(fā)評估板做了spi屏幕驅(qū)動

    CW32生態(tài)社區(qū)以極高的性價比入手了這塊CW32L012開發(fā)評估板,開發(fā)板以底板、核心板、1.77寸TFT顯示屏構(gòu)成,所有的IO口都引出了排針,這點好評,使用杜邦線可以非常方便的連接
    的頭像 發(fā)表于 11-21 11:34 ?583次閱讀
    使用芯源<b class='flag-5'>CW</b>32的<b class='flag-5'>CW32L012</b><b class='flag-5'>開發(fā)</b>評估板做了spi屏幕驅(qū)動

    CW32L012小機器人的電機控制

    線的大功率調(diào)速,電機的控制性能直接決定了系統(tǒng)的響應(yīng)速度、運行精度、能耗效率與穩(wěn)定性。這里分享CW32L012小機器人的正反轉(zhuǎn)、調(diào)速的電機控制 電機的正反轉(zhuǎn) 從配套的開發(fā)板資料介紹中可以知道,這是電機的驅(qū)動芯片RZ7899 從立創(chuàng)商城下載該芯片的數(shù)據(jù)
    的頭像 發(fā)表于 11-21 13:18 ?2368次閱讀
    <b class='flag-5'>CW32L012</b>小機器人的電機控制

    CW32L012小車測評】到手小車測評其中基本功能

    開箱介紹 在CW小程序中購買了小車,其中的包裝特別好,外面有個箱子來裝著,其中我們將外包裝拆開,可以看見我們本次購買的小車的本體,我購買的是焊接完成的,所以我可以開箱直接試用,方便很多,如果大家追求
    的頭像 發(fā)表于 11-24 22:59 ?283次閱讀
    【<b class='flag-5'>CW32L012</b><b class='flag-5'>小車</b>測評】到手<b class='flag-5'>小車</b>測評其中基本功能

    CW32L012與STM32F103的三角運算性能對比

    沒有硬件浮點運算單元。 但在運算三角函數(shù)時,CW32L012支持CORDIC算法。 二、 三角運算性能具體分析 1:標(biāo)準(zhǔn)庫浮點運算(如 math.h 的 sinf, cosf) 這是最常用但也是最慢的方式。 STM32F103C
    的頭像 發(fā)表于 12-29 15:32 ?2253次閱讀
    <b class='flag-5'>CW32L012</b>與STM32<b class='flag-5'>F</b>103的三角運算性能對比

    CW32L012與STM32G431的CORDIC三角函數(shù)運算性能對比

    CORDIC協(xié)處理器的三角運算性能對比。對比結(jié)果出乎意料。 一、硬件架構(gòu) 二、運算100W次SIN30度與COS30度的代碼實現(xiàn) 1.CW32L012 CW32L012的CORDIC提供某些數(shù)學(xué)函數(shù)
    的頭像 發(fā)表于 12-29 15:55 ?2431次閱讀
    <b class='flag-5'>CW32L012</b>與STM32G431的CORDIC三角函數(shù)運算性能對比