2011年华中科技大学xilinx-依元素科技FPGA电子设计大赛文档 题数字信号发生器及其频率计 班级: 华中科技大学控制系自动化0901班 成员: 梁云龙 U200914247 汪雄峰 U200914265 黄冠 U200914260 指导老师 汪小燕 2011-12-10 简易数字信号发生器及其频率计 摘要:本文设计的简易数字信号发生器及其频率计,是以Digilent Basys 开发板为主体,辅以2片ADC0832,2片TLC5615,以及6片NE5532等芯片组成的外围电路,通过编程实现输出用户希望得到的波形.本文设计的简易数字信号发生器及其频率计可以同时产生两路频率、幅值、以及波形类型可调的信号,波形有3种,分别是正弦波、方波、以及三角波,输出信号通过了DA转换,可以使用示波器查看.可以同时检测三路的输入信号,通过串口将Digilent Basys 开发板和电脑相连,可以在用户界面查看到用户输入的波形及其频率等参数,有良好的交互界面.该项目在推广小型信号发生器方面有十分大的潜力,比如维修各类电子产品,微小信号的检测等方面,都有很大的市场,具有极高的应用价值. 关键词:输入、输出信号;频率;幅度; Simple digital signal generator and its frequency measuring tool Abstract:In this paper the designed simple digital signal generator and its frequency measuring tool is based on Digilent Basys development board as the main body, and with the two pieces of ADC0832, two pieces of TLC5615, and six pieces of NE5532 etc of chip buffer circuit, through the program realizing user's hope to get the output waveforms. In this paper the designed simple digital signal generator and its frequency measuring tool can also produce two road frequency, amplitude, and waveform type adjustable signal waveform, the waveform is a sine wave, a square wave, and the triangle pulse wave, the output signal through the DA conversion, can use an oscilloscope to check. And the input signal detecting three road signal, through a serial port ,The Digilent Basys development board and the computer connected, with a good user interface, in the user interface for the user can display the input of the waveform and its frequency characteristics,The project in the promotion of small signal generator has a very big market, such as the maintenance of all kinds of electronic products, small signal detection and so on, it has a high application value. Keywords:inout,output signal ;frequency;amplitude 目录 一、系统设计目标 4 1. 基本设计目标 4 2. 发挥与拓展 4 二、系统方案设计与论证 5 1 系统方案选择与比较 5 2. 系统框图和方案描述 5 三、理论分析计算 6 四、单元电路设计与功能实现说明 6 1、单元电路设计(模块) 6 2.流程图 6 3、模块实现 7 4. 扩展电路设计 9 4.1 电路原理 9 4.2 Pcb版图 9 4.3 电路元器件清单 10 五、电路仿真 10 六、测试方案与测试结果 10 1. 测试方案 10 2. 测试仪器 11 3. 测试结果 11 七、收获、体会与建议 11 八、结语 12 九、致谢 12 附录一:参考文献 12 附录二:系统框图 13 附录三:系统流程图 13 附录四:系统源码清单 13 一、系统设计目标 本次设计的系统为简易数字信号发生器及其频率计,设计的目标分为基本和发挥部分,使系统可以同时产生两路频率、幅值、以及波形类型可调的信号,波形有3种,分别是正弦波、方波、以及三角波,可以使用示波器查看.并且可以同时检测三路的输入信号,通过串口将Digilent Basys 开发板和电脑相连,可以在用户界面查看到用户输入的波形及其频率等参数,有良好的交互界面. 1. 基本设计目标 使用Digilent Basys2 开发板可产生12bit位宽,2000HZ正弦波数字化样值信号并通过ise13.1集成仿真工具仿真确认设计结果. 产生数字化正弦波信号的同时,可输出同频方波信号,并用示波器验证. 可对该信号进行计数,并在Digilent Basys2 开发板上用数码管显示频率计数结果(精确到Hz). 2. 发挥与拓展 可通过拨码或按键输入指定所生成输出信号的频率; 增加输出波形的路数(各路之间可手动设置同步关系); 实现输出信号的DA转换(附加必要外围电路); 增加输出波形的种类(如三角波、锯齿波等). 幅度可调; 输出信号类型、频率、幅度、相位关系的手动设置输入控制; 可测量外部输入到Digilent Basys2 开发板允许的电压信号的频率(注意校验信号幅度峰值<3.3V与注意共地与连接关系!),并在Digilent Basys2 开发板上显示频率计数结果. 利用Digilent Basys 开发板VGA输出接口实现波形发生器与频率计用户界面. 增加输入计数信号波形的路数; 提高所设计实现的波形发生器与频率计的量程与精度; 用户自定义波形的输入与产生 用MFC编写的示波器. 二、系统方案设计与论证 (简要介绍考虑过的各种方案系统方案(必要时辅以框图说明)、相应原理和优缺点比较,重点说明所采用的方案(辅以框图说明)等). 1 系统方案选择与比较 ⑴最小系统方案 方案一:以8位的8051单片机为核心的解决方案,可以实现设计的基本功能,但是51的主频较低,处理速度很慢,功能不够强,性价比不高,而且不满足低功耗的要求,但是却简单容易编程. 方案二:以Digilent Basys2 开发板为核心的解决方案,其时钟频率高于单片机数十倍,并且具有低功耗、高性能的优势,可以胜任题目要求的所有功能. 最终出于节能以及多功能的考虑,选择方案二,采用Digilent Basys2 开发板作为该系统的开发环境,并且Digilent Basys2 开发板为本次项目的指定开发板. ⑵输出信号产生方案 方案一:利用ip core产生正弦波模块,直接调用模块以产生正弦波,此方案简单易行. 方案二:利用查表的方法.首先产生正弦波表,以50MHZ为时钟,利用查表的方法,得到正弦波的数据,通过改变查表的时间间隔来改变正弦波的频率. 本系统采用第二种方法,因为利用自己产生的正弦波表,一个周期内的数据更多,最后显示的波形更加真实. ⑶输入信号处理方案 方案一:直接经过AD采样进入FPGA,FPGA显示信号频率,不显示其他参数,此方案容易实现. 方案二:以Digilent Basys2 开发板为核心,通过ADC0832将采集的信号用串口发送到电脑,用C++编程将数据以波形的方式显示出来.此方案可以得到一个良好的交互界面. 经过综合考虑,选择方案二,因为利用电脑编程实现可以重现输入的信号,这有利于用户分析信号. 2. 系统框图和方案描述 采用基于FPGA的直接波形合成,并以FPGA作为整个系统的信号产生和控制中心.基于FPGA的直接数字频率合成其组成框图如图2.1.直接数字频率合成(DDS),具有频率切换速度快,频率分辨率高、可编程全数字化、相位连续、转换速度高、控制方便且有输出任意波形的能力等优点.用FPGA实现DDS技术比较灵活,可以产生多种调制方式,多种组合方式. 图2.1 系统组成框 实际的系统组成框图如下图所示: 图2.2 系统组成框图 三、理论分析计算 输出信号频率:0~100khz 上位机示波器显示频率: 0~2khz 低通滤波器截止频率: 100khz 运放选型: NE5532 AD选型: ADC0832(串行,占用I/O口少) DA选型: TLC5615 (串行,占用I/O口少) 四、单元电路设计与功能实现说明 [建议以电路原理图(一般不必给出全图,应以有特色的电路部分为主)、软件流程图(或伪码)配合必要文字说明介绍单元电路设计与功能模块实现的创新与特色. ⑴顶层模块框图 ⑵内部模块设计与说明 ① display_wave模块说明 顶层模块 rst_n 复位按键,低电平复位 clk_50m 50mhz系统时钟 rs232_tx 串口数据发送引脚 keyin , switchin 控制开关,详见使用说明书 sm_db 数码管段选 hexcs 数码管片选 cs_n , sclk ,din tlc5615接口 din1,,din2,dout1,dout2,cs_n1,cs_n2,clk1,clk2 adc0832接口 control_s 控制数码管是显示输入频率计数还是显示输出频率 fre1_in 输入信号频率计数 module display_wave(rst_n,clk_50m,rs232_rx,rs232_tx,keyin,switchin,sm_db,hexcs,led,DW,cs_n,sclk,din, din1,din2,dout1,dout2,cs_n1,cs_n2,clk1,clk2 ,control_s,fre1_in ) Last模块 串口最后发送三路信号的频率 next_n1下降沿动发送 freq1 , freq2 ,freq3为三路信号的频率 start_n2_down 串口模块控制信号,启动串口的发送 data3 串口模块控制信号,发送的数据 module last(rst_n,clk_50m,next_n1,freq1,freq2,freq3,start_n2_down,data3); tcl_trigger 启动tlc5615的触发信号,每个下降沿启动 module tcl_trigger(clk_50m,rst_n,tcl_trigger); digital_led模块 数码管显示模块,把要显示的数据转换为段选和片选 outs 为段选输出 outc 为片选输出 module digital_led(clk_50m,rst_n,in1,in2,in3,in4,outs,outc); before_start模块 在发送数据前先发十个'#'作为标志, start_n1 启动串口发送数据 data1 要发送的数据 next_n 数据发送完的标志,作为下一步进行的触发信号 module before_start(rst_n,clk_50m,start_n1_down,data1,next_n); Caiyang模块 产生显示波形的时钟,即每隔多长时间刷一次屏 module caiyang(rst_n,clk_50m,caiyang_clk); rs232_clk模块 串口发送数据的时钟 module rs232_clk(rst_n,clk_50m,rs_clk); after_start模块 在标志位发送之后,等待输入信号的下降沿到来之后,启动采样 module after_start(rst_n,clk_50m,start_n,fre,next_n); deshaking模块 按键防抖模块,可滤除小于50mhz一个时钟周期的抖动 module deshaking(clk_50m,in,out); serial模块 串口模块 input clk; // 50MHz主时钟 input rst_n; //低电平复位信号 input tx_start_n; //下降沿启动脉冲 input rs232_rx; // RS232接收数据信号沿触发数据的发送 input[7:0] data_in; //要发送的数据输入 output rs232_tx; // RS232发送数据信号o output rx_done_n,tx_done_n; //接收完数据出现下降沿 output[7:0] data_out; //接收到的数据输出 module serial( clk,rst_n,tx_start_n,data_in, rs232_rx,rs232_tx,rx_done_n,tx_done_n,data_out ); my_uart_rx 串口接收模块 input rs232_rx; // RS232接收数据信号 input clk_bps; // clk_bps的高电平为接收或者发送数据位的中间采样点 output bps_start; //接收到数据后,波特率时钟启动信号置位 output[7:0] rx_data; //接收数据寄存器,保存直至下一个数据来到 output rx_int; //接收数据中断信号,接收到数据期间始终为高电平 module my_uart_rx( clk,rst_n, rs232_rx,rx_data,rx_int, clk_bps,bps_start ); speed_select 波特率选择模块 input bps_start; //接收到数据后,波特率时钟启动信号置位 output clk_bps; // clk_bps的高电平为接收或者发送数据位的中间采样点 */ module speed_select( clk,rst_n, bps_start,clk_bps ); my_uart_tx 串口发送模块 input clk_bps; // clk_bps_r高电平为接收数据位的中间采样点,同时也作为发送数据的数据改变点 input[7:0] rx_data; //接收数据寄存器 input rx_int; //接收数据中断信号,接收到数据期间始终为高电平,在该模块中利用它的下降沿来启动串口发送数据 output rs232_tx; // RS232发送数据信号 output bps_start; //接收或者要发送数据,波特率时钟启动信号置位 module my_uart_tx( clk,rst_n, rx_data,rx_int,rs232_tx, clk_bps,bps_start,tx_done ); ad_control adc0832控制接口模块 din1 , din2 adc0832转化的数据发输入接口 dout1,dout2 ad通道控制输入给ad cs_n1 cs_n2片选信号 clk1 clk2 时钟信号 next_n 转换结束信号,触发下一步频率的发送 control 控制是高频采样还是低频采样 begin_n 启动ad采样 ready_n data 串口发送数据的启动信号和数据 module ad_control(rst_n,clk_50m,fre1,control,begin_n,din1,din2,data,ready_n,dout1,dout2,cs_n1,cs_n2,clk1,clk2,next_n1 ); caiyang_cc模块 ad模块内部采样时钟 module caiyang_cc(rst_n,clk_50m,begin_n,caiyang_clk,next_n1,control); down_to_down 将下降沿转化为短时间的负脉冲,方便控制 module down_to_down(rst_n,clk_50m,inn,out); div_fre_10 十分频模块,用于高频采样,低频采样的时钟 module div_fre_10(rst_n,in,out); tcl5615_t DA 控制模块 trigger 触发DA的转化 data 需转化的数字量 cs_n sclk din DA芯片接口,分别为自选、时钟、数据 module tcl5615_t(rst_n ,clk_50m,trigger,data,cs_n,sclk,din); produce_dac_clk模块 产生da 控制时钟,即移位时钟 module produce_dac_clk(rst_n,clk_50m,dac_clk); freq模块 频率计数方式一,用输入信号为基准,采样50mhz module freq(data_in,rst_n,clk_50m,freq ); Frequence模块 频率计数方式二,以秒脉冲数输入信号的频率 module frequence(rst_n,clk_50m,fre,sm_db0,sm_db1,sm_db2,sm_db3); adc0832 AD接口模块 cs_n片选信号 clk时钟信号 ready_n 转换结束信号 start_n 启动ad采样 channel通道选择 din 模块输入,即AD输出的数字信号 dout 模块输出,即AD输入的控制信号 module adc0832(rst_n,clk_50m,din,channel,start_n,dout,clk,cs_n,data,ready_n ); ② DDS各模块说明 1.control模块 控制模块,控制调节频率的精度和显示模式.通过改变频率控制字改变输出波形的频率以及每次按键的调频精度,通过按键改变 控制波形显示,有三种控制:调频,变换波形,复位(显示1KHZ正弦波). input [2:0] keyin; input clk; input [4:0] DW; input switchin; output reg [31:0] length; output reg [1:0] wavemode; 2. counter模块 通过输入的波形控制字产生查表地址,输出的地址供boxing模块查表使用 input clk; output reg [9:0] address; input [31:0] fre_word; 3.boxing模块 根据地址查表产生波形数据,同时根据control模块产生的显示模式将波形数据输出. input clk; input [9:0] address; input [1:0] wavemode; output [9:0] wavevalue; 4. sin1,sanjiao1,fangbo1模块 正弦波、三角波、方波数据查找表,根据输入的查找表地址找到对应的波形数据输出. input [9:0]address; input clk; output [9:0]wavevalue; ③转换模块 1.二进制转BCD码模块 实现原理:本模块利用的原理是俗称的移位加三法则. 该规则如下: 1、将该二进制数左移一位; 2、对于25位的二进制数,最大8位十进制数,从千万位开始,分别是千万, 百万,十万,万,千,百,十,个位,所以如果转换为BCD码, 共需要32位二进制序列缓冲,每4位为一组,按上述顺序排列; 3、如果移位后,该组的数据如果大于等于5,则对该组数据加3处理; 4、左移一位; 5、回第三步循环,直到所有数据移位完毕. 经过上述的处理之后,得到的数据便是我们需要的BCD码, 模块说明: Bcd为模块的输出BCD码信号线,ena为模块的复位信号线,binary为模块的输入二进制信号线. module ConvertTwoToBCD (bcd, ena, binary); 2.显示模块:CD4511.v Str为输出数据, BLnot为灭灯信号, LTnot为测试灯用, D为输入的待译码信号, enDP为开小数点信号. module CD4511 (Str, BLnot, LTnot, D, enDP); 1、单元电路设计(模块) 2.流程图 ⑴信号源流程图 ⑵示波器流程图 3、模块实现 ⑴基本功能 ⑵发挥功能 4. 扩展电路设计 示波器 4.1 电路原理 给出电路原理图及必要文字说明; 4.2 Pcb版图 根据原理电路图手工绘制PCB电路图,最终的印刷电路板如下图所示: 图4.3 Pcb版图 4.3 电路元器件清单 表4.1 电路元器件清单 型号 数量 说明 备注+参考价格 ADC0832 2 模数转换器 TLC5615 2 数模转换器 NE5532 6 运算放大器 电源接口 1 外接9V电源 排针 2 信号接口 串口 1 连接器 瓷片电容 5 0.01uF 电解电容 3 470uF 电解电容 2 47uF 小电阻 若干 不计 精密电位器 2 2KΩ 精密电位器 2 1 KΩ 精密电位器 4 20KΩ 精密电位器 2 50KΩ IC座12 8pin 跳线帽 20 短接用 杜邦线 20 连接用 五、电路仿真 下图是仿真的结果,通过对仿真波形的分析,我们的二进制转BCD码模块可以工作. 六、测试方案与测试结果 用示波器测量DA产生的波形,用示波器测量频率并与数码管显示频率相比较,用示波器测量输入信号幅值并与上位机显示的相比较. 1. 测试方案 简要说明系统功能与指标的测试方法,给出明确的测试步骤. 测量输出信号 测量输入信号 2. 测试仪器 表6.1 测试仪器列表 型号 数量 说明 TDS 1002型数字示波器. 1 作为输出信号的检测工具 EE1643C型函数信号发生器/计数器. 1 作为精确的输入信号源 七、收获、体会与建议 实践是检验真理的唯一标准,当然也是检验学习成果的标准.在经过一段时间的学习之后,我们需要了解自己的所学应该如何应用在实践中,因为任何知识都源于实践,归于实践,所以要将所学的知识在实践中来检验. 在做本次竞赛的期间,在老师的指导下,通过自身的不断努力,无论是思想上,学习上,都取得了长足的发展和巨大的收获,现总结如下:思想上,学会了用科学的精神去解决问题.很多事情看起来是很简单的问题,但实际做起来去会发现有许多奥妙!这是因为其中蕴含着许多科学的问题.运用科学的方法去解决问题,这是我们这次竞赛给我们带来的思想上的改变.学习上,使自已在大学所学的知识在这次得到实践,并且学到一些书本上无法学到的经验,对电子元件以及Verilog HDL编程有了进一步的认识.希望竞赛在以后的路程中越走越远,越走越宽. 八、结语 信号发生器及其频率计是信息化时代发展的产物,应时而生,我们相信随着科技的不断发展,将来的信号发生器及其频率计一定更加完美,更加人性化,更加经济,更加安全. 九、致谢 感谢本次竞赛给予我们机会,让我们团队以自己所学的知识,应用到实践中,并且在竞赛的过程中通过老师的指导,团队之间的交流,让我们学习到了许多课本中无法学到的知识,在以后的学习过程中指导我们,促进我们更好、更快的学习.再次感谢. 附录一:参考文献 [1] 康华光,陈大钦,张林.电子技术基础(模拟部分).第5版.北京:高等教育出版社, 2006. [2] 康华光,陈大钦,张林.电子技术基础(数字部分).第5版.北京:高等教育出版社, 2006. [3]罗杰,谢自美,电子线路设计·实验·测试 电子工业出版社,2008.