• 【毕业设计-教程】红外控制原理详解 - 单片机嵌入式 物联网 stm32 c51



    1 简介

    Hi,大家好,这里是丹成学长,今天向大家详细介绍分享,单片机的红外控制原理

    红外控制原理详解

    大家可用于 课程设计 或 毕业设计


    单片机-嵌入式毕设选题大全及项目分享:

    https://blog.csdn.net/m0_71572576/article/details/125409052


    2 红外光特性

    在这里插入图片描述
    红外线光按照波长范围分为

    • 近红外
    • 中红外
    • 远红外
    • 极紅外

    红外线遥控是利用近红外光传送遙控指令的,波长为0.76um ~ 1.5um

    用近紅外作為遙控光源,是因為目前紅外发射器件与紅外接收器件的发光与受光峰值波長一般為0.8um~0.94um,这样可以获得较高的传输效率及较高的可靠性

    3 红外发射器

    在这里插入图片描述

    4 红外接收器

    在这里插入图片描述

    5 红外遥控原理

    一般的红外遥控系统是由红外遥控信号发射器、红外遥控信号接收器和微控制器及其外围电路等三部分构成的

    1. 遥控信号发射器用来产生遥控编码脉冲,驱动红外发射管输出红外遥控信号
    2. 遥控接收头完成对遥控信号的放大、检波、整形、解调出遥控编码脉冲
    3. 遥控编码脉冲是一组组串行二进制码,对于一般的红外遥控系统,此串行码输入到微控制器,由其内部 CPU 完成对遥控指令解码,并执行相应的遥控功能

    5.1 红外编码

    目前应用中的各种红外遥控系统的原理都大同小异,区别只是在于各系统的信号编码格式不同。当按下遥控器上任一按键时,遥控器即产生一串脉冲编码。遥控编码脉冲对 40kHz 载波进行脉冲幅度调制(PAM)后便形成遥控信号,经驱动电路由红外发射管发射出去。红外遥控接收头接收到调制后的遥控信号,经前置放大、限幅放大、带通滤波、峰值检波和波形整形,从而解调出与输入遥控信号反相的遥控脉冲

    一次按键动作的遥控编码信息为 32 位串行二进制码。对于二进制信号"0",一个脉冲占 1.2ms;对于二进制信号"1",一个脉冲占 2.4ms,而每一脉冲内低电平均为 0.6ms。从起始标志到 32 位编码脉冲发完大约需 80ms,此后遥控信号维持高电平。若按键未释放,则从起始标志起每隔 108ms 发出 3 个脉冲的重复标志

    以NEC消费型遥控器为例

    在这里插入图片描述

    5.2 红外解码

    红外遥控接收头解调出的编码是串行二进制码,包含着遥控器按键信息。但它还不便于CPU 读取识别,因此需要先对这些串行二进制码进行解码。接码电路主要包括遥控编码脉冲串并转换电路与 PLD 解码电路

    解码步骤:

    1. 引导码: 引导码也叫起始码,由宽度为 9ms 的高电平和宽度为 4.5ms的低电平组成(不同的遥控系统在高低电平的宽度上有一定区别),用来标志遥控编码脉冲信号的开始
    2. 系统码: 系统码也叫识别码,它用来指示遥控系统的种类,以区别其它遥控系统,防止各遥控系统的误动作
    3. 系统反码
    4. 功能码: 功能码也叫指令码,它代表了相应的控制功能,接收机中的微控制器可根据功能码的数值去完成各种功能操作
    5. 功能反码等信号组成: 系统反码与功能反码分别是系统码与功能码的反码,反码的加入是为了能在接收端校对传输过程中是否产生差错

    6 常见的红外数据传输协议

    • ITT 协议
    • NEC 协议
    • Nokia NRC 协议
    • Sharp 协议
    • Philips RC - 5 协议
    • Philips RC - 6协议
    • Philips RECS - 80协议
    • Sony SIRC 协议

    在东亚地区比较常用的红外线传输协议是NEC协议(即6122协议)

    在这里插入图片描述

    7 基于stm32的红外遥控解码

    //Ò£¿ØÆ÷½ÓÊÕ״̬
    //[7]:ÊÕµ½ÁËÒýµ¼Âë±êÖ¾
    //[6]:µÃµ½ÁËÒ»¸ö°´¼üµÄËùÓÐÐÅÏ¢
    //[5]:±£Áô    
    //[4]:±ê¼ÇÉÏÉýÑØÊÇ·ñÒѾ­±»²¶»ñ                                   
    //[3:0]:Òç³ö¼ÆʱÆ÷
    u8     RmtSta=0;            
    u16 Dval;        //ϽµÑØʱ¼ÆÊýÆ÷µÄÖµ
    u32 RmtRec=0;    //ºìÍâ½ÓÊÕµ½µÄÊý¾Ý                   
    u8  RmtCnt=0;    //°´¼ü°´ÏµĴÎÊý      
    //¶¨Ê±Æ÷2ÖжϷþÎñ³ÌÐò     
    void TIM4_IRQHandler(void)
    {                  
        if(TIM_GetITStatus(TIM4,TIM_IT_Update)!=RESET)
        {
            if(RmtSta&0x80)//ÉÏ´ÎÓÐÊý¾Ý±»½ÓÊÕµ½ÁË
            {    
                RmtSta&=~0X10;                        //È¡ÏûÉÏÉýÑØÒѾ­±»²¶»ñ±ê¼Ç
                if((RmtSta&0X0F)==0X00)RmtSta|=1<<6;//±ê¼ÇÒѾ­Íê³ÉÒ»´Î°´¼üµÄ¼üÖµÐÅÏ¢²É¼¯
                if((RmtSta&0X0F)<14)RmtSta++;
                else
                {
                    RmtSta&=~(1<<7);//Çå¿ÕÒýµ¼±êʶ
                    RmtSta&=0XF0;    //Çå¿Õ¼ÆÊýÆ÷    
                }                                    
            }                                
        }
         if(TIM_GetITStatus(TIM4,TIM_IT_CC4)!=RESET)
        {      
            if(RDATA)//ÉÏÉýÑز¶»ñ
            {
    
                TIM_OC4PolarityConfig(TIM4,TIM_ICPolarity_Falling);        //CC1P=1 ÉèÖÃΪϽµÑز¶»ñ                
                TIM_SetCounter(TIM4,0);           //Çå¿Õ¶¨Ê±Æ÷Öµ
                RmtSta|=0X10;                    //±ê¼ÇÉÏÉýÑØÒѾ­±»²¶»ñ
            }else //ϽµÑز¶»ñ
            {            
                   Dval=TIM_GetCapture4(TIM4);//¶ÁÈ¡CCR1Ò²¿ÉÒÔÇåCC1IF±ê־λ
                 TIM_OC4PolarityConfig(TIM4,TIM_ICPolarity_Rising); //CC4P=0    ÉèÖÃΪÉÏÉýÑز¶»ñ
                 
                if(RmtSta&0X10)                    //Íê³ÉÒ»´Î¸ßµçƽ²¶»ñ 
                {
                     if(RmtSta&0X80)//½ÓÊÕµ½ÁËÒýµ¼Âë
                    {
                        
                        if(Dval>300&&Dval<800)            //560Ϊ±ê×¼Öµ,560us
                        {
                            RmtRec<<=1;    //×óÒÆһλ.
                            RmtRec|=0;    //½ÓÊÕµ½0       
                        }else if(Dval>1400&&Dval<1800)    //1680Ϊ±ê×¼Öµ,1680us
                        {
                            RmtRec<<=1;    //×óÒÆһλ.
                            RmtRec|=1;    //½ÓÊÕµ½1
                        }else if(Dval>2200&&Dval<2600)    //µÃµ½°´¼ü¼üÖµÔö¼ÓµÄÐÅÏ¢ 2500Ϊ±ê×¼Öµ2.5ms
                        {
                            RmtCnt++;         //°´¼ü´ÎÊýÔö¼Ó1´Î
                            RmtSta&=0XF0;    //Çå¿Õ¼ÆʱÆ÷        
                        }
                     }else if(Dval>4200&&Dval<4700)        //4500Ϊ±ê×¼Öµ4.5ms
                    {
                        RmtSta|=1<<7;    //±ê¼Ç³É¹¦½ÓÊÕµ½ÁËÒýµ¼Âë
                        RmtCnt=0;        //Çå³ý°´¼ü´ÎÊý¼ÆÊýÆ÷
                    }                         
                }
                RmtSta&=~(1<<4);
            }                                                             
        }
     TIM_ClearFlag(TIM4,TIM_IT_Update|TIM_IT_CC4);        
    }
    
    //´¦ÀíºìÍâ¼üÅÌ
    //·µ»ØÖµ:
    //     0,ûÓÐÈκΰ´¼ü°´ÏÂ
    //ÆäËû,°´Ïµİ´¼ü¼üÖµ.
    u8 Remote_Scan(void)
    {        
        u8 sta=0;       
      u8 t1,t2;  
        if(RmtSta&(1<<6))//µÃµ½Ò»¸ö°´¼üµÄËùÓÐÐÅÏ¢ÁË
        { 
            t1=RmtRec>>24;            //µÃµ½µØÖ·Âë
            t2=(RmtRec>>16)&0xff;    //µÃµ½µØÖ··´Âë 
             //if((t1==(u8)~t2)&&t1==REMOTE_ID)//¼ìÑéÒ£¿Øʶ±ðÂë(ID)¼°µØÖ· 
                if(1)
            { 
                t1=RmtRec>>8;
                t2=RmtRec;     
                if(t1==(u8)~t2)
                            sta=t1;//¼üÖµÕýÈ·     
                }   
                if((sta==0)||((RmtSta&0X80)==0))//°´¼üÊý¾Ý´íÎó/Ò£¿ØÒѾ­Ã»Óа´ÏÂÁË
                {
                    RmtSta&=~(1<<6);//Çå³ý½ÓÊÕµ½ÓÐЧ°´¼ü±êʶ
                    RmtCnt=0;        //Çå³ý°´¼ü´ÎÊý¼ÆÊýÆ÷
                }
            }  
        return sta;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98

    控制自己家的空调
    在这里插入图片描述

    在这里插入图片描述

    通过打印遥控器的某按键的16进制值

    确认
    E4 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B4 B4 B4 B4 34 34 34 B0 B1 B1 B1 B1 B1 B1 B1 B1 B1 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B4 B4 B4 B4 34 34 34 B0 B1 B1 B1 B1 B1 B1 B1 B1 B1 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B4 B4 B4 B4 34 34 34 B0 B1 B1 B1 B1 B1 B1 B1 B1 B1 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B4 B4 B4 B4 34 34 34 B0 B1 B1 B1 B1 B1 B1 B1 B1 B1 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 FF 
    
    0C B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B4 B4 B4 B4 34 34 34 B0 B1 B1 B1 B1 B1 B1 B1 B1 B1 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B4 B4 B4 B4 34 34 34 B0 B1 B1 B1 B1 B1 B1 B1 B1 B1 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B4 B4 B4 B4 34 34 34 B0 B1 B1 B1 B1 B1 B1 B1 B1 B1 B1 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B4 B4 B4 B4 34 34 34 B0 B1 B1 B1 B1 B1 B1 B1 B1 B1 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 FF 
    
    D8 34 34 34 B0 B1 B1 B1 B1 B1 B1 B1 B1 B1 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B4 B4 B4 B4 34 34 34 B0 B1 B1 B1 B1 B1 B1 B1 B1 B1 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B4 B4 B4 B4 34 34 34 B0 B1 B1 B1 B1 B1 B1 B1 B1 B1 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B4 B4 B4 B4 34 34 34 B0 B1 B1 B1 B1 B1 B1 B1 B1 B1 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B5 B4 B4 B4 B4 34 34 34 B0 B1 B1 B1 B1 FF
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    单片机-嵌入式毕设选题大全及项目分享:

    https://blog.csdn.net/m0_71572576/article/details/125409052


    8 最后

  • 相关阅读:
    java 内部类
    【pytorch】模型常用函数(conv2d、linear、loss、maxpooling等)
    3. 双向约瑟夫问题
    代码的坏味道之将 JSONObject 作为控制器层接口入参
    redis集群-主从复制
    C#,机器学习的KNN(K Nearest Neighbour)算法与源代码
    如何不编写 YAML 管理 Kubernetes 应用?
    基于matlab的遥测信道的基本特性仿真分析
    【计算机网络】数据链路层|封装成帧|透明传输|差错检测|PPP协议|CSMA/CD协议
    Linux篇-善用威胁情报
  • 原文地址:https://blog.csdn.net/m0_71572576/article/details/125434088