欢迎光临
我们一直在努力

红外线遥控模块,红外遥控技术

红外遥控原理

红外接收头的主要参数如下
工作电压:4.8~5.3V 工作 电流:1.7~2.7mA
接收频 率:38kHz
峰值波长: 980nm
静态输出:高电平
输出低电平:≤0.4V
输出高电平:接近工作电压

红外发送协议
引导码+客户码1+客户码2+操作码+操作反码
用户真正须要的只有操作码
接受端与发射端电平相反的原因:
当发射端输出发出高电平,npn管导通,红外光发射,经过接受端解码之后成为低电平
当发射端输出低电平,npn管不导通,红外线不发光,接收管未接收到红外线,由于接受端为上拉电阻,于是此时为高电平

总结:
输出端=1 则接受端io口为0
输出端为0 接收端io口为1

红外线接收

红外接收设备是由红外接收电路、红外解码、电源和应用电路组成。红外遥控接收器的主要作用是将遥控发射器发来的红外光信好转换成电信号,再放大、限幅、检波、整形,形成遥控指令脉冲,输出至遥控微处理器。近几年不论是业余制作还是正式产品,大多都采用成品红外接收头。成品红外接收头的封装大致有两种:一种采用铁皮屏蔽;一种是塑料封装。均有三只引脚,即电源正(VDD)、电源负(GND)和数据输出(VOUT)。在使用时注意成品红外接收头的载波频率,另外在遥控编码芯片输出的波形与接收头端收到的波形。

数据格式

数据格式包括了引导码、用户码、数据码和数据码反码,编码总占32位。数据反码是数据码反相后的编码,编码时可用于对数据的纠错。注意:第二段的用户码也可以在遥控应用电路中被设置成第一段用户码的反码。

引导码

一般的红外发射芯片比如日本NEC的uPD6121G 定义的引导码)
正点原子:同步码:由一个 9ms 的低电平和一个 4.5ms 的高电平组成

客户码 操作码

客户码和操作码都为8位的二进制编码

日本NEC的uPD6121G 定义的’0’,’1’如下:

0: 0.56ms的高电平+0.565ms的低电平
1: 0.56ms的高电平+1.680ms的低电平

同样这样的数码’0’, ’1’的占空比也可以自已定义

Remote_Init

初始化了定时器,红外接受口为pb9,输入捕获模式,打开更新中断(10ms一次)与捕获中断

//红外遥控初始化//设置IO以及定时器4的输入捕获void Remote_Init(void) { GPIO_InitTypeDef GPIO_InitStructure;NVIC_InitTypeDef NVIC_InitStructure;拼搏的蓝天_TimeBaseInitTypeDef 拼搏的蓝天_TimeBaseStructure;拼搏的蓝天_ICInitTypeDef 拼搏的蓝天_ICInitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE); //使能PORTB时钟 RCC_APB1PeriphClockCmd(RCC_APB1Periph_拼搏的蓝天4香港vps,ENABLE);//拼搏的蓝天4 时钟使能 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //PB9 输入 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; //上拉输入 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure); GPIO_SetBits(GPIOB,GPIO_Pin_9);//初始化GPIOB.9 拼搏的蓝天_TimeBaseStructure.拼搏的蓝天_Period = 10000; //设定计数器自动重装值 最大10ms溢出 拼搏的蓝天_TimeBaseStructure.拼搏的蓝天_Prescaler =(72-1); //预分频器,1M的计数频率,1us加1. 拼搏的蓝天_TimeBaseStructure.拼搏的蓝天_ClockDivision = 拼搏的蓝天_CKD_DIV1; //设置时钟分割:TDTS = Tck_tim拼搏的蓝天_TimeBaseStructure.拼搏的蓝天_CounterMode = 拼搏的蓝天_CounterMode_Up; //拼搏的蓝天向上计数模式拼搏的蓝天_TimeBaseInit(拼搏的蓝天4, &拼搏的蓝天_TimeBaseStructure); //根据指定的参数初始化拼搏的蓝天x 拼搏的蓝天_ICInitStructure.拼搏的蓝天_Channel = 拼搏的蓝天_Channel_4; // 选择输入端 IC4映射到TI4上 拼搏的蓝天_ICInitStructure.拼搏的蓝天_ICPolarity = 拼搏的蓝天_ICPolarity_Rising;//上升沿捕获 拼搏的蓝天_ICInitStructure.拼搏的蓝天_ICSelection = 拼搏的蓝天_ICSelection_DirectTI; 拼搏的蓝天_ICInitStructure.拼搏的蓝天_ICPrescaler = 拼搏的蓝天_ICPSC_DIV1; //配置输入分频,不分频 拼搏的蓝天_ICInitStructure.拼搏的蓝天_ICFilter = 0x03;//IC4F=0011 配置输入滤波器 8个定时器时钟周期滤波 拼搏的蓝天_ICInit(拼搏的蓝天4, &拼搏的蓝天_ICInitStructure);//初始化定时器输入捕获通道 拼搏的蓝天_Cmd(拼搏的蓝天4,ENABLE ); //使能定时器4 NVIC_InitStructure.NVIC_IRQChannel = 拼搏的蓝天4_IRQn; //拼搏的蓝天3中断NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; //先占优先级0级NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //从优先级3级NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道被使能NVIC_Init(&NVIC_InitStructure); //根据NVIC_InitStruct中指定的参数初始化外设NVIC寄存器拼搏的蓝天_ITConfig( 拼搏的蓝天4,拼搏的蓝天_IT_Update|拼搏的蓝天_IT_CC4,ENABLE);//允许更新中断 ,允许CC4IE捕获中断 } 定时器4中断服务程序 //遥控器接收状态//[7]:收到了引导码标志//[6]:得到了一个按键的所有信息//[5]:保留//[4]:标记上升沿是否已经被捕获 //[3:0]:溢出计时器u8 RmtSta=0; u16 Dval;//下降沿时计数器的值u32 RmtRec=0;//红外接收到的数据 u8 RmtCnt=0;//按键按下的次数 //定时器4中断服务程序 void 拼搏的蓝天4_IRQHandler(void){ if(拼搏的蓝天_GetITStatus(拼搏的蓝天4,拼搏的蓝天_IT_Update)!=RESET)//检测是否为更新中断{if(RmtSta&0x80)//上次有数据被接收到了{RmtSta&=~0X10;//取消上升沿已经被捕获标记if((RmtSta&0X0F)==0X00)RmtSta|=1<<6;//标记已经完成一次按键的键值信息采集if((RmtSta&0X0F)<14)RmtSta++;else{RmtSta&=~(1<<7);//清空引导标识RmtSta&=0XF0;//清空计数器} } }if(拼搏的蓝天_GetITStatus(拼搏的蓝天4,拼搏的蓝天_IT_CC4)!=RESET){ if(RDATA)//上升沿捕获{ 拼搏的蓝天_OC4PolarityConfig(拼搏的蓝天4,拼搏的蓝天_ICPolarity_Falling);//CC4P=1设置为下降沿捕获拼搏的蓝天_SetCounter(拼搏的蓝天4,0);//清空定时器值RmtSta|=0X10;//标记上升沿已经被捕获}else //下降沿捕获{Dval=拼搏的蓝天_GetCapture4(拼搏的蓝天4);//读取CCR4也可以清CC4IF标志位 拼搏的蓝天_OC4PolarityConfig(拼搏的蓝天4,拼搏的蓝天_ICPolarity_Rising);//CC4P=0设置为上升沿捕获if(RmtSta&0X10)//完成一次高电平捕获 { if(RmtSta&0X80)//接收到了引导码{if(Dval>300&&Dval<800)//560为标准值,560us{RmtRec<<=1;//左移一位.RmtRec|=0;//接收到0 }else if(Dval>1400&&Dval<1800)//1680为标准值,1680us{RmtRec<<=1;//左移一位.RmtRec|=1;//接收到1}else if(Dval>2200&&Dval<2600)//得到按键键值增加的信息 2500为标准值2.5ms{RmtCnt++; //按键次数增加1次RmtSta&=0XF0;//清空计时器} }else if(Dval>4200&&Dval<4700)//4500为标准值4.5ms{RmtSta|=1<<7;//标记成功接收到了引导码RmtCnt=0;//清除按键次数计数器} }RmtSta&=~(1<<4);} }拼搏的蓝天_ClearITPendingBit(拼搏的蓝天4,拼搏的蓝天_IT_Update|拼搏的蓝天_IT_CC4); }

赞(0)
【声明】:本博客不参与任何交易,也非中介,仅记录个人感兴趣的主机测评结果和优惠活动,内容均不作直接、间接、法定、约定的保证。访问本博客请务必遵守有关互联网的相关法律、规定与规则。一旦您访问本博客,即表示您已经知晓并接受了此声明通告。