简介
FlexIO需要毛刺滤波的原因
使用定时器进行毛刺滤波的基本原理
• 定时器工作在16bit模式
• 定时器的触发源选择来自输入引脚
• 定时器的引脚配置为输出
• 定时器一直使能且从不关闭 (TIMENA = 0, TIMDIS= 0)
• 当定时器的输入与输出相等时,定时器处于reset状态 (TIMRST = 0x3)
• 定时器的输出不受 reset 引脚影响,初始状态可以是0 或者是 1 (TIMOUT = 0 or 1)
• 定时器的初始计数值等于 filter_width 减 1 (TIMCMP = filter_width – 1)
• filter_width 是输入信号持续稳定才能更新输出信号的周期数且必须大于1
通过设置不同的初始计数值,定时器可以被用于过滤信号中的高频毛刺,同时也会为滤波后的信号带来filter_width *时钟周期的时间延迟。当初始计数值为 10 时,初始信号与滤波后的信号如图所示。
定时器能够完成滤波的原因在于:在信号发生跳变时,计数值才会从初始值开始递减,即定时器的输入状态与输出状态不相同,定时器退出reset 状态开始计数。当16 位计数器等于 0 并递减时,定时器输出切换并且计数器从比较寄存器重新加载。因此,如果信号的跳变保持的时间小于filter_width *时钟周期 的时间,会导致计数值还未降低到 0 就被重置,输出信号就会保持原先的电平,短时间的信号跳变就会被过滤掉。
定时器在进行毛刺滤波时,其输出引脚在芯片内部连接到其他移位器和定时器,因此即便这一引脚在设备级别(IOMUXC)未被启用也可以实现滤波功能。
对 RT1010 GPIO输出的方波信号
进行毛刺滤波
• GPIO_08 被配置为输出方波信号
• GPIO_11 被配置为 FlexIO 定时器的输入引脚
• GPIO_12 被配置为 FlexIO 定时器的输出引脚
FlexIO 的定时器可以对 TIMCFG 寄存器进行配置,从而改变其对输入信号的的响应。
将 TIMOUT 段配置为 00b,可以将定时器的初始输出值设置为 1,且在 reset 时会保持输出值不变。
将 TIMDEC 段配置为 00b,可以在每个时钟周期对计数值递减。
将 TIMRST配置为 11b,可以在输入值等于输出值时重置计数值。在代码中,可以将 FlexIO 的定时器进行如下配置:
通过如上的定时器配置,可以轻松实现章节3中提到的定时器配置条件,从而使定时器工作为一个毛刺滤波器。
END
更多恩智浦AI-IoT市场和产品信息,邀您同时关注“NXP客栈”微信公众号
NXP客栈
恩智浦致力于打造安全的连接和基础设施解决方案,为智慧生活保驾护航。
长按二维码,关注我们
恩智浦MCU加油站
这是由恩智浦官方运营的公众号,着重为您推荐恩智浦MCU的产品信息、开发技巧、教程文档、培训课程等内容。
长按二维码,关注我们
原文标题:在 FlexIO上进行毛刺滤波的方法
文章出处:【微信公众号:恩智浦MCU加油站】欢迎添加关注!文章转载请注明出处。
全部0条评论
快来发表一下你的评论吧 !