基于FPGA的波形发生器频率计和数字电压表设计.docx
- 文档编号:8104672
- 上传时间:2023-05-12
- 格式:DOCX
- 页数:83
- 大小:134.61KB
基于FPGA的波形发生器频率计和数字电压表设计.docx
《基于FPGA的波形发生器频率计和数字电压表设计.docx》由会员分享,可在线阅读,更多相关《基于FPGA的波形发生器频率计和数字电压表设计.docx(83页珍藏版)》请在冰点文库上搜索。
基于FPGA的波形发生器频率计和数字电压表设计
波形发生器、频率计和数字电压表设计
电子022刘真照李杰雄丁伟东
摘要:
本系统以FPGA为核心,将波形发生器、频率计和数字电压表有机结合在一起。
FPGA具有丰富的资源,使用方便灵活,且易于进行功能扩展,完全可以满足设计的要求。
主要模块有波形生成模块、频率设置模块、数模转换模块、显示模块和滤波网络。
其中FPGA用来实现波形表生成和频率控制;正弦波的数模转换由DAC8032实现;整形采用三极管S9018来实现;并通过低通滤波器提高输出波形的质量。
本设计采用双DA来控制波形的幅度,实现了幅度连续可调。
关键词:
FPGA双D/A调幅数模转换
第一章系统设计………………………………………………………………...3
1.1总体设计方案…………………………………………………………………….3
1.1.1设计要求…...………………………………………………………………….3
1.1.2设计思路…...………………………………………………………………….3
1.1.3方案论证与比较……………………………………………………………….3
1.1.4系统组成…...…………………………………………………………………4
第二章单元电路设计……..…………………………………………………...4
2.1波形合成器的设计………………………………………………………………4
2.1.1正弦波合成...………………………………………………………………….4
2.1.2三角波、锯齿波、矩形波的合成……………………………………………….5
2.2频率与幅度调节的原理及实现…………………………………………………5
2.2.1频率等步进调节的实现……………………………………………………….5
2.2.2幅度调节模块的设计………………………………………………………….6
2.3波形选择模块与键盘控制模块设计……………………………………………6
2.4自动换档模块设计………………………………………………………………6
2.5模数转换电路设计………………………………………………………………6
2.6整形电路设计.…………………………………………………………………...7
第三章软件设计………………………………………………………………...7
3.1正弦波合成器设计……………………………………………………………....7
3.1.1正弦波波形数据产生…………………………………………………………...7
3.1.2波形存储器的设计…………………………………………………………......8
3.2三角波、矩形波、锯齿波发生器及相位累加器…………………………........8
3.3频率测量.…………………………………………………………………...........8
3.4键盘控制模块……………………………………………………………............9
3.5波形选择模块……………………………………………………………............9
3.6数字电压处理模块………………………………………………………............9
第四章系统测试……………………………………………………….............10
4.1波形的测试………………………………………………………………..........10
4.2各种波形的测试数据……………………………………………………..........10
4.2.1波形发生器……………………………………………………………..........10
4.2.2频率计………………………………………………………………….........10
4.2.3数字电压表………………………………………………………...................11
第五章结论………………………………………………………...................11
参考文献…………………………………………………………….......................11
附录………………………………………………………………….........................11
第一章系统设计
1.1总体方案设计
1.1.1设计要求
利用现成的FPGA,在一块电路板上实现波形发生器、数字频率计和数字电压表三种功能。
而且要求其指标越高越好,所产生的波形越清晰越好。
频率、幅度不限。
1.1.2设计思路
由于要在一个电路里面实现三种功能,因而我们打算分模块来设计。
即分别考虑实现波形发生器、数字电压表和数字频率计。
然后再将它们有机的结合起来,在一个电路里面实现。
这样设计起来比较容易,也比较好考虑。
同时增加了液晶显示,显示是什么波形、波形的频率和电压幅度,从而实现很好的人机界面。
1.1.3方案论证与比较
1.波形发生器设计方案
方案一:
采用模拟直接合成法,转换速度快,频率分辨力高,但电路复杂,难以集成,发展
受到一定限制.
方案二:
采用锁相环合成法,输出信号频率可达到超高频甚至微波段,且输出信号频谱纯
度较高,但转换要几毫秒的时间,速度慢.
方案三:
采用直接数字合成器(DDS),可用硬件或软件实现。
即用累加器按频率要求对相
应的相位增量进行累加,再以累加相位值作为地址码,取存放于ROM中的波形数据,经D/A转换、滤波即得所需波形。
方法简单,频率稳定度高,易于程控。
分析以上三种方案的优缺点,显然第三种方案具有更大的优越性、灵活性,所以采用第三种方案进行设计。
2.波形数据的产生
方案一:
使用VisualC++计算正弦波及指定函数波的N点采样值,然后写入到ROM中待用。
方案二:
使用Matlab计算上述数据。
两种方案都是利用软件计算波形参数的较佳方案。
VC++对计算值的舍入是直接取整,因此方案一得到的数据有较大误差,而且该方案编程复杂。
Matlab能对数据进行四舍五入,因此方案二得到的数据误差较小,且编程简单,修改容易,调用方便。
因此采用方案二。
3.频率调节
方案一:
通过预置FPGA的分频系数调节频率。
方案二:
通过预置FPGA的分频系数以及改变相位步进调节频率。
方案一的调节步进只能以指数形式递增,对于较高的频率范围有较多空白,无法等步进调频;方案二采用粗调与细调相结合,可以实现等步进调频,因此选用方案二。
4.幅度调节
方案一:
采用可调电阻对电压分流。
该方案简单,由于其可调电阻不可能太低,因此导
致电压精度不高,且电压变化范围较大,安全性比较低。
方案二:
幅度控制部分采用双D/A技术,由控制模块对DAC0832置数,第一级D/A
的输出作为第二级D/A转换的参考电压,以此来控制信号发生器的输出电压。
该方案结构简单,易于调整。
基于上述理论分析,拟订方案二。
5.整形电路
方案一:
采用专门的整形网络整形。
该方案得出的波形比较好,频率也比较高。
但电路连接比较麻烦,在此处不适宜。
方案二:
采用三极管来实现。
利用三极管的导通特性,将输入的波形变为方波,以便进行频率的测量。
此方法比较简单,而且经过实践证明在一定的频率范围内确实可得到很好的波形。
综上,拟订方案二采用三极管实现整形。
6.显示方式选择
方案一:
采用LED数码管显示。
该方案只能显示有限的符号和数码字,而且功耗大。
而本设计中要求显示的内容丰富,不适应利用该方法。
方案二:
采用字符型LCD显示。
可以显示英文及数字,质量轻,耗电小,显示内容多。
综上,拟定方案二采用LCD实时显示载频频率。
7.换档方式选择
方案一:
采用手工换档。
在需要测某个电压时,选择适宜的档位进行测量。
此方案使用起来比较麻烦。
方案二:
采用自动换档。
利用电阻所分得的电压与输入电压进行比较,产生控制信号实现自动换档。
该方案不需要手动,较为智能化。
基于上述理论分析,显然方案二更好。
因此采用方案二。
1.1.4
综上方案论证,得到系统框图如图1.1所示。
图1.1系统组成框图
第二章单元电路设计
2.1波形合成器的设计
2.1.1正弦波合成
对一个幅度为1的正弦波的一个周期进行1024点采样,用Matlab计算得到每一点对应的幅度值,然后量化成8位二进制数据存放在ROM中,理论上,采样的点数及量化的位数越多,合成的波形精确度越高,但是,D/AC0832的位数只有8位,量化等级最高为256,其量化误差已能达到要求,对于查正弦表的舍入误差也可忽略,故不再细分。
这里采用1024个采样点,是为了调频时能得到较好的波形。
依次取出ROM中的数据,即可得到幅度上是阶梯型的正弦波。
再经过D/A转换,便可得到连续的正弦波。
2.1.2三角波、锯齿波、矩形波的合成
由于三角波、锯齿波、矩形波波形变化是线性,因此不需要进行波形存储。
三角波的产生是使幅度逐次增加一个相位进,一直到最大值后变为步逐次减少一个相位步进,如此便产生一个周期的波形,锯齿波与三角波类似,只是到达最大值后又从0开始。
矩形波的产生更为简单,只需根据占空比,调节一个周期内输出高、低电平的时间即可。
2.2频率与幅度调节的原理及实现
2.2.1频率等步进调节的实现
由于采用DDFS,在ROM中存有波形一个周期的n个等间隔归一化采样数据,改变相位累加器的步进,从而改变对ROM中数据的读取速度,即可合成不同频率的波形,存储器中存入过量的采样值,使得采样点数较少时,依然能够得到较好的波形输出,从而得到较高的频率输出。
否则,采样点数太少会使产生的波形严重失真。
输出波形的频率可由式(2-1)计算:
式(2-1)
其中,fosc为晶振频率,k为分频系数,N为相位累加器位数,S为相位累加器步长。
若取fosc=32.768MHz,k=50,N=16,带入上式得到f0=10S(Hz)。
因此,只要控制S的值就可以准确地实现频率步进为10Hz的等步进调频。
但是,现有的晶振为32MHz,通过实验测试、比较,可用下式计算频率:
式(2-2)
也能得到10Hz精确的等步进调节,但牺牲了波形的质量,因为65306不是一个2N的数,这样波形会漏掉少量采样点。
不过,即使这样,得到的波形依然很平滑,可以满足设计要求。
若要使频率调节步进减小到1Hz,对晶振有特殊要求,它的振荡频率必须是2的N次幂。
由式(2-1)举例说明累加器位数不同产生的差异:
式(2-3)
式(2-4)
式(2-4)产生的波形将远远优于式(2-3),更优于我们现在所得到的波形,最高频率可提高几倍。
另外,由于DAC0832的电流建立时间是1μs,因此输出波形的最高频率由下式决定:
因此,要得到更高频率的波形需使用更高速的D/A转换器。
2.2.2幅度调节模块的设计
在幅度控制上,采用了双D/A转换来实现幅度调节,第一级的D/A的电压输出作为第
图2.1双DA调节
二级D/A转换的参考电压,其中第一级的输出电压值可由键盘设置,以此来控制信号的输出电压。
D/A转换器的电流建立时间将直接影响到输出的最高频率。
本系统采用的是DAC0832,电流建立时间为1μs,在最高频率点,一个周期输出64点,因此极限频率大约是10.32KHZ,本系统的设计为10.32KHZ。
由于幅度控制用8位D/A控制,最高峰-峰值为10v,因此幅度分辨率为1v。
实际电路图如图所示。
如图,幅度数据由I/O200-207脚输入第一级DAC0832并转换成电压信号,由它作为第二级DAC0832的参考电压,幅度比例系数由I/O176-188脚输入。
2.3波形选择模块与键盘控制模块设计
波形选择用于按键选择输出的波形类型,采用一个按键,每按一次变换一种波形,选到最后一个之后又重头开始。
键盘控制模块连接相位步进累加器和波形选择模块,是完成波形选择与调频的人机界面。
使用有限状态机设计,可以减少大量的按键,操作简单。
2.4自动换档模块设计
用电阻所分得的电压与输入电压进行比较,产生控制信号实现其自动换档。
此种方法比较智能化,不需要人为的去选择档位。
但此种方法的设计还有待改进,在实际的设计中还不能很好的实现。
2.5模数转换电路设计
为了能很好的测量波形的幅度,将各种波形送入AD0809进行模数转换,得到相应的数字代码,然后送入FPGA处理,并显示出来。
方框图如下:
图2.2模数转换
2.6整形电路
为了能很好的测出各种波形的频率,在进入FPGA以前必须经过整形电路整形。
本电路采用三极管来完成。
利用三极管导通前后的特性,即导通前集电极输出为高电平,而导通后集电极的输出只比发射极高一点,是低电平。
以此使输入波形只有达到某个电压时才导通,导通后输出即为低电平。
这样就将输入波形变成了方波。
再将方波送入FPGA进行处理。
但这种方法也有一定的缺陷,那就是波形的频率受到三极管的频带限制,不能实现高频的整形。
具体电路如下:
图2.3整形电路
第三章软件设计
3.1正弦波合成器设计
3.1.1正弦波波形数据产生
利用Matlab6.5计算波形数据,程序及结果如下:
>>step=2*pi/1023;
>>x=0:
step:
2*pi;
>>y=127.5*sin(x)+127.5;
>>z=round(y)
z=
Columns1through10
128128129130131131132133134135
Columns11through20
135136137138138139140141142142
……
Columns1021through1024
125126127127
3.1.2波形存储器的设计
使用开发软件为XilinxISE4.2,编程语言为VHDL,仿真工具为ModelSimXilinxEdition5.3dXE,程序见附录。
3.2三角波、矩形波、锯齿波发生器及相位累加器
三角波、矩形波、锯齿波发生器及相位累加器集成于同一个模块中,程序流程图如图3.1所示。
程序见附录。
图3.1三角波、矩形波、锯齿波发生器及相位累加器程序流程
3.3频率测量
一共采用八位计数,理论上可计50MHz以内的所有频率。
根据某一位(最低位除外)与其前一位(即判断是否有溢出显示位)的数值,来选择适当的档位,再对频率值进行测量。
实际结果即为在显示器上显示被测结果乘以其适当档位。
程序流图如图3.1.1。
程序见附录。
图3.2频率测量流程图
3.4键盘控制模块
程序见附录。
3.5波形选择模块
程序见附录。
3.6数字电压处理模块
数字电压处理的模块图如图3.3所示。
利用了ADC0908的四个通道。
一个处理0-5V,一个处理5-10V,一个处理10-25V,还有一个处理25-50V。
具体程序见附录。
图3.3数字电压处理方框图
第四章系统测试
4.1波形的测试
我们分别测试了三种波形,来观察他们的幅度、频率以及波形。
在自己做的板子上检测时,波形出现了晃动,在一段频率范围内不能稳定。
为此一直以为是软件问题,后来改用学校的那块FPGA板子引出接口进行测量,发现软件没什么问题,波形比较稳定,频率测量也很准。
但检查自己电路时并没发现什么错误,锁脚也没什么错,可能是板子的某个引脚出了问题。
但系统总体来说还是达到设计的要求的,在学校的那块板子上实现的更好。
4.2各种波形的测试数据
由于测试数据太多,在此只列出其中一部分。
误差公式:
其中f0为理论值,f1为实测值。
4.2.1波形发生器
表1
理论值(HZ)
实测值(HZ)
误差(%)
理论值(HZ)
实测值(HZ)
误差(%)
10
10.00
0.0000
800
798.86
0.00143
20
20.01
0.0005
1000
998.25
0.00175
30
30.01
0.0003
2000
1996.56
0.00172
40
40.00
0.0000
5000
4984.12
0.00318
50
50.01
0.0002
8000
7975.56
0.003055
100
99.98
0.0002
9000
8970.67
0.003259
200
199.89
0.0006
10230
10189.58
0.003951
500
499.57
0.0086
表4.1正弦波理论值与实测值比较
4.2.2频率计
表2
理论值(HZ)
实测值(HZ)
误差(%)
理论值(HZ)
实测值(HZ)
误差(%)
1
1.12
0.1200
800
799.34
0.00825
20
20.04
0.0020
1000
998.57
0.00143
30
30.08
0.0012
2000
1997.14
0.00143
40
40.06
0.0015
5000
4985.24
0.002952
50
50.02
0.0004
8000
7975.03
0.003121
100
99.98
0.0002
1MHz
999904.69
0.000095
200
199.89
0.0006
3MHz
299842.47
0.000052
500
499.57
0.0009
4.2.3数字电压表
数字电压表可测正也可测负。
在具体实现时将负电压转换为正电压进行测量。
在此只列出了正电压的值。
理论值可达到50V,但为了安全,只测到25V。
由于测量时我们设置的位数比电源输入的位数高许多,在此只取了三位,因而误差并不是很准确。
表3
理论值(V)
实测值(V)
误差(%)
理论值(V)
实测值(V)
误差(%)
0.0
0.000
0.0000
2.0
2.004
0.0020
5.0
5.012
0.0024
8.0
8.021
0.0026
10.0
10.014
0.0014
15.0
14.92
0.0053
20.0
19.89
0.0055
25.0
24.57
0.0172
第五章结论
本系统以FPGA芯片为核心部件,将DDFS技术与FPGA相结合,实现了各种波形的产生,且波形平滑,无毛刺,质量较高,采用Matlab计算波形数据,更符合工程要求。
且波形的幅度实现了在一定范围类连续可调。
稳定度和精准度在一定范围内达到要求。
而且频率测量和数字电压测量都很准,误差很低。
人机界面经过精简,按键少且操作方便。
而且为了能有效的实现三种功能,我们自己设计了一些连接电路,但这些电路有些还不够完善,在测试中还达不到要求,有待进一步改进(如自动换档)。
参考文献:
1.黄正谨,徐坚,章小丽等.CPLD系统设计技术入门与应用【M】.北京:
电子工业出版社.2002。
2.潘松,黄继业.EDA技术实用教程【M】.北京:
科学出版社.2002。
3.赵俊超等.集成电路设计VHDL教程.【M】.北京.北京希望电子出版社.2002。
4.周俊峰陈涛.基于FPGA的直接数字频率合成器的设计和实现..2003年
5.高书莉、罗朝霞.《可编程逻辑设计技术及应用》[M].北京:
人民邮电出版社,2001年(第一版)。
6.阎石.《数字电子技术基础》[M].北京:
高等教育出版社,2002年(第四版)。
7.胡恩蔚、高信令、蔡明政.标准集成电路数据手册接口电路【M】北京:
电子工业出版社。
1994年第1版8-90。
附录:
1.数字电压表
--顶层程序--
--文件名:
topp.vhd--
libraryIEEE;
useIEEE.STD_LOGIC_1164.ALL;
useIEEE.STD_LOGIC_ARITH.ALL;
useIEEE.STD_LOGIC_UNSIGNED.ALL;
--Uncommentthefollowinglinestousethedeclarationsthatare
--providedforinstantiatingXilinxprimitivecomponents.
--libraryUNISIM;
--useUNISIM.VComponents.all;
entitytoppis
Port(clk,reset,eoc:
instd_logic;
d:
instd_logic_vector(7downto0);
lock1,start,oe,ale:
outstd_logic;
access1:
outstd_logic_vector(2downto0);
lcdda:
outstd_logic;
lcdrw:
outstd_logic;
lcden:
outstd_logic;
data:
inoutstd_logic_vector(7downto0)
);
endtopp;
architectureBehavioraloftoppis
componentlcdis
generic(N:
integer:
=5000;
delay:
integer:
=100);
Port(clk,reset:
instd_logic;
d1,d2,d3,d4,d5,d6:
instd_logic_vector(3downto0);
lcdda:
outstd_logic;
lcdrw:
outstd_logic;
lcden:
outstd_logic;
data:
inoutstd_logic_vector(7downto0));
endcomponent;
componentadis
Port(clk,eoc,reset:
instd_logic;--clk50mhz是外部32MHZ时钟信号
d:
instd_logic_vector(7downto0);--ADC0809的8位转换数据输出
lock1,start,oe,ale:
outstd_logic;
access1:
outstd_logic_vector(2downto0);--输出到ADC0809的控制信号
dd1,dd2,dd3,dd4,dd5,dd6:
outstd_logic_vector(3downto0));--最终输出信号
endcomponent;
signaldata1,data2,data3,data4,data5,data6:
std_logic_vector(3downto0);
begin
u1:
adportmap(clk=>clk,reset=>reset,eoc=>eoc,d=>d,lock1=>lock1,start=>start,oe=>
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 FPGA 波形 发生器 频率计 数字 电压表 设计