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