图1:AD原理图
今天调试AD的时候出现了很多问题,首先有个I/O口可能因为板子电路连接问题,输出信号发生错误,可悲的我用它当了时钟信号,后面AD怎么都不工作,用示波器测却有信号,就以为时钟正常了,把AD的板子检查了一个遍,浪费了很多时间,最后换了一个I/O口就有了波形输入,待会检查一下那个I/O口到底怎么回事……
由于电路各种干扰,信号不可避免的会出现干扰,滤波程序如下:
module ad_ctrl(clk,rst,ad_clk,ad_data_in,ad_data_out_lb);
input clk,rst;
input [9:0] ad_data_in;
output ad_clk;
output [9:0] ad_data_out_lb;
assign ad_clk=clk;
reg [9:0] data_pre;
reg [1:0] state;
reg [9:0] ad_data_out_lb;
always @(posedge clk)
begin
case(state)
2'b00: begin data_pre<=ad_data_in;state<=2'b11;end
2'b11: begin
if(ad_data_in>=data_pre)
begin
if(ad_data_in-data_pre>=10'd8) begin ad_data_out_lb<=data_pre;state<=2'b00;end
else begin ad_data_out_lb<=ad_data_in;state<=2'b00;end
end
else
begin
if(data_pre-ad_data_in>=10'd8) begin ad_data_out_lb<=data_pre;state<=2'b00;end
else begin ad_data_out_lb<=ad_data_in;state<=2'b00;end
end
end
default:state<=2'b00;
endcase
end
endmodule
这种滤波也会有问题,降低了信号精度,往后的频率提不上去等……先用着吧!
不过我们的AD做的很好,不滤波的话,也能满足要求……感谢同组那位牛人的AD啊……