第一篇:数字电子钟逻辑电路设计总结报告
课程设计总结报告
写总结报告是对学生写科学论文和科研总结报告的能力训练。总结报告包括以下内容: 1.报告名称
2.内容摘要(<300字)3.设计内容及要求
4.方案比较,画出系统框图,确定使用的方案。
5.单元电路设计、参数计算和器件的选择(含器件功能表)并说明单元电路工作原理。
6.画出完整的电路图 7.安装调试内容,包括:
(1)使用的主要仪器和仪表;(2)调试电路的方法和技巧;
(3)测试的数据和波形,并与计算结果比较分析;(4)调试中出现的故障、原因及排除方法。
8.总结设计电路的特点和方案的优缺点,提出进一步的改进意见和未来的发展。9.列出所用的元器件 10.列出参考文献
第二篇:数字逻辑课题报告—电子钟
电子钟设计报告
班级:
姓名:学号:
指导老师:
验收时间:201 年
日
月
一﹑设计目的及要求
设计并实现多功能数字钟,达到要求如下:
1. 能进行正常的记时、记分、记秒,2.实现校时、校分以及秒清0的功能,3.实现整点报时的功能,4.实现定闹铃及闹铃的响,完成全部电路设计后在实验板上下载,验证设计课题的正 确性。
二、系统设计方案论述:
根据对电子钟控制电路的要求,分析如下:
首先根据老师对实验的要求,编写电子钟控制电路的vhdl程序,程序分为正常显示时间、调整和闹铃时间调整、报时等进程;运用了3-8译码器、八选一、二选一数据选择器、模8计数器、七段译码、24进制计数器、60进制计数器、比较器等构成其动态显示电路,使电子钟正常显示。
开始确定了两个方案,但考虑到方案的可行性,选择了第一种,也就是这一种方案。
三、环境说明:
主要是使用了MAXPLUSⅡ软件,经过系统的学习及了解,以及请教老师和同学,虚心请教,终于在不懈努力下完成了老师的任务。
四、具体设计:
顶层结构功能图:
根据总体设计框图,可以将整个系统分为6个模块来实现,分别是计时模块、校时模块、整点报时模块、闹钟模块、动态显示模块及正常显示时间与闹钟时间的切换模块。
1、计时模块:
能进行正常的时、分、秒计时,用动态扫描的方式,需用8个数码管。
用24进制计数器进行小时的显示,用60进制计数器进行分的显示,用60进制计数器进行秒的显示
2、校时模块:
利用按键实现“校时”、“校分”和“时、分、秒的清0”功能。先令k5=1,切换到正常时钟的显示上。
(1)k1:校时键。当k1=0键时,计时器迅速递增,按24小时循环,并且计满23时回到00,k1=1时停止循环。
(2)k2:校分键。当k2=0键时,计时器迅速递增,按60小时循环,并且计满59时回到00,但不向时进位,k2=1时停止循环。
(3)k8:秒清零。当k8=0时,时、分、秒清零。
3、整点报时模块:
能进行整点报时,即当分秒都为0时整点报时。、闹钟模块:
和以上计时模块一个原理,但也可以进行闹钟的设置
先令k5=0,切换到闹钟的显示上。
(1)k3:校时键。当k1=1键时,计时器迅速递增,按24小时循环,并且计满23时回到00,k3=0时停止循环。
(2)k4:校分键。当k2=1键时,计时器迅速递增,按60小时循环,并且计满59时回到00,但不向时进位,k4=1时停止循环。
(3)k6:k6=0时清零,k6=时正常运行。
(4)k7:k7=0分清零,k7=1时正常运行。
5、动态显示模块:
时间的显示需要用到8个数码管,其中小时与分钟及分钟与秒之间用数码管的一个g段,在动态显示方式下,所有的数码管对应同一组七段码,可用VHDL语言实现
6、正常显示时间与闹钟时间的切换模块: k5=1,切换到正常时钟的显示上 k5=0,切换到闹钟的显示上
五、各功能模块说明及源代码: 数码管显示电路源程序: 1.七段译码显示:
library ieee;
use ieee.std_logic_1164.all;
entity bin7 is port(date_in:in std_logic_vector(3 downto 0);
en:in std_logic;
date_out:out std_logic_vector(6 downto 0));end entity;
architecture duan of bin7 is begin process(date_in,en)
begin
if en='1' then case date_in is when “0000”=>date_out<=“1111110”;--0
when “0001”=>date_out<=“0110000”;--1 when “0010”=>date_out<=“1101101”;--2 when “0011”=>date_out<=“1111001”;--3 when “0100”=>date_out<=“0110011”;--4 when “0101”=>date_out<=“1011011”;--5 when “0110”=>date_out<=“1011111”;--6 when “0111”=>date_out<=“1110000”;--7 when “1000”=>date_out<=“1111111”;--8 when “1001”=>date_out<=“1111011”;--9 when others=>date_out<=“0000001”;end case;end if;
end process;
end duan;
2.八选一数据选择器: library ieee;use ieee.std_logic_1164.all;entity mux8 is port(d0,d1,d2,d3,d4,d5,d6,d7:in std_logic_vector(3 downto 0);
sel:in std_logic_vector(2 downto 0);
y:out std_logic_vector(3 downto 0));end mux8;architecture arch of mux8 is begin process(d0,d1,d2,d3,d4,d5,d6,d7,sel)begin
case sel is
when “000”=>y<=d0;
when “001”=>y<=d1;
when “010”=>y<=d2;
when “011”=>y<=d3;
when “100”=>y<=d4;
when “101”=>y<=d5;
when “110”=>y<=d6;
when “111”=>y<=d7;
when others=>y<=“0000”;
end case;end process;end arch;
3.二选一选择器(二位)library ieee;use ieee.std_logic_1164.all;
entity mux_2 is port(d1 :in std_logic;
d2 :in std_logic;
sel
:in std_logic;
y
:out std_logic);end mux_2;architecture rtl of mux_2 is begin process(sel,d1,d2)begin if(sel='1')then y<=d1;else y<=d2;end if;
end process;end rtl;
4.二选一选择器(四位)library ieee;use ieee.std_logic_1164.all;
entity mux_24 is port(d1 :in std_logic_vector(3 downto 0);
d2 :in std_logic_vector(3 downto 0);
sel
:in std_logic;
y
:out std_logic_vector(3 downto 0));end mux_24;architecture rtl of mux_24 is begin process(sel,d1,d2)begin if(sel='1')then y<=d1;else y<=d2;end if;
end process;end rtl;
5.3_8译码器: library ieee;use ieee.std_logic_1164.all;
entity decode3_8 is port(a,b,c
:in std_logic;
s1,s2,s3 :in std_logic;
y
:out std_logic_vector(7 downto 0));
end decode3_8;
architecture rtl of decode3_8 is
signal ind:std_logic_vector(2 downto 0);
begin
ind<=c&b&a;
process(ind,s1,s2,s3)
begin
if(s1='1'and s2='0' and s3='0')then
case ind is
when “000”=>y<=“00000001”;
when “001”=>y<=“00000010”;
when “010”=>y<=“00000100”;
when “011”=>y<=“00001000”;
when “100”=>y<=“00010000”;
when “101”=>y<=“00100000”;
when “110”=>y<=“01000000”;
when “111”=>y<=“10000000”;
when others=>y<=“00000000”;
end case;
else y<=“00000000”;end if;end process;end rtl;
6.报时器 library ieee;use ieee.std_logic_1164.all;
entity baoshi is port(a1,a2,a3,a4 :in std_logic_vector(3 downto 0);
y
:out std_logic);
end baoshi;architecture rtl of baoshi is begin process(a1,a2)begin if(a1=“0000” and a2=“0000” and a3=“0000” and a4<=“0011”)then y<='1';else y<='0';end if;end process;end rtl;
7.比较器 library ieee;use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;entity bijiao is port(a1,a2 :in std_logic_vector(3 downto 0);
b1,b2 :in std_logic_vector(3 downto 0);
y
:out std_logic);end bijiao;architecture rtl of bijiao is begin process(a1,a2,b1,b2)begin if(a1=b1 and a2=b2)then y<='1';else y<='0';end if;end process;end rtl;
8.模60 library ieee;use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;entity mod_60 is port(clk:in std_logic;
clr :in std_logic;
yh :out std_logic_vector(3 downto 0);
yl :out std_logic_vector(3 downto 0);
co :out std_logic);
end mod_60;architecture six of mod_60 is signal
hh:std_logic_vector(3 downto 0);signal
hl:std_logic_vector(3 downto 0);begin
process(clk)
begin
if clr='0'
then hh<=“0000”;hl<=“0000”;co<='0';
elsif(clk'event and clk='1')then
if(hh=“0101” and hl=“1001”)then
hh<=“0000”;hl<=“0000”;co<='1';
elsif(hl=“1001”)then
hh<=hh+1;
hl<=“0000”;co<='0';
else
hl<=hl+1;
hh<=hh;co<='0';
end if;
end if;
end process;
yh<=hh;yl<=hl;
end six;
9.模24 library ieee;use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;entity mod_24 is port(clk:in std_logic;
clr :in std_logic;
yh :out std_logic_vector(3 downto 0);
yl :out std_logic_vector(3 downto 0);
co :out std_logic);
end mod_24;architecture two of mod_24 is signal
hh:std_logic_vector(3 downto 0);signal
hl:std_logic_vector(3 downto 0);
begin
process(clk)
begin
if clr='0'
then hh<=“0000”;hl<=“0000”;co<='0';
elsif(clk'event and clk='1')then
if(hh=“0010” and hl=“0011”)then
hh<=“0000”;hl<=“0000”;co<='1';
elsif(hl=“1001”)then
hh<=hh+1;
hl<=“0000”;co<='0';
else
hl<=hl+1;
hh<=hh;co<='0';
end if;
end if;
end process;
yh<=hh;yl<=hl;
end two;
六、遇到的问题:
当调动开关时,容易出现数字的变动,经过上网的搜索可知,这是抖动效应,是物理效应,现学知识还解决不了。所以在实验中我们就小心翼翼的把弄开关,结果也没出现什么错误。但是我们知道这不是做科学应有的严谨态度,但以后我们会努力的。
七、实验结果及心得体会:
实验结果:程序实现了现实情况下正常时间的显示,时间的调整,闹钟的设置,还有闹钟的响铃以及整点的报时。实验心得:
1.通过本次实验工作,学会了很多vhdl的编程思想,并进一步掌握了其基本语法,可以熟练地编写程序啦!
2.在实验过程中,提高了分析问题、解决问题的能力,明白了用vhdl语言设计的基本过程及步骤,为以后的实验提供了宝贵的经验。3.在编写程序的过程中遇到了很多问题,一开始一点头绪也没有,通过查找资料有了初步的认识,在实际过程中也遇到了很多问题,通过和同学及老师的交流,一些问题逐步迎刃而解。
八、感谢
感谢王老师的辛勤教导,感谢学院给提供了进行实践的机会,让我们在实践中学会了很多,提高了我们的自我学习能力,是我们得到了很好的进步。在此还要感谢学校给我们提供了实验器材。
第三篇:电子钟——合肥工业大学数字逻辑课程设计报告
一)设计题目:
电子钟
二)设计任务和基本要求:
1.实验台上的六个数码管显示时、分、秒; 2.能使电子钟复位(清零); 3.能启动和停止电子钟运行;
4.在电子钟停止运行状态下,能够修改时、分、秒的值; 5.具有报时功能,整点时喇叭鸣叫。
三)所用主要器件和设备:
1、TDS 系列数字电路实验系统
2、ISP 系统可编程器件以及《数字逻辑》课程实验所用部分中、小规模集成电路等
3、PC 计算机
4、ISP1032E 可编程逻辑器件以及数据选择器、触发器、移位寄存器、计数器及基本门电路等
5、在Windows平台上运行的ispLEVER 编程软件
四)设计思想:
数字钟电路的基本结构由两个 60 进制计数器和一个24 进制计数器组成,分别对秒、分、小时进行计时,当计时到23 时59 分59 秒时,再来一个计数脉冲,则计数器清零,重新开始计时。
当数字钟处于计时状态时,秒计数器的进位输出信号作为分钟计数器的计数信号,分钟计数器的进位输出信号又作为小时计数器的计数信号时、分、秒的计时结果通过6 个数码管来动态显示。数字钟除了能够正常计时外,还应能够对时间进行调整。因此,通过模式选择信号MOD1、MOD2 控制数字钟的工作状态,即
控制数字钟,使其分别工作于正常计时,调整分、时和设定分、时5 个状态。当数字钟处于计时状态时,3 个计数器允许计数,且秒、分、时计数器的计数时钟信号分别为CLK,秒的进位, 分的进位;当数字钟处于调整时间状态时,被调的分或时会一秒一秒地增加;当数字钟处于定时状态时,可以设定小时和分;当计时到所设定的时刻时,会响闹钟
五)设计步骤及程序:
pause是暂停键,当暂停时set1与set2分别控制调节为时还是为分或是为秒。exam提供一个模拟上升沿,hh,hl,mh,ml,sh,sl分别控制小时高位,低位,分钟高位,分钟低位,秒高位,低位。thh,thl,tmh,tml,tsh,tsl分别表示时分秒变化的中间变量。alarm表示闹钟是否报时
library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity clock is port(clk:in std_logic;
clr:in std_logic;
pause:in std_logic;
set1:in std_logic;
set2:in std_logic;
clk1:in std_logic;
alarm:out std_logic;
hh,hl,mh,ml,sh,sl:out std_logic_vector(3 downto 0));end clock;architecture behavioral of clock is signal count:integer range 0to 1000;signal thh,thl,tml,tmh,tsh,tsl:std_logic_vector(3 downto 0);signal exam:integer;begin
process(clk,clk1,clr,pause,set1,set2)
begin
alarm<='0';
if(clr='0')then
hh<=“0000”;
hl<=“0000”;
mh<=“0000”;
ml<=“0000”;
sh<=“0000”;
sl<=“0000”;
thh<=“0000”;
thl<=“0000”;
tmh<=“0000”;
tml<=“0000”;
tsh<=“0000”;
tsl<=“0000”;
count<=0;
exam<=0;elsif(clk='1'and clk'event)then
if(pause='1')then
if(count=999)then
count<=0;
if(thh=“0010”and thl=“0011”and tmh=“0101”and tml=“1001”and tsh=“0101”and tsl=“1001”)then
thh<=“0000”;
thl<=“0000”;
tmh<=“0000”;
tml<=“0000”;
tsh<=“0000”;
tsl<=“0000”;
elsif(tsl=“1001”)then
tsl<=“0000”;
if(tsh=“0101”)then
tsh<=“0000”;
if(tml=“1001”)then
tml<=“0000”;
if(tmh=“0101”)then
tmh<=“0000”;
if(thl=“1001”)then
thl<=“0000”;
thh<=thh+1;
else thl<=thl+1;
end if;
else tmh<=tmh+1;
end if;
else tml<=tml+1;
end if;
else tsh<=tsh+1;
end if;
else tsl<=tsl+1;
end if;
else count<=count+1;
end if;
elsif(pause='0'and(clk1='1'and exam=0))then
exam<=1;
if(set1='1'and set2='0')then
if(thh=“0010”and thl=“0011”)then
thh<=“0000”;
thl<=“0000”;
elsif(thl=“1001”)then
thl<=“0000”;
thh<=thh+1;
else thl<=thl+1;
end if;
elsif(set1='0'and set2='1')then
if(tmh=“0101”and tml=“1001”)then
tmh<=“0000”;
tml<=“0000”;
elsif(tml=“1001”)then
tml<=“0000”;
tmh<=tmh+1;
else tml<=tml+1;
end if;
elsif(set1='0'and set2='0')then
if(tsh=“0101”and tsl=“1001”)then
tsh<=“0000”;
tsl<=“0000”;
elsif(tsl=“1001”)then
tsl<=“0000”;
tsh<=tsh+1;
else tsl<=tsl+1;
end if;
end if;
end if;
if(clk1='0')then
exam<=0;
end if;
hh<=thh;
hl<=thl;
mh<=tmh;
ml<=tml;
sh<=tsh;
sl<=tsl;
if(tmh=“0000”and tsl=“0000”)then
alarm<='1';
end if;
end if;
end process;end behavioral;
tml=“0000”and tsh=“0000”and
六)实验结果:
1.当clk提供一个时钟脉冲,闹钟开始计时,当暂停键pause为1时,时钟按标准时钟运行
2.当pause为0时,可以调节时钟,当set1=0,set2=0时,调节秒,当set1=0,set2=1时为调节分,当set1=1,set2=0时为调节时
3.当整点时,时钟会自动鸣笛。
七)心得体会:
经过一个星期的课程设计,经历的困难一语难尽。整个课程设计期间我们失落过,也曾一度热情高涨。从开始时满富盛激情到最后汗水背后的复杂心情,点点滴滴无不令我们回味无长。
生活就是这样,汗水预示着结果也见证着收获。劳动是人类生存生活永恒不变的话题。通过实习,我才真正领略到“艰苦奋斗”这一词的真正含义。我想说,设计确实有些辛苦,但苦中也有乐,在如今浮躁的生活中,很少有机会能静下心来做一个设计,但我们可以,一个团队的任务,一起的工作可以让我们有说有笑,相互帮助,配合默契。
在一次次的试验中,我们收获的不仅是电路设计的技能更加是耐心和经验,还有做课程设计的心态。一根线的错误直接影响着最后的结果,这就让我们每一根线都接的仔细。最让人苦恼的是完全按设计的接线,结果却依然不对,这时候,我们需要分析错误的原因,逐步排查。
最终验收成功的时候我们由衷的高兴。当然,这与老师的指导和示范十分不开的,正是有了老师耐心的指导和对于错误原因分析的帮助,才有了我们的对电路设计的新认识
对我而言,知识上的收获重要,精神上的丰收更加可喜。挫折是一份财富,经历是一份拥有。这次实习必将成为我人生旅途上一个非常美好的回忆!
再次感谢老师,您辛苦了。
第四篇:交通灯控制逻辑电路设计与总结报告
交通灯控制逻辑电路设计与总结报告
一、设计任务
用CPLD设计路口交通灯控制器
二、设计要求
1、满足一下时序要求:南北方向红灯亮,东西方向绿灯亮;南北方向绿灯亮,东西方向红灯亮;
2、每一方向的红(绿)黄灯总共维持30秒;
3、十字路口要有时间显示,具体为:当某一方向绿灯亮时,置显示器为30秒,然后以每秒减一技术方式工作,直至减到数为4秒时,红绿灯熄灭,黄灯开始间隙闪耀4秒,减到0时,红绿灯交换,一次工作循环结束,进入下一步另一方向的工作循环;
4、红绿灯均采用发光二极管;
5、设计由晶振电路产生1Hz标准秒信号的单元电路(实际秒脉冲由开发箱提供);
6、要求对整体电路进行仿真,观察并记录下仿真波形;
7、选作部分:
a、手动调整和自动控制,夜间为黄灯闪耀;
b、白天黄灯亮时,以2Hz的速度闪烁点亮四秒; c、红绿灯循环点亮时间可以自由修改。
三、设计设备
含有Quartus软件的电脑一台,可下载的试验台;
四、设计方法
使用VHDL语言进行程序的设计运行和仿真,以及波形的运行仿真,最后进行下载仿真;
五、方案论证
方案1:把整个流程分成几个进程来做;
方案2:每个进程都使用if和case语句实现功能的实现; 方案3:使用状态机来实现状态间的转换;
方案论证:
1、要实现整个流程,需要做的输出内容类型不同,如果放在一个进程里面就比较容易混淆,产生混乱。而采用分成几个进程来做的方式就明确了每个模块的内容和分工,使其调理清晰,一目了然;
2、if语句是条件语句,是VHDL语言中常用的基本语句。该流程中的变量比较繁多,而使用case语句分情况列出来,简洁明了。
3、状态机的使用格式简洁,使用简单方便,特别是在进行状态的转换时候。并行的状态转换不易出错,可将状态转换、赋值、计数等多个功能封装在某一个状态中,并且更加便于为系统添加新的状态功能。
方案选定:
通过以上分析,确定用以上方案为本次设计的方案。
六、工作原理
先对所给时钟脉冲进行分频到标准时钟脉冲;设计两个时钟控制倒计时,倒计时的时间可自由修改,由输入决定;设计另一个时钟,用以控制白天与夜间模式的转换;在白天时,根据倒计时的数字进行红绿灯的状态转换;夜间时,红绿灯状态改为夜间模式:黄灯闪烁。
七、程序设计
------交通灯控制系统所使用的库和包
-------------------------library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;
-------------------------------交通灯控制系统的实体
-------------------------entity jt is
port(clk,reset:in std_logic;
------------------时钟脉冲clk由系统直接提供,需要进行分
频;reset是启动键,当reset为1是,系统启动
t0:integer range 0 to30;
------------------红绿灯循环点亮的时间,根据输入的不同
系统运行的不同
r1,y1,g1,r2,y2,g2:out std_logic;
------------------r1为东西方向红灯,y1为东西方
向黄灯,g1为东西方向绿灯;r2为南北方向红灯,y2为南北方向黄灯,g2为南北方向绿灯
ec0,ec1,nc0,nc1:out std_logic_vector(3 downto 0));
------------------ec0,ec1分别为东西方向的倒计时间的个位和十位;
nc0,nc1分别为南北方向的倒计时间的个位和十位
end jt;-------------------------------交通灯控制系统的结构体(5个进程)
-------------------------architecture one of jt is
type state_type is(s0,s1,s2,s3);
------------------定义状态的类型
signal state:state_type;
------------------使用状态机
signal k:std_logic;
------------------分频后的1Hz的标准时钟脉冲
signal c1,c2:integer range 0 to 30;
------------------定义东西、南北方向的两个
倒计时的计数
signal t1:integer range 0 to 3600;
signal t2:integer range 0 to 24;------------------定义一个时钟,用以控制白天与夜间模式 Begin------该进程用以分频
-------------------------q0:process(clk)
variable tt:std_logic_vector(9 downto 0);
------------------中间变量
begin
if clk'event and clk='1' then
if tt=“1111101000” then
----------------------把所给1kHz分频成1Hz的脉冲
k,10000分频,仿真值用“ 0000000100”八分频
tt:=(others=>'0');
k<='1';
else
tt:=tt+1;k<='0';
end if;
end if;end process q0;-------------------------
------该进程用以设计时钟
-------------------------q1:process(k,reset)
begin
if reset='1' then
------------------启动开关为1时,系统开始运行
t1<=0;t2<=0;
------------------从0点开始 elsif k='1' and k'event then if t1=3599 then
------------------一个t1循环是一个秒,仿真值用“35” if t2=23 then
-------------------一个t1循环是一个小时,一天24小时 t2<=0;
else t2<=t2+1;end if;t1<=0;else t1<=t1+1;end if;end if;end process q1;-------------------------------该进程用以控制白天黑天模式和红绿灯状态转换
-------------------------q2:process(k,reset,t2)
begin
if t2>=5 and t2<=22 then
-------------------白天模式5:00到22:00之间
if reset='1' then
-------------------启动开关为1时,系统开始运
行,进行状态转换
r1<='0';y1<='0';g1<='1';-------------------东西方向绿灯亮 r2<='1';y2<='0';g2<='0';-------------------南北方向红灯亮 state<=s0;-------------------红绿灯处于初始状态s0 c1<=t0;
c2<=t0;-------------------倒计时从自由输入值开始递减 elsif k='1' and k'event then
case state is
when s0=>-------------------当处于第1状态时,讨论
if c1=5 then
--------------由于进程内部的并列进
行,当倒计时第4秒时,进入到第2状态s1
state<=s1;
c1<=c1-1;
c2<=c2-1;
--------------倒计时递减
elsif c2=0 then
------------倒计时减到0时,再从
初始值开始
c1<=t0;
c2<=t0;
else
----------------否则继续保持第1状态s0
state<=s0;
c1<=c1-1;
c2<=c2-1;
end if;
when s1=>-------------------当处于第2状态时,讨论
if c1=1 then--------------由于进程内部的并列进行,当
倒计时第t0秒时,进入到第3状态s2
state<=s2;
c1<=c1-1;
c2<=c2-1;
else----------------否则继续保持第2状态
state<=s1;
c1<=c1-1;
c2<=c2-1;
end if;
when s2=>-------------------当处于第3状态时,讨论
if c2=5 then--------------由于进程内部的并列进行,当倒计时第4秒时,进入到第4状态s3
state<=s3;
c1<=c1-1;
c2<=c2-1;
elsif c1=0 then
------------倒计时减到0时,再从初
始值开始
c1<=t0;
c2<=t0;
else
----------------否则继续保持第3状态
state<=s2;
c1<=c1-1;
c2<=c2-1;
end if;
when s3=>-------------------当处于第4状态时,讨论 if c2=1 then--------------由于进程内部的并列进行,当倒
计时第t0秒时,进入到第1状态s0
state<=s0;
c1<=c1-1;
c2<=c2-1;
else----------------否则继续保持第4状态
state<=s3;
c1<=c1-1;
c2<=c2-1;
end if;
when others=> state<=s0;
end case;if state=s0 then
r1<='0';y1<='0';g1<='1';
r2<='1';y2<='0';g2<='0';elsif state=s1 then
r1<='0';g1<='0';
r2<='1';y2<='0';g2<='0';
if c1=4 or c1=2 then y1<='1';
else y1<='0';
end if;elsif state=s2 then
r1<='1';y1<='0';g1<='0';
r2<='0';y2<='0';g2<='1';elsif state=s3 then
r1<='1';y1<='0';g1<='0';
r2<='0';g2<='0';
if c2=4 or c2=2 then y2<='1';
else y2<='0';
end if;end if;
--各个状态的红绿灯变量的赋值,‘1’亮‘0’熄 end if;else-------------------夜间模式22:00到次日5:00之间
c2<=0;c1<=0;r1<='0';r2<='0';g1<='0';g2<='0';y1<=k;y2<=k----------------红绿灯的状态:脉冲k赋给黄灯变量,黄灯闪烁
end if;end process q2;-------------------------------该进程用于东西方向倒计时的译码显示
-------------------------q3:process(c1)
begin case c1 is when 0=>ec0<=“0000”;ec1<=“0000”;when 1=>ec0<=“0001”;ec1<=“0000”;when 2=>ec0<=“0010”;ec1<=“0000”;when 3=>ec0<=“0011”;ec1<=“0000”;when 4=>ec0<=“0100”;ec1<=“0000”;when 5=>ec0<=“0101”;ec1<=“0000”;when 6=>ec0<=“0110”;ec1<=“0000”;when 7=>ec0<=“1000”;ec1<=“0000”;when 9=>ec0<=“1001”;ec1<=“0000”;when 10=>ec0<=“0000”;ec1<=“0001”;when 11=>ec0<=“0001”;ec1<=“0001”;when 12=>ec0<=“0010”;ec1<=“0001”;when 13=>ec0<=“0011”;ec1<=“0001”;when 14=>ec0<=“0100”;ec1<=“0001”;when 15=>ec0<=“0101”;ec1<=“0001”;when 16=>ec0<=“0110”;ec1<=“0001”;when 17=>ec0<=“0111”;ec1<=“0001”;when 18=>ec0<=“1000”;ec1<=“0001”;when 19=>ec0<=“1001”;ec1<=“0001”;when 20=>ec0<=“0000”;ec1<=“0010”;when 21=>ec0<=“0001”;ec1<=“0010”;when 22=>ec0<=“0010”;ec1<=“0010”;when 23=>ec0<=“0011”;ec1<=“0010”;when 24=>ec0<=“0100”;ec1<=“0010”;when 25=>ec0<=“0101”;ec1<=“0010”;when 26=>ec0<=“0110”;ec1<=“0010”;when 27=>ec0<=“0111”;ec1<=“0010”;when 28=>ec0<=“1000”;ec1<=“0010”;when 29=>ec0<=“1001”;ec1<=“0010”;when 30=>ec0<=“0000”;ec1<=“0011”;----------------------------当在设定范围内时,分别为个位十位译码并显示
when others=>ec0<=“0000”;ec1<=“0000”;
-------------------------否则,LED灯显示0
end case;
end process q3;-------------------------------该进程用于南北方向倒计时的译码显示
-------------------------q4:process(c2)
begin
case c2 is when 0=>nc0<=“0000”;nc1<=“0000”;when 1=>nc0<=“0001”;nc1<=“0000”;when 2=>nc0<=“0010”;nc1<=“0000”;when 3=>nc0<=“0011”;nc1<=“0000”;when 4=>nc0<=“0100”;nc1<=“0000”;when 5=>nc0<=“0101”;nc1<=“0000”;when 6=>nc0<=“0110”;nc1<=“0000”;when 7=>nc0<=“0111”;nc1<=“0000”;when 8=>nc0<=“1000”;nc1<=“0000”;when 9=>nc0<=“1001”;nc1<=“0000”;when 10=>nc0<=“0000”;nc1<=“0001”;when 11=>nc0<=“0001”;nc1<=“0001”;when 12=>nc0<=“0010”;nc1<=“0001”;when 13=>nc0<=“0011”;nc1<=“0001”;when 14=>nc0<=“0100”;nc1<=“0001”;when 15=>nc0<=“0101”;nc1<=“0001”;when 16=>nc0<=“0110”;nc1<=“0001”;when 17=>nc0<=“0111”;nc1<=“0001”;when 18=>nc0<=“1000”;nc1<=“0001”;when 19=>nc0<=“1001”;nc1<=“0001”;when 20=>nc0<=“0000”;nc1<=“0010”;when 21=>nc0<=“0001”;nc1<=“0010”;when 22=>nc0<=“0010”;nc1<=“0010”;when 23=>nc0<=“0011”;nc1<=“0010”;when 24=>nc0<=“0100”;nc1<=“0010”;when 25=>nc0<=“0101”;nc1<=“0010”;when 26=>nc0<=“0110”;nc1<=“0010”;when 27=>nc0<=“0111”;nc1<=“0010”;when 28=>nc0<=“1000”;nc1<=“0010”;when 29=>nc0<=“1001”;nc1<=“0010”;when 30=>nc0<=“0000”;nc1<=“0011”;---------------------------当在设定范围内时,分别为个位十位译码并显示
when others=>nc0<=“0000”;nc1<=“0000”;
end process q4;-------------------------end architecture one;
----所有进程结束-------------------------
八、仿真结果
1、clk为输入脉冲;开始令reset为’1’,启动系统,系统正常工作后值为’0; t0为红绿灯循环时间,可自由修改,如果输入值为’0010000’,则为16秒倒计时。如下图:系统从0点开始运行,处于夜间模式时,倒计时都为“00”,两个方向都为黄灯闪烁,红绿灯都熄灭。
---------------------------否则,LED灯显示0
end case;2、5:00之后,进入到白天模式:从第1状态(东西方向绿灯亮、南北方向红灯)开始,倒计时从16秒开始递减。倒计时第4秒后进入第2 状态(东西方向黄灯闪烁,南北方向红灯亮)。
3、倒计时第0秒后进入第3 状态(东西方向红灯亮,南北方向绿灯亮),倒计时再从16秒开始递减;倒计时第4秒后进入第4 状态(东西方向红灯亮,南北方向黄灯闪烁);倒计时第0秒后进入第1 状态(东西方向绿灯亮,南北方向红灯亮),倒计时再从16秒开始递减
。如此循环。
4、当计时器到22:00时,再次进入夜间模式:东西南北方向黄灯闪烁;到次日5:00时又回到白天模式。如此循环。
九、讨论与改进
特点:
1、在整个设计过程中,分进程实现整个功能,简单明了;
2、状态机的功能和优点得到了较为完整的体现;
3、分夜间和白天模式不同,系统自动调节;
4、黄灯以闪烁的形式亮;系统运行后红绿灯循环点亮的时间也可自由修改。不足:
1、整个系统启动后从夜间0点开始运行,而不能随意调为哪个时间的交通灯状态,只能从程序中改,不能手动调节;
2、整个功能还是比较简单,未能分左右转和直行的情况;
3、紧急情况处理时也无特殊处理的设置。
改进:
1、在进程中可增加一个输入量,用以控制系统的时钟时间,方便调节模式和交通灯状态;
2、在进程中可加入几个红绿灯状态来分别控制东西方向和南北方向的左转、右转和直行的红绿灯状态;
3、在原有程序的基础上,可通过增加一个输入量来控制一种特殊状态,用以控制特殊情况的处理,视该特殊情况而定。
二○一○年九月三日
第五篇:数字电子钟实验报告
本科实验报告
学号: 指导教师:
2016年7月19日
课程名称:
姓名: 院系: 专业:
电子电路安装与调试 陈肖苇、李晓杰、张晨靖 信息与电子工程学院 电子科学与技术 3140104544 王子立
实验报告
课程名称:电子电路安装与调试指导老师:王子立成绩:______________ 实验名称:多功能数字钟的设计与制作实验类型:设计型同组成员:
一、实验目的和要求
实验目的:
1.学习并掌握中规模集成电路设计制作数字电路系统的方法,装调技术和数字钟的功能扩展电路的设计。
2.熟悉集成电路的使用方法。实验要求:
1.选用74系列或COMS系列中规模集成电路,LED数码显示器为主要器件设计并制作一多功能数字电子钟,要求具有如下功能:
①基本功能:以数字形式显示时、分、秒的时间,小时的显示为“12”翻“1”,手动快校时。
②扩展功能:仿广播电台整点报时,报整点时数,定时控制(时间自定)。自行设计电路,至少实现其中两个扩展功能,电路形式尽可能不与前述电路相同。
2.设计与制作要求
①拟定数字电子钟电路的组成框图,要求电路的基本功能与扩展功能同时实现,使用的器件要尽量少、成本低。
②设计、仿真、制作各单元电路,要求器件布局合理、美观,便于级联与调试。③测试数字电子钟系统的逻辑功能,同时满足基本功能与扩展功能的要求。
④画出数字钟系统的整机逻辑电路图,设计印制电路板,要求器件布局合理,布线整齐、美观。
⑤安装并调试整个数字电子钟。
二、实验内容和原理
实验内容:
1.设计主体电路,完成基本功能:以数字形式显示时、分、秒的时间,小时的显示为“12”翻“1”,手动快校时。
2.设计扩展电路,完成扩展功能:仿广播电台整点报时,报整点时数,定时控制(时间自定)。
3.仿真各单元电路。4.制作PCB板并印刷电路。5.焊接电路板并调试。实验原理:
1.数字电子钟电路原理
数字电子钟实际上是一个对标准频率(1Hz)进行计数的电路,主要由基准频率源、分频器、计数器、译码显示驱动器、数字显示器和校准电路等组成。基准频率源是数字电子钟的核心,它产生一个矩形波时间基准信号,其频率精度和稳定性决定了计时的精度。分频器采用计数器实现,以得到1秒(即频率1Hz)的标准秒信号脉冲。在计数器电路中,对秒、分计数采用60进制的计数器,对时计数器采用12翻1 的计数器。译码器采用BCD码七段译码显示驱动器。显示器采用LED七段数码管。
整个数字电路系统的原理如图2.1所示,分为主体电路和扩展电路两大部分。其中主体电路完成数字钟的基本功能,扩展电路实现数字钟的扩展功能。
图2.1多功能数字钟系统组成框图
该系统的工作原理是:由振荡器产生稳定的高频脉冲信号,作为数字钟的时间基准,经分频器输出标准脉冲信号。秒计数器满60后想分计数器进位,分计数器满60或向小时计数器进位,小时计数器按照“12翻1”规律计数。计数器的输出经译码器送显示器。计时出现误差时可以用校时电路进行校时、校分。扩展电路必须在主体电路正常运行的情况下才能进行功能扩展。
2.主体电路原理 ①振荡器
振荡器是数字钟的核心。振荡器频率的精确度及稳定度决定了数字钟计时的准确程度,通常选用石英晶体构成振荡器电路。一般来说,振荡器的频率越高,计时精度越高。
由于石英晶体振荡器的输出频率较高,为了得到1Hz的秒信号,需要对振荡器的输出信号进行分频。通常用计数器实现分频,一般用多级二进制计数器实现。
图2.2为时钟专用集成电路(CD4060)的晶体振荡电路及分频电路,取晶振的频率为32768Hz,该电路内部含有一个振荡电路和一个14级2分频电路,使用非常方便。在他的输出端可以得到2Hz的标准脉冲和其他高频信号。2Hz再经过一个D触发器二分频后得到1Hz的秒信号。
图2.2 用CD4060构成的电子钟振荡与分频电路
如果精度要求不高,也可以采用由集成逻辑门与RC组成的时钟源振荡器,或由集成定时器555与RC组成的多谐振荡器。选用555构成的多谐振荡器,设振荡频率f0=103Hz,电路参数如图2.3所示:
图2.3 555构成的振荡器
②分频器
分频器的功能主要有两个:一是产生标准秒脉冲信号,二是提供功能扩展电路所需要的信号,如仿电台报时用的1kHz的高音频信号和500Hz的低音频信号等。选用3片中规模集成电路计数器74LS90可以完成上述功能,因为每片是1/10分频,3片级联则可以获得所需要的频率信号,即第一片的Q0端输出频率为500Hz,第二片的Q3端输出为10Hz,第三片的Q3端输出为1Hz。
③时分秒计数器
时间计数单元有时计数、分计数和秒计数三个部分。分和秒都是模M=60的计数器,输出为两位的BCD嘛,其计数规律为00→01→„→58→59→00→„。选用74LS92作为十位计数器,74LS90作为个位计数器,再将他们级联组成模数M=60的计数器。
也可以选用10进制计数器,无需进制转换,只需要将Q0和CP1’相连即可。CP0’与脉冲输入信号相连,Q3可作为向上的进位信号与秒的十位计数电路CP0’相连,电路连接如图2.4所示:
图2.4 十进制计数器电路
秒十位计数电路为6进制计数器,需要进制转换。10进制计数器转换为6进制计数器的电路如图2.5所示,Q2、Q1通过与门与1清零端R相连,实现6进制转换,与门的输出同时还作为向上的进位信号与分个位计数电路CP0’相连。
图2.5 十进制-六进制计数器转换电路
分计数器与秒计数器设计相同。
时计数器是一个12翻1的特殊进制计数器,即当数字中运行到12时59分59秒时,秒的个位计数器再输入一个秒脉冲后,数字钟应自动显示为01时00分00秒,实现日常生活中习惯用的计时规律。选用74LS191和74LS74,其电路原理见图2.6:
图2.6 时计数器
74LS191是带异步置数端的16进制可逆计数器,设计成0-9的10进制加法器和2→1的减法计数器,用它做1-9的计数何从12→1的减法计数。74LS74是D触发器,用作时十位计数。
工作过程:74LS191从0开始计数,到第九个技术脉冲过后,其输出为1010,与非门G1输出低电平,计数器异步置零,与非门G1又回到高电平。与非门G1回到高电平的瞬间(上升沿),74LS74触发器被置1,完成9-10的进位过程。第十一、十二个脉冲过后计数状态分比为10001/10010,这时与非门G2输出低电平,计数控制端为高电平74LS191被设置为减法计数器,第十三个脉冲到来是74LS191的状态由0010转变为0001.这时,与非门G3的两输入端都为高电平,输出变为低电平,使D触发器清零,整个计数器的状态为00001,完成了从12→1的状态转换。同时计数器74LS191的控制端又恢复为低电平,重新开始下一个12的计数周期。
④译码、驱动及显示电路
各计数单元的计数器实现了对时间的累计,并分别从Q0-Q3端以BCD码的形式输出,译码驱动显示电路是将计数器的输出数码转换为数码显示器所需要的逻辑并驱动显示器进行显示。图2.7是使用CD4511作为译码驱动电路,选用LED数码管作为显示器。CD4511是CMOS BCD码到7段锁存、译码、驱动电路,它可以直接驱动共阴极LED,图中电阻器限流的作用,其阻值应根据电源电压来决定,一般限制LED数码管每段笔画10mA左右。
图2.7 译码、驱动及显示电路
⑤时分校正电路
当数字钟刚接通电源或计时出现误差时,需要校正时间,校时是数字钟应具备的基本功能。一般电子钟都有时、分、秒等校时功能。
对校时电路的要求是:在小时校正的时候不影响分和秒的正常计数,在分校正时不影响小时和秒的正常计数。校时方法有快校时和慢校时两种:快校时通过开关控制,使计数器会1Hz的校时脉冲计数,慢校时用手动产生单脉冲作为校时脉冲。图2.8为校时分电路,它是由基本RS触发器和与非门组成,基本RS触发器的功能是产生单脉冲,防止抖动。其中K为校正用的控制开关。校正脉冲采用1Hz的秒信号,当K处于图示位置时,与非门G1输出高电平,基本RS触发器处于1状态,这是数字钟正常工作,来自分或秒的进位信号能进入时或分计数器。拨动开关K时,与非门G2输出高电平,基本RS触发器处于0状态,这时数字钟处于校正状态,秒信号可以直接进入计数器,而进位信号被阻止,因而能够较快地校正相应计数器的计数值。校准后将校正开关K薄回原位,数字钟继续进行正常的计数工作。如果校时脉冲改由单位脉冲产生器提供,则可以进行慢校时。
图2.8 时分校正电路
3.功能扩展电路 ①仿广播电台整点报时电路
一般数字电子钟都具备整点报时的功能,及在时间到达整点前数秒钟内数字钟会自动发出声响报时。报时方式是发出连续的或者有节奏的音频信号,较复杂的也可以是实时语音提示。仿广播电台整点报时是在整点前数秒内开始报时,响1秒停1秒共5声,前4声低音,最后1声高音。电路功能要求:每当数字钟计时快要到正点时发出声响,通常按照4低音1高音的顺序发出间断声响,以最后一声高音结束的时刻为整点时刻。
设4声低音(约500Hz)分别发生在59分的51秒、53秒、55秒和57秒,最后一声高音(约1kHz)发生在59分59秒,它们的持续时间为1秒,如下表所示: CP(秒)
00 Q3S1 0 0 0 0 0 0 0 0 1 1 0
Q2S1 0 0 0 0 1 1 1 1 0 0 0
Q1S1 0 0 1 1 0 0 1 1 0 0 0
Q0S1 0 1 0 1 0 1 0 1 0 1 0
功能 低音 停 低音 停 低音 停 低音 停 高音 停
当Q3S1=0时鸣低音,当Q3S1=1时鸣高音。
只有当十位的(Q2Q0)M2=11,分个位的(Q3Q0)M1=11,秒十位的(Q2Q0)S2=11以及秒个位的Q0S2=1时,音响电路才能工作。
②定时控制电路
数字钟在制定的时刻发出信号,或驱动音响电路“闹时”,或对某装置的电源进行接通或断开控制,不管是闹时还是控制,都要求时间准确,即信号的开始时刻与持续时间必须满足规定的要求。
例:要求上午7时59分发出闹时信号,持续时间为1min。7时59对应的时个位计数器状态0111,分十位计数器状态0101,分个位计时器状态1001.若将上述计数器输出为1的所有输出端经过与门电路控制音响电路,可以使音响电路正好在7点59响,持续1min后停响。实现的电路如图2.9所示:
图2.9闹时电路
有图可见到达时刻时,音响电路的晶体管导通,扬声器发出1kHz的声音,持续1min后晶体管因为输入端为0而截至,电路停闹。
③报整点时数电路
报整点时数电路功能:每当数字钟计时到整点时发出音响,且几点响几声,实现这一功能的电路主要由以下几部分组成:
①减法计数器:完成几点响几声的功能,即从小时计数器的整点开始进行减法计数,直到零为止。
编码器:将小时计数器的5个输出端Q4、Q3、Q2、Q1、Q0按照12翻1的编码要求转换为减法计数器的4个输入端D3、D2、D1、D0所需的BCD码。
③逻辑控制电路:控制减法计数器的清零与置数,控制报时音响电路的输入信号。根据以上要求,采用过了如图2.10的报整点时数的电路。
图2.10自动报整点时数的电路
编码器是由与非门实现的组合逻辑电路,其输出端的逻辑表达式由5变量的卡诺图可得: D0=Q0
D1=((Q4’Q1)’·(Q1Q4)’)’ D2=(Q2’·(Q4Q1)’)’ D3=(Q3’Q4’)’
减法计数器选用74LS191,个控制端的作用如下:LD’为置数端,当LD’=1时将小时计数器输出的数据经数据输入端D0D1D2D3置入,CP0’为溢出负脉冲输出端,当减计数到0时,CP0’输出一个负脉冲,U’/D为加减控制器。U’/D=1做减法计数。
逻辑控制电路由D触发器74LS74与多级与非门组成。电路的工作原理是:接通电源后按出发开关S,使D触发器清零。该清零脉冲有两个作用,一是使74LS191的置数端LD’=0,即将此时对应的小时计数器输出的整点时数置入74LS191,二是封锁1kHz的音频信号,使音响电路无输入脉冲而停止发声。当分十位计数器的进位脉冲的上升沿来到时,小时计数器加1,新的小时数被置入74LS191,进位脉冲的上升沿同时又使74LS191的状态翻转,输出高电平,经G2、G3延时后使LD’=1,此时74LS191进行减法计数技术脉冲由1Hz秒信号提供。秒信号低电平时音响电路发出1kHZ声音,秒信号高电平时停响。当减法计数到0时,74LS191的CP0’会输出一个负脉冲,使D触发器的触发信号回到0,单触发器的状态保持不变,当74LS191的CP0’结束负脉冲回到高电平时,因此时分进位信号仍为高电平,经与非门G1和非门后产生一个上升沿,使D触发器翻转到0状态,74LS191又回到置数状态。
如果出现某些整点数不准确,主要原因是逻辑控制电路中的与非门延时时间不够,产生了竞争冒险现象,可以适当增加与非门的级数或接入小电容进行延时。
三、主要仪器设备
装有AD、Proteus软件的电脑,各类元件,镊子,焊锡,电烙铁等
四、操作方法和实验步骤
1.实验电路的设计:
①由图2.1所示的数字钟系统组成框图,按照信号的流向分级安装,逐级级联。②级联时如果出现时序配合不同步或尖峰脉冲干扰,引起逻辑混乱,可以增加多级逻辑门来延时,如果显示字符变化很快,模糊不清,可能由于电源电流的跳变引起,可以在集成电路器件的电流端Vcc加退耦滤波电容。
③画数字钟的主题逻辑电路图。经过联调并纠正设计方案中的错误和不足,再测试电路的逻辑功能是否满足设计要求,最后画出满足设计要求的总体逻辑电路图。
2.实验电路的仿真
①在Proteus软件中绘制电路图。
②依次进行主体电路和各扩展电路的功能仿真,观察各电路模块的功能是否满足需求,必要时在关键节点添加示波器探针观察电路的波形情况。根据仿真结果对电路进行适当的调整。
3.PCB板的绘制 4.实验电路的装调
五、设计方案及仿真分析
1.实验电路的设计: ①主体电路
图5.1主体电路
图5.2 振荡器
图5.3 计数器
图5.3 译码显示
②扩展电路
图5.4 正点报时
图5.5仿广播电台正点报时
图5.6 定时控制
图5.7 音响电路
图5.8 电源电路
2.实验电路的仿真: ①计时显示功能
起初仿真发现小时、分、秒的数字都能够正常显示,且分、秒为60进制,但小时信号出现满7复0的状况,即状态为0→1→2→3→4→5→6→7→10→11→12。此时我们的局部电路如图5.9所示:
图5.9 原小时计数显示电路 当H11=1,H13=1即Q3Q2Q1Q0=1010,U2进行置零操作,但观察仿真发现Q3Q2Q1Q0= 0111即置零。我们将H11、H12、H13和LD信号添加到示波器中观察到波形如图5.11所示。
图5.10 添加示波器
图5.11 波形显示
结合数码管显示发现,当数字从7将要变成8时,H13和LD都出现了跳变,H13原本应当从0状态变为1状态并保持一段时间但实际上H13从0变为1后又迅速跳回0,导致电路计数器被置0。
结合这一现象,我们分析原因为,当H13从0状态变成1状态时,H10、H11和H12也同时从1状态变成0,由于电路的延迟,以及计数器采用异步置数,导致跳变现象的产生。因此,我们将原本输入为H11、H13的与非门U18改为输入为H10’、H11、H12’、H13的四输入与非门,然后再进行仿真,发现功能可正常实现。
图5.12 修改后局部电路
②时间校准功能
对电路进行快速时间校准功能的仿真,发现当校时开关下按时,小时数会升高,实现小时校准;当校分开关下按时,分钟数会升高,实现分钟校准,时间校准功能正常。
③正点报时功能
图5.13 音响电路示波器
如图5.13将示波器探针放置在音响电路上,观察当整点来临时,示波器显示的波形情况。图5.14所示是4时来临时,音响发出4声提示音的波形。另外选取其他若干整时数,均能实现正点报时功能。
图5.14正点报时
④仿广播电台报时功能
图5.15仿广播电台报时
观察整点即将来临时音响的波形显示,发现在整点前10s开始报时,并从扬声器中听出先报四声低音再报一声高音,更改若干整点数功能均能正常实现。
⑤定时控制
图5.16 定时控制
利用拨码开关设定好定时的小时数和分钟数,仿真发现到达定时时间时扬声器开始发出提示音,声音持续一分钟,更换若干定时时间再次测试,发现定时控制功能都能够正常实现。
⑥电源电路
图5.15 电源电路
3.PCB板的绘制
最终设计完成的PCB版如下:
图5.16 电路整体设计
电路排版的整体设计理念是将电源以及指示灯放在右上角,通电的同时即可检验电路是否能工作以及电源电路是否正常工作,同时,将整块电路中的用户交互界面,即时间显示界面和按钮操作界面分别置于电路板的上下两侧,其中,将时间显示界面放在最上方,方便观察和调试,将按钮操作界面放在电路板的最下方,方面用户操作;至于其他的功能模块,则放在电路板的中间部分,并按功能相关的原则进行排版。
电路布线的整体设计理念是在电路板的一周布上一圈的电源线和地线,当有需要时直接横向延伸进去进行连接;电路的其它部分则采取自动布线然后手动进行调整的方法。
下面,将针对电路中的关键模块进行详细的介绍。
图5.17 电源电路
上图为电源电路,将8~12V的直流电接在JP1上,若电源正常工作,则电源指示灯LED被点亮,同时经过7805输出5V稳压;其中四个电容C11,C12,C13,C14起到滤波的作用,用来稳定稳压器输出的电压。
图5.18 晶振电路 上图为晶振电路,其中32468为频率为32.768KHz的晶体振荡器,U1是14次分频的分频器,晶振的输出信号经过U1产生一个1KHz的信号和一个2Hz的信号,其中2Hz的信号再次经过分频产生1Hz的信号,当作计数器的时钟。
图5.19 数字钟主体部分
上图为数字钟的主体部分从上到下分别是共阴数码管显示器,分压限流电阻,显示译码器和16进制计数器。首先由16进制计数器由1Hz信号进行计数和产生进位,同时将状态传递给显示译码器4511,显示译码器4511将计数器传递来的状态进行译码,输出对应的高电平信号,经电阻分压后,点亮对应的共阴数码管显示器,即可实现电路的主体功能。
图5.20 开关控制电路
上图是我们的开关控制电路,左边四个拨码开关分别对应小时的十位,小时的个位,分钟的10位,分钟的各位,用其对应的二进制代码进行控制。SW2是闹钟控制电路,其中仅开关1闭合,闹钟打开;仅开关2闭合,闹钟关闭;开关1和开关2同时断开,芯片默认高电平,闹钟打开;开关1和开关2同时闭合,则电源和地会短路,所以不能同时闭合。SW1是整点报时控制电路,当开关1闭合时,整点报时功能使能,开关1打开,整点报时功能关闭。S1是小时电路的手动快校时按键,S2为分钟电路的手动快校时按键。
4.电子钟的安装与调试 ①安装电路 按照原理图、PCB图和板子上的元件名称安装、焊接电路,芯片先焊插座,方便出现问题时进行修改。老师告知PCB板可能出现几处错误,因为修改元件时自动布线把过孔取消了,因此几根地线没有连上。我们检查PCB板与AD中的PCB图连线,计划用导线将没连上的线连上,后来发现错误已经被修改。
②电源电路
安装好电路后,在没有装芯片的情况下,测试电源电路是否正常。将直流电源调整为10V,限流在0.6A左右,按下OUTPUT,电源电路的指示LED灯亮,用万用表测量输出端的电压,在5V左右,故电源电路正常工作。
③主体电路的调试
按照原理图首先安装CD4060芯片,测试振荡电路是否正常。示波器探头首先接CD4060的4脚,接地端接电源地,测得1kHz左右的方波信号。在将探头接至5脚,测得500Hz左右的方波信号。在晶振处可以测得32.7KHz左右的信号(很遗憾忘记拍照记录波形)。因此振荡电路正常工作。
安装所有的芯片,接通电源,电源电路指示灯亮,数码管亮,显示小时的两个数码管显示18,显示分钟的两个数码管显示88,显示秒的两个数码管从零开始以1Hz的频率计数。秒数码管的变化说明秒计数正确,分钟和小时则说明了我们在设计中忽略了自启动问题。通过校时、校分按键调节小时和分钟数合适。
当秒到“59”后,两数码管变为0,同时分钟位加1,说明秒到分钟的逻辑正确。
长按校分按钮,可以看到两个分钟的数码管显示按60进制以秒计数,到达59后小时加1,说明分钟模块正常工作。
长按校时按钮,小时以1Hz频率实现1→12计数,小时模块正常工作。主体电路数字钟正常工作。
在测试按钮短按实现快校时时,发现短按校时按钮,小时显示有可能不变、或有可能乱跳,如从12跳到6跳到2;校分按钮短按时有不变情况,在校分计数超过40后经常直接置零;并且校分按钮会影响到小时的显示;长按时按键按下和松开时也会影响计数变化。这可能与按键开关的抖动有关系;在测试过程中还发现PCB板的抖动也会影响到数码管显示。开关防抖动与上拉电阻与并联电容组成的RC电路有关,所以通过改变电容电阻的值来增大RC电路的时间常数。我们把104的电容换成220uF的电容,使RC电路的时间常数在100ms左右,焊接时注意电容的正负极。但是改变电容后按键短按校时校分情况并没有明显改变。
最后我们决定将按键开关换成拨码开关来得到电平,通过1Hz信号来校时。换成拨码开关后,打开拨码开关后小时、分钟能够正常计数。但是拨码开关与底座有些接触不良,拨动开关时也有可能有抖动,因此拨动拨码开关时需要小心,固定电路板和拨码开关拨动开关可以正常工作。
在调节校时、校分时曾经在板子后方接一个电容,并接过示波器,这个过程中分钟数码管曾突然不显示,按校时、校分按钮并不能使其恢复正常。后发现电路板上分钟电路用到的74LS390非常烫,可能已被烧坏。拆下74LS390后用万用表测试插座上各个管脚的电压,发现电压并没有异常情况,接地脚与电源地直接的电压为0V左右。检查电路板电路没有发现问题。猜测可能背后接电容和示波器测波形时可能有短路等情况发生导致74LS390烧坏。更换74LS390后,电路正常工作,390有稍微发热但不会发烫,390接地脚电压与电源地相同,可以正常使用。
④调节闹钟功能。
闹钟电路通过拨码开关设置闹钟时间。
首先确定电路板上从左到右四个开关顺序按照小时的十位、个位,分钟的十位、个位排列,之后按照当前时间设置拨码开关的数值。此处输入分别为数码管上显示数字的二进制编码,打开闹钟开关后发现喇叭并没有响。检查原理图和电路板,发现每个拨码开关的高位到低位是从右向左的,重新调整拨码开关的拨码后,喇叭持续发出1kHz的声音。关闭闹钟电路的控制开关后声音停止,在同一分钟内,再次打开控制开关,仍然发出声音,当分钟改变时,声音停止。说明闹钟电路正常工作。
调试过程中,应该注意控制开关的作用。由于设计电路的原因,控制开关有两个拨码开关接入状态,左数第一个与电源相接,第二个与地相接,当第二个开关未接通(0)时不论第一个拨码开关接通与否输入都为高电平(1),闹钟电路工作;当状态为01时,闹钟电路控制开关处于打开状态,相当于闹钟电路不工作。但是如果同时使两个开关状态处于“ON”状态,电源直接与地相接,整个电路都被短路,停止工作。因此调试时应小心不能同时拨开两个开关。
⑤调节仿广播台报时功能
首先通过校分按钮使分钟显示为59分,当秒数达到50后,每逢奇数秒数会响一低音声音,持续一秒钟,到达59分响一高音。实现来四声低音一声高音的仿广播电台报时功能。该电路能够正常工作。
⑥调节仿广播台报时功能
打开该电路模块的控制开关后,发现喇叭一直发出一秒一响的声音。电路存在问题。找到该模块的电路,与原理图对照的过程中发现有一网络名写错,在最后版本的原理图中没有改正过来。我们将电路板上相连的LD线用小刀刮断,通过导线将正确的两个相连的管脚连接后,接通电源,在非整点时喇叭不再发声。
因为该电路是在小时数变化时工作,所以我们只需要通过校时开关改变小时数,而不需要将数字钟调至整点来测试电路。
测试过程中,首先我们将时间调至整点,此时仿广播电台报时与整点报时接连工作,我们在数整点报小时数时发现少一声认为可能两功能报时在整点处重叠。
之后再改变校时按钮后,听报小时数是正常的。但多次测试后,发现报小时数的声音普遍比当前的小时数少一声。并且在12→1过程中,小时数报了12声。这说明该电路中存在竞争冒险现象,置数信号LD1比置数要先到达减法计数器导致电路报了之前的小时数,我们通过接入电容来增加LD1所在电路的延迟时间,使置数先传到减法器后再有置数信号的变化。
在LD1的输出端与计数器74LS191的置数管脚之间并联一个104电容,注意焊接时使电容管脚与其他管脚不相接,以免发生短路情况。并联电容后再次测试,发现所有时间的整点报小时数功能所报声音数都正常。
仿广播电台报时模块能够正常工作。
六、讨论、心得 李晓杰:
在本次实验过程我主要承担的工作有闹钟电路和电源电路的设计,利用Proteus对电路进行仿真并修改电路,协助进行电路板的安装,与组员一起进行电路的调试。
在确定实验项目后,首先对给出的电路原理进行理解掌握。在学习过程中,发现数字钟的显示是一一分开的,因此每一个个位、十位都可以看成一个单独的计数器,而不能整体地看成秒钟和分钟是60进制而小时是从1计数到12的11进制计数器,因为这样不利于数码管每一位的显示,超过9的数无法通过7段译码器使数码管有显示数值。另外,整点报小时数电路中通过D触发器来实现减法计数器和置数状态的转换也值得学习。原理部分也加深了我对边沿触发的理解。
在设计闹钟电路时,运用了拨码开关拨二进制数来实现闹钟时间的设定,又用数值比较器来确定数字钟到达了设定时间。在设计过程,要注意TTL门电路中输入悬空时输入的是高电平,所以设计电路时要注意添加接地,同时也要加电阻。我们在设计闹钟电路的控制开关时经过多次修改,与数值比较器相连设置时间的拨码开关电路在此处仿真会出现问题,最终我们确定用两个拨码开关一个接电源一个接地实现控制作用。电源电路能使8~12V左右的电压转换为稳定的5V左右的电压,提供了稳压电源,因此电源输入时可能有的变化使提供的电压造成太大的影响,能保证电路的正常工作。
在电路仿真过程中,我们学习了Proteus软件的使用。Proteus在绘制出电路原理图后可以很方便地进行仿真,同时还可以提供激励电源和虚拟的示波器,方便我们观察电路中的时序变化图和仿真的波形图。在用Proteus仿真振荡、分频电路中,发现晶振不能起振,在网上查询发现这个问题很普遍,Proteus仿真振荡电路是一个短板,我们可以直接设置CD4060的振荡频率为32768Hz来实现振荡电路的观察,但是此时仿真会提示CPU负载达到99~100%使仿真时间与实际时间相差非常大,时间变化得非常慢,并且在示波器上无法显示波形。我们通过对显示出的红蓝块指示高低电平经过一段时间观察可以看出能得到1Hz的信号。在后续仿真中,我们不加入振荡电路,而通过给予激励电源来提供输入信号。在主体电路调试中发现了小时电路变化至7时就发生了进位,通过示波器观察波形发现因为从7(0111)到8(1000)存在着1变0,0变1的情况使LD瞬间有低电平,而将置数电路改成在同时满足1001情况下置数可以解决问题。后来发现将7400改为74LS00后就不会存在这个问题。在仿真过程学习了Proteus软件的使用方法,也对数字电路的内容加深了理解。软件的仿真与实际还是存在差别的,并且每个软件的长处和优点都不一样,我们要根据电路功能选择合适的软件进行仿真。而我们在计数器的设计时,置数电路中只考虑置数数字的1信号,只将1信号对应的网络接至与非门而不考虑0信号对应的网络,是因为计数是由高到低有顺序的,而仿真告诉我们这样做可能会在实际电路中遇到问题;7400和74LS00也说明这个问题的存在也与不同类型的芯片有关系。
调试过程加深了我对各个芯片作用的理解,也积累了调试和修改电路的经验。我们在调试中也遇到了很多问题,首先电路在设计绘制时有一网络名写错,在修改时我们将连线断开后用导线重新连线解决了问题。在实际电路调试中,我们也遇到了竞争冒险的问题,通过增加电容延时的方法来解决问题。在调试过程中,理解了增加并联电容通过电容的充放电来延迟电平达到的时间来达到延迟目的。我们也对开关防抖动电路加深了理解,开关防抖动是通过一个RC电路来减轻开关抖动产生的时间很短的脉冲尖刺等造成电路的变化,可以通过R、C来改变时间常数达到防抖动。
这次实验帮助我们对数字电路的知识进行复习和加深理解,数字电路的理论多数是逻辑问题,当逻辑正确时,实际电路中会遇到的竞争冒险、开关抖动、尖刺等现象,在实验过程中更清晰地展现在我们面前,也让我们掌握对这些问题的解决方法。另外,我觉得我们在设计原理图和绘制PCB板时对后续问题的预见和为调试过程做准备的意识有待增强,我们可以提前增加多余的引脚方便我们接示波器等设备对波形进行测量。这是我们需要提高的能力。张晨靖:
通过这次实验,我学习了中规模集成电路如何设计制作数字电路系统,了解了数字钟的基本功能和扩展功能的设计实现方法,学会使用protuesISIS软件进行电路的仿真以及仿真出错后怎样快速寻找问题原因并进行修调,同时进一步熟练了AD软件的使用和电路板的安装调试。
在此次实验中,我们小组三个组员都有各自的分工,我主要负责答辩ppt的准备、电路的仿真分析和部分电路的修改以及最后的电路调试等。
在进行电路仿真的过程中,由于是第一次使用protues ISIS软件,我一开始还不太熟悉软件的操作方法和功能。开始的时候我认为在AD中已经绘制完成的原理图应当存在某种方法可以直接兼容至ISIS使用而无需重新绘制,后来查询了各种资料,发现ISIS的电路图可以在AD中打开,而AD中的原理图无法使用ISIS打开,所以最后我们决定重新绘制一遍原理图。
在protues中画好原理图后,我们开始进行电路仿真。但仿真一开始,就立刻出现了问题,电路的分、秒显示和进位都正确,但是小时的计数功能在进制却有错误,出现了满7复0的情况,即状态为0→1→2→3→4→5→6→7→10→11→12→0。我们分析错误原因,观察仿真显示的高低电平,发现D触发器的输入没有任何变化,但输出却会自行变化,我们知道,因为D触发器的下一位输出状态是取决于上一位输入的,所以对于这一现象的发生完全不能理解,另外,74191计数器的状态转换也存在问题,当输出状态达到0111时,下一状态就会变成0000,即高位一直无法出现1状态。
在请教过老师之后,老师建议我们在仿真电路中添加示波器观察波形,于是我们在H11(74191计数器的Q1)、H12(74191计数器的Q2)、H13(74191计数器的Q3)和LD四处防止了示波器探针,并再次执行仿真,这一次我们通过观察波形发现了问题所在。
当0111转换为1000状态时,Q3从0变成1,Q0、Q1、Q2则应“同时”从1变成0,电路中出现了竞争冒险现象,而原本的进位信号是Q3=1,Q0=1,在状态改变的过程中出现了7直接进位的情况,而我们之前观察到的的触发器输入没有变化,输出却发生了变化的现象也找到了原因,是因为我们开始观察电平高低变化的方法无法显示出电路波形的跳变,即当信号快速变化又快速跳回时,肉眼是看不到电平有所变化的,而我们采用示波器就可以很明显地看到这一现象了。分析出电路问题原因后,我们也很快地找到了解决问题的方法,将原本的进位信号Q3=1,Q0=1改为Q3=1,Q2=0,Q1=0,Q0=1,这样只有四位到达稳定状态后,才会产生进位信号,再次仿真就发现功能已经可以正确实现了。
之后的仿真都比较顺利,在获得了正确的仿真结果后,我们心里也变得有底,觉得电路板焊接完成后应该也不会出现大的问题,但真正安装完成电路板进行调试时还是出现了一些问题。
调试的第一天上午,我们的电路板的功能基本还正确,但下午回来后再进行调试一段时间后,却发现数字钟的分突然不显示了,并且芯片U22发烫非常严重,后来我们找老师更换了一块芯片,发现数字钟工作一段时间之后芯片还是会微微发热,怀疑是电路哪里存在短路问题,但是测量芯片接地和连接VCC的管脚,发现电压是正常的,直观来看电路板的器件焊接也没有明显问题,所以一直也没有找到芯片发热的具体原因,好在之后的调试我们会时常留意U22的温度,没有再出现严重发烫的问题。
另外数字钟还有一个问题,就是整点报时功能不准确,到达1点时会报时12声,2点会报时1声,3点会报时2声等等,以此类推。我们分析认为,出现这种整点不准确的现象,原因应该是逻辑控制电路的与非门延时时间不够,也产生了竞争冒险现象,查询资料和讲义后我们觉得可以直接接入一个小电容,延长延时获得正确的报时数,在接入电容之后,这一问题得到了解决。
在板子的装调过程中,我们发现了之前电路的设计上存在一些细节问题,很多实际电路中可能存在的细节在先前的设计中没有考虑到。比如部分电容的封装选择不合适,导致焊接时接入不便,也影响了电路的美观,还有校时电路的滤波电容距离主体较远,对于抖动的消除作用很不明显,另外,定时电路的拨码开关排布也很不方便操作,我们定时电路拨码开关的排布十位个位顺序和表示某位数字的二进制高低位是相反的,导致调节定时时刻不方便等,这让我更加深刻地意识到,电路板的设计是一个不断调整不断完善的过程,需要考虑到各种实际情况,才能设计出美观实用的电路板。另外,我们在调试过程中不断的发现问题、寻找原因、探索解决方法,进一步完善电路板的功能,这一过程需要足够的耐心和严谨,有时解决一个问题需要尝试多种方法,寻找最佳方案,才能最终获得一个功能比较健全的电路板,获得一个自己满意的结果。
陈肖苇:
这次实验主要担任的工作是原理图主体部分以及两个扩展部分的绘制,PCB的全部设计以及修改过程,PCB的安装与焊接以及电路板的调试几个过程,下面我讲分块讲一下我在几个方面的心得体会:
PCB版图的设计与修改 为了节约时间考虑,所以在原理图绘制完成之后,PCB版图就和原理图的仿真同步进行了,但是由于一些细节上的原因,导致提前进行版图设计并没有很好的提高时间利用率。
PCB版图的绘制主要包括了元器件的导入与检查,排版,手动布线与自动布线,手动布线更改,以及原理图更改逻辑设计之后的大改和经过老师检查之后的大改几部分组成。
首先第一步就是进行元器件的导入,但是导入之后,经过元器件的对比检查之后,发现一些元器件的封装不对,或者是一些元器件甚至没有选择封装,于是经过了更改之后,继续进行下面的工作。
接下来,进行的是元器件的排版工作。首先最容易想到的就是将数码管显示器即数字钟的显示部分放到板子的最上方,这样可以一眼就看到整个电路的工作性质;其次就是想到了要将手动校时和闹钟开关等按键以及开关放在板子的最下面,方便进行操作;至于其它的部分,主要就是为了美观进行了一个相对整齐的排布,同时也留出了一定的空间,为以后的布线留下余地。当然,中间这一步并没有按照功能排布,仅仅是按照美观排布,为版子的功能实现埋下了隐患(虽然这个隐患经过老师指导后进行了大改,已经基本排除,但是修改的过程也是相当的复杂,以后尽可能要做到一步到位);其次,经过这一次的实践,发现当初元器件之间留下的空间对于这么大的一个工程来说还是相当有限的,以后对于空间要有更合理的把握。
图1:main_saved2(排好版)接下来,就是进行布线了。因为上一次的电子工程训练,我全部都是手动布的线,所以这一次是第一次尝试自动布线,结果发现自动布线速度这么快,看起来结果也很可靠,所以我还有一点惊喜,因为上一次布线所耗费的时间实在是太久了,下面就是布线之后的版图。
图2:main_saved3(第一次自动布线)然而这样的自动排版的最大的问题就是电源和地线过细,而且又不能直接批量修改,因为在内部的地方,直接修改会导致电路互联,引起短路。所以,我参考了一下别人设计的版图,于是设计成了将电源和地在外圈周围布线,然后通过横向的布线将电源和地导入到所需位置,经修改后的电路板如下:
图3:电源和地布完
上面这块板子算是我们第一版的最终版了,这是基于我们设计是正确的前提。几乎就在我布完线的同时,晓杰她们的仿真结果出来了,小时的翻转是不正确的,所以我们在讨论了之后,对小时控制电中的D触发器的输入逻辑进行了修改,然后加入了两个芯片,分别是74LS04的非门和74LS20的与非门。因为电路板内部没有空隙,所以考虑将两片芯片放在了右下角单独开出的一片小区域里。如下图:
图4:逻辑错误修改 修改完逻辑错误之后就产生了我们电路的第二版的最终版,然后就拿去给老师检查我们的板子有没有什么问题。经过检查之后,老师给我们指出了两个比较重要的设计失误,一个就是电源的四个滤波电容离电源太远,效果不好,二是晶振和14次分频器距离太远。于是回去之后我就将这两部分电路单独拿了出来,放在了右上方,改正了电路设计没有按功能排在一起的失误。修改后的部分如下图:
图5:修改后的电源电路
图6:修改后的晶振电路 经过以上三大步的修改,在对一些小的地方自动布线没有解决的错误进行修改之后,产生了我们上交的电路的最终版,如下
图7:最终上交版
在这份最终上交版中,经过老师的检查,还是发现了四处错误,分别是两根连线没有连上,以及两个过孔没有打通。这既是我当时检查不够仔细导致的问题,同时也是我不会使用DRC的原因,在电路板发下来之后,经过向老师请教,知道了如何用软件检查布线的结果,即DRC(design rule check 设计规则检查),极大的减少了以后出现这种细节性错误的可能性,也算是一种进步吧。
这块PCB板总共花了我一天的时间进行排版和布线,然后花了整整三天的时间,更改铜线的粗细,修改电源和晶振电路,然后还修改了四十多处没连上或者过孔没打通的错误,不得不说PCB的设计是一个集技术与耐心于一体的工作。四天的时间里让我对PCB的设计产生了更深刻的认识,包括电源和地的布线方式,模块化设计的方法以及DRC确认设计等等,同时也切身的体会到了自己经验的不足,也有了以后努力的方向。
调试过程中的经验谈
调试的具体过程已经附在上文的安装与调试环节了,所以在此就不再赘述了,这里简单讲一下在调试过程中所发现的一些设计上的注意事项以及小组成员沟通之间的注意事项。
在这次的调试中发现的主要的设计错误和不合理的地方有网络名在组员的原理图更改之后没有更新,闹钟的数值比较器比较的开关和计数器的二进制顺序相反,没有设计自启动,以及整点报时功能存在竞争冒险现象,以及按钮开关存在较大不确定性等问题。
其中,网络名的问题属于组内成员沟通问题,因为坐在一起,我们此次的交流基本上就是将原理图直接发给对方,然后口头告诉对方所更改的地方,然后对方再将所修改的地方直接复制过去。这种交流方式的优点当然就是交流效率非常高,但是缺点就是如果一次性有太多修改的时候,尤其是只是更改网络名,而没有更改其他设计的时候,容易被忽视。建议以后如果需要一个小组一起努力完成一个项目的话,每次都应该将自己修改过的地方写成文档,让其他成员按照文档修改,而且这样以后在调试的时候也有可以参考的文献。
而对于数值比较器的问题,设计的时候是按3210的数序进行高低比较的,但是拨码开关上的顺序是1234(错位的以为因为不影响正常的大脑译码,所以不考虑,即对人脑来说不论是3210,还是4321只要是连续的四位数,结果都是一样的),因此出现的问题就是逻辑上的高低和物理上的高低相反,因此对于单个拨码开关使用的时候,最高位在右边,要从右向左读数,增加了使用难度,而让用户违反常规思维使用,让用户适应产品的做法,是一款产品设计的非常大的缺陷,这也是以后在设计电子产品的时候要考虑的重要问题——在功能以及价格相同的时候,用户体验往往决定了产品的出路。
图8:拨码开关的设计问题
至于没有设计自启动,也是一个很严重的问题,虽说刚通电的时候,数字中可以处在任何有用的状态,但有时候进去就是10:62,这样还要通过校时30多秒才能进入正常的循环,这也是一个弊端。鉴于修改自启动问题需要对整个电路的逻辑进行修改,工作量很大,而且对电路整体功能影响不大,所以这一问题我们小组暂未修改,且经过所有其他调整之后,一般开机后会处于10:00(不稳定),已经不需要很长的校时调整。
至于整点报时不准确的问题,开始的时候我们以为是计数器少数了一个,或者是和电台报时重叠。但我仔细考虑了一下,认为事实并不是这样,因为怎么想也不觉得每次计数器都会少数,原因肯定在输入数据部分。结果接下来就发现了1点的时候报时是响12下,于是,我立马确定了错误是跟我想的一样,存在于输入部分,即输入部分存在竞争冒险——时钟脉冲到达时,对应的译码器因为众多门电路的延时还没有将新的状态传递过来,减法计数器的数据输入端还是上一个状态,然后当时钟到达时,置入了上一个状态,所以才存在报时的错位现象。修改的关键就是延迟时钟信号的到达,修改方案有加两级反相器或者加上一个电容进行延时,因在调试的时候加入反相器过于麻烦,选择了第二个方案,即加上一个电容进行延时。经过修改之后,整点报时功能正常,符合设计要求。
图9:整点报时的数据输入端最多经过了三段延时
最后,不得不说这么大的一个项目真的是对自己的一个锻炼,不仅仅开始的时候要进行逻辑设计和改错,要耗费那么长的时间进行一个PCB的设计和修改,要把一块漏洞百出的电路调试到正常状态,无论哪一步都很烧脑子,但是无论哪一步收获都很大。
我还要感谢我的两个可爱的组员,没有她们协助和付出,凭我一个人,很难在这么短的时间内完成这么一个产品设计开发的全过程。还要感谢王老师的指导,指出了我们电路设计的不合理的地方,并告诉了我们修改方式,并且因为之前我不会DRC,在板子加工之前还帮我们修正了四处设计错误,使我们调试过程中的工作量极大的降低。
附录:原始调试记录
调试日期:2016/7/17 早上来到,安装好芯片和拨码开关之后,我们就安上了电源,开始了调试过程。 UH2引脚错误(没错,是两个等效的网络)
开关与计数器大小顺序,对应拨码开关右侧为高位(对应问题) H1H2对应顺序等
开关没有防抖动,长按可正常调时(大部分),短按不确定 6,9不好看
电台报时和整点报时重叠 没有设计自启动
网络名不对(LD与LD1,外加飞线)下午调试:
1. 长按的不确定性
2. 分钟和小时按键互相影响 3. 版子震动会改变状态
4. 分钟不显示——390发烫——按键失灵——整点报时一直响——换掉芯片,恢复正常。5. 整点报时少一声(或许是重叠)
调试日期:2016/7/18 接着昨天的进行调试,认为需要修改的主要存在以下三个方面 U22即74LS390存在发热现象
整点报时存在错位现象(加电容延时)
按钮开关存在抖动现象,长按正常,短按不确定(怀疑是版子震动问题,换成拨码开关并固定住版子,功能正常)
设计的不合理:
拨码开关方向,按钮开关,闹钟开关
因未出现乱码问题,所以开关上没有出现对应功能的提示,这也是一个很大的遗憾。
AD布线
1.交互式布线:小键盘上的星号;或者shift+ctrl+滚轮 2.先自动布线,后手动布线 3.电源和地绕圈布线
1.PCB板留白问题——方便修改
2.电源和地的双层布线问题——分不同层,同时绕圈,区分纵横
3.模块化设计的重要性——同一功能的元件尽量放在一起,尤其是电源,晶振等地方的电容,不然就没用惹。
4.布线查错:design——DRC——右下角message——下方窗口
小组分工:
李晓杰:答辩展示,闹钟电路原理图绘制,电路行为仿真,原理图修改,电路调试 张晨靖:答辩PPT制作,电路行为仿真,原理图修改,电路调试 陈肖苇:答辩展示,原理图主体部分及整点报时和仿电台报时部分绘制,PCB排版布线,PCB版修改,PCB版焊接,电路调试