上一篇写了基于Xilinx FPGA的通用信号发生器的案例,反响比较好,很多朋友和我探讨相关的技术,其中就涉及到信号的采集,为了使该文更有血有肉,我在写一篇基于Xilinx FPGA的通用信号采集器,望能形成呼应,以解答大家的疑问。目的:1.通过设计实现信号采集与分析,掌握组合逻辑设计方法;2.通过设计实现信号的采集与分析,掌握信号采集原理。原理:利用FPGA芯片,用verilog语言编写逻辑,控制AD0809进行AD转换。AD0809是带有8位AD转换器、8路多路开关以及微处理机兼容的控制逻辑的CMOS组件,它是逐次逼近式的AD转换器。AD0809的内部结构图如下:
由上图可知,多路开关可选通8 个模拟通道,允许8路模拟量分时输入,共用AD转换器进行转换,三态输出锁存器用于锁存AD转换完成后的数字量,当OE为高时才可以从锁存器取出转换后的数据。通道选择如下图所示: START为转换启动信号。当START上跳沿时,所有内部寄存器清零;下跳沿时,开始进行A/D 转换;在转换期间,START应保持低电平。EOC 为转换结束信号。当EOC 为高电平时,表明转换结束;否则,表明正在进行A/D 转换。OE为输出允许信号,用于控制三条输出锁存器向单片机输出转换得到的数据。OE=1,输出转换得到的数据;OE=0,输出数据线呈高阻状态。时序如下图所示: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254源代码1.Verilog源代码,dataCollect.vmodule dataCollect(sysclk, rst, adda, addb, addc, start, oe, datain, led_sel, led_seg); input sysclk, rst; input wire [7:0] datain; output reg adda, addb, addc, start, oe; output reg[3:0] led_sel; output reg[7:0] led_seg; reg [3:0] counter1; reg [7:0] readdata; reg [9:0] counter2; reg [15:0] sum; reg [7:0] averdata; reg [7:0] temp; reg [3:0] dataout1, dataout2, dataout3; reg [3:0] counter3; parameter ZERO = 8'b11111100,ONE = 8'b01100000, TWO = 8'b11011010; parameter THREE = 8'b11110010, FOUR =8'b01100110; parameter FIVE = 8'b10110110, SIX = 8'b10111110, SEVEN =8'b11100000; parameter EIGHT = 8'b11111110, NINE = 8'b11110110, BLANK = 8'b00000000; always @(posedge sysclk or negedge rst) begin if (!rst) begin adda = 0; addb = 0; addc = 0; oe = 1; counter1 = 0; end else begin counter1 = counter1 + 1; case (counter1) 3 : start = 0; 4 : start = 1; 5 : start = 0; 10 : readdata = datain; 15 : counter1 = 0; default : counter1 = counter1; endcase end end always @(posedge sysclk or negedge rst) begin if (!rst) begin counter2 = 0; sum = 0; averdata = 0; end else begin counter2 = counter2 + 1; if ((counter2%16) == 0) sum = sum + readdata; else if (counter2 > 512) begin averdata = sum / 32; sum = 0; counter2 = 0; end end end always @(averdata) begin temp = averdata; if (temp > 199) dataout3 = 2; else if (temp > 99) dataout3 = 1; else dataout3 = 0; temp = temp - dataout3 * 100; if (temp > 89) dataout2 = 9; else if (temp > 79) dataout2 = 8; else if (temp > 69) dataout2 = 7; else if (temp > 59) dataout2 = 6; else if (temp > 49) dataout2 = 5; else if (temp > 39) dataout2 = 4; else if (temp > 29) dataout2 = 3; else if (temp > 19) dataout2 = 2; else if (temp > 9) dataout2 = 1; else dataout2 = 0; temp = temp - dataout2 * 10; dataout1 = temp; if ((dataout3==0) && (dataout2==0)) begin dataout3 = 10; dataout2 = 10; end else if (dataout3 == 0) dataout3 = 10; else dataout3 = dataout3; end always @(posedge sysclk or negedge rst) begin if (!rst) begin counter3 = 0; led_sel = 4'b0001; end else begin if (counter3 == 4) begin counter3 = 0; if (led_sel == 4'b1000) led_sel = 4'b0001; else led_sel = led_sel << 1; end counter3 = counter3 + 1; end end always @(led_sel, dataout1, dataout2, dataout3) begin case (led_sel) 4'b0001 : begin case (dataout1) 0 : led_seg = ZERO; 1 : led_seg = ONE; 2 : led_seg = TWO; 3 : led_seg = THREE; 4 : led_seg = FOUR; 5 : led_seg = FIVE; 6 : led_seg = SIX; 7 : led_seg = SEVEN; 8 : led_seg = EIGHT; 9 : led_seg = NINE; default : led_seg = BLANK; endcase end 4'b0010 : begin case (dataout2) 0 : led_seg = ZERO; 1 : led_seg = ONE; 2 : led_seg = TWO; 3 : led_seg = THREE; 4 : led_seg = FOUR; 5 : led_seg = FIVE; 6 : led_seg = SIX; 7 : led_seg = SEVEN; 8 : led_seg = EIGHT; 9 : led_seg = NINE; default : led_seg = BLANK; endcase end 4'b0100 : begin case (dataout3) 0 : led_seg = ZERO; 1 : led_seg = ONE; 2 : led_seg = TWO; 3 : led_seg = THREE; 4 : led_seg = FOUR; 5 : led_seg = FIVE; 6 : led_seg = SIX; 7 : led_seg = SEVEN; 8 : led_seg = EIGHT; 9 : led_seg = NINE; default : led_seg = BLANK; endcase end 4'b1000 : begin case (10) 0 : led_seg = ZERO; 1 : led_seg = ONE; 2 : led_seg = TWO; 3 : led_seg = THREE; 4 : led_seg = FOUR; 5 : led_seg = FIVE; 6 : led_seg = SIX; 7 : led_seg = SEVEN; 8 : led_seg = EIGHT; 9 : led_seg = NINE; default : led_seg = BLANK; endcase end default : begin led_seg = 1'hx; end endcase end endmodule 2.引脚分配源代码,dataCollect.ucfnet sysclk loc = p80;net rst loc = p57; net adda loc = p14;net addb loc = p16;net addc loc = p18; net oe loc = p23;net start loc = p27; net datain<7> loc = p30;net datain<6> loc = p33;net datain<5> loc = p35;net datain<4> loc = p37;net datain<3> loc = p42;net datain<2> loc = p44;net datain<1> loc = p46;net datain<0> loc = p48; net led_sel<3> loc = p3;net led_sel<2> loc = p5;net led_sel<1> loc = p7;net led_sel<0> loc = p9; net led_seg<7> loc = p206;net led_seg<6> loc = p204;net led_seg<5> loc = p202;net led_seg<4> loc = p200;net led_seg<3> loc = p195;net led_seg<2> loc = p193;net led_seg<1> loc = p191;net led_seg<0> loc = p187; OK了,可以使用了,按照为器件分配的引脚进行连线,系统时钟输入连1KMHZ,可以旋转电位器以改变输入电压,此时可观察到数据管上数据变化。FPGA,融入其中,乐趣无穷。。。。基于Xilinx FPGA的通用信号采集器
- FPGA(591969)
- Xilinx(119164)
相关推荐
基于FPGA的多路光栅信号采集方案
本文提出了一种基于FPGA的多路光栅信号采集方案,该方案使用I/O口相对较少的低端FPGA,配合多路选择开关,通过内部处理,实现了多路光栅信号的采集,结果表明,该方案成本低廉且能满足精度的要求。
2013-12-30 13:35:40
2174


16路数据采集器(通道间隔离型技术资料)
16路数据采集器,通道与通道间是隔离的,抗干扰效果非常好,属于AD系列(模拟信号转换为数字信号)的集成模块,支持MODBUS RTU通讯协议,RS232/485接口,可通过编程设定使用哪种通讯协议
2014-05-04 16:34:43
FPGA采集百兆高速信号
比较器将网线传输过来的差分信号转为单端信号,该信号时钟频率为100M,电平标准能满足FPGA的输入电平标准,波形质量尚可。单端信号直接连接到FPGA,现在如果想用FPGA直接采集,应该怎么处理呢,是当作异步信号直接打拍吗,过采样的话时钟频率不够。时钟恢复目前来不及实现。
2020-03-07 16:01:37
XILINX FPGA Debug with VIO and TCL
提供的软核,通过Xilinx开发环境和jtag下载线可以在PC上获知FPGA内部逻辑信号的状态,也能输出信号给FPGA内部逻辑。TCL是一种通用的EDA工具脚本语言。Xilinx开发环境提供了一个很
2012-03-08 15:29:11
CR300数据采集器
介绍:CR300数据采集器是一款多用途、紧凑型、低成本的测量和控制数据采集器,属于入门级数据采集器。它拥有丰富的指令集,兼容大多数水文、气象、环境以及工业方面的传感器,可以通过多种网络方式采集
2022-05-07 08:59:52
[原创]DENSO BHT-300BW数据采集器
DENSO BHT-300BW数据采集器我司是日本电装DENSO系列条码扫描设备中国地区经销商,部分型号列表:DENSO BHT-900B数据采集器、DENSO
2010-10-16 18:28:22
[原创]DENSO BHT-304QW数据采集器
DENSO BHT-304QW数据采集器我司是日本电装DENSO系列条码扫描设备中国地区经销商,部分型号列表:DENSO BHT-900B数据采集器、DENSO
2010-11-27 20:52:03
【Banana Pi M1+申请】嵌入式多通道数据采集器
,BANANA PI作为嵌入式上位机可以更好的人机交互,数据处理速度可以更快,经济便宜,现申请一块作为开发使用,后期可大量采购。项目描述:开发项目:嵌入式多通道数据采集器初步方案:传感器接入后进行硬件信号调理
2016-06-20 15:54:53
【常见问题】与数据采集器相关的十八个问题解答
主记录或40000条其它记录。GTL可视化通用编程环境简便易学。可以外接MODEM直接远程传输数据。广泛用于仓库、商场盘点。5、934的特点?IC卡数据采集器,外接条码扫描器后组成IC卡条码数据采集器
2015-01-20 11:55:46
评论