注:请勿转载,如有需求请与刊登的杂志社联系.
一、PC遥控器的总述
近年来,个人电脑逐步进入千家万户已是一个不争的事实,作为一个电子爱好者,我们完全可以动手来改造电脑或者为电脑制作实用的外设,使自己的电脑功能更强大、使用更方便、也更有自己的特色。如果你有兴趣的话,可以跟着我来做一个电脑用的多媒体遥控器,在制作的过程中,你也可以学到不少关于单片机的知识。
1.为什么要做PC(个人电脑)遥控器
个人电脑在多媒体方面的性能极为出众。在影音播放方面可以使用不同的软件来播放众多的媒体格式,比如CD、VCD、MP3、MPEG4、DVD、RM等等;如果配上不同的声卡,还能够支持SRS、杜比定向逻辑、杜比AC-3等各种环绕音效。这些都是普通的电视机、CD机、录像机、影碟机所无法比拟的。但是电脑的普通操作都是通过键盘和鼠标,不仅操作复杂,且有距离限制,各种操作都需趴在电脑前完成。这样在使用多媒体功能(比如观看影碟时的播放、暂停、快进、快退等)时,即使熟悉电脑操作的技术人员,也颇觉不便,对于初学者和外行来说,更是无从下手。反观普通的电视机、CD机、录像机、影碟机,它们的操作都通过一个遥控器来完成,任何人无需站在跟前,只要按下相应的按键,就能达到相应的功能。由此可见,如果我们能够为电脑配上一个红外遥控器,那么我们就可以坐在沙发上,轻轻松松的控制电脑了;并且即使你那从未摸过电脑的父亲、母亲也能用遥控器来操纵一下这个价值几千大元的高科技产物。操作简便、能够遥控,这样的电脑才算是真正进入了家庭。
2.PC遥控器的用途
我们要做的这个PC遥控器不单单能够完成遥控影音播放方面的功能,还具备如下的功能:
遥控VCD播放软件
遥控DVD播放软件
遥控ACDSEE看图软件
遥控MP3音乐播放软件
遥控文章阅读软件
遥控玩游戏
遥控上网
遥控收发电子邮件
遥控鼠标
遥控键盘
遥控多媒体演示
遥控语音报时
等等
实际上针对每个软件,你都可以针对他建立专门的遥控设置,这样你就可以用遥控器来控制这些软件了。所以今后无论出现什么样的新软件,你都可以通过建立遥控设置来遥控它的各项功能。这种可以随意扩展的性能,使得我们要制作的这种PC遥控器具有更广阔的应用范围。
3.PC遥控器的结构总体框图
<图1>
其中遥控发射部分采用普通的红外遥控器,无需自己制作。电视机的遥控器、影碟机的遥控器等都可以用在此处。
二、PIC12C508单片机的原理和遥控器接收电路结构
该PC遥控器的接收部分的核心使用了一块MICROCHIP公司的单片机PIC12C508。它的内部有512字节的程序区和25字节的RAM数据区。12C508的引脚图如下:
<图2>
这种单片机有如下特点:
1.高性能RISC结构CPU
精简指令集,仅33条单字节指令,易学易用
除地址分支跳转指令为双周期指令外,其余所有指令皆为单周期指令
执行速度: DC~1μs
二级硬件堆栈
直接、间接、相对三种寻址方式
2.功能特性
8位定时器/计数器TMR0,带8位预分频器
大驱动电流,I/O脚可直接驱动LED
- 每个I/O引脚最大供电流25mA
- 每个I/O引脚最大灌电流25mA
内置上电复位电路(POR)
复位定时器,保障复位正常
内部复位端加上拉电路,无需外接上拉电路
内置看门狗,防程序死锁
程序加密位,可防止程序代码的非法拷贝
低功耗睡眠功能
I/O引脚可唤醒睡眠
内置4MHz RC型振荡源,可省外接振荡
可选外接振荡
- RC: 低成本阻容振荡
- XT: 标准晶体/陶瓷振荡
- LP: 低速晶体,低功耗振荡
3.CMOS工艺特性
低功耗
<2mA @5V,4MHz
-15μA @3V,32KHz
-<1μA 低功耗睡眠(Sleep)模式下
全静态设计
宽工作电压范围:2.5V~5.5V
PIC12C508是一种超小型的OTP单片机(8引脚),体积虽小却集成了众多的功能,可以省去很多别的单片机应用中必须外接的元器件,并且它的价格十分便宜。所以采用该种单片机来制作PC遥控器,可使电路简化、体积缩小、成本降低。
下面我们来分析一下电路原理,接收部分的电路原理图如下:
<图3>
接收头部分主要的功能是把红外信号转换成电信号,它内部有红外接收管用来接收红外信号并转换为电信号,然后由内部的前置放大器进行放大,再经过限幅、滤波、整形,最后输出TTL电平信号送至单片机12C508的一个I/O口。红外接收头通常采用市售的成品模块,这种模块有三个引脚,分别为Vout(输出)、Vcc(+5v)和GND(地),TTL信号从Vout输出。
单片机部分:
12C508的第1脚是VDD,接正电源,第8脚是地。
第2、3两脚复用,既可作为I/O口,也可外接晶振,本电路中作为外接晶振用,如电路原理图所示,一个4M晶振和两个22p电容组成外部振荡电路,如果采用片内振荡方式,则这些元件可省略。
第4脚也是复用,这里当作I/O口用,此脚用来接收红外接收头输出的TTL数据信号。
第5、7脚是双向I/O口,用作与计算机的串口进行232通讯。单片机从第5脚发送数据到计算机串口的RXD端,第7脚从计算机串口的TXD端接收数据。在这里,可能有的朋友会有疑问,单片机输出的就是TTL电平,TTL的信号电平为0-5V,RS232信号电平为-12V-+12V,它们怎么可以不通过转换电路直接连接呢。其实尽管RS232指定信号电平为-12V-+12V,但据我所知几乎所有的计算机串口都能很好的工作在0-5V电平。所以为简化电路可以省掉232转换的专用芯片。由于单片机输出的电平低于RS232电平,所以没有必提升单片机的输出电平来适应RS232,可以直接把单片机的输出直接连接到RS232的输入端,而不会对计算机串口造成任何损坏。相反,RS232信号电平很高可能会损坏单片机的I/O口,所以需要在单片机的输入端加稳压电路(使用一个10K电阻和一个5.1V稳压管),把电平限制在5V以内(注:这个5.1V的稳压管应该也是可以省略的,因为PIC单片机的I/O口内部有电平保护电路)。但是如果你觉得有必要的话,也可在本电路中加人一个MAX232来进行电平转换,不过成本要高一些。
单片机的第6脚空闲不用。
电源部分:
为了简化电路、缩小体积,单片机和接收头的电源没有使用外接电源或者电池,而是从计算机的RS232接口获得。计算机串口的DTR和RTS两根数据线在正常情况下始终出于高电平,电压大约在+12V左右,短路电流比较小,在7-10mA之间。所以我们可以把它稳压到+5V供我们使用,电路图中的1N4148是起保护作用,之所以使用DTR和RTS两个引脚来供电,是为了增大负载电流。图中的1K电阻是用来限流的。
电路制作中的注意事项:
1.红外接收头最好选用带铁壳的,这种屏蔽效果较好,不易受干扰。焊接时一定要把铁壳接地。
2.对12C508进行编程时,应根据电路不同选择合适的振荡方式。
3.由于12C508是OTP的,只能一次性编程,一但写入程序,就不能改变了,所以编程时要比较小心,不要出现操作错误。
4.如原理图所示,RS232信号线上的信号电平被限制在0V和+5V之间。这样就限制了串口电缆的最大长度,一般来说2米以内不使用屏蔽线
仍能工作的很稳定,如果有条件,也可采用屏蔽线。
5.红外遥控器的选择。可以选择彩电、录像机、CD机、VCD机、音响、DVD机甚至空调的遥控器。由于红外遥控器的编码格式众多,所以单片机程序不可能支持所有的编码格式,所以可能有的遥控器不能在此使用。不过据我测试,市面上的大部分遥控器都是可以用的,推荐采用SAA3010芯片的遥控器。
进一步的改进:
1.为了使用方便,随时观察工作状态,可以增加电源指示和信号指示。电源指示可以在电源和地之间加一个限流电阻和一个发光二极管,注意限流电阻阻值不能太小,否则耗电量大,也不能太大,否则发光管亮度不够,可在4.7-6.8K之间。信号指示可加在第4脚和电源之间,利用12C508
I/O口的倒灌电流的工作方式,以减小耗电量,其限流电阻同样在4.7-6.8K之间。此外,原电路中的1K限流电阻的阻值也应适当减小。
2.对笔记本电脑的适应性。笔记本电脑为了省电,其串口的输出能力较差,所以如果要在笔记本电脑上使用,需对电路的限流电阻的阻值进行调整。
三、单片机解码程序原理的分析
要说解码的方法,首先要先说说红外编码的格式了。
1.红外数据传送的调制格式
遥控器的红外数据传送编码格式基本上是有两种,一种是RC5格式,一种是RECS80格式。RC5格式是脉冲相位调制格式,RECS80是脉冲宽度调制格式。
对于脉宽调制方式,也就是说IR信号的逻辑0和1是根据信号电平的宽度来区分。每个逻辑0或1是一个脉冲信号,通常逻辑1的高电平宽度比逻辑0的高电平宽度长,而低电平都是一致的。图示如下:
<图4>
对于脉宽调制方式最常见的芯片有:TC9012、LC7461等,使用这个芯片的遥控器有:CHANGHONG、东宝541DRK(A)、三洋6955、康佳T920C、三洋:2169、2189、2176等等
对于脉冲相位调制方式,逻辑0和1的脉冲宽度都是一致的,而电平正好相反。图示如下:
<图5>
对于相位调制方式最常见的芯片就是SAA3010,使用这个芯片的遥控器有:乐华542A-2PD、康力5306、康力5438、皇牌9321、创维、百合花47-6、索尼:1882、B21、G21、S29、K29等等
2.红外编码的数据格式
红外遥控器发送的编码一般是由:引导码、系统码、用户码、功能码等分开,它们各占其中的几位。其中系统码和用户码一般都是固定的,而功能码是对应每个按键都是不同的。都对于我们现在来说,并不需要知道具体的编码,只要能正确解码出数据即可,这样就能区分出遥控器上的每个按键。这里要注意的就是引导码,它是表示红外数据的开始。
3.12C508红外解码程序的分析
知道了上面的红外编码格式,这里的工作就很清楚了,需要分别编写子程序来处理这两种红外编码。其中对于不同的红外编码芯片,信号的调制格式可能都是不一样的。我们的制作为了能兼容众多的遥控器,需要在对红外信号接收时先进行了信号的格式识别。识别出不同的信号后就可以转不同的子程序来分别处理了。
程序的结构框图如下:
<图6>
初试化串口部分,为了和UIR的标准配套(这样可以直接使用很多好用的红外遥控驱动程序),需要向串口发送UIR的识别标记:4F
4B。
对于识别信号的格式,当等待到引导码后,利用508的计数器功能来计算红外数据的第一个数据码的宽度来区分。然后接收红外数据,这里是接收48位,一般的遥控器发送的编码都没有这么长,这里只是为不同的遥控器识别的兼容性考虑。接收完成数据就可以直接把数据通过232发送给计算机程序了。
实物图:
|