使用MM32L0130片上IRM模块实现红外发码

红外遥控是一种无线、非接触控制技术,具有抗干扰能力强,信息传输可靠,功耗低,成本低,易于实现等显著优点,被诸多电子设备包括消费电子、家用电器、安防器材等广泛采用,如智能手环、机顶盒、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配置
void irm_fsk_config(void){    irm_inittypedef irm_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
void irm_fsk_clock_init(tim_typedef* chan1_tim, tim_typedef* chan2_tim){    u32 ui_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
#define irm_frequence                   38000  
3.13 配置uart1 rx中断
void uart1_nvic_init(u32 baudrate){    uart_inittypedef uart_initstruct;    nvic_inittypedef nvic_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收发测试
void irm_transmit_test(void){    u16 i, getcount;    u8 irm_string[] = {0xff, 0xff, 0x55, 0xaa, 0xf0, 0x0f, 0x80, 0x01};    u8 getbyte;    irm_initialize();    while(1) {        getcount = 0;        for(i = 0; i < sizeof(irm_string); i++) {            output_byte(uart1, irm_string[i]);            if(success == uart1_checkrxdbyte(&getbyte, 10000)) {                if(getbyte == irm_string[i]) {                    getcount++;                }            }            delay_x_cycle(1000);        }        if(getcount == sizeof(irm_string)) {            __nop();        }        else {            __nop();        }    }}  
定义数组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配置
void irm_ask_config(void){    irm_inittypedef irm_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
void irm_fsk_clock_init(tim_typedef* chan1_tim, tim_typedef* chan2_tim){    u32 ui_tim_value;    ui_tim_value = (u32)((rcc_getsysclockfreq()) / irm_frequence);    tim_init(chan1_tim, (ui_tim_value) - 1, 0);}  
定义irm_frequence为38000
#define irm_frequence                   38000   
其余代码同实验1,下载运行。
ask模式下,被调制信号为1时,则对应输出38khz;被调制信号为0时,则对应输出0,截取逻辑分析仪的一段数据分析:
通道4为irm_tx发出的调制信号。
通道5是uart1_rx接收到的数据,符合红外接收头特性。
观察串口调试助手打印数据,和irm_string[]中的数据一致。
实验简单演示了使用mm32l0130片上irm模块实现红外发码,并判断收发数据的一致性。irm模块使用片上的定时器和串口,实现数据的 fsk/ask 调制,满足红外发码的需求。


IT行业不光有996, 还有很多有趣的人、有趣的书
美国正在为科学和科学家“设置”国界 针对华裔科学家进行审查
魅族pro7什么时候上市?携手魅族mx7即将发布,配置碾压小米6成国产新机皇
深度解析中国SMT行业贴片机市场规模、供需平衡及价格分析
亚马逊云科技与英伟达携手开发下一代基础设施
使用MM32L0130片上IRM模块实现红外发码
意法半导体蓝牙SoC:以低功耗和高性价比实现厘米级定位
高通表示今年将推出30多款5G设备主要是智能手机
区块链是如何给予数据可信的力量
日韩动力电池的竞你是如何看待
英码“深元”智慧工厂解决方案,提升管理效率,开启生产新时代!
麒麟970对手是骁龙845,提前布局5G!
第五批EMUI 11公测来袭,请收下这份圣诞礼物
关于Wifi设备的配网问题
双通道输出DC/DC转换器TPS62400/20的性能特点及应用
“智慧重庆·进而有为,华为重庆城市峰会2020”举办成功
我国网络空间日渐清朗,信息化成果惠及亿万群众
基于AT89CX051的A/D转换实现
GPS何时才能开辟新天地
LED显示屏在城市规划中的角色:智慧城市的未来之光|河南恒彩电子