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

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

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

使用MM32L0130片上IRM模塊實現(xiàn)紅外發(fā)碼

靈動MM32MCU ? 來源:靈動MM32MCU ? 作者:靈動MM32MCU ? 2022-10-13 17:03 ? 次閱讀

紅外遙控是一種無線、非接觸控制技術(shù),具有抗干擾能力強,信息傳輸可靠,功耗低,成本低,易于實現(xiàn)等顯著優(yōu)點,被諸多電子設(shè)備包括消費電子、家用電器、安防器材等廣泛采用,如智能手環(huán)、機頂盒、3D眼鏡、智能掃地機、空調(diào)、電扇、通道閘、紅外柵欄等,近年來也越來越多的應(yīng)用到計算機和手機系統(tǒng)中。

靈動股份推出的MM32L0130系列MCU具有片上IRM紅外調(diào)制器,該模塊使用片上的定時器和串口,實現(xiàn)數(shù)據(jù)的 FSK/ASK 調(diào)制,以滿足紅外發(fā)碼的需求。

1

IRM介紹

1.1 IRM功能框圖

c694efce-4ad4-11ed-a3b6-dac502259ad0.png

1.2 IRM主要特征

支持 APB 接口

兩個調(diào)制信號源,分別為通道 1 和通道 2

通道 1 和通道 2 調(diào)制信號源均可選,來源包含

1)恒 0

2)恒 1

3)TIM3 的 OC1 通道

4)TIM4 的 OC1 通道

5)TIM16 的 OC1 通道

6)TIM17 的 OC1 通道

基帶信號源可選,來源包含

1)IRM 數(shù)據(jù)寄存器

2)UART1_TX

3)UART2_TX

4)LPUART_TX

可實現(xiàn)數(shù)據(jù)的 ASK、FSK 調(diào)制,調(diào)制方式可選

輸出信號極性可選

2

功能概述

2.1 波形產(chǎn)生單元

調(diào)制信號選擇功能:兩個通道, channel_1 和 channel_2,通過寄存器配置可選擇通道輸入為恒 0、恒1、 TIM3 的 OC1 通道、 TIM4 的 OC1 通道、 TIM16 的 OC1 通道、 TIM17 的 OC1 通道。

基帶信號選擇功能:被發(fā)送的紅外信號對應(yīng)源數(shù)據(jù),可以通過寄存器配置選擇源為 IRM_DR、 UART1_TX、UART2_TX、 LPUART1_TX。

調(diào)試方式:可選 FSK 或 ASK。

極性可選,輸出可為正?;蚍聪嗖ㄐ?。

2.2 調(diào)制功能說明

2.21 FSK 調(diào)制

用不同的頻率來表示不同的符號。本模塊為二進制頻移鍵控(2FSK)。信號可以看成是頻載為 f1 和 f2的兩個振幅鍵控信號的合成。該功能模式下,調(diào)制信號源為頻率為 f1、 f2 的兩個方波:被調(diào)制信號為 0,則對應(yīng)輸出 f1;被調(diào)制信號為 1 則對應(yīng)輸出 f2。
波形如下:

c6ab15ce-4ad4-11ed-a3b6-dac502259ad0.png

FSK 調(diào)制波形

2.22 ASK 調(diào)制

用不同的幅度來表示不同的符號。本模塊為 OOK(On-Off Keying)調(diào)制,是 ASK 調(diào)制的一個特例,把一個幅度取為 0,另一個幅度為非 0,就是 OOK。又名 2ASK(二進制振幅鍵控)。該功能模式下,通道 1 信號源應(yīng)為恒 0,通道 2 信號源應(yīng)該頻率為 f2 的方波:被調(diào)制信號為 0,則對應(yīng)輸出 0;被調(diào)制信號為 1 則對應(yīng)輸出 f2。
波形如下:

c6c05f60-4ad4-11ed-a3b6-dac502259ad0.png

ASK 調(diào)制波形

3

實驗

本次實驗使用MM32L0130片上IRM驅(qū)動紅外發(fā)射管實現(xiàn)紅外發(fā)碼。硬件使用靈動股份設(shè)計的EVB-L0136開發(fā)板,紅外模塊原理圖如下:

c6dcbb88-4ad4-11ed-a3b6-dac502259ad0.png

原理圖中PA9連接D1(紅外發(fā)射管)、PA10連接D2(紅外接收頭),紅外發(fā)射電路使用T1(N-MOS管)控制紅外發(fā)射管的導(dǎo)通或截至,在導(dǎo)通的時候,紅外發(fā)射管會發(fā)射出紅外光,反之,不會發(fā)射出紅外光。

要使兩者通信成功,收/發(fā)紅外波長與載波頻率需一致,在這里波長就是940nm,載波頻率就是38KHz。當紅外接收頭接收到紅外載波信號時,其OUT引腳輸出低電平,反之,OUT引腳輸出高電平。

3.1 實驗1:實現(xiàn)數(shù)據(jù)FSK調(diào)制

程序中配置PA9作為IRM紅外調(diào)制器的發(fā)送引腳,配置調(diào)制信號通道1選擇TIM3_OC1,調(diào)制信號通道2選擇TIM4_OC1,基帶信號源選擇UART1_TX信號,調(diào)制方式選擇FSK調(diào)制,以實現(xiàn)紅外發(fā)碼。主要代碼如下:

3.11 IRM配置

voidIRM_FSK_Config(void)
{
IRM_InitTypeDefIRM_InitStruct;

RCC_APB1PeriphClockCmd(RCC_APB1ENR_IRM,ENABLE);
IRM_FSK_Clock_Init(TIM3,TIM4);
IRM_StructInit(&IRM_InitStruct);
IRM_SetIRMData(0);
IRM_InitStruct.IRM_Polarity=IRM_Polarity_Normal;
IRM_InitStruct.IRM_Modulation=IRM_Modulation_FSK;
IRM_InitStruct.IRM_DataSelectSource=IRM_DataSource_UART1_TX;
IRM_InitStruct.IRM_Channel1ClockSource=IRM_Channel1ClockSource_TIM3OC1;
IRM_InitStruct.IRM_Channel2ClockSource=IRM_Channel2ClockSource_TIM4OC1;

IRM_Init(&IRM_InitStruct);
UART1_NVIC_Init(600);

IRM_StartCmd(ENABLE);
}

3.12 調(diào)制信號配置

配置TIM3輸出PWM,頻率為38KHZ(和載波頻率一致),占空比為1/2

配置TIM4輸出PWM,頻率為3.8KHZ(一個非載波頻率),占空比為1/2

voidIRM_FSK_Clock_Init(TIM_TypeDef*chan1_tim,TIM_TypeDef*chan2_tim)
{
u32ui_tim_value;

ui_tim_value=(u32)((RCC_GetSysClockFreq())/IRM_FREQUENCE);

TIM_Init(chan1_tim,(ui_tim_value)-1,0);
TIM_Init(chan2_tim,(ui_tim_value)*10-1,0);

}

定義IRM_FREQUENCE為38000

#defineIRM_FREQUENCE38000

3.13 配置UART1 RX中斷

voidUART1_NVIC_Init(u32baudrate)
{
UART_InitTypeDefUART_InitStruct;
NVIC_InitTypeDefNVIC_InitStruct;

RCC_UART_ClockCmd(UART1,ENABLE);

NVIC_InitStruct.NVIC_IRQChannel=UART1_IRQn;
NVIC_InitStruct.NVIC_IRQChannelPriority=3;
NVIC_InitStruct.NVIC_IRQChannelCmd=ENABLE;
NVIC_Init(&NVIC_InitStruct);

UART_StructInit(&UART_InitStruct);
UART_InitStruct.BaudRate=baudrate;
UART_InitStruct.WordLength=UART_WordLength_8b;
UART_InitStruct.StopBits=UART_StopBits_1;
UART_InitStruct.Parity=UART_Parity_No;
UART_InitStruct.HWFlowControl=UART_HWFlowControl_None;
UART_InitStruct.Mode=UART_Mode_Rx|UART_Mode_Tx;

UART_Init(UART1,&UART_InitStruct);
UART_ITConfig(UART1,UART_IT_RXIEN,ENABLE);
UART_Cmd(UART1,ENABLE);

UART1RX_GPIO_Init();
}

3.14 IRM收發(fā)測試

voidIRM_Transmit_Test(void)
{

u16i,getcount;
u8irm_string[]={0xFF,0xFF,0x55,0xAA,0xF0,0x0F,0x80,0x01};
u8getbyte;
IRM_Initialize();
while(1){
getcount=0;
for(i=0;i

定義數(shù)組irm_string[]存放需要IRM調(diào)制的數(shù)據(jù),IRM對數(shù)據(jù)進行FSK調(diào)制后,通過IRM_TX引腳發(fā)送,控制MOS管驅(qū)動紅外發(fā)射管以發(fā)射紅外光,紅外接收頭對紅外光進行解碼后,由UART1_RX引腳接收,將收到的數(shù)據(jù)與數(shù)組irm_string[]中的數(shù)據(jù)進行比對,看收/發(fā)數(shù)據(jù)是否一致,并進行統(tǒng)計。

FSK模式下,調(diào)制信號源為頻率為38K、3.8K的兩個方波:被調(diào)制信號為0時,則對應(yīng)輸出38KHZ;被調(diào)制信號為1時,則對應(yīng)輸出3.8KHZ,邏輯分析儀獲取一段數(shù)據(jù)如下:

c6eda86c-4ad4-11ed-a3b6-dac502259ad0.png

通道4為IRM_TX發(fā)出的調(diào)制信號。

通道5是UART1_RX接收到的數(shù)據(jù),符合紅外接收頭特性。

觀察串口調(diào)試助手打印數(shù)據(jù),和irm_string[]中的數(shù)據(jù)一致。

c70584f0-4ad4-11ed-a3b6-dac502259ad0.png ? ?

3.2 實驗2:實現(xiàn)數(shù)據(jù)ASK調(diào)制

程序中配置PA9作為IRM紅外調(diào)制器的發(fā)送引腳,配置調(diào)制信號通道1為恒1,調(diào)制信號通道2選擇TIM4_OC1,基帶信號源選擇UART1_TX信號,調(diào)制方式選擇ASK調(diào)制,以實現(xiàn)紅外發(fā)碼。

該實驗與前面實驗1相比,只是選擇IRM的另一種調(diào)制模式,代碼只需在實驗1的基礎(chǔ)上改動即可,主要代碼如下:

3.21 IRM配置

voidIRM_ASK_Config(void)
{
IRM_InitTypeDefIRM_InitStruct;

RCC_APB1PeriphClockCmd(RCC_APB1ENR_IRM,ENABLE);
IRM_ASK_Clock_Init(TIM4);
IRM_StructInit(&IRM_InitStruct);
IRM_SetIRMData(0);
IRM_InitStruct.IRM_Polarity=IRM_Polarity_Normal;
IRM_InitStruct.IRM_Modulation=IRM_Modulation_ASK_PSK;
IRM_InitStruct.IRM_DataSelectSource=IRM_DataSource_UART1_TX;
IRM_InitStruct.IRM_Channel1ClockSource=IRM_Channel1ClockSource_KeepHigh;
IRM_InitStruct.IRM_Channel2ClockSource=IRM_Channel2ClockSource_TIM4OC1;

IRM_Init(&IRM_InitStruct);
UART1_NVIC_Init(600);

IRM_StartCmd(ENABLE);
}

3.22 調(diào)制信號配置

配置TIM4輸出PWM,頻率為38KHZ(和載波頻率一致),占空比為1/2

voidIRM_FSK_Clock_Init(TIM_TypeDef*chan1_tim,TIM_TypeDef*chan2_tim)
{
u32ui_tim_value;
ui_tim_value=(u32)((RCC_GetSysClockFreq())/IRM_FREQUENCE);
TIM_Init(chan1_tim,(ui_tim_value)-1,0);
}

定義IRM_FREQUENCE為38000

#defineIRM_FREQUENCE38000

其余代碼同實驗1,下載運行。

ASK模式下,被調(diào)制信號為1時,則對應(yīng)輸出38KHZ;被調(diào)制信號為0時,則對應(yīng)輸出0,截取邏輯分析儀的一段數(shù)據(jù)分析:

c7232e56-4ad4-11ed-a3b6-dac502259ad0.png

通道4為IRM_TX發(fā)出的調(diào)制信號。

通道5是UART1_RX接收到的數(shù)據(jù),符合紅外接收頭特性。

觀察串口調(diào)試助手打印數(shù)據(jù),和irm_string[]中的數(shù)據(jù)一致。

c734fc58-4ad4-11ed-a3b6-dac502259ad0.png

實驗簡單演示了使用MM32L0130片上IRM模塊實現(xiàn)紅外發(fā)碼,并判斷收發(fā)數(shù)據(jù)的一致性。IRM模塊使用片上的定時器和串口,實現(xiàn)數(shù)據(jù)的 FSK/ASK 調(diào)制,滿足紅外發(fā)碼的需求。




審核編輯:劉清

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

    關(guān)注

    31

    文章

    5343

    瀏覽量

    120375
  • 紅外遙控
    +關(guān)注

    關(guān)注

    22

    文章

    347

    瀏覽量

    45606
  • 調(diào)制器
    +關(guān)注

    關(guān)注

    3

    文章

    841

    瀏覽量

    45162
  • IRM
    IRM
    +關(guān)注

    關(guān)注

    1

    文章

    2

    瀏覽量

    1726
  • MM32
    +關(guān)注

    關(guān)注

    1

    文章

    106

    瀏覽量

    767

原文標題:靈動微課堂 (第231講) | 使用MM32L0130 IRM實現(xiàn)紅外發(fā)碼

文章出處:【微信號:MindMotion-MMCU,微信公眾號:靈動MM32MCU】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    使用MM32L0130 IRM實現(xiàn)紅外發(fā)

    1、使用MM32L0130 IRM實現(xiàn)紅外發(fā)  紅外
    發(fā)表于 10-21 14:22

    MM32L0130系列MCURTC模塊具有哪些功能呢

    1 MM32L0130 RTC簡介RTC 模塊是用于提供時間(時、分、秒、亞秒)和日期(年、月、日)功能的定時計數(shù)器,日歷以 BCD的格式顯示。內(nèi)部包含周期性的喚醒單元,用于喚醒低功耗模式。支持
    發(fā)表于 11-02 14:37

    基于MM32L0130的低功耗電子時鐘設(shè)計方案相關(guān)資料分享

    1、基于MM32L0130的低功耗電子時鐘設(shè)計  MM32L0130作為靈動微電子推出的一款低功耗芯片,內(nèi)置多種省電工作模式保證低功耗應(yīng)用的要求。前面章節(jié)分別對MM32L0130
    發(fā)表于 11-09 16:00

    請問有人使用IAR進行過MM32L0130的開發(fā)嗎?

    我在使用IAR8.30進行MM32L0130開發(fā)板試用時遇到了一個棘手的問題,其例程能夠下載到開發(fā)板(至少在IAR中任何報錯,也可以在線調(diào)試),可是就是一直開在時鐘配置階段,一直沒有配置成功,有人遇到過這樣的問題嗎?或者在調(diào)試其他單片機時是否有類似現(xiàn)象?麻煩指導(dǎo)一下解決辦法
    發(fā)表于 12-18 21:48

    靈動微MM32L0130系列32位微控制器的詳細介紹

    全新MM32L0130系列是靈動微電子針對低功耗應(yīng)用推出的新一代MCU產(chǎn)品,其搭載了Arm?Cortex?-M0+內(nèi)核,采用了先進的低功耗架構(gòu)設(shè)計和技術(shù)手段,實現(xiàn)了最低700nA的RTC運行功耗,最低250nA的待機功耗和低于100nA的最低功耗表現(xiàn)。
    發(fā)表于 04-28 16:18 ?756次閱讀

    使用MM32L0130 SLCD驅(qū)動LCD顯示

    靈動股份推出的MM32L0130系列MCU具有片SLCD液晶顯示控制器,SLCD 驅(qū)動器是用于單色無源液晶顯示器(SLCD)的數(shù)字驅(qū)動器,具有多達 8 個公共端和多達 63 個分段端, SLCD
    的頭像 發(fā)表于 10-21 10:54 ?2317次閱讀

    MM32L0130 RTC日歷和鬧鐘

    RTC 模塊是用于提供時間(時、分、秒、亞秒)和日期(年、月、日)功能的定時計數(shù)器,日歷以 BCD的格式顯示。內(nèi)部包含周期性的喚醒單元,用于喚醒低功耗模式。支持夏令時補償,支持數(shù)字校準補償晶振精度的偏差。靈動微電子推出的MM32L01
    的頭像 發(fā)表于 10-28 10:37 ?1310次閱讀

    基于MM32L0130的低功耗電子時鐘設(shè)計

    MM32L0130作為靈動微電子推出的一款低功耗芯片,內(nèi)置多種省電工作模式保證低功耗應(yīng)用的要求。前面章節(jié)分別對MM32L0130外設(shè)SLCD和RTC做了相關(guān)描述,并列舉對應(yīng)程序
    的頭像 發(fā)表于 11-04 10:12 ?1635次閱讀

    靈動微電子低功耗單片機MM32L0130開發(fā)板申請

    ,支持COM和SEG引腳重映射,占空比、偏壓、幀率和對比度等靈活可調(diào),內(nèi)置電荷泵可實現(xiàn)在電壓下降時依然保持液晶屏清晰,提供LQFP64和LQFP48封裝。 ? 靈動微電子MM32L0130系列MCU
    的頭像 發(fā)表于 11-21 17:15 ?807次閱讀
    靈動微電子低功耗單片機<b class='flag-5'>MM32L0130</b>開發(fā)板申請

    集成段LCD驅(qū)動低功耗系列MM32L0130

    靈動微集成段LCD驅(qū)動低功耗系列MM32L0130搭載了最高主頻為48MHz的Arm Cortex-M0+處理器;提供至多64KB的Flash存儲空間和8KB的SRAM空間。 ? 靈活易用的段
    發(fā)表于 01-31 15:50 ?424次閱讀

    MM32L0130 產(chǎn)品手冊(中文版)

    MM32L0130 產(chǎn)品手冊(中文版)
    發(fā)表于 02-27 18:24 ?0次下載
    <b class='flag-5'>MM32L0130</b> 產(chǎn)品手冊(中文版)

    MM32L0130 產(chǎn)品手冊(英文版)

    MM32L0130 產(chǎn)品手冊(英文版)
    發(fā)表于 02-27 18:25 ?0次下載
    <b class='flag-5'>MM32L0130</b> 產(chǎn)品手冊(英文版)

    MM32L0130 用戶手冊(中文版)

    MM32L0130 用戶手冊(中文版)
    發(fā)表于 02-27 18:26 ?0次下載
    <b class='flag-5'>MM32L0130</b> 用戶手冊(中文版)

    MM32L0130 用戶手冊(英文版)

    MM32L0130 用戶手冊(英文版)
    發(fā)表于 02-27 18:26 ?0次下載
    <b class='flag-5'>MM32L0130</b> 用戶手冊(英文版)

    使用MM32L0130和HYS1254的電子秤方案驗證

    NPI提了需求,需要驗證使用友商SDADC芯片和MM32L0130微控制器集成的一個系統(tǒng)應(yīng)用方案。
    的頭像 發(fā)表于 10-17 17:16 ?772次閱讀
    使用<b class='flag-5'>MM32L0130</b>和HYS1254的電子秤方案驗證