打印

红外抓码器的多任务实现

[复制链接]
2342|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
工控秀才|  楼主 | 2008-4-19 18:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
目前市面有很多红外抓码器销售,这东西说简单就简单,说有些复杂也不过分,关键是看抓码器能够达到的实际效果。想要参考图片,请到我的BLOG浏览,谢谢!

   首先给大家看看常见的2种抓码器:

    较贵的抓码器,标价1600RMB的抓码器: 红外遥控编码分析仪2008

虽然该产品也有些技术含量,但是1600RMB还是感觉有些贵了
 


较便宜的抓码器,估计效果很一般,而且也很不专业的。

                                                                        红外线编码分析仪

     这款直接可以看见PCBA,使用的是Microchip的16F877A,而且你看看所使用的IO就知道,为什么那么几个IO就使用这么大一颗MCU呢,说明抓码还是需要一些资源的。
 


    首先看看抓出的波形到底是怎么回事吧。

      所以低层的开发就是用MCU将一个个红外波形的周期和占空比测试出来,通过串口或USB将信息传到上位机进行显示。现在分析下底层软件需求:

    支持串口或USB协议,进行数据传送

    具有脉冲捕捉功能,准确测试出脉冲的周期和占空比

   如果是串口协议,需要较大的RAM空间

    为什么串口协议需要较大的RAM空间呢,从上面的脉冲周期可以发现,短的可能不足1ms,宽的可能会上百ms。如果测量数据以us或0.5us为单位的话,仅用2位数据去表示是不够的,FFFFH=65535D,最多可以描述65ms或32ms。还不能满足上百ms的电平宽度测量的。所以一般会选择用3位以上的数据宽度来描述周期或高(低)电平的宽度。这样一个脉冲内就有至少6位以上的数据需要发送。

     以19200波特率来算算6位数据需要多长的时间来发送吧。串口协议为,1位起始位,8位数据位,1位停止位,这样一个字节需要10位来发送,所需要的发送时间为T=10*(1/19200)S=520us,那么6个字节至少得3.2ms左右。面对脉冲周期在1ms以下的,就需要很多的RAM来暂存待发送的数据了。所以,低端的抓码器干脆含糊的描述下,不支持空调遥控器的抓码,其实就是说面对较窄的红外脉冲是无能为力的了。象这样的抓码器,用一颗SOP14或SSOP16的FPPA就完全可以搞定了,想想看,一颗PIC16F877A多少钱,SOP14的FPPA又才多少钱呢。

      但是为了达到专业的效果,我选择了PDK80C68来做这个东西,哈哈,这里面有512RAM,利用自创的FPPA单片机的FIFO技术,提高处理能力。

     系统需求:

      FPP0,做脉冲捕捉测试,查询方式,有人可能会说了,怎么不用中断,查询可以处理过来吗。其实如果频繁中断,当中断中再发生中断时,中断不也一样需要排队处理吗,或者先处理优先级高的。所以只要你查询够快,中断不会比查询强的。

     FPP1,做串口接收处理,接收上位机的一些指令,如是正常测试,还是载波测试,或者是外部信号测试等。这里说的外部信号测试是一般的抓码器都没有的,因为一般的MCU能有2个外部中断或者2个脉冲捕捉就很不错了的,哪里来的第三个口可以有这样的功能呀,而FPPA就不一样了,所有的IO都可以用来进行脉冲捕捉的,只要你处理得当。

    FPP2,做串口发送处理,检测FIFO中有没有数据,有则将数据从串口发送出去;

    FPP3,专门用来做FI处理,就是向FIFO中加数据,将检测到的数据信号写入FIFO中。

    这样一协调之后,FPP0跑一个循环时间才20us左右,也就是说当红外脉冲中有高于20us以上的低电平信号,我都可以完全正常捕捉到,而且分辨不到1us的,哈哈,这下够专业了吧,我相信上面使用PIC16F877A做的那位,肯定达不到这样的效果的。想想看,一般38K的载波信号,一个周期是多少us,呵呵,已经约27us了,哪有用一个载波发头码或其他数据的,当然用4个脉冲做头的还是有的是,也就是约108us,这已经很不简单了,差点的接收头都不能完全正常反映了,也是因为接收头害得白白苦想了1个晚上,以为自己的程序在检测很窄的低电平时处理不正常呢。后来从5,6个接收头中选了一个能够反应过来的,可解调的信号还是和载波宽度有一定的差距,一般都是140~200us了。看来红外的精度到底有多少,还有待大家去探讨呀。

       这次用的FIFO远超过256了,呵呵,起初用了384,后来没有怎么用RAM又加了一些。为什么FIFO可以解决发送暂缓呢,主要是因为红外信号之间还有一个长时间的停顿,这个期间是可以发送很多数据的,而且发送的波特率也可以加快的,19200实在是太底了。

       给大家比较下一副图片,看看能否察觉所抓的2个波形有没有一点不一样了,  

         也许是心理作用,我总感觉下面的会更清晰一些,毕竟设计的目的就是为了抓出来的波形更准嘛。

         这样的应用系统,基本不使用什么中断,普通架够的MCU能够实现吗,谁要是能够用PIC16C57做出来,立马下跪,以头戕地,大叫高人呀,请收小的为徒吧。为什么比57,呵呵,因为价格和57差不多的。

        还是这句话,普通的频率,脉宽捕捉等,用SOP14,或SSOP16就好了的。不信,你看看我这程序有多大的ROM和RAM吧:

               

不到500指令的ROM,用4K的还是太浪费了呀。而外围就更简单了,一个红外接收头,2个红外接收管,其实一个就好了,不过,2个信号更强,更方便测试载波信号的。下面这个LM386又是在赛格买的,没有放大作用哟,呵呵。后来还是用三极管了。

    然后一个MCU,一个电平转换IC,232。就可以和价值上千的仪器媲美了。有兴趣的朋友也可以买个抓码器回去解解看。自己能够用什么更好的方式来实现么,哈哈!最后再SHOU一个窄低电平的抓码显示信息:

     

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

38

主题

286

帖子

11

粉丝