hetao7241 发表于 2009-5-31 13:59:01

我做了一个测量脉宽的东西,用AVR的捕获功能,我发现有误捕获的时候,居然我还用了滤波

我做了一个测量脉宽的东西,用AVR的捕获功能,我发现有误捕获的时候,居然我还用了滤波,才基本消除,否则跳动大.

客户又说,它的脉冲一般是15V左右,但是是线圈输出,可能有200V左右的电压,把我前端的光藕6N137也烧掉了

guopingsh 发表于 2009-5-31 14:05:06

把源程序发上来,大家分析分析

hetao7241 发表于 2009-5-31 14:15:05

这个源程序:这个网站上有:

//ICP1输入捕获中断处理程序
SIGNAL(SIG_INPUT_CAPTURE1)
{

      count1++;
               
      switch(count1)
      {
                case 1://第一次捕获,则开始计数
                        {
                              //TCCR1B |= (1<<CS11);//开始计数,8分频
                              temp1 = ICR1;
                                                                TCCR1B=0xc2;                        
                        }
                        break;
                case 2: //第二次捕获,表示一个周期结束,计数结束
                        {
                              temp2 = ICR1;
                              
                                                                TCCR1B=0x00;//0x82;
                                                                                           
                                                                //cli();                                 
                              
                               
                             if(temp2>=temp1)
                                              {
                                              maikuan1=temp2-temp1;
                           
                                                        }
                               else
                                              {
                                            maikuan1=65536-temp1+temp2;
                                               
                                                             }
                              counta1++;
                              value_bufm1=maikuan1;
                              


                                                                //amaikuan1=maikuan1;
                                                                bihuo1siji=0;
                              count1=0;
                                                          biaoji1=1;
                              //temp2 -= temp1;
                  
                        }
                        break;
                default: ;
      }


}


int main()
{

      TCCR1A = 0x00;
      TCNT1= 0x00;
      TCCR1B=0x82;
                //sei();
      TIMSK=0x20;//打开输入捕捉器中断使能

while(1)
      {
if(biaoji1==1)
                           {

                                     biaoji1=0;
                                TCCR1A = 0x00;
                                     TCNT1= 0x00;
               
                                //sei();
                                    TIMSK=0x20;//打开输入捕捉器中断使能
                                TCCR1B=0x82;
                       
                                            }
         }
}

hetao7241 发表于 2009-5-31 14:20:43

我用单片机产生的脉冲测量肯定没有问题,但用户使用就有问题了,我测量了220V的过零信号(以前用于可控硅调压用的),我发现也有些跳.期待魏坤的示波表早点出来压.

hetao7241 发表于 2009-5-31 15:52:50

1楼你看出什么问题了吗?

bkkman 发表于 2009-6-1 05:29:45

工业环境电网220V充满了不可预料的尖脉冲等谐波,一定要用滤波、限幅等措施.

hetao7241 发表于 2009-6-1 06:09:22

是啊,我也是第一次做这个捕获,应该就是这些谐波引起的。

PICTURE 发表于 2009-6-1 18:36:30

5楼说得没有错,
知道检测脉宽是多少的情况下,程序在捕获后,temp1与temp2可以做个误差判断,在什么范围下是合适的,这样可以去掉一些干扰。

gfy200866 发表于 2013-6-20 14:23:59

老大做过430单片机测量脉宽的吗?我用430做的测量高电平宽度的程序,老搞不通,你有空给帮忙分析下吧!http://www.amobbs.com/thread-5538807-1-1.html
页: [1]
查看完整版本: 我做了一个测量脉宽的东西,用AVR的捕获功能,我发现有误捕获的时候,居然我还用了滤波