0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

单片机中红外遥控的基本原理

嵌入式开发爱好者 来源:嵌入式开发爱好者 2023-01-03 15:24 次阅读

红外遥控简介

红外遥控是一种无线、非接触控制技术,具有抗干扰能力强,信息传输可靠,功耗低,成本低,易实现等显著优点,被诸多电子设备特别是家用电器广泛采用,并越来越多的应用到计算机系统中。

由于红外线遥控不具有像无线电遥控那样穿过障碍物去控制被控对象的能力,所以,在设计红外线遥控器时,不必要像无线电遥控器那样,每套(发射器和接收器)要有不同的遥控频率或编码(否则,就会隔墙控制或干扰邻居的家用电器),所以同类产品的红外线遥控器,可以有相同的遥控频率或编码,而不会出现遥控信号“串门”的情况。这对于大批量生产以及在家用电器上普及红外线遥控提供了极大的方面。由于红外线为不可见光,因此对环境影响很小,再由红外光波动波长远小于无线电波的波长,所以红外线遥控不会影响其他家用电器,也不会影响临近的无线电设备。

红外遥控的编码目前广泛使用的是:NEC Protocol 的 PWM(脉冲宽度调制)和 Philips RC-5 Protocol的 PPM(脉冲位置调制)。我使用的的遥控器使用的是NEC 协议,其特征如下:

8位地址和8位指令长度;

地址和命令2次传输(确保可靠性);

PWM脉冲位置调制,以发射红外载波的占空比代表“ 0”和“ 1”;

载波频率为38Khz;

位时间为1.125ms或2.25ms;

NEC 码的位定义:一个脉冲对应560us的连续载波,一个逻辑 1 传输需要2.25ms(560us 脉冲+1680us 低电平),一个逻辑0的传输需要 1.125ms(560us 脉冲+560us 低电平)。而遥控接收头在收到脉冲的时候为低电平,在没有脉冲的时候为高电平,这样,我们在接收头端收到的信号为:逻辑1应该是560us低+1680us高,逻辑0应该是560us低+560us高。

NEC 遥控指令的数据格式为:同步码头、地址码、地址反码、控制码、控制反码。同步码由一个9ms的低电平和一个4.5ms的高电平组成,地址码、地址反码、控制码、控制反码均是8位数据格式。按照低位在前,高位在后的顺序发送。采用反码是为了增加传输的可靠性(可用于校验)。

1. ENC 协议的时序图

c7037728-88e1-11ed-bfe3-dac502259ad0.jpg

ENC特点如下:
1),协议规定低位首先发送。一串信息首先发送9ms的AGC(自动增益控制)的高脉冲,接着发送4.5ms的起始低电平,接下来是发送四个字节的地址码和命令码,这四个字节分别为:地址码;地址码反码;命令码;命令码反码。
2),如果你一直按那个按键,一串信息也只能发送一次,一直按着,发送的则是以110ms为周期的重复码。
3),接收到的信号是跟发送信号正好反向的。

2.重复码的格式

c716ef92-88e1-11ed-bfe3-dac502259ad0.jpg

重复码的格式是由9ms的AGC高电平和4.5ms的低电平及一个560us的高电平组成。

3.逻辑“1”的表示

c7290d30-88e1-11ed-bfe3-dac502259ad0.jpg

逻辑1的是由560us的高电平和1.69ms的低电平组成的脉冲表示。

4.逻辑“0”的表示

c73ede26-88e1-11ed-bfe3-dac502259ad0.jpg

逻辑0的是有560us的高电平和565us的低电平组成的脉冲表示。

5.ENC的解码过程

一般ENC的解码过程为:

1),产生下降沿,进入外部中断15的中断函数,延时一下之后检测IO口是否还是低电平,是就等待9ms的低电平过去。

2),等待完9ms低电平过去,再去等待4.5ms的高电平过去。

3),接着开始接收传送的4组数据

①先等待560us的低电平过去
②检测高电平的持续时间,如果超过1.12ms那么是高电平(高电平的的持续时间为1.69ms,低电平的持续时间为565us。

4),检测接收到的数据和数据的反码进行比较,是否等到的数据是一样的。

c7501290-88e1-11ed-bfe3-dac502259ad0.jpg

6,下面直接写驱动程序

#include
#include
#include
#include
#include

#include


#defineIRDA_GPIOEXYNOS4_GPX3(2)

intflag=0;//表示数据帧的开始
intnum=0;//表示数据帧里的第几位数据
staticlonglongprev=0;//64bit,记录上次的时间
unsignedinttimes[40];//记录每位数据的时间

irqreturn_t
infrared_irq_handler(intirqno,void*dev_id)
{
longlongnow=ktime_to_us(ktime_get());
unsignedintoffset;
inti,j,tmp;

if(!flag){//数据开始
flag=1;
prev=now;

returnIRQ_HANDLED;
}

offset=now-prev;
prev=now;

if((offset>13000)&&(offset< 14000)){   // 判断是否收到引导码
        num = 0;
 
        return IRQ_HANDLED;
    }
 
    if(num < 32)
        times[num++] = offset;
 
    if(num >=32){
for(i=0;i< 4; i++){ // 一共4个字节
            tmp = 0;
 
            for(j = 0; j < 8; j++){
                if(times[i * 8 + j] >2000)//如果数据位的信号周期大于20ms,则是二进制数据1
tmp|=1<< j;
            }
            printk("%02x ", tmp);
        }
        printk("
");
        flag = 0;
    }
 
    return IRQ_HANDLED;
}
 
static void __exit
infrared_drv_exit(void)
{
    free_irq(gpio_to_irq(IRDA_GPIO), NULL);
}
 
static int __init
infrared_drv_init(void)
{
    int ret = -1;
 
    ret = request_irq(gpio_to_irq(IRDA_GPIO), infrared_irq_handler, IRQF_TRIGGER_FALLING, "infrared", NULL);
    if(ret < 0){
        printk("request irq failed !
");
        return ret;
    }
 
    return 0;
}
 
module_init(infrared_drv_init);
module_exit(infrared_drv_exit);
 
MODULE_LICENSE("GPL");

还有对应的Makefile:

#指定内核源码路径
KERNEL_DIR=/home/george/1702/exynos/linux-3.5

#指定当前路径
CUR_DIR=$(shellpwd)


#MYAPP=dht11_app
MODULE=IRDA_for_irq

all:
make-C$(KERNEL_DIR)M=$(CUR_DIR)modules
#arm-none-linux-gnueabi-gcc-o$(MYAPP)$(MYAPP).c
clean:
make-C$(KERNEL_DIR)M=$(CUR_DIR)clean
$(RM)$(MYAPP)
install:
cp-raf*.ko$(MYAPP)/home/george/1702/exynos/filesystem/1702

#指定编译当前目录下那个源文件
obj-m=$(MODULE).o

编译生成.ko文件之后,装载,然后进行实物测试,验证效果图如下:

c767e08c-88e1-11ed-bfe3-dac502259ad0.jpg

审核编辑:汤梓红。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    6001

    文章

    43978

    浏览量

    620863
  • 遥控器
    +关注

    关注

    18

    文章

    815

    浏览量

    64246
  • 红外遥控
    +关注

    关注

    22

    文章

    346

    浏览量

    45006
  • ENC
    ENC
    +关注

    关注

    0

    文章

    5

    浏览量

    1339

原文标题:单片机中红外遥控的基本原理

文章出处:【微信号:嵌入式开发爱好者,微信公众号:嵌入式开发爱好者】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    MCS-51单片机基本原理

    MCS-51单片机基本原理[学习要求] 掌握MCS-51单片机的基本概念和基本原理。[重点与难点]重点:单片机
    发表于 03-19 16:39

    MCS-51系列单片机基本原理

    学了半年的单片机,可回过头来当有人问我单片机基本原理的时候,我大脑里却是一片空白,不知道自己都学了什么。哪位大侠能说说,顺便谈谈自己的学习心得………………
    发表于 02-25 14:40

    基于单片机红外遥控设计

    最近在做基于单片机红外遥控系统,发射模块如图:按键用来产生不同的编码信号,数码管用来显示按键数值。问一下这个电路有没有问题,软件编程怎么写啊?谢谢各位了
    发表于 05-14 10:43

    基于单片机红外遥控设计

    最近在做基于单片机红外遥控系统,发射模块如图:按键用来产生不同的编码信号,数码管用来显示按键数值。问一下这个电路有没有问题,软件编程怎么写啊?谢谢各位了
    发表于 05-14 10:46

    单片机+步进电机+红外遥控

    单片机+步进电机+红外遥控
    发表于 08-17 11:48

    51单片机红外遥控小车

    单片机最小系统板、3轮小车底盘,L298N两个电机控制电路板、电池盒,还有一些铜柱、扎带等,所需要的配件很容易在一家店购齐的。郑州最好的癫痫病医院  51单片机红外
    发表于 09-04 11:23

    51单片机红外通讯 精选资料分享

    本文是武汉市海联天下物联网有限公司技术团队内部学习笔记,将详细讲解红外遥控基本原理以及51单片机如何利用外部中断和定时器0对红外信号进行解
    发表于 07-14 06:13

    51单片机如何利用外部中断和定时器0对红外信号进行解码?

    红外遥控基本原理是什么?51单片机如何利用外部中断和定时器0对红外信号进行解码?
    发表于 09-28 07:39

    PIC16F15323单片机基本原理是什么

    PIC16F15323单片机 (ADC+温度传感器)--汇编+C语言1 基本原理1.1 AD原理1.2 温度储传感器原理1.3 FVR原理2 实现代码1 基本原理1.1 AD原理见前面的文章1.2
    发表于 11-24 07:00

    PIC16F15323单片机基本原理

    PIC16F15323单片机 (ADC)1 基本原理1.1 寄存器介绍1.2 寄存器汇总1.3 ADC采集实现框图2 实现代码1 基本原理1.1 寄存器介绍1.2 寄存器汇总1.3 ADC采集实现
    发表于 11-24 07:05

    单片机基本原理练习题汇总

    单片机】第二章单片机基本原理练习题一、题目一1.1 作业题目1.2 作业解答二、题目二2.1 作业题目2.2 作业解答三、题目三3.1 作业题目3.2 作业解答四、题目四4.1 作业题目4.2
    发表于 11-26 07:05

    红外光的基本原理

    文章目录红外光的基本原理红外光的基本原理红外线是波长介于微波和可见光之间的电磁波,波长在760纳米到1毫米之间,是波形比红光长的非可见光。自
    发表于 01-24 06:52

    MCS-51 单片机基本原理

    [学习要求] 掌握MCS-51单片机的基本概念和基本原理。[重点与难点]重点:单片机基本原理与内部结构。难点:MCS-51单片机存储器结构
    发表于 03-18 22:05 67次下载

    单片机红外遥控系统

    单片机红外遥控系统。
    发表于 04-28 18:02 14次下载

    基于单片机红外风扇遥控

    基于单片机红外风扇遥控
    发表于 12-27 16:54 52次下载