当前位置:首页 > 工业控制 > 工业控制
[导读]在生活中,我们常用到红外线控制各类电器,如彩电、空调、电风扇等,为我们带来较多的方便,但有时我们仍感到不方便。如看完电视后,用遥控器只能关掉电视主电源,电视仍处于待机状态,使用者还得走到电视跟前,按下

在生活中,我们常用到红外线控制各类电器,如彩电、空调、电风扇等,为我们带来较多的方便,但有时我们仍感到不方便。如看完电视后,用遥控器只能关掉电视主电源,电视仍处于待机状态,使用者还得走到电视跟前,按下电视电源开关方能放心。若想看电视,还得动身开电视,显得很麻烦,尤其是冬天躺在床上看电视,上上下下,深感不便。本文以利用红外遥控器来遥控风扇的制作方法为例(可任选一只红外线遥控器,能调速,软件稍作改变,可增加定时功能等),来介绍红外线接收控制器的制作方法,如果制作电视交流电源的开、关控制器,可与电视共用一只遥控器,制作也较简单些。

制作思路

     红外遥控发射器是利用红外线作载体传送信息的,发射周期不等的经过调制后串行码,该串行码一般由引导码、用户识别码、操作码组成。经红外接收头解码后得到一串周期不等的矩形波,如示意图1。

     不同型号的遥控发射器的波形宽度不同,即周期T1、T2……不同,在不知手头遥控发射器的波形周期的情况下,首先要制作一个检测红外线周期的工具。根据测得的周期规律来制作红外线接收控制器

制作方法

     检测红外周期的器件制作,见图2。

    当红外接收头没有接收到发射器发送来的红外线,其输出端输出高电平(约+5V)。当接收到红外线,输出端电平变低,送到单片机AT89C2051的外部中断1口即INT1,使其发生中断而进入中断服务:启动定时器1并开始计数,相当于在图1的A点,1个周期后即C点,单片机第二次中断,关定时器1,记下周期T1(实际上只记下TH1的数值,TL1的值可以丢弃),然后清TH1、TL1,再启动定时器1重新计数,第二个周期完后,同样会引起单片机发生中断,再记下周期T2……,如此记下40-50个周期(一般红外编码为4字节,即32BIT,之前还有引导码,又因接收到的红外数据不一定是从引导码开始,要分析一次完整的串行码,应尽可能多记下红外矩形波周期数),接收完后,通过按轻触开关将各记下的各周期的TH1在数码管显示出来以作分析(每按一次轻触开关,显示下一个周期数)。

编程方法

在main()中开中断,启动定时器1,即EA=1; EX1=1; IT1=1; TR1=1;
 在外部中断1的服务程序中编写如下语名:
#define CNT 50//预测50个红外线周期
DATA Byte value_h[CNT];//记录周期的变量(数组)
DATA Byte count=0;//接收到的周期数
void int1(void) interrupt 2
{
 if(TH1==TL1&&TL1==0)  //判断是否是第一次接收到红外数据
   { 
 TR1=1;
 } else{
 TR1=0;  value_h[count]=TH1;     TH1=TL1=0; TR1=1;  count++;
      if(count==CNT)
      {
         EX1=0;  count=0;      
      } 
  }
}
 假设接收到的TH的数值为:
30,50,  04,08,08,08,  04,04,04,04, 04,08,08,08,  04,04,04,04, 08,04,04,08,  04,04,04,04,04,  04,08,08,04,  08,08,08,08,3f,50----
 稍作分析可知,表示高低电平的有效数为:04,08。若将04定作低电平,08定作高电平,舍弃其他数据,得到4字节数据即:01110000,01110000 ,10010000,01101111。转为十六进制后得:70h,70h,90h,6fh,至此得到遥控发射器刚才按下的键值码,用同样的方法可以测得其他键键值码。假设有:
70h,70h,0x90,0x6f,    //0键
70h,70h,  0x00,0xff,  //1键
……
70h,70h, 0xd0,0x2f    //power 键
 根据以上数据分析得,每键码为4字节,前2字节固定不变,为用户识别码,后2字节均不同,是操作码。将遥控器上的各键键值码测出后,根据这些数据可以根据制作需要进行编程了。因键值码为4字节太长,不利于编程,需要将各键键值转为相对应的1字节的数据,如:70h,70h,0x90,0x6f,对应于0 ,70h,70h,  0x00,0xff对应于1……
 转换方法:
 建立一个数组,将上述测得的各键码按顺序放入数组中(去掉用户识别码)
code Byte arr[][2]=
{
  0x90,0x6f,  //0,尽可能按键0、键1……的先后顺序放,以符合习惯
  0x00,0xff,  //1
 ……
  0x10,0xef,  //9
  0xd0,0x2f   //power 13
};
 在接收红外线的外部中断1函数中编写如下的键码转换语句:
DATA Byte arrtmp[4];    
DATA Byte Keytmp;  //转换后的键值寄存变量
DATA Byte Keyval=NOKEY; 
bit KeyOk;// 键值转换完成与否的标志
bit d_Ok;//接收到一个完整的键码标志
void Ex_int(void) interrupt 2
{
 Byte i;
 Byte (*p)[2]; 
  ……
  if(d_Ok)    //若接收到完整的键码
{
     d_Ok=0;  //清除
     if(arrtmp[0]==0x70&&arrtmp[1] 
        ==0x70){  //键码转换
        for(p=arr,i=0;i<14;i++,p++)
 { if(arrtmp[2]==*(*p+0)&&arrtmp[3]
        ==*(*p+1))
 {   Keytmp=i;  KeyOk=1;   //键值
 转换成功标志
            break;
           } else {Keytmp=NOKEY; }  //未
       接收到完整的键值
        }
     }else {  Keytmp=NOKEY; }   
  }       
}
 经过转换后的Keytmp为0、1、2……的整数,然后再编写主函数、调速函数(参源程序),来进行电风扇调速。
 有关电路的一些解释:单片机U1(AT89C2051)P37脚输出高低电平通过R13控制光耦可控硅MOC3041(参数可在《电子制作》网站查找)通断,通过控制其通断时间比来达到电风扇调速。
 

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: 驱动电源

在工业自动化蓬勃发展的当下,工业电机作为核心动力设备,其驱动电源的性能直接关系到整个系统的稳定性和可靠性。其中,反电动势抑制与过流保护是驱动电源设计中至关重要的两个环节,集成化方案的设计成为提升电机驱动性能的关键。

关键字: 工业电机 驱动电源

LED 驱动电源作为 LED 照明系统的 “心脏”,其稳定性直接决定了整个照明设备的使用寿命。然而,在实际应用中,LED 驱动电源易损坏的问题却十分常见,不仅增加了维护成本,还影响了用户体验。要解决这一问题,需从设计、生...

关键字: 驱动电源 照明系统 散热

根据LED驱动电源的公式,电感内电流波动大小和电感值成反比,输出纹波和输出电容值成反比。所以加大电感值和输出电容值可以减小纹波。

关键字: LED 设计 驱动电源

电动汽车(EV)作为新能源汽车的重要代表,正逐渐成为全球汽车产业的重要发展方向。电动汽车的核心技术之一是电机驱动控制系统,而绝缘栅双极型晶体管(IGBT)作为电机驱动系统中的关键元件,其性能直接影响到电动汽车的动力性能和...

关键字: 电动汽车 新能源 驱动电源

在现代城市建设中,街道及停车场照明作为基础设施的重要组成部分,其质量和效率直接关系到城市的公共安全、居民生活质量和能源利用效率。随着科技的进步,高亮度白光发光二极管(LED)因其独特的优势逐渐取代传统光源,成为大功率区域...

关键字: 发光二极管 驱动电源 LED

LED通用照明设计工程师会遇到许多挑战,如功率密度、功率因数校正(PFC)、空间受限和可靠性等。

关键字: LED 驱动电源 功率因数校正

在LED照明技术日益普及的今天,LED驱动电源的电磁干扰(EMI)问题成为了一个不可忽视的挑战。电磁干扰不仅会影响LED灯具的正常工作,还可能对周围电子设备造成不利影响,甚至引发系统故障。因此,采取有效的硬件措施来解决L...

关键字: LED照明技术 电磁干扰 驱动电源

开关电源具有效率高的特性,而且开关电源的变压器体积比串联稳压型电源的要小得多,电源电路比较整洁,整机重量也有所下降,所以,现在的LED驱动电源

关键字: LED 驱动电源 开关电源

LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: LED 隧道灯 驱动电源
关闭