自学内容网 自学内容网

51单片机红外通信——直流电机

目标实现功能

51单片机解码红外遥控器的信号,控制直流电机的启停。

1.红外遥控器

红外遥控器是由键盘电路、红外编码电 路、电源电路和红外发射电路组成。按下遥控键值时,红外遥控器先将按键键值按相应的编码方式形成二进制脉冲编码,再将编码调制在一定频率的载波上,最终在发射端经红外发光二极管发射出去,完成电信号到光信号的转变。
本次设计用到的红外遥控器发送端采用的载频频率是38KHz,该频率是由发射端使用的455KHz的晶振经过12分频而来。
红外遥控器每次先发送一个起始码,起始码由9ms左右的高电平、和4.5ms左右的低电平组成。紧跟在起始码后是32位的数据:用户码、用户反码、数据码、数据反码,其中用户码是可以防止其它类型的红外遥控器的干扰,用户反码用于接收端对用户码正确性的校验。数据码是我们常用的功能码,数据反码和用户反码的功能类似。
特别注意:32位数据的每一位都是由高低电平组成的脉冲码。例如二进制数0,用0.565ms左右的高电平和0.565ms左右的低电平表示;例如二进制数1,用0.565ms左右的高电平和1.695ms左右的低电平表示。

2.红外接收设备

红外接收设备是由红外接收电路、红外解码、电源和应用电路组成。当收到红外遥控信号时,接收设备先将光信好转换成电信号,经过放大、限幅、检波、整形,形成遥控指令脉冲,输出至遥控微处理器。
本次设计采用一体化的红外接收头作为接收设备。红外接收头对外引出3个引脚:电源正( VDD)、电源负(GND)和数据输出(VOUT),其中数据输出连接单片机的I/O口,需要编写代码对遥控指令脉冲识别、解码。需要注意的是,数据输出引脚输出的是发射码的反码。例如:输出的起始码由9ms左右的低电平、和4.5ms左右的高电平组成,正好与发射的起始码相反。为加强红外遥控的实时性,采用外部中断的方式,执行对红外信号的解码。代码如下:
/*红外接收初始化*/
void ir_init()
{
 EA=1;//总中断允许
 EX0=1;//外部中断0允许
 IT0=1;//下降沿触发
 IR=1;//红外接收数据输出引脚初始化
}

/*读取红外接收数据*/
void ir_read() interrupt 0
{
uchar i,j;
uint error=1000;//定义变量error,用于超时退出
delay(942);//先延时8494us左右,再判断
if(IR==0)
{
while(IR==0)//低电平则等待
{
 error=error-1;
 if(error==0) return;//超时退出
}
delay(442);//先延时3994us左右,再判断
if(IR==0) return;//错误的信号
error=1000;
while(IR==1)//高电平则等待
{
 error=error-1;
 if(error==0) return;//超时退出
}
for(i=0;i<4;i++)//共计4组数据(用户码、用户反码、数据码、数据反码)
{
   for(j=0;j<8;j++)//每组数据有8位
 {
 error=1000;
 while(IR==0)//低电平则等待
 {
 error=error-1;
 if(error==0) return;//超时退出
 }
 delay(76);//先延时700us左右,再判断
 error=2000;
                 if(IR==0)  Irdata[i]=Irdata[i]>>1;//位0
 else//如果是位1
 {
 Irdata[i]=Irdata[i]>>1;
 Irdata[i]=Irdata[i]|0X80;
 while(IR==1)//等待高电平结束
 {
   error=error-1;
   if(error==0) return;//超时退出 
 }
 }  
 } 
}
}
}

 3.直流电机

直流电机的结构由定子和转子两大部分组成。在直流电机两端加上直流电就能工作。特别注意单片机引脚不能直接驱动电机。
在本次设计中,将直流电机的一个引脚接5V电压,另一个引脚由单片机引脚连接驱动芯片ULN2003间接控制。

4.演示结果

51单片机红外通信—直流电机

 注:详细代码已经上传至资源,大家可以自行下载。祝大家天天开心!!!


原文地址:https://blog.csdn.net/weixin_45755708/article/details/142742152

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!