第一篇:基于Verilog HDL的串行ADC控制电路设计与总结报告
基于Verilog HDL的串行ADC控制电路
设计与总结报告
题目名称: 报告人 : __ 学院 : 专业 : 班级 : 学号 :
制作日期: __
摘要……………………………………………………………………...1
第一章 串行ADC控制控制电路的功能介绍及Verilog HDL简介
...................................................................................................................3 1.1串行ADC控制控制电路的功能…………………………..…..3 1.2Verilog HDL简介……………………………………………………4
第二章组成模块简介……………………………………………..5
2.1组成模块…………………………………………………………….6(1)、状态机……………………………………………………6(2)、锁相环……………………………………………………8(3)、累计器……………………………………………………10(4)、多路选择器………………………………………………12 第三章 模拟仿真….…………………..……………………………….13 总结结论………………………………………………………………14 参考文献………………………………………………………………15
基于Verilog HDL的串行ADC
控制电路设计摘要
Verilog HDL的串行ADC控制电路设计,是使用高速10位逐次逼近式模数转换器(ADC)芯片TLV1572,用Verilog HDL编程语言编写状态机按一定周期采样转换模拟信号。在Quartus2软件上完成顶层电路设计、状态机、锁相环、累加器、译码器、多路选择器等编程和封装。各个模块完成不同的任务,合在一起就构成了Verilog HDL的串行ADC控制电路设计,软件模拟直接在Quartus2上进行。
在此程序中关键是用于状态机,其中状态机的优势有以下几点:(1)、高效的顺序控制模型,状态机克服了纯硬件数字系统顺序方式控制不灵活的缺点。状态dat0是对1572的初始化、状态dat1是打开1572的片选信等,一直到采集数据输出数据。
(2)容易利用现成的EDA工具进行优化设计。由于状态机的构件简单,其中用宏模块PLL将20MHz的时钟进行分频得到想要的时钟周期。
(3)性能稳定。状态机容易构成性能良好的同步时序逻辑模块。(4)高速性能。状态机载高速通信和高速控制方面,有着巨大的优势。
第二章 串行ADC控制控制电路的功能介绍及Verilog HDL简介
1.1串行ADC控制控制电路的功能
在我们的信息时代日益更新的生活,AD、DA转换时刻进行着,而这些功能的实现,均以多半是以MCU或MPU的控制芯片实现的,但CPU的不稳定和低时钟严重影响着转换的效率,因此,研究状态机控制转换芯片有着现实意义。
此次设计与利用状态机就是为了了解不基于各种CPU而能稳定、高效的进行工作,从而学会编程。通过它也可以进一步学习掌握各种逻辑电路与时序电路的原理与使用方法。1.2 Verilog HDL简介
Verilog HDL是一种硬件描述语言(HDL:HardwareDiscription Language),是一种以文本形式来描述数字系统硬件的结构和行为的语言,用它可以表示逻辑电路图、逻辑表达式,还可以表示数字逻辑系统所完成的逻辑功能。Verilog HDL和VHDL是目前世界上最流行的两种硬件描述语言,都是在20世纪80年代中期开发出来的。前者由Gateway Design Automation公司(该公司于1989年被Cadence公司收购)开发。两种HDL均为IEEE标准。第二章组成模块简介 2.1组成模块 顶层电路图:
顶层电路设计、状态机、锁相环、累加器、译码器、多路选择器等编程和封装
(1)、状态机
基于Verilog HDL语言编写的状态机是本系统的核心,犹如一个稳定、高效、单一的控制CPU,其中代码如下:
module TLV1572(CS,CLK,SCLK,FS,SDI,DO,RST);input SDI;input CLK;input RST;output CS,SCLK,FS;//CS 片选,FS当接口至微处理器时,FS输入连接至Vcc output [9:0]DO;//串行数据输出
reg [6:0] next,now;reg [6:0] dat;reg [9:0] DO;reg CS,SCLK;wire FS;parameter dat0=6'd0;parameter dat2=6'd2;parameter dat3=6'd3;parameter dat4=6'd4;parameter dat6=6'd6;parameter dat7=6'd7;parameter dat8=6'd8;parameter dat10=6'd10;parameter dat11=6'd11;parameter
dat12=6'd12;parameter dat14=6'd14;parameter dat15=6'd15;parameter
dat16=6'd16;parameter dat18=6'd18;parameter dat19=6'd19;parameter
dat20=6'd20;parameter dat22=6'd22;parameter dat23=6'd23;parameter
dat24=6'd24;parameter
dat1=6'd1;parameter dat5=6'd5;parameter dat9=6'd9;parameter dat13=6'd13;parameter
dat17=6'd17;parameter
dat21=6'd21;parameter
dat25=6'd25;parameter dat26=6'd26;parameter dat27=6'd27;parameter
dat28=6'd28;parameter
dat29=6'd29;parameter dat30=6'd30;parameter dat31=6'd31;parameter
dat32=6'd32;parameter
dat33=6'd33;parameter dat34=6'd34;parameter dat35=6'd35;parameter
dat36=6'd36;parameter
dat37=6'd37;parameter dat38=6'd38;parameter dat39=6'd39;parameter dat40=6'd40;
always@(posedge CLK or posedge RST)begin if(RST)next<=dat0;else end always@(next)begin case(next)
dat0 : begin CS<=1'b1;SCLK<=1'b0;now<=dat1;end dat1 : begin CS<=1'b0;SCLK<=1'b0;now<=dat2;end dat2 : begin CS<=1'b0;SCLK<=1'b0;now<=dat3;end dat3 : begin CS<=1'b0;SCLK<=1'b1;now<=dat4;end dat4 : begin CS<=1'b0;SCLK<=1'b0;now<=dat5;end next <= now;
dat5 : begin CS<=1'b0;SCLK<=1'b1;now<=dat6;end dat6 : begin CS<=1'b0;SCLK<=1'b0;now<=dat7;end dat7 : begin CS<=1'b0;SCLK<=1'b1;now<=dat8;end dat8 : begin CS<=1'b0;SCLK<=1'b0;now<=dat9;end dat9 : begin CS<=1'b0;SCLK<=1'b1;now<=dat10;end dat10 : begin CS<=1'b0;SCLK<=1'b0;now<=dat11;end dat11 : begin CS<=1'b0;SCLK<=1'b1;now<=dat12;end dat12 : begin CS<=1'b0;SCLK<=1'b0;now<=dat13;end dat13 : begin CS<=1'b0;SCLK<=1'b1;now<=dat14;end dat14 : begin CS<=1'b0;SCLK<=1'b0;now<=dat15;end dat15 : begin CS<=1'b0;SCLK<=1'b1;now<=dat16;end
dat16 : begin CS<=1'b0;SCLK<=1'b0;now<=dat17;end dat17 : begin CS<=1'b0;SCLK<=1'b1;now<=dat18;end dat18 : begin CS<=1'b0;SCLK<=1'b0;now<=dat19;end dat19 : begin CS<=1'b0;SCLK<=1'b1;now<=dat20;end dat20 : begin CS<=1'b0;SCLK<=1'b0;now<=dat21;end endcase end always@(next)begin case(next)
dat16: begin DO[9] <=SDI;end dat18: begin DO[8] <=SDI;end dat20: begin DO[7] <=SDI;end dat22: begin DO[6] <=SDI;end dat24: begin DO[5] <=SDI;end
dat26: begin
dat28: begin
dat30: begin
dat32: begin dat34: begin endcase end assign FS=1'b1;endmodule
DO[4] <=SDI;DO[3] <=SDI;DO[2] <=SDI;DO[1] <=SDI;DO[0] <=SDI;end end end end end
封装后
(2)、锁相环
利用软件中的宏模块分频电路图如下
功能设计图(3)、累计器
累加器用于选通数码管,用于点亮数码管,代码如下: module CNT10(CLK,Q);input CLK;output [2:0] Q;reg [2:0] Q1;assign Q = Q1;always @(posedge CLK)begin Q1 <= Q1+1;end Endmodule 电路图为:
(4)、多路选择器
第三章 模拟仿真
总结结论
通过此次设计研究,最终完成了 串行ADC的的设计与制作。在整个设计过程中,我们组从各个模块的思路设计到实际程序编写,从点到面。在出现与处理问题的过程中,不断提升自己处理细节问题的能力,虽然遇到了很多的困难但最终还是基本上完成了设计达到了预期的效果。而更重要的是通过系统设计这项项目,使我们对于设计整体流程有了更加明晰的感受,对于今后的深入学习与应用奠定了基础。在今后的学习中,我们将继续加强EDA理论知识和Verilog语言的熟练掌握,争取更大的突破。
最后,感谢老师这学期的辛勤授课,您的敬业精神值得很多老师和学生学习,通过一学期的课程学习也是我进步很多。谢谢您王老师!
参考文献
1、《EDA技术实用教程》
2、《Verilog HDL状态机编写技巧》
3、《基于Verilog的状态机设计》等
第二篇:交通灯控制逻辑电路设计与总结报告
交通灯控制逻辑电路设计与总结报告
一、设计任务
用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、在原有程序的基础上,可通过增加一个输入量来控制一种特殊状态,用以控制特殊情况的处理,视该特殊情况而定。
二○一○年九月三日
第三篇:电压采样电路设计总结报告
电压采样电路设计总结报告
专业班级: 电气工程及其自动化
实习日期:2013年7月22日---7月26日
2013年7月26日
目录
一、设计要求及目的:................................................2
二、所用元件:......................................................2
三、设计思路:......................................................2
1、电源部分电路.................................................3
2、电流-电压转化电路............................................4
3、电压抬升电路:...............................................5
4、二阶滤波电路.................................................6
5、方波转换电路.................................................7
四、课程设计中出现的问题及解决方案..................................9
五、设计总结........................................................9
一、设计要求及目的:
1、设计目标:设计一个电压采样电路,对220v交流信号进行采样,并利用运放对其进行处理,使其成为数模转换器(A/D)能够处理的信号。
2、基本要求:根据元件列表设计采样电路及其工作电源回路,将220v交流输入信号变为0-3v信号,并对其进行二阶有源滤波,滤除高频干扰信号,滤波后的信号平滑无畸变。
3、扩展:设计电路,将交流信号变为方波,过零点处干净无毛刺信号。
4、设计目的:
1)加强自主性学习、研究性学习,加强团队合作,提高创新意识; 2)通过该设计学会并掌握常用电子元器件的选择和使用方法; 3)结合所学的电子电路的理论知识完成电压采样课程设计。
二、所用元件:
变压器
1个、1N4007单向二极管
5个、470uF电解电容
4个 芯片7815和7915、紧密电流型电压互感器
1个、LM324芯片 10K电位器
1个、201pF电容
2个
电阻:110KΩ1个、10KΩ5个、1Ω1个、1KΩ2个、470Ω1个、200Ω1个
三、设计思路:
电压采样电路基础模块的设计思路首先是220v交流电源经过电流型电压互感器使强电转换为弱电,再通过电流/电压变换电路使其输出电压为-1.5v~+1.5v,接着通过一个反相加法运算电路使其输出电压抬升为0~3v,最后经过一个二阶有源低通滤波电路对其进行滤波,滤除高频干扰信号,滤波后的信号平滑无畸变,最后用一迟滞比较器将正弦波变成方波信号。
总电路图为:
1、电源部分电路
电路图为:
分析:通过电路图中三个万用表的示数可知,变压器输出交流电的有效值为15.078V,输出的直流电压为+15.517V和-15.633V,符合要求。
此电压用于给给芯片LM324提供直流电源,以及提升电压用。
1)电源变压器:是降压变压器,它将电网220V交流电压变换成符合需要的交流电压,并送给整流电路,变压器的变比由变压器的副边电压确定。2)整流电路:利用4个单向导电元件,把50Hz的正弦交流电变换成脉动的直流电。
3)滤波电路:由于经过整流的直流脉冲电压还含有较大的纹波,因此需要设计滤波电路将整流电路输出电压中的交流成分大部分加以滤除,从而得到比较平滑的直流电压,用两个470uF的电解电容。
4)稳压电路:稳压电路的功能是使输出的直流电压稳定,不随交流电网电压、负载的变化而变化,用7815和7915芯片。
2、电流-电压转化电路
思路:220V(有效值)交流电源经过110K欧姆的电阻后电流变为2mA(有效值),经过2mA/2mA的精密电流型的电压互感器后电流仍未2mA,根据运放的虚短虚断的原理可知,运放输出的电压峰峰值为-1.5V到+1.5V。
计算过程为:1.8mA*580Ω*√2=1.47V(由于给的功率电阻是121K的,所以电流为1.8mA)电路图为:
输出波形图为:
3、电压抬升电路:
思路:利用反向加法器的原理将正负1.5V的电压提升到0-3V,所用提升电压为直流电源提供的-15.633V电压,通过参数选择可以实现此模块。
电路图为:
计算公式为:U02=-[U01*1KΩ/1KΩ+(-15)*1KΩ/10KΩ],U02为0-3V的正弦波。其中470欧姆的电阻是平衡电阻,其计算过程为1K//1K//10K,三个电阻并联的阻值。
输出波形为:
经测试后在示波器上得到的波形与仿真波形相似,但稍有毛刺。
4、二阶滤波电路
思路:利用所学的二阶低通滤波电路可以设计出符合要求的滤波电路
电路图为:
根据其要求对0-3V电压进行二阶有源滤波,滤除高频干扰信号,滤波后的信号平滑无畸变。
根据二阶低通有源滤波的公式得:
f0=1/(2*3.14*R*C),我们选择电阻值为1MΩ,电容值为201pF,故 f0=1/(2*3.14*1*10*201*10)=792.2Hz,近似为800Hz,符合要求。由“虚短”和“虚断”的特点可得方程:
U+=U-=U03*R8/(R7+R8)=U03/(1+R8/R7)=U03/Aup,应使U+=U-=U03 得Aup =1,则取R7=2MΩ,R8=1Ω,目的是使滤波的低通增益为1,不会改变之前0—3v电压的波形。经滤波后的U03的波形为0-3V正弦波。
输出波形图为: 6
2从示波器上测试的结果稍微有点相位差,两个波形并不是完全的重合,但是误差不大,分析原因为电阻有一定的误差。
5、方波转换电路
思路:利用迟滞比较器,不用过零比较器的原因是,过零比较器是输入信号与零点相比较,但正弦波的零点会有抖动,所以方波会出现脉冲,用迟滞比较器可以将零点越过去。然后后面加一单向导通的二极管,只留下方波的上半部分。
电路图为:
分析过程为:
R11之前接的是第一个运放的输出U01即峰值1.5V的正弦波,设计要求中,需要将输出波形的毛刺去除,所以所用电路为迟滞比较器。为运放的正输入端电压近似为0,有公式得:
U+=U04*R14/(R14+R11),则应使R14远小于R11。经多次的仿真调试,我们选择R14=150Ω,R11=10KΩ.波形图为:
所焊的电路在示波器上检测的波形虽有一定的相位差,但总体上符合要求,分析产生相移的原因为,用的是迟滞比较器,不可能严格过零点只能尽量去接近零点。
四、课程设计中出现的问题及解决方案
1、设计电路首先在电脑上用软件仿真,以此来选取参数,不同的仿真软件可能有不同的结果,运放也会出现问题,不过通过不断的更改参数,不断的理论计算在仿真,最终出现了各部分波形图。
2、这次所用的芯片是LM324,是四个运放集合在一个芯片上,所以布局很重要,通过组内讨论,将绕线最少,电路最简单为目的。
3、刚开始输出的方波和正弦波有一定的相位差,分析其原因是电阻参数选取的不合适,运放是用作电压比较器用,所以输入端电压越接近零越好。通过改变参数,最终在老师那检测的结果基本符合要求。
五、设计总结
1、通过近几天的实习,我们学习了采样电路设计的相关知识,遇到问题互相讨论最终解决;
2、实践出真知,无论课本上讲的内容如何,只有通过实践才能获得真正的真 理,所以在以后的学习生活中要理论联系实际,多动手动脑;
3、团队的力量大于个人,我们三人分工明确并将遇到的各种问题讨论后一一解决,所以只有团队合作,才能把事情做好;
4、这次实习进一步的提高了我们的焊接与整体布局能力,对于电路的焊接在技术上更加熟练,在布局上更加美观,让学长检查电路时,学长建议能走锡的话尽量少走线;
5、我们对于Multism软件有了更深一层次的掌握与运用,在今后的学习中会有很大的帮助。
下面是我们的电路实物图和布局图
第四篇:数字电子钟逻辑电路设计总结报告
课程设计总结报告
写总结报告是对学生写科学论文和科研总结报告的能力训练。总结报告包括以下内容: 1.报告名称
2.内容摘要(<300字)3.设计内容及要求
4.方案比较,画出系统框图,确定使用的方案。
5.单元电路设计、参数计算和器件的选择(含器件功能表)并说明单元电路工作原理。
6.画出完整的电路图 7.安装调试内容,包括:
(1)使用的主要仪器和仪表;(2)调试电路的方法和技巧;
(3)测试的数据和波形,并与计算结果比较分析;(4)调试中出现的故障、原因及排除方法。
8.总结设计电路的特点和方案的优缺点,提出进一步的改进意见和未来的发展。9.列出所用的元器件 10.列出参考文献
第五篇:基于FPGA的交通灯控制电路设计
基于FPGA的交通灯控制电路设计
关键字: 交通信号机 FPGA 脉冲发生器
目前交通灯广泛应用于道路交通建设中。本文设计一个十字路口交通灯控制电路,要求东西、南北两条干道的红、绿、黄交通灯按要求循环变化,并以倒计时方式指示干道通行或禁止的维持时间。在QuartusⅡ软件环境中设计、仿真,并在FPGA实验板上实现所设计电路的功能。
系统概述
1.1 设计思想
基于FPGA的交通灯系统控制设计包括4大模块,分别为脉冲发生、状态定时、交通灯闪烁的控制、闪烁时间的控制,基本原理如图1所示。
1.2 总体工作情况
交通灯控制要求如表1所示。
该设计的交通灯控制分为6个状态。由于各状态持续时间不同,所以电路的核心控制部分是状态机和定时器,状态机在定时器触发下周期性循环,状态码控制6个灯以一定的规律变化。变化情况如图2所示。
系统脉冲由FPGA开发板晶振经过分频电路实现。状态定时由74190可逆十进制计数器和T’触发器实现,只要置数合理,翻转信号到位,就可以使电路在东西(I)、南北(J)两个控制状态间翻转。红、黄、绿灯的闪烁由7485数字比较器和组合逻辑控制,其中7485数字比较器用于比较计数器当前持续状态和所需要的状态全部时间,并做出相应的变化。组合逻辑控制由AHDL文件编写真值表实现。时间显示由AHDL文件编写真值表实现,输入正确的逻辑,七段译码电路即能得到正确的时间显示。
1.3 各功能的组成
整个电路可以分为4大部分,包括脉冲发生、状态定时、时间显示和数字比较一组合逻辑控制。
1.3.1 脉冲发生
脉冲发生器为整个系统提供驱动,将输入端分配给FPGA实验板的PIN55引脚,则会由实验板上产生频率为10 MHz的输入脉冲,用7片7490,每一级都构成10分频电路,使频率从10 MHz降低为1Hz。
1.3.2 状态定时
状态定时可由预置BCD码初值的74190级联实现,构成减计数器。级联原则是:低位计数器从全0状态变为最大码值状态时可使高位计数器减1。级联方式分为异步和同步两种,本文采取的是异步级联方式,即低位计数器溢出信号控制高位计数器的记数脉冲输入端。可根据计数器的时钟触发方式,在低位计数器状态码从全“0”变为最大码值的瞬间,为高位计数器提供有效的计数脉冲边沿。具体做法是将低片位的溢出信号RCON端口接到高片位的计数脉冲CLK,实现两位BCD码的置数、翻转和借位,使系统表示的数字能在22~16之间循环。
74190功能说明:
(1)GN为计数器使能控制端,低电平有效。当GN为高电平时,禁止计数。
(2)DNUP为计数方式控制,接高电平为减计数,接低电平为加计数。
(3)LDN为异步预置数控制。当LDN为低电平时,计数器状态QD,QC,QB,QA分别等于D,C,B,A。
(4)计数器位序由高至低顺序为QD,QC,QB,QA。QD为最高位MSB,QA为最低位LSB。
(5)计数脉冲CLK上升沿有效。
(6)当计数器输出QDQCQBQA为十进制加计数的最大状态码“1001”或为减计数的最小状态码全“0”时,极值状态码指示MAX/MIN输出为高电平。
(7)当极值状态码指示MAX/MIN为高电平且CLK为低电平时,溢出信号RCON为低电平,即RCON与计数脉冲同步。
系统记数脉冲为1 Hz时,如表2所示,当I状态(东西控制状态)的定时时间为22 s,计数器应该先预置22的BCD码;同理,J状态(南北控制状态)之前应该预置16的BCD码。
状态计时电路由两片74190级联而成,构成22和16自翻转的电路。其要解决的核心问题包括置数,翻转和借位。根据74190芯片的特点,可分析其实现原理如图4所示,通过溢出信号RCON的上升沿实现借位,使得数字能够从20到19,个位向十位借位,顺利过渡。
置数和翻转之间有先后关系,即须先置数后翻转。如表3所示,分析两个BCD码各位特点,可知两者D7D6D3D0位均为1,D1位均为0,而D5D4D2位不同,如图5,D5D4D2位由状态电平S来控制,当为I状态时,计数器的预置的数为D5=0,D4=D2=1,而为J状态时,计数器的预置的数为D5=1,D4=D2=0,根据74190的功能,将2片74190的MAX/MIN引出,通过与非门,分别连在高位和低位的LDN置数端,通过分析可知,当计数器从01减到00时候,高低位的MAX/MIN均为高电平,经过与非门以后为低电平,74190被置数,其置数值由状态S来决定,S是由LDN端信号经过一个T’触发器决定的,即LDN信号每置数一次,S翻转1次,从而区分16和22状态。按这个结构,可分别置数16和22,使其实现自翻转。
图5为状态定时模块的实际连接图。
1.3.3 时间显示
时间显示要用到7段显示译码电路,由于是两位BCD码,故用二选一数据选择器。选择端S接一个频率很高的方波(如1 kHz);数据比较器的输出和1 Hz脉冲作为AHDL模块的输入,即可正确显示时间。
为正确显示时间,用AHDL文件自编译码真值表如下:
1.3.4 数字比较一组合逻辑控制
该模块将状态定时模块输出的时间与时间节点进行比较,从而确定电路处于22 s或者16 s的具体的某个状态。由表1可知,东西(I)或南北(J)的控制状态都有3个阶段的控制逻辑,分别对应3个时间段:1~3 s,4~6 s和大于6 s,因此,采用数字比较器进行比较,确定定时值小于4 s或大于6 s,方法如图7所示,采用4片7485数字比较器,两两级联,其中一个由状态定时模块的输出与4即二进制0100比较;另一个由状态定时模块的输出与6即二进制0110比较。
编写组合逻辑真值表,将状态信号S,两个数字比较器的输出Y1,Y2和1 Hz脉冲作为输入,各个灯的状态作为输出。从而根据逻辑关系得出对应时间电路的状态,控制红、黄、绿灯处于不同的状态。S判断电路处于22 s状态还是16 s状态,Y1,Y2区分东西、南北六个阶段状态,1 Hz脉冲实现绿灯闪烁。电路的组构与调试
来用QuartusⅡ软件设计各个模块,并进行仿真。确认结果后,下载至FPGA实验板中,进行相应的硬件调试,调试结果与仿真结果相一致。图8为仿真波形,系统上电需要调整的过程,因此电路正常工作前重复了22s的状态。