转自Doctor_A 坛友的笔记!
之前做接触过一次红外遥控器,现在有空想用简单的话来聊一聊,下面有错误的地方欢迎改正指出:
1:红外的概念不聊,那是一种物理存在。以下聊38K红外发射接收,主要讲可编程的红外编码。
2:红外遥控
红外遥控首先需要用来发“光”的红外发光管,还有一个接收光线的“接收管”(不是那种触发的红外对管),还有一个产生38K的信号源(可以是MCU中断实现还有就是市场上大把的红外编码IC),只需要简单的外围电路即可。
就单片机而言,为了增大红外发光管电流,需要用一个三极管驱动。红外编码IC也只需要几个外围电路,规格书上都有提供,这里不提。
3:红外接收头(有不理解的地方可以在后面找到你想要的答案或者继续“百度”“谷歌")
有必要可以看一下红外接收头内部组成的详细介绍。
接收收头分为电平头还有脉冲头。
电平型的:接收连续的38K信号,可以输出连续的低电平,时间可以无限长。其内部放大及脉冲整形是直接耦合的,所以能够接收及输出连续的信号。
脉冲型的:只能接收间歇的38K信号,如果接收连续的38K信号,则几百ms后会一直保持高电平,除非距离非常近(二三十厘米以内)。其内部放大及脉冲整形是电容耦合的,所以不能能够接收及输出连续的信号。
一般遥控用脉冲型的,只有特殊场合,比如串口调制输出,由于串口可能连续输出数据0,所以要用电平型的。
4:红外遥控中的载波到底是什么?(不要影响到你对其它载波的理解)
第一次接触红外我看到’载波‘这个词就觉得生涩。网上很多资料五花八门都描绘得很厉害、
我们就从一下几点开始描述,相信的等会就懂:
(1)38K怎么来的?
这里只谈单片机给出,38K脉冲信号,占空比(脉冲的高电平比周期的值就是占空比)自己决定,既然是38K,那么脉冲的周期就是1/38000 S,记住这个不是高电平的时间长度,这个是一个脉冲的时间长度也就是一个周期,例如我们利用一个中断产生38K脉冲,占空比是1/2,我们的中断时间就要设置为 1/38000/2 S中断一次,然后通过相隔一次中断电平翻转一次就形成了一个频率为38K占空比1/2的脉冲。
另外i!在这里想说一下我在学习红外的时候遇到的两个错误:
一、当第一次接触红外遥控的时候,在网上下载了很多资料中断时间居然是1/38000S,产生的是19K的脉冲信号,红外肯定接收不了,更不要谈编码了。而且还是大部分被人的程序都是19K.对于刚接触的人可能就晕乎乎地忽悠过去了。
二、就是我们用单片机的时候是用了单片机的查询模式还是中断模式的问题。
我们利用中断时候,在时钟比较快的条件下可以产生比较准确的时间基准,来产生相对正确的脉冲。而利用查询方式,如果用51单片机,12M的晶振,利用查询溢位来产生的38K脉冲,那就犯了一个大错,因为利用查询的方式查询这个动作浪费的时间可不是一个或两个的机器周期,它浪费了大把的单片机时间,误差大得离谱。如果你用中断试过成功过,不妨试一下查询方式失败的感觉。
虽然利用查询方式编程是简单了很多,可是误差大得更多了多。我就是偷懒犯过了错误。
5:什么是红外38K的载波信号(其实我更想说成什么是38K编码信号(一下详解))
(1)记住38K的红外不单单只接受38K信号,它有个频偏(频率偏差左右波动)的范围,但记住范围不大。
(2)说是三极管驱动,其实三极管是作为一个开关,共射的方式。于是有两种通断方式,三极管用的是PNP呢还是NPN。
一般我们采用PNP作为开关管,NPN是利用高电平时候导通,但单片机开机时候,所有IO口的状态为高电平,这个时候就触发了开关管,虽然我们在初始化的时候可以把它关断,但即使此处实际上可以的问题为了以后设计其它东西可能因此犯了不该犯的错误还是选用PNP管好了。
(3)那么我们就用"0"表示红外管导通。。。。"1"表示红外管截至
驱动红外发光的"IO"口的状态便是38K脉冲信号从IO口发出来的触发信号,脉冲中的低电平就是导通,高电平就是截至。我们会看到,如果单单用38K,那么如前面摘录部分讲到的,我们会在接收端会接受到一个低电平的信号。
或者我们可以再这么理解吧:红外接收头只接受38K信号(误差范围内),我们把接收头看出一个转换器。遇到38K就输出低电平,没有遇到38K就被上拉成高电平。
于是所谓的“编码”的概念就这样产生了,我们利用有38K信号 跟 没有38K信号 这两种状态,利用红外接收头就翻译成低电平、高电平的信号。。。。这就是最主要的东西。
什么时候有38K。。什么时候没有38K,一切都由我们编程来实现。我们可以灵活地操控有跟没有,有的时间长度就是"接收方"低电平的时间长度。没有的脉冲的时间长度就是接收方高电平的时间长度。我们只需要在接收方读取高低电平的时间长度与高低电平的各种组合来读取发射方所提供的信息。这种就是所谓的“协议”,协议就是我们说好了,你照办的意思。协议内容明确我发什么的时候代表什么意思,接收方你懂的。
于是就有各种红外编码,NEC/飞利浦等红外编码是比较常见的,而我们根据需要我们可以自己设置自己的编码。如果想做遥控玩一玩的就没必要研究人家的红外编码协议,自己编几个容易编程的就可以了。像想NEC红外协议里面谈到的接受头输出的 高电平几毫秒低电平几毫秒就是代表“1”,高电平几毫秒低电平几毫秒就是代表“0”,高电平几毫秒低电平几毫秒就是代表“引导码或者用户识别码”,这些都是人家NEC里面的标准,我们可以自己定我们自己的标准。我可以说 10ms低电平后10ms高电平就代表允许接受,然后5ms低后5ms高就代表“1”,15ms低后15ms高就代表“2”,25ms低25毫秒高就代表“0”,当然这里只打个比方,因为编码长度要是太大的话对其它程序处理不是很灵活。因为我们解码的时候最好不要被中断。像空调那种一百多位编码的一般很少。少。至于多少合适,自己酌情考虑。编码的形式也自己决定。
于是乎,上面的东西并没有说到“载波”两个字,好了下面就说说载波吧。
我们把“有38K信号”这种状态(“信息”)当做“1”,把“没有38K的信号”这种状态(“信息”)当作“0”,我们可以看成其实我们要发出去的就是 1 跟 0 两种状态的组合。
而 1 跟 0两种状态的另外一种意思就是 38K 的“有”跟“没有”
于是 38K 就带上了 1 跟 0 的这两种信号的信息。
我们就把38K理解成载波信号,载放这信息的信号,其实就是断断续续的38K信号而已,如果我们说成载波那么就是载波。不过我更喜欢把这种信号看成一种编码信号。
好了,总结一下。红外遥控就是这么简单, MCU控制有没有38K信号 红外管就是把利用通断来把单片机的信号发出去 接收头就是把38K翻译成有跟没有 接收头那边的MCU就是把有跟没有的时间长度与组合计算出来(解码)。然后按照事先我们约定的编码执行相对应的动作。
还有一点需要补充一下。
那就是接收头的供电
这个很主要,接收头的供电就好根据解码的MCU的供电保持一致,这样接收头的输出的高低电平就可以被单片机IO识别兼容。同时接收头有很多种,有一些只能3V供电接受管就不要跟5V的MCU一起用,免得浪费电路资源。另外接收头的有些是中间是电源脚有些中间的地脚,如果来玩玩的最好看清楚顺便买的时候预留多一个免得烧了之后又得跑一趟。
至于学习型的红外遥控,有的只需要学习编码,有个则需要学习载波频率。后者比较不好弄。欢迎接贴....
下面是红外发射、接收头(红外基础知识)
目前市售红外一体化接收头有两种:电平型和脉冲型,绝大部分的都是脉冲型的,电平型的很少。
电平型的,接收连续的38K信号,可以输出连续的低电平,时间可以无限长。其内部放大及脉冲整形是直接耦合的,所以能够接收及输出连续的信号。
脉冲型的,只能接收间歇的38K信号,如果接收连续的38K信号,则几百ms后会一直保持高电平,除非距离非常近(二三十厘米以内)。其内部放大及脉冲整形是电容耦合的,所以不能能够接收及输出连续的信号。一般遥控用脉冲型的,只有特殊场合,比如串口调制输出,由于串口可能连续输出数据0,所以要用电平型的。一般遥控器用455K经12分频后输出37917HZ,简称38K,10米接收带宽为38+-2K,3米为35~42K。在没有环境反射的空旷空间,距离10米以上方向性会比较强。在室内,如果墙是白色的,则在15米的空间基本没有方向性。
接收头要有滤光片,将白光滤除。在以下环境条件下会影响接收,甚至很严重:
1、强光直射接收头,导致光敏管饱和。白光中红外成分也很强。
2、有强的红外热源。
3、有频闪的光源,比如日光灯。
4、强的电磁干扰,比如日光灯启动、马达启动等。
38K信号最好用1/3占空比,这个是最常用的,据测试1/10占空比灵敏度更好。实际调制时间要少于50%。最好有间歇。
电平型的接收头只要接收到38K红外线就输出持续低电平,用起来非常爽,以前的老式接收头多半是这种类型,但其有个致命弱点:抗干扰性太差,传输距离短(小于1m)。
而脉冲型一体化红外线接收头必须接受一定频率38K的载波的基带信号才有正常输出,如发送500HZ的38K载波,脉冲型一体化红外线接收头输出500HZ方波,而如果发送连续的38K载波就会出项有瞬间低电平其后为高电平的现象。这种脉冲型一体化红外线接收头克服了传统电平型接收头的不足:传输距离相对更远,稳定性大大增加,抗干扰性更强。因此已经完全取代了老式的电平型接受头,在电子市场如不说明店主给你的绝对是脉冲性的。
手机拍照时可以查看红外发射管是否处于发射状态
红暴问题
有些厂家把能不能制造出无红暴红外灯当做一个技术问题来宣传,好像有红暴就是低技术,无红暴就是高技术。其实,有无红暴只是一个选择问题,并不是技术问题,波长超过700nm的光线叫做红外线,900nm以上的红外线基本无红暴,波长越短,红暴越强,红外线感应度也越高。现在市场上有两种主流红外灯,一种是有轻微红暴的,波长在850nm左右,一种是无红暴的,波长在940nm左右。同一款摄像机,在850nm波长的感应度,比在940nm波长的感应度好到10倍。所以850nm这种有轻微红暴的红外灯拥有更高的效率,应当做为红外夜视监控的首选项。
这说的有道理吗?
红暴是对红外灯工作状态的一个描述。工作灯在工作时,如果有红暴就会在管芯出现红色小点。如果没有红暴的话,工作和不工作人眼看不出来。没有红点
850nm和940nm都有红爆,只不过940要比较弱一点
常见的红外发射管有940nm波长和850nm波长两种,940nm波长的红外发射管主要使用于调制编码及信号传输,而850nm波长的主要用于安防等红外光源上,接收管则有850nm~950nm通用的型号。850的管和940的管区别在于他们的功率大小。850是属于大功率的,它的特点是:发射距离短,灵敏度高,适合用于摄象监控那块。940是属于小功率的,它的特点是:发射距离远,灵敏度低,主要用摇控器上
850发射管的选择
一般的一体机设计距离较近,一般适用较大角度的IR发射管,市场上最通用45、60度角,可选择一般晶片,最好还是选择日本和台湾的,市场上用12Pcs、14Pcs、18Pcs、24Pcs发射管的一体机,常用此类产品一般开发距离在5-20米,若开发20米以上的一体机,必需建议使用日本和台湾晶片,如28Pcs、36Pcs、48Pcs、64Pcs等产品,同时需选用较小角度的效果会更好。
如果你的调制波形是高电平有效,38KHz接收头输出的肯定是低电平;几乎所有的红外线接收头的输出信号都是反相的。
接收头一般都有好多种,时间一久就分不清三脚是怎么排列的?
方法是分别用机械表测其中两个脚的电阻,找到其中两脚阻值最小的一个,这时表棒不要动,答案出来了:红表棒接的是Vcc,黒表棒接的是地 呵呵 不用说另一个脚就是信号脚(IR)了。
本文链接:http://www.cnblogs.com/cposture/p/4321341.html
- 浅谈38K红外发射接受编码
之前做接触过一次红外遥控器,现在有空想用简单的话来聊一聊,下面有错误的地方欢迎改正指出:1:红外的概念不聊,那是一种物理存在.以下聊38K红外发射接收,主要讲可编程的红外编码.2:红外遥控 红外遥控首 ...
- 视频基础知识:浅谈视频会议中H.264编码标准的技术发展
浅谈视频会议中H.264编码标准的技术发展 浅谈视频会议中H.264编码标准的技术发展 数字视频技术广泛应用于通信.计算机.广播电视等领域,带来了会议电视.可视电话及数字电视.媒体存储等一系列应用,促 ...
- 转载-浅谈Ddos攻击攻击与防御
EMail: jianxin#80sec.comSite: http://www.80sec.comDate: 2011-2-10From: http://www.80sec.com/ [ 目录 ]一 ...
- [转载]浅谈JavaScript函数重载
原文地址:浅谈JavaScript函数重载 作者:ChessZhang 上个星期四下午,接到了网易的视频面试(前端实习生第二轮技术面试).面了一个多小时,自我感觉面试得很糟糕的,因为问到的很多问题都 ...
- (转载) 浅谈python编码处理
最近业务中需要用 Python 写一些脚本.尽管脚本的交互只是命令行 + 日志输出,但是为了让界面友好些,我还是决定用中文输出日志信息. 很快,我就遇到了异常: UnicodeEncodeError: ...
- <转载>浅谈C/C++的浮点数在内存中的存储方式
C/C++浮点数在内存中的存储方式 任何数据在内存中都是以二进制的形式存储的,例如一个short型数据1156,其二进制表示形式为00000100 10000100.则在Intel CPU架构的系统中 ...
- 辛星浅谈PHP的混乱的编码风格
我们都知道.各种编程语言都有自己的风格,即使是像C和C++那样一脉相承的语言(C++本意全然兼容C的语法).编程风格上还是有些区别.比方非常典型的就是C++风格的单行凝视和C风格的多行凝视. 而尽管J ...
- python 浅谈小数据池和编码
⼀. ⼩数据池 在说⼩数据池之前. 我们先看⼀个概念. 什么是代码块: 根据提示我们从官⽅⽂档找到了这样的说法: A Python program is constructed from code b ...
- 转载--浅谈spring4泛型依赖注入
转载自某SDN-4O4NotFound Spring 4.0版本中更新了很多新功能,其中比较重要的一个就是对带泛型的Bean进行依赖注入的支持.Spring4的这个改动使得代码可以利用泛型进行进一步的 ...
随机推荐
- mysql 统计某个月每天的数据
select SUM(order_money) as money,substr(t.pay_time,1,10) as time from pay_log t where t.pay_time l ...
- Numpy与Matplotlib
一.Numpy numpy支持大量的维度数组和矩阵运算,对数组运算提供了大量的数学函数库! numpy比Python列表更具优势,其中一个优势便是速度.在对大型数组执行操作时,numpy的速度比Pyt ...
- Codeforces Round #545 (Div. 2) D 贪心 + kmp
https://codeforces.com/contest/1138/problem/D 题意 两个01串s和t,s中字符能相互交换,问最多能得到多少个(可交叉)的t 题解 即将s中的01塞进t中, ...
- redis_字典_哈希hash
字典.哈希表基本数据结构 redis字典使用哈希表作为底层实现,基本结构就是数组+散列 typedef struct dictht { // 哈希表数组 dictEntry **table; // 哈 ...
- python insert所用 插入到自定的位置
a = list(range(50)) b = list(range(50)) c = [] for x in a: c.insert(x, [a[x], b[x]]) print(c)
- fiddler中断request,修改参数问题
fiddler正在学习阶段,遇到了一个问题,就是bpu url后,不会修改参数,今天实验了几次,总算成功了 下面写一下步骤: 1.先打开fiddler 2.打开网站,如百度,在文本框输入1,记住!不要 ...
- weka环境配置
java环境变量设置: 安装jdk到具体目录"ABC"下当前目录下应该有jdk+版本号和jre加版本号. 然后打开环境变量:新建JAVA_HOME内容是:jdk的安装目录.例如:D ...
- CentOS7 openssh7.9p1安装
先安装telnet,以防安装ssh出现问题,无法远程登录设备. 最新版openssh下载地址:http://www.openssh.com/ftp.html 一.安装telnet和xinetd: 1. ...
- 第一课:Python入门(笔记)
一.变量 1.什么是变量 #变量即变化的量,核心是“变”与“量”二字,变即变化,量即衡量状态. 2.为什么要有变量 #程序执行的本质就是一系列状态的变化,变是程序执行的直接体现,所以我们需要有一种机制 ...
- my eclipse 端口号被占用问题 Mac上
首先在终端输入 lsof -i :8080 (8080是端口号) 找到进程之后 在终端杀死进程 kill -9 7934 重新运行