紅外遙控是一種無線、非接觸控制技術,具有抗干擾能力強,信息傳輸可靠,功耗低,成本低,易于實現等顯著優點,被諸多電子設備包括消費電子、家用電器、安防器材等廣泛采用,如智能手環、機頂盒、3D眼鏡、智能掃地機、空調、電扇、通道閘、紅外柵欄等,近年來也越來越多的應用到計算機和手機系統中。
靈動股份推出的MM32L0130系列MCU具有片上IRM紅外調制器,該模塊使用片上的定時器和串口,實現數據的 FSK/ASK 調制,以滿足紅外發碼的需求。
1
IRM介紹
1.1 IRM功能框圖
1.2 IRM主要特征
支持 APB 接口
兩個調制信號源,分別為通道 1 和通道 2
通道 1 和通道 2 調制信號源均可選,來源包含
1)恒 0
2)恒 1
3)TIM3 的 OC1 通道
4)TIM4 的 OC1 通道
5)TIM16 的 OC1 通道
6)TIM17 的 OC1 通道
基帶信號源可選,來源包含
1)IRM 數據寄存器
2)UART1_TX
3)UART2_TX
4)LPUART_TX
可實現數據的 ASK、FSK 調制,調制方式可選
輸出信號極性可選
2
功能概述
2.1 波形產生單元
調制信號選擇功能:兩個通道, channel_1 和 channel_2,通過寄存器配置可選擇通道輸入為恒 0、恒1、 TIM3 的 OC1 通道、 TIM4 的 OC1 通道、 TIM16 的 OC1 通道、 TIM17 的 OC1 通道。
基帶信號選擇功能:被發送的紅外信號對應源數據,可以通過寄存器配置選擇源為 IRM_DR、 UART1_TX、UART2_TX、 LPUART1_TX。
調試方式:可選 FSK 或 ASK。
極性可選,輸出可為正常或反相波形。
2.2 調制功能說明
2.21 FSK 調制
用不同的頻率來表示不同的符號。本模塊為二進制頻移鍵控(2FSK)。信號可以看成是頻載為 f1 和 f2的兩個振幅鍵控信號的合成。該功能模式下,調制信號源為頻率為 f1、 f2 的兩個方波:被調制信號為 0,則對應輸出 f1;被調制信號為 1 則對應輸出 f2。
波形如下:
FSK 調制波形
2.22 ASK 調制
用不同的幅度來表示不同的符號。本模塊為 OOK(On-Off Keying)調制,是 ASK 調制的一個特例,把一個幅度取為 0,另一個幅度為非 0,就是 OOK。又名 2ASK(二進制振幅鍵控)。該功能模式下,通道 1 信號源應為恒 0,通道 2 信號源應該頻率為 f2 的方波:被調制信號為 0,則對應輸出 0;被調制信號為 1 則對應輸出 f2。
波形如下:
ASK 調制波形
3
實驗
本次實驗使用MM32L0130片上IRM驅動紅外發射管實現紅外發碼。硬件使用靈動股份設計的EVB-L0136開發板,紅外模塊原理圖如下:
原理圖中PA9連接D1(紅外發射管)、PA10連接D2(紅外接收頭),紅外發射電路使用T1(N-MOS管)控制紅外發射管的導通或截至,在導通的時候,紅外發射管會發射出紅外光,反之,不會發射出紅外光。
要使兩者通信成功,收/發紅外波長與載波頻率需一致,在這里波長就是940nm,載波頻率就是38KHz。當紅外接收頭接收到紅外載波信號時,其OUT引腳輸出低電平,反之,OUT引腳輸出高電平。
3.1 實驗1:實現數據FSK調制
程序中配置PA9作為IRM紅外調制器的發送引腳,配置調制信號通道1選擇TIM3_OC1,調制信號通道2選擇TIM4_OC1,基帶信號源選擇UART1_TX信號,調制方式選擇FSK調制,以實現紅外發碼。主要代碼如下:
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 調制信號配置
配置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收發測試
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
定義數組irm_string[]存放需要IRM調制的數據,IRM對數據進行FSK調制后,通過IRM_TX引腳發送,控制MOS管驅動紅外發射管以發射紅外光,紅外接收頭對紅外光進行解碼后,由UART1_RX引腳接收,將收到的數據與數組irm_string[]中的數據進行比對,看收/發數據是否一致,并進行統計。
FSK模式下,調制信號源為頻率為38K、3.8K的兩個方波:被調制信號為0時,則對應輸出38KHZ;被調制信號為1時,則對應輸出3.8KHZ,邏輯分析儀獲取一段數據如下:
通道4為IRM_TX發出的調制信號。
通道5是UART1_RX接收到的數據,符合紅外接收頭特性。
觀察串口調試助手打印數據,和irm_string[]中的數據一致。
? ?
3.2 實驗2:實現數據ASK調制
程序中配置PA9作為IRM紅外調制器的發送引腳,配置調制信號通道1為恒1,調制信號通道2選擇TIM4_OC1,基帶信號源選擇UART1_TX信號,調制方式選擇ASK調制,以實現紅外發碼。
該實驗與前面實驗1相比,只是選擇IRM的另一種調制模式,代碼只需在實驗1的基礎上改動即可,主要代碼如下:
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 調制信號配置
配置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模式下,被調制信號為1時,則對應輸出38KHZ;被調制信號為0時,則對應輸出0,截取邏輯分析儀的一段數據分析:
通道4為IRM_TX發出的調制信號。
通道5是UART1_RX接收到的數據,符合紅外接收頭特性。
觀察串口調試助手打印數據,和irm_string[]中的數據一致。
實驗簡單演示了使用MM32L0130片上IRM模塊實現紅外發碼,并判斷收發數據的一致性。IRM模塊使用片上的定時器和串口,實現數據的 FSK/ASK 調制,滿足紅外發碼的需求。
審核編輯:劉清
-
寄存器
+關注
關注
31文章
5396瀏覽量
122459 -
紅外遙控
+關注
關注
22文章
348瀏覽量
46050 -
調制器
+關注
關注
3文章
884瀏覽量
45793 -
IRM
+關注
關注
1文章
3瀏覽量
1766 -
MM32
+關注
關注
1文章
107瀏覽量
946
原文標題:靈動微課堂 (第231講) | 使用MM32L0130 IRM實現紅外發碼
文章出處:【微信號:MindMotion-MMCU,微信公眾號:靈動MM32MCU】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
MM32L0130系列MCU片上RTC模塊具有哪些功能呢
基于MM32L0130的低功耗電子時鐘設計方案相關資料分享
請問有人使用IAR進行過MM32L0130的開發嗎?
靈動微MM32L0130系列32位微控制器的詳細介紹
使用MM32L0130 SLCD驅動LCD顯示
MM32L0130 RTC日歷和鬧鐘
基于MM32L0130的低功耗電子時鐘設計
靈動微電子低功耗單片機MM32L0130開發板申請

評論