1、基于FPGA占空比检测系统北华大学电子系统工程实习报告 基于FPGA的脉冲占空比测量系统设计学 院:电气信息工程学院专 业: 电子信息工程班 级: 姓 名: 学 号: 指导教师: 实习日期: 1实习题目基于FPGA矩形脉冲占空比测量系统 。2实习目的与要求在两周的实习中,需掌握verilog语言的使用,提高模拟电路设计的能力,掌握FPGA器件基本使用方法,掌握波形发生器及示波器等仪器的使用方法,通过方案设计来对测量系统进行逐步实现,最终完成实习。实习要求如下:1.被测信号为矩形波,频率范围为1Hz5MHz; 2.被测信号峰峰值电压范围为50mV1V; 3.被测脉冲信号占空比的范围为10%90%
2、; 4.显示的分辨率为%,测量相对误差的绝对值不大于。 系统框图如图所示:模拟电压放大模块占空比测量模块按键启动模块波形发生器 数码管显示模块显示占空比Cnt2停止计数,计算占空比结束判断被测信号是否有下降沿Cnt1停止计数,计算占空比图 系统架构图3实习内容1.在模拟电路部分利用运算放大器对50mV1V电压进行放大,所以需要设计出电压放大电路,仿真完成后,并作出实物;2在数字电路部分利用quartus II 软件进行设计,用verilog语言进行编辑程序,用ModelSim进行时序仿真,直至占空比测量满足误差位置;3在时序仿真完成后,加上按键控制,数码管显示模块,BCD码转换模块,在对管脚进
3、行正确分配后,下到FPGA中对系统进行测试,在实际情况下对系统进行调试。4 实习原理4.1 Multisim 软件Multisim是美国国家仪器(NI)有限公司推出的以Windows为基础的仿真工具,适用于板级的模拟/数字电路板的设计工作。它包含了电路原理图的图形输入、电路硬件描述语言输入方式,具有丰富的仿真分析能力。使用Multisim交互式地搭建电路原理图,并对电路进行仿真。Multisim提炼了SPICE仿真的复杂内容,无需懂得深入的SPICE技术就可以很快地进行捕获、仿真和分析新的设计,这也使其更适合电子学教育。通过Multisim和,PCB设计工程师和电子学教育工作者可以完成从理论到
4、原理图捕获与仿真再到和测试这样一个完整的综合设计流程。4.2 Quartus II 软件Quartus II可以在XP、Linux以及Unix上使用,除了可以使用Tcl脚本完成设计流程外,提供了完善的用户图形界面设计方式。具有运行速度快,界面统一,功能集中,易学易用等特点。Quartus II支持Altera的IP核,包含了LPM/MegaFunction宏功能模块库,使用户可以充分利用成熟的模块,简化了设计的复杂性、加快了设计速度。对第三方EDA工具的良好支持也使用户可以在设计流程的各个阶段使用熟悉的第三方EDA工具。此外,Quartus II 通过和DSP Builder工具与Matlab
5、/Simulink相结合,可以方便地实现各种DSP应用系统;支持Altera的片上可编程系统(SOPC)开发,集系统级设计、可编程于一体,是一种综合性的开发平台。Quartus II提供了完全集成且与电路结构无关的开发包环境,具有数字逻辑设计的全部特性,包括:可利用原理图、结构框图、VerilogHDL、AHDL和VHDL完成电路描述,并将其保存为设计实体文件;Quartus II功能如下:芯片(电路)平面布局连线编辑;LogicLock增量设计方法,用户可建立并优化系统,然后添加对原始系统的性能影响较小或无影响的后续模块;功能强大的逻辑综合工具;完备的电路功能仿真与时序逻辑仿真工具;定时/时
6、序分析与关键路径延时分析;高效的期间编程与验证工具;可读入标准的EDIF网表文件、VHDL网表文件和Verilog网表文件;能生成第三方EDA软件使用的VHDL网表文件和Verilog网表文件。软件公司的ModelSim是业界最优秀的HDL语言,它能提供友好的仿真环境,是业界唯一的支持VHDL和Verilog混合仿真的。它采用直接优化的编译技术、Tcl/Tk技术、和单一内核仿真技术,编译仿真速度快,编译的代码与平台无关,便于保护IP核,个性化的图形界面和,为用户加快调错提供强有力的手段,是FPGA/的首选仿真软件。芯片UA741CN(单运放)是高增益运算放大器,用于军事,工业和商业应用。这类单
7、片硅集成电路器件提供输出短路保护和闭锁自由运作。具有广泛的共同模式,差模信号范围和低失调电压调零能力与使用适当的电位。5 系统硬件电路设计与程序流程设计系统电压放大硬件电路设计首先,利用Multisim软件对电压放大电路进行仿真,根据仿真结果对电路进行修改,同相放大电路如图所示,公式如所示:Vi=Vp=Vn=(R1* Vo )/(R1+R2) ()图同相发大电路图然后根据电路图对实物进行制作,再进行测试。系统软件程序流程设计系统软件程序流程图如图所示:数据初始化开始否是判断start=1否是判断被测信号是否有下降沿Cnt1开始计数Cnt2开始计数判断被测信号是否有上升沿否Cnt1停止计数,cn
8、t2开始计数否Cnt2停止计数,cnt1开始计数判断被测信号是否有下降沿判断被测信号是否有上升沿Cnt2停止计数,算占空比显示占空比是判断被测信号是否有下降沿否否判断被测信号是否有上升沿是是否Cnt1停止计数,算占空比结束6 系统调试与仿真实验步骤(1)打开Quartus I图 工程名设置截图(2)选择好器件,最好不要默认型号,器件选择截图如图所示:图 器件选择截图(3)本次实习需要仿真,所以要关联ModelSim,语言使用VerilogHDL,关联ModelSim截图如图6。所示:图 关联ModelSim截图(4)新建“*.v”文件进行程序编写,编译后成功后进行testbench测试文件的编
9、写,保存后进行编译,编译成功后进行仿真。系统仿真仿真结果如图所示。高电平为1500ns,低电平为2260ns ,理论值为%,实际测量值%。图 仿真结果7实验结论与分析在基于FPGA矩形脉冲占空比测量系统中,模拟部分能通过50mv1v电压放大到的放大,放大的电压经过管脚输入FPGA进行测试占空比,通过按键开始启动测试,并将测试结果显示到数码管上,精度为%。表测量误差序号输入电压(V)频率实际占空比(%)测量占空比(%)频率误差121HZ310HZ4500HZ51KHZ610KHZ7500KHZ81MHZ93MHZ105MHZ当然,在此测量系统中存在误差,误差如下:(1)波形发生器在产生波形时,产
10、生误差;(2)波形经过模拟电路到FPGA过程中,存在噪声干扰,此时用示波器显示会出现少许毛刺;(3)由于FPGA是利用时钟节拍进行对信号的采集,例如,当时钟前一个上升沿采到低电平,后一时钟上升沿采到高电平,就可以判断被测信号有上升沿的到来,就在这一过程就存在误差,误差分析图如图所示:Clk误差被测信号被测信号图 误差分析图为了减小以上存在的误差,可以选用精度更好的波形发生器,适当提高FPGA的主频,提高模拟电路抗干扰能力,是测量系统精度提高。8实习心得在这两周的实习过程中,我觉得对于占空比测量系统的设计,其硬件电路是在模电的基础上设计的,主要是解决电压放大问题,锻炼了模拟电路的分析能力,对芯片
11、手册的阅读能力,也加强对电路焊制与布局的能力。而数字部分设计是一个很灵活的东西,它反映了你解决问题的逻辑思维和创新能力。因此在整个设计过程中大部分时间是用在程序上面的。怎样衔接各个模块才是关键的问题所在,这需要对FPGA的结构很熟悉。一个好的设计架构清晰的思路可以决定设计难易程度和实现精度,可以巩固基础知识,提高实际项目实践能力,本次电子系统设计实习全方面的锻炼各种器件的使用能力以及知识运用的灵活性,进一步加强了团队合作的能力。通过这次设计,我懂得了学习的重要性,学会了坚持和努力,在实训过程中我们可以掌握书本中没有的技能,加强自身各方面的能力,为以后工作打下基础。9参考文献1 常本康精密低频信
12、号频率与占空比测量电路的设计与应用医学研究生学报,2002(8)154.2 梁志国脉冲波形占空比的数字测量及不确定度分析航天计测技术,2004(2):100260613 汪虹,李宏基于FPGA的等占空比任意整数分频器的设计仪器与仪表,2002(1):1004373.4 阎石.数字电子技术基础.第5版:学位论文浙江:浙江大学,2010.附录程序代码及电路原理图附录程序代码module pinlvji_top(clk,rst_n,clk_in,start,seg_data); input clk; input rst_n; input clk_in; input start; output 31:
13、0 seg_data; wire start_biao; wire clk_1s; wire clkx; wire clk_biao_out; wire start_fsm; wire c0; wire 11:0 zhankongbi_out; my_pll my_pll_u( .inclk0(clk), .c0(c0) ); zhankongbi zhankongbi_u( .clk(c0), .rst_n(rst_n), .start_fsm(start_fsm), .clk_biao_out(clk_biao_out), .clk_biao_xia(clk_biao_xia), t_zh
14、an(zhankongbi_out) ); seg_v seg_v_u( .rst_n(rst_n), .clk(c0), .seg_data(seg_data), .hex(zhankongbi_out) );endmodulemodule zhankongbi(clk,rst_n,start_fsm,clk_biao_out,clk_biao_xia,cnt_zhan);/占空比模块 input clk; input rst_n; input start_fsm;/开始标志 input clk_biao_out;/上升沿 input clk_biao_xia;/下降沿 output 11:
15、0 cnt_zhan;/占空比值输出 reg 40:0 cnt1; reg 40:0 cnt2; reg 2:0 state; reg 40:0cnt; reg 41:0cnthh; reg biao; always (posedge clk) begin if(!rst_n) begin cnt1 = 0; cnt2 = 0; state = 0; cnt = 41d0; cnthh = 42d0; biao = 0; end else case (state) 0:begin if(clk_biao_out & start_fsm)/先上升沿 begin state = 1; cnt1 =
16、 cnt1 + 41d1; biao = 0; end else if(clk_biao_xia & start_fsm) /先下降沿 begin state = 4; cnt2 = cnt2 + 41d1; biao = 0; end else begin state = 0; biao = 0; end end 1:begin if(!clk_biao_xia )/下降沿 begin cnt1 = cnt1 + 41d1; state = 1; end else begin cnt2 = cnt2 + 41d1; state = 2; end end 2:begin if(clk_biao
17、_out | !start_fsm)/上升沿 begin/ cnt_zhan =(cnt1*10000)/(cnt1+cnt2);/计算占空比 state = 3; cnthh = cnt1*1000; biao = 1; end else begin cnt2 = cnt2 + 41d1; state = 2; end end 3:begin state = 3;/ cnt_zhan =cnthh;/计算占空比 end 4:begin if(!clk_biao_out ) begin cnt2 = cnt2 + 41d1; state = 4; end else begin cnt1 = c
18、nt1 + 41d1; state = 5; end end 5:begin if(clk_biao_xia | !start_fsm)/上升沿或停止 begin / cnt_zhan =(cnt1*10000)/(cnt1+cnt2);/计算占空比 state = 3; cnthh = cnt1*1000; biao = 1; end else begin cnt1 = cnt1 + 41d1; state = 5; end end endcase end assign cnt_zhan = (biao=1)(cnthh/cnt):0;endmodule电路原理图PCB图实物图500KHZ,电压为,测量10%占空比时:500KHZ,电压为,测量50%占空比时:500KHZ,电压为,测量50%占空比时:
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1