自制电脑红外遥控器

时间:2011-08-31

  1  功能与特点

  (1)将普通电器用红外遥控器学习后,能用该遥控器控制电脑,如模拟鼠标动作、键盘击键等。

  (2)用电脑模拟红外遥控器直接控制家电;这样在用电脑的同时用家电时(如投影机),直接用电脑就能控制;或者原遥控器损坏时,可应急代用。

  (3)采用USB和电脑通信,方便所有有USB接口的电脑;后面将提到一种采用蓝牙通信的实现方法供参考。

  (4)能兼容目前市面上绝大多数红外遥控器,当然理论上可以实现所有红外遥控器的兼容,仅需修改程序的实现算法即可,后文将介绍简单的实现方法。

  (5)带有高温度检测功能,也可以作为一个单片机(MCU)入门的多功能实验板使用,具备外部端口扩展功能,如果把此电路装至功放机、投影机等里面,配合端口外扩、温度检测等功能,等于直接给电器增加了一套功能可伸缩、可定制的红外遥控系统,比如可以实现温度监控、过温保护、音量调节、智能控制等等,如加入蓝牙功能,更可实现真无线遥控。

  (6)本电路也可作为普通的USB转串口的转换电路使用,方便没有串口的电脑,如笔记本。

  2  实现思路

  采用上下位机配合设计,即下位机用单片机采集红外遥控信号与发射等其它外部扩展处理;上位机(电脑端)软件将下位机处理发送过来的数据,加以进一步处理,转换为能控制电脑的信号,如模拟鼠标动作;并在模拟遥控器发射控制电器时,保存已学习的遥控器数据。

  3  电路功能与元器件说明

  (1)下位机电路图,如图1所示。

  (2)控制采用目前国内新生的单片机STC,详细型号为STC12C5410AD,该公司出的单片机均基于8051内核,指令完前和普通的51单片机兼容,是在51内核上作了优化并增加功能而来;该芯片的特点是速度快,称比普通51快8到12倍,宽电压低功耗,内部集成RC振荡、8路10位的ADC、4路PWM/捕获/比较单元、全双工串口、片内集成EEPROM等;此外,芯片还有一个好处就是不需要专用的编程器程序,直接用串口就能实现程序的,且片内程序Flash可擦写达10万次以上。

 PCB图

图2 PCB图

  (3)因为要实现USB端口通信,而单片机大多都是采用串口通信的,所以此处采用了USB转串口的专用芯片,见图中的U3-PL2303,该芯片只需一12MHz的晶振即可实现USB转换,性能稳定且价低,缺点是要安装相应的驱动程序;上文提到,如需改为蓝牙通信,直接用蓝牙模块将该USB芯片取代即可,目前市面上已出现了不少串口透明的蓝牙模块,更进一步资料读者可自行它寻。

  (4)图中的U2-MAX232是为了实现USB转普通串口功能而采用的,因为PL2303转换出来的是TTL电平,所以必需经转换后才能和其它标准串口设备通信,如无需USB转串口功能,此芯片可省去。

  (5)U4是标准的一体化红外接收头;图中的D20为红外发射管,Q5为发射信号驱动管,R33可调节发射功率,取值可以在10~20欧姆之间。

  (6)图中的数十个LED灯用于实验板调试用,P1为TTL电平串口的输出,P2为外部功能扩展口。

  (7)U5为高温度IC(DS18B20),该芯片内部集成了所有温度转换功能,只要按特定时序读出温度值即可,只需一个通信端口即可完成所有通信,大大简化了电路。

  4  下位机程序实现

  4.1 红外数据采集部分

  目前红外遥控器大多采用两种发射数据编码方式,一种是以同步头开始,中间跟着若干位数据、地址码,而数据以矩形波的宽度来区分”0”或”1”,再紧跟一位结束码,一帧数据发送完毕后,后面只连续发送同步头不再重复发送数据,通常数据位的”1”表示形式为500us低电平加500us高电平,用500us低电平加1.6ms高电平表示”0”;另一种没有同步头,直接发送的就是数据、地址码,这种也以时间来区分数据,但附加波形的起升或下降沿来区别;而市面上这两种编码方式又以种居多。

  为此要实现数据的采集通常也是采用两种方法,一种采用固定解码方式,即遇到规定的数据宽度(时间)或升降沿就写入数据”0”或”1”,这种方法比较简单,容易实现,但解码有相对性,通用性差,只能实现大部分解码;另一种解码方式就是,采用分开读取数据码高低电平的宽度(时间),通过记录、区分所有时间数据来实现解码,这种解码方式比较复杂,且数据量比较大,但理论值可以实现所有红外遥控器的解码,兼容性强,这种方式可以利用MCU的捕获功能来简化解码程序。至于取用何种方式解码,可按需取舍。

  考虑到本人的用途暂时只需兼容大部分遥控器即可,所以采用了种固定解码方式,并采用MCU的中断功能实现,程序如下。

  *注:在此提醒一下读者,延时程序编写要特别注意,同样的延时程序在STC和普通51上运行的时间差别很大,尤其是编写DS18B20的温度读取程序时要注意,因为DS18B20芯片对时序、时间的要求极其严格。

  //以下部分变量未定义,在系统总初始化程序内定义

  4.2 EEPROM的读写

  现在很多用途均需用到数据存储,所以EEPROM在大多应用场合中都成了必须附件;为方便应用,现在的MCU一般均内部集成有EEPROM存储器,STC也不例外,像本文所用的STC12C5410AD芯片,内部就集成了2KEEPROM,大大方便了使用;本芯片内的存储器分为4个扇区,每个扇区512字节,但每个扇区地址并不连续,使用时需注意一下扇区的起始地址问题;另外在数据写入时,如果原位置已存有数据,需先擦除再写入新的数据;程序如下:

  4.3 模拟发射部分

  目前的红外遥控器发射信号,绝大部分都是调制在38~40KHz副载波上(副载波通常为方波,周期26μs),然后经红外发射管发送出去;不管那种数据模式(如上面讨论的有同步头和无同步头形式),其发射原理都一样,即将需发射的数据调制到副载波上,调制原理很简单,将所需发送的数据直接和副载波相与即可。

  调制可采用外部调制或内部调制,内部调制就是用程序直接模拟,性产生发射波;外部调制则直接用硬件完成,增加一个与门电路即可,与门的一个输入脚接38K~40K周期方波(即副载波),另一输入脚接MCU数据输出口,则与门输出脚即为发射波,再加接发射放大,然后经红外发射管发射出去即完成整个调制。本文发射部分采用程序模拟来产生,副载波用定时器模拟产生,程序片断如下:

  voidredlink_send(uchartemp)//发射字程序,temp为要发射数据的一字节,以字节为单位发射

  //因红外解码方式采用固定方式,所以发射也采用固定方式

  //固定发射方式和解码一样,只能兼容大部分遥控器

  //如需发射,只需将发射方式稍为更改一下即可

  //注意下面程序中的while语句,防止死循环

  //redlink_out_count变量在定时器中断服务程序中计数,充当产生38K副载波功用

  //因本子程序有些变量需在定时中断程序或其它地方作处理

  //所以要使用本子程序时,需合理处理相关变量才能正常使用,仅作处理方法参考

  5  结语

  限于编幅,本文仅给出各功能模块的实现字程序,如需使用,只要将各功能子块合理调用即可使用,其中的个别变量均为无符号单字节或双字节数,需自行按需声明后才能使用;本文仅对遥控器功能的处理实现作了相当讨论,至于其中程序详细的通信模式、各模块的连接等,读者如了解了个中的原理,完前可以自行设计,限于编幅不再作详细介绍。

  与本下位机配合使用的上位机软件(电脑端程序),在此处不作讨论;软件本人已编写完成,并且已发布至互联网上,有需要的读者可自行到网上搜索使用。

  如果只需要一款遥控器,则可以将系统设计成脱离上位机单独使用,如在本电路上增加按键功能即可,将学习到的数据直接存到芯片内部的EEPROM中;这样做的缺点就是内部EEPROM太小(也可选择外扩存储器),同时能够学习的遥控器数量较少;另外只需稍微修改程序的算法,完全可以实现遥控器的模拟,实现的原理大同小异,读者可自行研究。

  有些遥控器的载频是40KHz,只须稍微加大发射功率,仍可按38KHz载频发射。

上一篇:贴片晶闸管速查参数与部分电路结构(上)
下一篇:贴片晶闸管速查参数与部分电路结构(下)

免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

相关技术资料