数字电路课程设计Word文档格式.docx
- 文档编号:22256966
- 上传时间:2023-02-03
- 格式:DOCX
- 页数:18
- 大小:2.46MB
数字电路课程设计Word文档格式.docx
《数字电路课程设计Word文档格式.docx》由会员分享,可在线阅读,更多相关《数字电路课程设计Word文档格式.docx(18页珍藏版)》请在冰豆网上搜索。
1.3原理阐述
利用重力感应芯片检测运动,将信号放大之后输入施密特触发器产生方波波形,并利用FPGA将方波波形计数并在数码管上显示。
第二章设计思路、方法及方案
2.1系统功能需求分析
本次实验采用的重力感应芯片是ADI公司生产的ADXL335加速度传感器,传感器本身支持三轴重力感应,驱动电压为3V。
我们的实验只需要读取其中一轴的信号即可。
但是感应器本身输出峰值在200mV左右,且为随着加速度大小连续改变的模拟信号,而FPGA的信号输入需要方波脉冲。
传感器输出不论是峰值电压还是连续信号本身都不能满足要求。
于是,我们需要首先对传感器的输出信号进行放大,并将其波形转换为方波信号,以便FPGA的进一步处理。
2.2方案确定及框图结构说明
根据前文所说,由于信号在生成方波以前需要进行电压幅度放大,考虑到放大电路本身存在噪声,再加上环境因素的影响,为了有效滤除噪声对方波信号的影响,我们选择施密特触发器而不是简单的比较器来产生方波,触发器由555电路为主构成,驱动电压为3.3V左右,最大转换电压越2V,最低转换电压为1V,以此为依据,我们可以设计出放大器的放大倍数。
放大器设计中,我们使用简单的LM324集成运放,其价格便宜,设计指标也能满足信号放大的需求。
使用LM324中的一个运算放大器,使用利用深度反馈原理,即可获得相应的放大倍数。
由于传感器本身输出信号带有一定的直流偏执,所以在放大之前需要使用隔直电容将直流隔去。
在完成电路之后,将产生峰值在2V左右的方波信号,信号输入到FPGA开发板上,通过编程实现对方波的计数,并最终显示在数码管上。
下面是设计的框图。
最终确定的主要元器件和设备有:
1、ADXL335重力感应传感器
2、LM324集成运放
3、555电路
4、XC3S250E144型FPGA开发板
第三章硬件原理图设计、装配与调试
3.1硬件原理
硬件原理如下图所示
本电路完成了运动信号的采集,放大,生成方波信号的操作,其中,LM324放大电路仅使用其中一个运算放大器,通过调节R1和R2电阻值的比值,将放大器增益设置在20dB左右。
原理图如下:
使用555电路组成施密特触发器的原理图如下:
3.2装配成果
最后焊接完成后的电路板如下图所示。
正面图:
背面图:
3.3调试结果
如下图所示,首先将示波器接头接在隔直电容前端,可以看到缓慢上下摇动一次传感器产生的带有直流分量的输出信号(模拟信号)。
将放大器和施密特触发器都调试完成后,不停摇动电路板,可以在最后的输出端看到如下的方波信号,可以看到,信号幅度在2.26V,且方波比较规则,仅有很小的失真。
第四章FPGA模块程序设计
使用FPGA对施密特触发器产生的方波脉冲信号进行计数,并将数值显示在7段数码管上。
在设计时应当注意的是,使用上升沿计数时,脉冲上升沿与系统时钟不同步,在7段数码管显示时,每个数码管都有一个使能信号。
同时,整个系统需要设定复位信号。
最终整个FPGA设计框图如下:
具体VHDL代码见附录1.
代码完成之后,为了将VHDL模块的端口信号与FPGA的硬件接口关联起来,同时对一些信号进行约束,需要进行管教适配,适配所用代码见附录2.
第五章系统调试及硬件检查
5.1系统调试过程
在实验过程中,曾经遇到了不小的困难,期间也经历过多次调试。
第一次困难在于产生的方波信号存在直流偏置,首先想到的是隔直电容出现短路,但是更换电容以后没有解决问题,后来我们偶然发现,如果将电容接地放电,可以解决存在直流偏置的问题,最后考虑到这应该和电容本身的充电现象有关。
第二次困难在于方波信号电压不足,导致FPGA难以检测到信号输入。
该问题通过重新调节俩个变阻器的阻值之比得到解决。
第三次困难在于VHDL编程过程中,由于对进程和信号概念理解不清楚,在设计D触发器之后的比较器时,使用了错误的代码,导致系统自检出错,后来通过请教同学,改变设计方法,解决了这一问题。
在实验过程中,还因误触稳压电源旋钮烧坏了一个LM324运放,幸运的是并没有损坏其他电路原件,这也提醒我们在实验过程中一定要细致,小心。
5.2实验结果
在代码和硬件都分别完成并分块调试完毕以后,将VHDL代码下载到FPGA开发板上,并将整个系统连接好,即完成了实验主要内容。
摇动电路板,FPGA上的数码管能正确显示计数到99次,按下reset键可以对显示清零并重新开始计数。
第六章结束语
通过本次实验,第一次体会到了数字电路设计开发过程,对高精度的电路焊接,FPGA开发,系统调试等都有了更加深入的了解并增加了实践的经验。
贴片芯片的焊接是一个对耐心和细致要求极高的工作,我也是通过仔细琢磨,并花了很长时间才掌握了焊接的诀窍。
并成功将几根头发丝一样细的导线焊上去。
同时,系统设计虽然很完善,但是实际电路完全和设计不同,反复的调试也让我体会到了电路设计一定要结合实际这一观点。
正如一个学姐说的,“只有调的出来的电路设计,才是好设计”。
反复调试也让我更加体会到耐心和坚持的重要,试想,如果一次两次调试失败就放弃,是不可能做得出来这个小装置的。
在实验过程中,我还发现,由于是两个同学共同完成一块板子的制作,所以很多同学不愿意亲自动手完成繁琐的焊接工作,完全交给另外一个同学完成(当然我们组是真正两个人合作完成的),这样的话就失去了这个宝贵的锻炼动手能力的机会,不得不说是一个遗憾,所以还是希望以后能够多采购一些元器件,让每个同学都能够充分感受制作的过程,毕竟培养同学动手能力也是实验目的的一部分。
最后,感谢在实验过程中给予我帮助的老师和同学们,没有你们的帮助和支持,我的实验将完成的非常困难,是你们让我感受到了团队合作的力量。
附录1
VHDL程序
---------------------------------------------------------------------
--Company:
--Engineer:
--CreateDate:
02:
54:
5005/12/2011
--DesignName:
--ModuleName:
raysc-Behavioral
--ProjectName:
--TargetDevices:
--Toolversions:
--Description:
--Dependencies:
--Revision:
--Revision0.01-FileCreated
--AdditionalComments:
libraryIEEE;
useIEEE.STD_LOGIC_1164.ALL;
useIEEE.STD_LOGIC_ARITH.ALL;
useIEEE.STD_LOGIC_UNSIGNED.ALL;
----Uncommentthefollowinglibrarydeclarationifinstantiating
----anyXilinxprimitivesinthiscode.
--libraryUNISIM;
--useUNISIM.VComponents.all;
entityrayscis
Port(din:
inSTD_LOGIC;
clk:
reset:
dout:
outSTD_LOGIC_VECTOR(7downto0);
en_out:
outSTD_LOGIC_VECTOR(7downto0));
endraysc;
architectureBehavioralofrayscis
signalcnt1,cnt2:
std_logic_vector(3downto0);
--theoutcomesofthecounter
signalcont1,cont2:
std_logic_vector(7downto0);
--theencodingsofdisplayer
signala,b:
std_logic;
signalcounter1:
std_logic_vector(12downto0);
signalcounter2:
signalcnt_flag,en_flag:
signalzer,one,two,thr,fou,fiv,six,sev,eig,nin,E:
std_logic_vector(7downto0);
begin
a<
=din;
zer<
="
11000000"
;
one<
11111001"
two<
10100100"
thr<
10110000"
fou<
10011001"
fiv<
10010010"
six<
10000010"
sev<
11111000"
eig<
10000000"
nin<
10010000"
E<
10000110"
process(clk,reset)
ifreset='
0'
then
b<
='
elsifclk'
eventandclk='
1'
=a;
endif;
endprocess;
process(clk,reset)
cnt1<
=(others=>
'
);
cnt2<
ifa='
andb='
ifcnt1="
1001"
cnt1<
cnt2<
=cnt2+'
else
=cnt1+'
endif;
endif;
counter1<
cnt_flag<
--en_flag<
ifcounter1="
1111111111111"
counter1<
else
=counter1+'
process(clk,reset)
ifclk'
ifcounter1<
"
0111111111111"
en_flag<
process(cnt1,cnt2)
casecnt1is
when"
0000"
=>
cont1<
=zer;
0001"
=one;
0010"
=two;
0011"
=thr;
0100"
=fou;
0101"
=fiv;
0110"
=six;
0111"
=sev;
1000"
=eig;
=nin;
whenothers=>
=E;
endcase;
casecnt2is
cont2<
process(en_flag,cont1,cont2)
begin
ifen_flag='
then
dout<
=cont1;
en_out<
11111110"
else
dout<
=cont2;
11111101"
endBehavioral;
附录2
管脚适配
NET"
clk"
TNM_NET=clk;
############################clock
TIMESPECTS_clk=PERIOD"
20nsHIGH50%;
din"
LOC=P21;
LOC=P128;
reset"
LOC=P38;
#NET"
set"
LOC=P41;
#################################################NixieTube
dout(7)"
LOC=P66;
dout(6)"
LOC=P53;
dout(5)"
LOC=P54;
dout(4)"
LOC=P77;
dout(3)"
LOC=P76;
dout
(2)"
LOC=P58;
dout
(1)"
LOC=P75;
dout(0)"
LOC=P52;
#################################################control
en_out(7)"
LOC=P51;
en_out(6)"
LOC=P59;
en_out(5)"
LOC=P74;
en_out(4)"
LOC=P43;
en_out(3)"
LOC=P82;
en_out
(2)"
LOC=P83;
en_out
(1)"
LOC=P85;
en_out(0)"
LOC=P81;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数字电路 课程设计