打印

做过红外接收的进来帮忙看看

[复制链接]
2893|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
冷若寒|  楼主 | 2011-7-7 20:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
用捕捉中断方式做红外信号接收,发现红外信号不是很干净(中间有杂波),红外检

测不太灵敏。经常要按几下才能检测到正确信号。不知道大家有没有用捕捉中断做过

红外信号检测。怎么才能通过软件的方式剔除杂波啊?
沙发
冷若寒|  楼主 | 2011-7-7 20:01 | 只看该作者
void TIM1_TRG_COM_TIM17_IRQHandler(void)//21.6ms
{
    //u16 Temp;

    //DEBUG_Signal();//jimmy20110630  for test
      
    // Check for the source of TIMx int - Capture or Update Event -
    if ( TIM_GetFlagStatus(TIM17, TIM_FLAG_CC1) )
    {
        TIM_ClearITPendingBit(TIM17, TIM_FLAG_CC1);//jimmy20110628
        
        Delay5us();
        if(!GPIO_ReadInputDataBit(INFRARED_REC_PORT, INFRARED_REC_BIT))
        {
        Delay5us();
        if(!GPIO_ReadInputDataBit(INFRARED_REC_PORT, INFRARED_REC_BIT))
        {   
        Delay5us();
        if(!GPIO_ReadInputDataBit(INFRARED_REC_PORT, INFRARED_REC_BIT))
        {  
            Infrared_Signal = TIM_GetCapture1(TIM17);
     
        Temp = Infrared_Signal - Infrared_Signal_Old;
        //Infrared_Signal = Infrared_Signal_Old;
        //if(Temp > 3000 && Temp < 3750)//0 信号  1.125ms(3375) 1pcs   1ms----1.25ms
        if(Temp > 2750 && Temp < 4000)//0 信号  1.125ms(3375) 1pcs   1ms----1.25ms
        {
            
            Temp = 0;
            Infrared_Signal_Old=Infrared_Signal;//jimmy20110704
        }
        //else if(Temp > 6000 && Temp < 7500)//1 信号  2.25ms(6750) 2pcs  2ms----2.5ms
        else if(Temp > 5750 && Temp < 7750)//1 信号  2.25ms(6750) 2pcs  2ms----2.5ms  
        {
            Temp = 1;
             Infrared_Signal_Old=Infrared_Signal;//jimmy20110704
        }
        else if(Temp > 36000 && Temp < 45000)//同步码 13.5ms(40500) 12pcs   12ms----15ms
        {
            BitCnt = 0;
            Infrared_Code = 0;
            Infrared_Signal_Old=Infrared_Signal;//jimmy20110704
            return;
        }
        else
        {
            return;
        }
        
        BitCnt++;
        if(BitCnt < 32)
        {
            Infrared_Code = Infrared_Code | (u16)Temp;
            Infrared_Code = Infrared_Code << 1;
        }
        else if(BitCnt == 32)
        {
            Infrared_Code = Infrared_Code | (u16)Temp;
            BitCnt = 0;
            Csr1 = (u8)(Infrared_Code >>8);
                     Csr0 = (u8)(Infrared_Code);
                    Csr0 = ~Csr0;
                    if(Csr1 == Csr0)
                    {
                            KeyCode = Csr0;
                KeyCode = KeyCode;
                    }       

        }
        }
        }
        }
    }  
    if(TIM_GetFlagStatus(TIM17, TIM_FLAG_Update) )
    {
        TIM_ClearITPendingBit(TIM17, TIM_IT_Update);//jimmy20110628
    }
}

使用特权

评论回复
板凳
冷若寒|  楼主 | 2011-7-7 20:02 | 只看该作者
上面是实现的代码

使用特权

评论回复
地板
冷若寒|  楼主 | 2011-7-7 20:02 | 只看该作者
使用的STM32F100 的芯片

使用特权

评论回复
5
mcuatmel| | 2011-7-8 07:52 | 只看该作者
如果可以的话用红外接收头应该没问题。

使用特权

评论回复
6
冷若寒|  楼主 | 2011-7-8 07:59 | 只看该作者
如何剔除杂波呢?

使用特权

评论回复
7
jgphu| | 2011-7-8 09:33 | 只看该作者
怎么会有杂波呢,换个接收头 或 遥控器 试一下。用示波器测量接收信号。从来没有遇过到这个情况。

使用特权

评论回复
8
zhangjia1227| | 2011-7-8 10:22 | 只看该作者
接收头的电源和地之间接一个10u 25V的电容试试

使用特权

评论回复
9
bnyuli| | 2011-7-8 10:39 | 只看该作者
指导,结果还有几种谁知道谁理解呢

使用特权

评论回复
10
冷若寒|  楼主 | 2011-7-8 10:53 | 只看该作者
杂波主要在红外信号的高电平中 有被拉低的现象,就是出现一个高电平中夹杂着低电平,低电平是不应该存在的。我用捕捉中断容易产生误捕捉。

使用特权

评论回复
11
radiofcx| | 2011-7-8 15:20 | 只看该作者
硬件捕捉电平还不如直接定时器配合IO来检测,还能剔除杂波,红外算干净了,如果是超再声的无线电波形,那杂波更多,软件就是要和硬件一样能适应恶劣的环境

使用特权

评论回复
12
idterminator| | 2011-7-8 16:04 | 只看该作者
发射时应该是很干净的吧,
如果是这样的话,增加脉宽判断以提高可靠度并减少响应时间,信号识别时匹配次数减少以提高响应速度

使用特权

评论回复
13
q331513266| | 2011-7-8 16:40 | 只看该作者
38K 3只脚的接收头应该没杂波……

使用特权

评论回复
14
joyme| | 2011-7-8 17:18 | 只看该作者
先搞清楚杂波是怎么来的,一般杂波的宽度是多少?跟正常波形比较脉宽相差大的话,软件比较容易滤掉,不过还是建议从硬件的角度解决,这样的硬件即使你通过特定的软件滤波搞定了你测试的几块板,量产也是不可靠的

使用特权

评论回复
15
luckycrow| | 2011-7-9 09:59 | 只看该作者
代码没仔细看,但个人还是觉得不是杂波原因,距离探头远了才会有干扰问题,这个可能是你的程序问题,我刚毕业那会写的也是一会接受到一会儿接受不到,后来理清思路重写后,短距离内没有接受不到的。不过还有个可能就是你调试的环境,你先把办公室日光灯关了。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

35

主题

137

帖子

1

粉丝