数据采集系统的设计.docx
- 文档编号:9205691
- 上传时间:2023-02-03
- 格式:DOCX
- 页数:26
- 大小:178.43KB
数据采集系统的设计.docx
《数据采集系统的设计.docx》由会员分享,可在线阅读,更多相关《数据采集系统的设计.docx(26页珍藏版)》请在冰豆网上搜索。
数据采集系统的设计
目录
第一章数据采集系统的设计原理..............................................................2
1.1设计要求及硬件框架设计...............................................................2
1.2系统总体设计方案.................................................................3
1.3A/D转换控制模块ADZHKZ的设计................................................4
1.3.1ADC0809模数转换的控制....................................................4
1.3.2转换后数的BCD码转换处理.................................................5
第二章数据采集系统的设计..................................................................7
2.1数据采集系统的VHDL设计...............................................................7
2.1.1A/D转换控制模块ADZHKZ的VHDL源程序............................7
2.1.2数据运算与处理模块SJYSCL的VHDL源程序...........................11
2.1.3D/A转换控制模块DAZHKZ的VHDL源程序.............................15
2.1.4键盘输入与数据显示控制模块JPXSKZ的VHDL源程序...................16
第三章软件的测试.........................................................................18
3.1系统的有关仿真..................................................................18
体会及参考文献
第一章数据采集系统的设计原理
1.1设计要求及硬件框架设计
本设计要求用一片CPLD/FPGA,模数转换器ADC和数模转换器DAC构成一个数据采集系统,并用CPLD/FPGA实现数据采集中对A/D转换,数据运算,D/A转换以及有关数据显示的控制。
系统的组成框图如图1.1所示,其功能如下:
系统一定速率采集输入电压U1,经ADC0809转换为8位数字量DATA。
输入数据与通过预置按键输入数据采集控制器内的标准数据相减,求得带极性位的差值±△U(数字量);差值之绝对值送至DAC0832转换为△U,它和特定的极性判别电路共同输出±△U。
数据采集和处理均在数据采集系统控制器的管理下有序进行。
工作速率由时钟信号CLK的速率决定。
1.1数据采集系统组成框图
1.2系统总体设计方案
根据系统设计要求,数据采集系统控制器SJCJKZQ可由四个模块组成:
A/D转换控制模块ADZHKZ,数据运算与处理模块SJYSCL,D/A转换控制模块DAZHKZ以及有关键盘输入与数据显示控制模块JPXSKZ。
其模块的各个引脚图如下。
其组成框图及有关接口入图1.2所示。
1.2数据采集系统总体组成原理图
1.3A/D转换控制模块ADZHKZ的设计
1.3.1ADC0809模数转换的控制
ADC0809是CMOS的8位A/D转换器,片内有8路模拟开关,可控制8个模拟量中的一个进入转换器中。
ADC0809的分辨率为8位,转换时间约100us,含锁存控制的8路多路开关,输出由三态缓冲器控制,单5V电源供电。
图1.3是ADC0809的管脚及主要控制信号时序图。
1.3ADC0809的管脚及主要控制信号时序图
对于ADC0809模数转换的控制程序段的VHDL设计,根据ADC0809的A/D转换控制要求,我们可用一个状态机来实现,其状态转换如图1.4所示。
1.4ADC0809工作是的状态转换图
1.3.2转换后数的BCD码转换处理
表1.6是在ADC0809的基准电压(Vref)为5.12V时,模拟输入电压与输出电压的对应关系表,其中最小电压准位是5/28=5/256=0.2V。
这样,当由ADC0809的[7..0]收到的数据信号是10000110(即86H)时,则对照表1.6时,高4位1000是2.56V,而低4位1001是0.12V,所以最后的电压输出结果是2.56V+0.12V=2.68V。
1.5BCD加法示意图
1.6ADC0809模拟输入电压与输出电压的对应关系
为了方便后续的电压数据显示,我们应将输出电压表示成12位的BCD码形式。
如上述的2.56V是001001010110,0.12V是000000010010,所以相加的结果2.68V是001001101000,因此必须设计一个12位的BCD码加法程序。
图1.5是2.56+0.18/=2.74的二进制的BCD加法示意图。
从图中可以看出,二进制BCD码相加时,由最低4位加起,且每4位相加的结果超过10时需作进位操作。
第二章数据采集系统的设计
2.1数据采集系统的VHDL设计
2.1.1A/D转换控制模块ADZHKZ的VHDL源程序
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYADZHKZIS
PORT(D:
INSTD_LOGIC_VECTOR(7DOWNTO0);--0809的8位转换数据输出
RST:
INSTD_LOGIC;--复位信号
CLK:
INSTD_LOGIC;--转换工作时钟信号
EOC:
INSTD_LOGIC;--0809的转换结束控制信号
ALE:
OUTSTD_LOGIC;--0809的通道选择地址锁存信号
START:
OUTSTD_LOGIC;--0809的转换启动控制信号
OE:
OUTSTD_LOGIC;--0809的输出使能控制信号
ADDA:
OUTSTD_LOGIC;--0809的通道选择控制信号
BCDOUT:
OUTSTD_LOGIC_VECTOR(11DOWNTO0));--来自0809的数据经BCD转换后的输出
ENDENTITYADZHKZ;
ARCHITECTUREARTOFADZHKZIS
TYPESTATESIS(ST0,ST1,ST2,ST3,ST4,ST5,ST6);
SIGNALCURRENT_STATE,NEXT_STATE:
STATES;
SIGNALREGL:
STD_LOGIC_VECTOR(7DOWNTO0);
SIGNALLOCK0,LOCK1:
STD_LOGIC;--转换后数据输出锁存时钟信号
SIGNALVALUE:
STD_LOGIC_VECTOR(11DOWNTO0);
SIGNALCEN:
STD_LOGIC;
SIGNALALE0:
STD_LOGIC;
SIGNALSTART0:
STD_LOGIC;
SIGNALOE0:
STD_LOGIC;
BEGIN
--A/D转换控制模块
STATESYSTEM:
BLOCKIS
BEGIN
ADDA<='1';--状态转换控制
PRO:
PROCESS(CURRENT_STATE,EOC)IS
BEGIN
CASECURRENT_STATEIS
WHENST0=>ALE0<='0';START0<='0';OE0<='0';
LOCK0<='0';NEXT_STATE<=ST1;CEN<='0';
WHENST1=>ALE0<='1';START0<='0';OE0<='0';
LOCK0<='0';NEXT_STATE<=ST2;CEN<='0';
WHENST2=>ALE0<='0';START0<='1';OE0<='0';
LOCK0<='0';NEXT_STATE<=ST3;CEN<='0';
WHENST3=>ALE0<='0';START0<='0';OE0<='0';
LOCK0<='0';CEN<='0';
IFEOC='1'THEN--测试EOC的下降沿
NEXT_STATE<=ST3;
ELSE
NEXT_STATE<=ST4;
ENDIF;
WHENST4=>ALE0<='0';START0<='0';OE0<='0';
LOCK0<='0';CEN<='0';
IFEOC='0'THENNEXT_STATE<=ST4;--测试EOC的上升沿,=1表明转换结束
ELSENEXT_STATE<=ST5;
ENDIF;
WHENST5=>ALE0<='0';START0<='0';OE0<='1';LOCK0<='0';
NEXT_STATE<=ST6;CEN<='1';
WHENST6=>ALE0<='0';START0<='0';OE0<='1';LOCK0<='1';
NEXT_STATE<=ST0;CEN<='0';
WHENOTHERS=>ALE0<='0';START0<='0';OE0<='0';LOCK0<='0';
NEXT_STATE<=ST0;CEN<='0';
ENDCASE;
ENDPROCESS;
PROCESS(RST,CLK)IS
BEGIN
IFRST='1'THENCURRENT_STATE<=ST0;
ELSIFRISING_EDGE(clk)THENCURRENT_STATE<=NEXT_STATE;--在时钟上升沿,转换至下一状态
ENDIF;
ENDPROCESS;--用于给输出信号去毛刺
PROCESS(CLK)IS
BEGIN
IFRISING_EDGE(CLK)THEN
ALE<=ALE0;START<=START0;OE<=OE0;LOCK1<=LOCK0;
ENDIF;
ENDPROCESS;
--数据锁存进程
PROCESS(LOCK1)IS
BEGIN
IFRISING_EDGE(LOCK1)THENREGL<=D;--在LOCK1的上升沿,将转换好的数据锁入
ENDIF;
ENDPROCESS;
ENDBLOCKSTATESYSTEM;
--A/D转换数据的BCD码转换模块
CONVERSION:
BLOCKis
SIGNALV:
STD_LOGIC_VECTOR(7DOWNTO0);
SIGNALHB,LB:
STD_LOGIC_VECTOR(11DOWNTO0);
SIGNALC30,C74,C118:
STD_LOGIC;
SIGNALTEMPA,TEMPB,TEMPC:
STD_LOGIC_VECTOR(4DOWNTO0);
BEGIN
PROCESS(REGL)IS
BEGIN
V<=REGL;
--将A/D转换后数据的高4位通过查表的方式用12位BCD码表示
CASEV(7DOWNTO4)IS--FORA/DCONVERSIONDATAHIGHTBYTE
WHEN"1111"=>HB<="010010000000";--4.80
WHEN"1110"=>HB<="010001001000";--4.48
WHEN"1101"=>HB<="010000010110";--4.16
WHEN"1100"=>HB<="001110000100";--3.84
WHEN"1011"=>HB<="001101010010";--3.52
WHEN"1010"=>HB<="001100100000";--3.20
WHEN"1001"=>HB<="001010001000";--2.88
WHEN"1000"=>HB<="001001010110";--2.56
WHEN"0111"=>HB<="001000100100";--2.24
WHEN"0110"=>HB<="000110010010";--1.92
WHEN"0101"=>HB<="000101100000";--1.60
WHEN"0100"=>HB<="000100101000";--1.28
WHEN"0011"=>HB<="000010010110";--0.96
WHEN"0010"=>HB<="000001100100";--0.64
WHEN"0001"=>HB<="000000110010";--0.32
WHENOTHERS=>HB<="000000000000";--0.00
ENDCASE;
--将A/D转换后数据的低4位用12位BCD码表示
CASEV(3DOWNTO0)IS--FORA/DCONVERSIONDATALOWBYTE
WHEN"1111"=>LB<="000000110000";--0.30
WHEN"1110"=>LB<="000000101000";--0.28
WHEN"1101"=>LB<="000000100110";--0.26
WHEN"1100"=>LB<="000000100100";--0.24
WHEN"1011"=>LB<="000000100010";--0.22
WHEN"1010"=>LB<="000000100000";--0.20
WHEN"1001"=>LB<="000000011000";--0.18
WHEN"1000"=>LB<="000000010110";--0.16
WHEN"0111"=>LB<="000000010100";--0.14
WHEN"0110"=>LB<="000000010010";--0.12
WHEN"0101"=>LB<="000000010000";--0.10
WHEN"0100"=>LB<="000000001000";--0.08
WHEN"0011"=>LB<="000000000110";--0.06
WHEN"0010"=>LB<="000000000100";--0.04
WHEN"0001"=>LB<="000000000010";--0.02
WHENOTHERS=>LB<="000000000000";--0.00
ENDCASE;
ENDPROCESS;
--将A/D转换后数据的高、低4位的12位BCD码进行加法操作处理
PROCESS(HB,LB,CEN)IS
VARIABLETEMP1,TEMP2,TEMP3:
STD_LOGIC_VECTOR(3DOWNTO0);
BEGIN
IFRISING_EDGE(CEN)THEN
TEMP1:
=HB(3DOWNTO0)+LB(3DOWNTO0);
IFTEMP1>"1001"THEN
TEMP1:
=TEMP1+"0110";
TEMP2:
=HB(7DOWNTO4)+LB(7DOWNTO4)+'1';
IFTEMP2>"1001"THEN
TEMP2:
=TEMP2+"0110";
TEMP3:
=HB(11DOWNTO8)+LB(11DOWNTO8)+'1';
IFTEMP3>"1001"THEN
TEMP3:
=TEMP3+"0110";
ENDIF;
ELSE
TEMP3:
=HB(11DOWNTO8)+LB(11DOWNTO8);
IFTEMP3>"1001"THEN
TEMP3:
=TEMP3+"0110";
ENDIF;
ENDIF;
ELSE
TEMP2:
=HB(7DOWNTO4)+LB(7DOWNTO4);
IFTEMP2>"1001"THEN
TEMP2:
=TEMP2+"0110";
TEMP3:
=HB(11DOWNTO8)+LB(11DOWNTO8)+'1';
IFTEMP3>"1001"THEN
TEMP3:
=TEMP3+"0110";
ENDIF;
ELSE
TEMP3:
=HB(11DOWNTO8)+LB(11DOWNTO8);
IFTEMP3>"1001"THEN
TEMP3:
=TEMP3+"0110";
ENDIF;
ENDIF;
ENDIF;
ENDIF;
VALUE<=TEMP3&TEMP2&TEMP1;
ENDPROCESS;
--将经过BCD码转换处理后的数据输出
BCDOUT<=VALUE;
ENDBLOCKCONVERSION;
ENDARCHITECTUREART;
2.1.2数据运算与处理模块SJYSCL的VHDL源程序
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYSJYSCLIS
PORT(CLK:
INSTD_LOGIC;
DABC:
INSTD_LOGIC_VECTOR(11DOWNTO0);
DTA:
INSTD_LOGIC_VECTOR(3DOWNTO0);
DTB:
INSTD_LOGIC_VECTOR(3DOWNTO0);
DTC:
INSTD_LOGIC_VECTOR(3DOWNTO0);
QABC:
OUTSTD_LOGIC_VECTOR(11DOWNTO0));
ENDENTITYSJYSCL;
ARCHITECTUREARTOFSJYSCLIS
SIGNALDA,DB,DC:
STD_LOGIC_VECTOR(3DOWNTO0);--DAISTHEHIGHESTBIT,DCTHELASTONE
SIGNALDDA,DDB,DDC:
STD_LOGIC_VECTOR(3DOWNTO0);
BEGIN
DA<=DABC(11DOWNTO8);
DB<=DABC(7DOWNTO4);
DC<=DABC(3DOWNTO0);
DDA<=DTA(3DOWNTO0);
DDB<=DTB(3DOWNTO0);
DDC<=DTC(3DOWNTO0);
PROCESSIS
VARIABLETEMPA,TEMPB,TEMPC:
STD_LOGIC_VECTOR(3DOWNTO0);
BEGIN
WAITUNTILCLK='1';
IFDA>DDATHEN
IFDB>DDBTHEN
IFDC>=DDCTHEN
TEMPC:
=DC-DDC;
TEMPB:
=DB-DDB;
TEMPA:
=DA-DDA;
ELSE
TEMPC:
="1010"-DDC+DC;
IFTEMPC>"1001"THEN
TEMPC:
=TEMPC+"0110";
ENDIF;
TEMPB:
=DB-'1'-DDB;
TEMPA:
=DA-DDA;
ENDIF;
ELSIFDB=DDBTHEN
IFDC>=DDCTHEN
TEMPC:
=DC-DDC;
TEMPB:
=DB-DDB;
TEMPA:
=DA-DDA;
ELSE
TEMPC:
="1010"-DDC+DC;
IFTEMPC>"1001"THEN
TEMPC:
=TEMPC+"0110";
ENDIF;
TEMPB:
="1010"-DDB-'1'+DB;
IFTEMPB>"1001"THEN
TEMPB:
=TEMPB+"0110";
ENDIF;
TEMPA:
=DA-'1'-DDA;
ENDIF;
ELSE
IFDC>=DDCTHEN
TEMPC:
=DC-DDC;
TEMPB:
="1010"-DDB+DB;
IFTEMPB>"1001"THEN
TEMPB:
=TEMPB+"0110";
ENDIF;
TEMPA:
=DA-'1'-DDA;
ELSE
TEMPC:
="1010"-DDC+DC;
IFTEMPC>"1001"THEN
TEMPC:
=TEMPC+"0110";
ENDIF;
TEMPB:
="1010"-'1'-DDB+DB;
IFTEMPB>"1001"THEN
TEMPB:
=TEMPB+"0110";
ENDIF;
TEMPA:
=DA-'1'-DDA;
ENDIF;
ENDIF;
ELSIFDA=DDATHEN
IFDB>DDBTHEN
IFDC>=DDCTHEN
TEMPC:
=DC-DDC;
TEMPB:
=DB-DDB;
TEMPA:
=DA-DDA;
ELSE
TEMPC:
="1010"-DDC+DC;
IFTEMPC>"1001"THEN
TEMPC:
=TEMPC+"0110";
ENDIF;
TEMPB:
=DB-'1'-DDB;
TEMPA:
=DA-DDA;
ENDIF;
ELSIFDB=DDBTHEN
IFDC>=DDCTHEN
TEMPC:
=DC-DDC;
TEMPB:
=DB-DDB;
TEMPA:
=DA-DDA;
ELSE
TEMPC:
=DDC-DC;
TEMPB:
=DDB-DB;
TEMPA:
=DDA-DA;
ENDIF;
ELSE
IFDDC>=DC
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据 采集 系统 设计
![提示](https://static.bdocx.com/images/bang_tan.gif)