打印
[AVR单片机]

Atmega64 PD4 输入捕捉干扰滤波问题

[复制链接]
1309|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
金色大元宝|  楼主 | 2014-6-18 09:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
同样的原理,同样的程序移植,STM32工作良好,AVR端口输入捕捉干扰很大。 是AVR的问题吗? 有没有什么硬件方式可以修正?

实现目的,检测PD4的脉冲输入,捕捉ICR1,使能ICNC1开启噪声抑制,但输入的时候ICR1跳变很大,

于是加入滤波算法,中位值平均滤波法,

一开始,采样12次,去掉一个最大值和一个最小值,中间10个取平均值,没多大效果,然后采样率慢慢往上加

采样20次,各去5个最大值和5个最小值,终于比较稳定了。偶尔有跳变。

追踪采样200次,各去50个最大值和50个最小值,示波器非常稳定,和STM32的输入捕捉可以媲美。

但是这个应该是AVR的问题, 示波器测试了。输入的波形很稳定。就是1个2Khz的方波,AVR不加滤波算法根本无法使用。是这样的吗?


以下为部分代码
/*
*********************************************************************************************************
*        函 数 名: TIM1_GPIO_Config
*        功能说明: 配置TIM1输出PWM时用到的I/O
*        形    参:无
*        返 回 值: 无
*
*********************************************************************************************************
*/
static void TIM1_GPIO_Config(void)
{
        PWM1_DDR  &= ~(1 << PWM1_GPIO_PUL); //PD4(ICP1)口为输入捕捉口
        PWM1_PORT |= (1 << PWM1_GPIO_PUL); //使能PD4的内部上拉电阻,平时该口为高电平,以便执行下降沿捕捉
}
/*
*********************************************************************************************************
*        函 数 名: TIM1_Mode_Config
*        功能说明: 配置TIM1输入捕捉寄存器
*        形    参:无
*        返 回 值: 无

*
*********************************************************************************************************
*/
static void TIM1_Mode_Config(void)
{
        _CLI();                        // 关总中断

        TCCR1A  =  0x00; //设置为普通模式
        TCCR1B |= (1 << ICNC1)|(1 << CS11); //开启输入捕捉口的噪声抑制器,时钟8分频
        TCCR1B &= ~(1 << ICES1); //下降沿捕捉
    TIMSK  |= (1 << TICIE1); //输入捕捉使能
        TCNT1   = 0; //计数初值

        _SEI();         // 开总中断
   
}
连续采样200次的话,对于剧烈变化的波形,反应会非常迟钝,而且增加RAM开销,有没有什么办法,用硬件来去干扰?

相关帖子

沙发
H2705902010| | 2016-1-22 16:03 | 只看该作者
本帖最后由 H2705902010 于 2016-1-22 16:05 编辑

我的也是!!!ATMEGA 128 T3输入捕捉,输入波形用示波器看很正常,我在捕捉中断里,对其他IO端口进行操作,异或其中一位,再用示波器测量其波形,发现根本就和输入波形对不上,偶尔有跳动,而且是频率越低,跳动越多,差异性越大,在PROTEUS 里仿真都没问题!

使用特权

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

本版积分规则

24

主题

82

帖子

3

粉丝