模拟信号检测
一、实验目的
用DA转换+比较器的方法对外界模拟信号进行检测,同时这种联合装置加上CPLD可以代替低频AD转换器的功能。
二、硬件要求
1、主芯片EPM7128SLC84-15。
2、模拟功能块AD558。
3、模拟功能块双运放LM358。
4、可变电阻。
三、实验原理
CPLD芯片产生8位二进制循环加法计数值D7~D0,它们与AD558数据端相连,使DA转换产生0~2.56V的斜波电压,经一级运放放大一倍后成为0~5.12V(理论值,实际的动态范围是0~3.78V左右,在高就饱和位3.78V)。
可变电阻器模拟0~5V的模拟输入量,这个值被接入另一个运放的反向输入端,而DA转换放大的0~5.12V的电压量被接入运放的同相输入端,比较器运放的输出端接CPLD的输入管脚jmp。
工作时,可变电阻器输入一个Vtest值,而DA转换从0~5.12V循环扫描,当扫描值Vscan低于Vtest时,比较器输出的jmp为“0”,当扫描值Vscan高于Vtest时,比较器输出为“1”,而使jmp产生正向跳变的DA转换的数字量输入值DAOUT就代表模拟量Vtest的数值。
显示用习惯的十进制,并在芯片内部完成两倍显示转换。
以上各模块的大部分连线都已接好,只有个别端以适应实验的灵活性。
参考原理图如图12-1所示
说明:
hb1:00H~FFH循环加法计数器;
hb2:000~512十进制加法计数器;(用于显示)
hb3:显示锁存;
hb4:分时总线切换;
DELED:BCD数显示译码;
(所有模块均用AHDL语言设计实现)
四、实验内容,步骤,连线
EPM7128SLC84-15:CLK、CKDSP接时钟源;RESET接按键开关;Jmp接集成运放比较输出端;DA[7..0]接DAC的数据输入;扫描显示参考前面的实验;
DA:/CE、/CS接逻辑“0”电平;
SPEAKER:接Jmp信号。
五、实验报告
对于外部模拟信号Vtest范围超出0~5.12V的情况下,应如何修改设计和显示检测益出信息?
请学生思考:HB3模块为什么引入CLK信号?用与不用CLK信号对显示可能产生什么影响?
附:AHDL源程序
1、hb1.tdf
SUBDESIGN hb1
(
clk,reset :INPUT;
daout[7..0] :OUTPUT;
)
VARIABLE
count[7..0]: DFF;
BEGIN
count[].clk=clk;
count[].clrn=reset;
daout[]=count[].q;
count[].d=count[].q+1;
END;
2、hb2.tdf
SUBDESIGN hb2
(
clk,reset :INPUT;
daout[10..0] :OUTPUT;
)
VARIABLE
count[10..0]: DFF;
BEGIN
count[].clk=clk;
count[].clrn=reset;
daout[]=count[].q;
IF(count[3..0].q==9) THEN
IF(count[7..4].q==9) THEN
count[].d=count[].q+H"67";
ELSE
count[].d=count[].q+7;
END IF;
ELSE
IF(count[].q!=H"511") THEN
count[].d=count[].q+1;
end if;
END IF;
END;
3、hb3.tdf
SUBDESIGN hb3
(
clk,jmp,d[10..0] :INPUT;
q[10..0] :OUTPUT;
)
VARIABLE
count[10..0],s: DFF;
BEGIN
s.clk=clk;
s.d=jmp;
count[].clk=s.q;
count[].d=d[];
q[]=count[].q;
END;
4、hb4.tdf
SUBDESIGN hb4
(
clk,d[10..0] :INPUT;
q[3..0],sel[1..0] :OUTPUT;
)
VARIABLE
count[1..0]: DFF;
BEGIN
count[].clk=clk;
sel[]=count[].q;
IF(count[].q==2) THEN
count[].d=0;
ELSE
count[].d=count[].q+1;
END IF;
CASE count[].q IS
WHEN 0 =>q[]=d[3..0];
WHEN 1 =>q[]=d[7..4];
WHEN 2 =>q[2..0]=d[10..8];
END CASE;
END;
0