本帖最后由 cxFPGA 于 2013-9-26 14:02 编辑
正在做一个增量式编码器相关的项目,需要对外部输入的脉冲进行计数,为了滤除干扰,做了如下的滤波处理,fpga时钟为40M,经过pll倍频到160M,滤波的原理是每当io的滤波值不等于io时开始计数,当计数值达到预设值120时更新滤波值并清零计数,若计数未达到预设值期间滤波值与io值相等了则清零计数,等待下次的不同。这样一个滤波理论上能够滤除周期为1.5us以上的脉冲实现,
仿真也没有问题,可是实际下板子时发现并不能很好的滤除干扰,在输入脉冲的结尾人为的加入一个75ns的干扰信号,结果是偶尔会多数一个脉冲。代码如下,忘各位能帮忙分析一下。
reg[7:0] io_filter_cnt;
always@(posedge clk or negedge rst_n)begin
if(!rst_n)begin
io_filter_cnt<=0;
io_filter<=0;
end
else begin
if(io_filter != io)begin
if(io_filter_cnt>8‘d120) begin
io_filter_cnt<=0;
io_filter<=io;
end
else io_filter_cnt<=io_filter_cnt+8'd1;
end
else io_filter_cnt<=0;
一周热门 更多>