给你设计了一个很简单的控制电路。利用水作导体,当水位到达高水位探测点时Q1导通,发光管点亮;水位未到高点时Q1截止,发光管不亮。当水位低于低水位探测点时Q2截止,Q3导通,发光管亮(当水位高于低水位探测点时,Q2导通,Q3截止,灯不亮)。
三极管可改用常见的
9012 21 PNP 低频放大 50V 05A 0625W
9013 21 NPN 低频放大 50V 05A 0625W
其实用一个简单的运放就可以实现了,我给你举个例子,图是我亲自画的哦,不过如果真要做实品的话,你还要看集成运放的参数来选择电路参数,图中引入了电压并联负反馈。图中Uo=R2(单位是K欧)
CPLD及电子CAD实验报告姓名: 同组者:
对MAX+PLUS II的应用和 *** 作上有了一定的理解和掌握,以下就是我在一些资料上了解到的一些关于CPLD及电子CAD这门课的理论知识及对本次实验报告的总括:
(一)、MAX+plusⅡ是一 种 与 结构 无 关 的全 集 成化设计环境 ,使设计者 能对 Altera的各 种 CPLD系列方便地进行设 计输入 、快速 处理 和器件 编 程.MAX+plusII开发 系统 具有强大 的处理能力 和高 度 的灵活性.其主要优点 :与结构无关 、多平 台 、丰富 的设计库、开放的界面 、全 集成 化 、支持 多种 硬件 描述 语 言(HDL)等 .设 计 流 程 数 字 系 统 的 设 计 采 用 自顶 向下 、由粗 到 细 ,逐步分解的设计 方法 ,最 顶层 电路是指 系统的整体要求最下层是具体 的逻 辑 电路 的实现。设计 输入.MAX+plus I1支持 多种设计输入方 式 ,如 原 理图 输 入 、波 形 输 入 、文 本 输 入 和 它 们 的混 合输 入 .设计 处 理 . 设计检查。器 件 编 程 . 系统 仿 真。系统设 计之 后还要 进 行仿 真.本 系统 采用 MAX7000S系列 CPLD芯 片 , 应 用 M AX+plus lI对 各 种 文 件 从 底 层 到 顶 层 逐 个 编译 ,再进行逻辑仿真.仿 真之 后 通 过 MAX+ plus lI的 Programmer下载 到可编程芯片上便完 成设计.
(二)、经过对《CPLD及电子CAD》这门课程的学习,并在老师的辅导和帮助下,我们成功地完成了五个基本实验以及综合实验“数字钟的设计”。
实验报告分七部分:实验一总结,实验二总结,实验三总结,实验四总结,实验五总结,综合实验总结,及总的学习体会。
实验一:3—8译码器
一、实验目的:
1.通过一个简单的3—8译码器的设计,让学生掌握组合逻辑电路的设计方法;
2.初步了解EPLD设计的全过程,初步掌握Altera软件的使用;
3.掌握组合逻辑电路的静态测试方法。
二、实验内容:
利用MAX+plus II设计软件来实现3—8译码器的设计,并通过设计对软件进行初步的 *** 作和认识。用MAX+plus II。用MAX+plus II编译一个项目前,必须确定一个设计作为当前项目。对于每个新的项目应该建立一个单独的子目录,当指定设计项目名称时,也就同时指定了保存该设计项目的子目录名。其步骤为:
1、指定设计项目名称;
2、选择器件;
3、建立新文件。
设计的输入:
1、放置一个器件在原理图上;
2、添加连线到器件的管脚上;
3、保存原理图。
设计项目的编译:在底层图编辑器中观察适配结果以及管脚的重新分配、定位,编译后可通过模拟一个项目来证明它的功能是正确的。
三、实验数据表:
1、电路图
3—8译码器
2、2、波形图:
3、编译成功:
四、实验小结:
在验证译码器的功能的同时也对软件有了进一步的了解,刚开始做有一些不熟练,有一些不太适应,编译完成后,画出的波形也是正确的,但在下载到器件时却出现了问题,虽然显示下载成功但器件上没有显示,经过反复检查终于弄清了原来是器件的模式选择错误。总的来说本次实验还是成功的。
实验二:组合电路
一、实验目的:
1、掌握组合逻辑电路的设计方法;
2、加深对CPLD设计过程的了解,并比较原理图输入和文本输入的优劣。
二、实验内容:
1、设计一个四舍五入判别电路,其输入为8421BCD码,要求当输入大于5时,判别电路输出为1,反之为0。
实验电路:
2、设计四个开关控制一盏灯的逻辑电路,要求合任一开关,灯亮;断任一开关,灯灭。
3、设计一个优先排队电路,其排队顺序如下:
A=1 最高优先权
B=1 次高优先权
C=1 最低优先权
要求输出最高只能有一端为“1”,即只能是优先级较高的输入端所对应的输出端为“1”。
AHDL设计输入:
SUBDESIGN t2_1
( d0,d1,d2,d3:INPUT;
out: OUTPUT; )
BEGIN
IF( (d3,d2,d1,d0) >= 5 ) THEN
out=VCC;
ELSE
out=GND;
END IF;
END
三、实验数据表:
1、
2、
3、
4、
四、实验总结:
本次实验是可以通过VHD语言实现的,在次我们又接触了一种新的语言,可以实现电路设计的语言,对于一种设计,首先要有思路,在思路的引导下,用一定的媒介来实现自己的思路与想法,对自己的设计进行检验。
实验三 触发器功能模拟
一、实验目的:
1、掌握触发器功能的测试方法;
2、掌握基本RS触发器的组成及工作原理;
3、掌握集成JK触发器和D触发器的逻辑功能及触发方式。
二、实验内容:
1、将基本RS触发器,集成J-K触发器,D触发器同时集成在一个CPLD芯片中模拟其功能,并研究其相互转化的方法。
2.输入信号Sd、Rd对应的管脚接按键开关,CLK接时钟源(频率<05Hz);输入信号J、K、D、R、S对应的管脚分别接拨码开关;输出信号QRS,NQRS,QRSC,NQRSC,QJK,NQJK,QD,NQD对应管脚分别接LED指示灯。
将实验结果填入下表:
表1 RS触发器:
Rd Sd Q NQ
0 1 0 1
1 0 1 0
1 1 不变
0 0 不定
表3 JK 触发器:
J K Qn Qn+1
0 0 0 0
0 0 1 1
0 1 0 0
0 1 1 0
1 0 0 1
1 0 1 1
1 1 0 1
1 1 1 0
表4 D触发器:
D CLK Rd Sd Q NQ
1 0 1 0
0 1 0 1
1 0——1 1 1 1 0
0 0——1 1 1 0 1
0 1 1 Q0 NQ0
三、实验数据表:
四、实验小结
实验十四 计数器及时序电路
一、实验目的:
1.了解时序电路的经典设计方法(D触发器和JK触发器和一般逻辑门组成的时序逻辑电路);
2.了解通用同步计数器,异步计数器的使用方法;
3.了解用同步计数器通过清零阻塞法和预显数法得到循环任意进制计数器的方法;
4.理解时序电路和同步计数器加译码电路的联系,设计任意编码计数器;
5,了解同步芯片和异步芯片的区别。
硬件需求:
主芯片Altera EPF10K1004-4,时钟, 4位八段数码管。
二、实验内容:
用D触发器设计异步四位二进制加法计数器:
实验内容中的6个实验均要通过实验十三的“扫描显示电路”内容进行显示,具体 连线根据每个实验内容完成时的管脚化分和定义,同相应的输入、输出接口功能模块相连,扫描模块的连接参考实验十三。
三、实验数据表:
四.实验小结:
而根据 VHDL语言可以设计任意进制的计数器。这
次实验为后面数字钟的设计打下基础,即设计出24进制,60进制,100进制的计数器。
实验五:原理图及PCB设计
一、实验目的:
1.初步掌握PROTE199软件的使用。
2.了解由555组成多谐振荡器,555组成单稳态触发器。
二.实验内容:
(1)设计电路原理图,包括(装入元器件库,放置及调整元器件位置,编辑元器件属性,绘制原理图)
(2)电路图的后期处理,包括(检查电路原理图,电路原理图的修饰)
(3)设计印制电路板
(4)生成各种电路原理图报表文件,(主要是生成网络表文件)
打开软件protel99,建立一个新的文件,将所用到的文件引入左侧区中。在工作区内将由555组成的多谐振荡器的电路图。多谐振荡器的工作原理如下:当工作电源接通后,通过R1、R2对电容C1充电,当VC上的电压上升到2/3V1时,RS触发器复位,输出为0,同时,内部放电三极管导通,C1通过R2、T(555内部)放电,当VC下降到1/3V1时,RS触发器置位,输出为1。实验电路图如下:
三.实验数据表:
四.实验小结
经过和原生成的比较可以看出结果是正确的。
实验六:数字钟(综合实验)
一、设计任务(数字钟的功能):
1.具有时、分、秒、计数显示功能,以24小时循环计时;
2.具有清零,调节小时、分钟功能;
3.具有整点报时功能,整点报时的同时LED灯花样显示。
扩展部分:在基础功能上添加以下几个功能:秒表,倒计时和闹钟。
目的是:掌握多位计数器相连的设计方法;掌握十进制,六进制,二十四进制计数器的设计方法;继续巩固多位共用级扫描显示数码管的驱动及编码;掌握扬声器的驱动;LED灯的花样显示;掌握EPLD技术的层次化设计方法。
而且需要以下硬件条件:1,主芯片 EPF10K10LC84-4;
2 ,8个 LED灯;
3,扬声器;
4,8位八段扫描共阴极数码显示管;
5,三个按键开关(清零,调小时,调分钟)
二、实现方案:
把整个实验分成如下电路模块:
1.时钟计数: 秒——60进制BCD码计数:
分——60进制BCD码计数:
时——24进制BCD码计数:
模块说明:
各种进制的计数及时钟控制模块( 10进制、 6进制、 24进制);
同时获个计数器有清零,调分,调时功能。在接近整数时间能提供报时信号。
2.具有驱动8位八段共阴扫描数码管的片选驱动信号输出和八段字形译码输出。
3具有校时功能,可以分别对时及分进行单独校时,使其校正到标准时间当重新接通电源或走时出现误差时都需要对时间进行校正。通常,校正时间的方法是:首先截断正常的计数通路,然后再进行人工出触发计数或将频率较高的方波信号加到需要校正的计数单元的输入端,校正好后,再转入正常计时状态即可。
4计时过程具有报时功能,当时间到达整点前10秒进行蜂鸣报时
5LED灯按个人爱好在整点时有花样显示信号产生。
三、实现设计过程:
秒个位计数单元为10进制计数器,无需进制转换,我们采用的是VHDL语言编程实现的
秒十位计数单元为6进制计数器,需要进制转换。将10进制计数器的程序稍微修改为6进制计数器
分个位和分十位计数单元电路结构分别与秒个位和秒十位计数单元完全相同,只不过分个位计数单元的Q3作为向上的进位信号应与分十位计数单元的CPA相连,分十位计数单元的Q2作为向上的进位信号应与时个位计数单元的CPA相连。
时个位计数单元电路结构仍与秒或个位计数单元相同,但是要求,整个时计数单元应为24进制计数器,不是10的整数倍,因此需将个位和十位计数单元合并为一个整体才能进行
24进制转换
1、十进制BCD码计数器
library ieee;
USE ieeestd_logic_1164all;
USE ieeestd_logic_signedall;
ENTITY c6 IS
port(clk,clr : in std_logic;
q : out std_logic_vector(2 downto 0));
end c6;
architecture one of c6 is
signal count :std_logic_vector(2 downto 0);
begin
process(clk,clr)
begin
if clr='1' then
count<="000";
elsif clk'event and clk='1' then
if count="1001" then
count<="000";
else
count<=count+1;
end if;--for count
end if; --for clr
end process;
q<=count;
end ;
2、二十四进BCD制码计数器:
LIBRARY ieee;
USE ieeestd_logic_1164all;
USE ieeestd_logic_arithall;
use ieeestd_logic_unsignedall;
ENTITY count IS
port( clk,clr,count_en : in std_logic;
dout1,dout2 : out std_logic_vector(3 downto 0);
car:out std_logic);=count2+'1';
end if;
if count2="0010"and count1="0011" then
count2<="0000";car<='1';
else car<='0';
end if;
end if;
end if;
end process;
dout1<=count1;dout2<=count2 ;
end;
3、六十进制计数器:
LIBRARY ieee;
USE ieeestd_logic_1164all;
USE ieeestd_logic_arithall;
USE ieeestd_logic_UNSIGNEDall;
entity c60 is
port(clk,clr,count_en:in std_logic;
dout1,dout2:out std_logic_vector(3 downto 0);
car:out std_logic);
end c60;
count1<="0000";count2<="0000";
elsif clk'event and clk='1' then
if count_en='0' then
count1<=count1+'1';
if count1 ="1001" then
count1<="0000";count2<=count2+1;
end if ;
if count2 ="0101" and count1 ="1001" then
count2<="0000";car<='1';
else car<='0';
end if ;
end if ;
end if ;
end process;
dout1<=count1;dout2<=count2;
end ;
4、实现报时器功能的程序:
LIBRARY ieee;
USE ieeestd_logic_1164all;
USE ieeestd_logic_arithall;
USE ieeestd_logic_UNSIGNEDall;
entity bijiaoqi is
port(minu1,minu2,hour1,hour2,fen0,fen1,shi0,shi1:in std_logic_vector(3 downto 0);
baoshi:out std_logic);
end ;
architecture rtl of bijiaoqi is
begin
process(minu1,minu2,hour1,hour2,fen0,fen1,shi0,shi1)
begin
if hour1=shi0 and hour2=shi1 and minu1=fen0 and minu2=fen1 then
baoshi<='1';
else baoshi<='0';
end if;
end process;
end;
6、实现定时功能的程序:
library ieee;
USE ieeestd_logic_1164all;
USE ieeestd_logic_arithall;
use ieeestd_logic_unsignedall;
ENTITY dingshi IS
PORT (hour,SET: IN STD_LOGIC;
hour0,hour1 : out std_logic_vector(3 downto 0));
END dingshi;
architecture rtl of dingshi is
signal n:std_logic;
signal count3,count4 :std_logic_vector(3 downto 0);
begin
process(set,hour,n)
begin
n<=hour and set;
if n' EVENT AND n='1' THEN
if count4>="0010" and count3="0011" then
count4<="0000";count3<="0000";
else count3<=count3+1;
if count3="1001" then
count4<=count4+1;
count3<="0000";
end if;
end if;
end if;
end process;
hour0<=count3;hour1<=count4;
end;你可以去网上找找峰值保持电路,这是很常见的一种电路,原理非常简单,就是利用电容充电和运放高输入阻抗的原理,图我就不贴上来了。
大鹏和小鸟 说的我不是很赞同,我同学做过一个压电信号保持的电路,其中就是用了一个峰值保持电路,压电信号是一种变化很快的信号,用峰值保持后,可以将信号保持好几秒。并不要你去不断和前面记录数据进行比较,电路本身就有那种功能,只要现在的输入电压比前一时刻电压大,电路就会充电,电压会自动保存在电容器两端。如果输入电压比前一时刻电压小,由于电容回路阻抗极大无法放电,因此一直会保存段时间的峰值,如果要清除,可以另外加一个回路,清除也就是让电容放电
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)