任意波形发生器.docx
《任意波形发生器.docx》由会员分享,可在线阅读,更多相关《任意波形发生器.docx(18页珍藏版)》请在冰点文库上搜索。
![任意波形发生器.docx](https://file1.bingdoc.com/fileroot1/2023-6/11/acafb04f-bb41-4871-b70b-72504d1c2736/acafb04f-bb41-4871-b70b-72504d1c27361.gif)
任意波形发生器
“美亚光电“杯
安徽省首届大学生电子设计竞赛
设计报告书
周海波刘亚军高超
参赛成员:
作品名称:
参赛学校:
合肥学院
任意波形发生器(A题)
任意波形发生器
摘要
本系统的设计综合了EDA技术和单片机技术的二者之所长,实现了二者在性能、功能以及资源上的良好结合,整个系统可简略分为波形产生模块、单片机控制模块、LCD显示、键盘、幅度控制模块等功能模块。
采用直接数字频率合成(DDFS)技术,通过软件对其波形进行控制,实现多种波形的输出及组合。
该系统可实现的频率范围宽、幅度和频率精度高,并且实现电路简单,结构较优,利用液晶显示屏实现了良好的中文人机交互界面。
Abstract:
ThedesignofthissystemsynthesizedtheadvantagesofEDAtechnologyandMicrocontrollertechnology,andit……Thewholesystemismadeupofthepartofwaveproducer,thecontrollerofmicrocontroller,thedisplaypartofLCD,thekeyboardandthecontrollerofrangeandfrequency.ThesystemadoptsthemethodofDirectDigitalFrequencySynthesis(DDFS),whosewaveiscontrolledthroughsoftware.Afewkindsofwavesandtheircombinationscanbeproduced.Wecangetwideandaccuratefrequencyandhighrange.Atthesametime,thissystemhaslesssamplecircuitandbetterstructure.TheLCDthatweusedcanprovideusveryclearmenuwhenwecommunicatewiththemachine.
目录
一、方案论证与比较4
1.波形产生及频率合成模块4
2.幅度控制模块5
3.显示模块5
4.波形存储模块6
二、原理分析6
1.DDS原理6
2.基本算法7
3.误差分析7
4.DDFS的特点8
三、系统设计8
四、方案实现10
1.波形产生10
2.频率控制11
3.幅度控制13
4.液晶显示、键盘输入13
5.波形存储13
6.功率放大电路14
五、软件系统设计15
程序设计流程图15
六、结果测量及分析16
1.基本波形测试16
2.波形编辑测试17
3.波形存储测试17
七、功能实现17
八、总结18
一、方案论证与比较
1.波形产生及频率合成模块
方案1:
采用传统的模拟振荡电路的方法。
如产生正弦波可采用模拟分立元件RC或LC振荡器,但其产生的信号的频率精度低,稳定度和抗干扰能力差,成本也比较高,外围电路复杂,且易受外界干扰,硬件调试困难,不便程控。
而且对于题目发挥部分所要求的最高频率200kHz的要求,不容易满足,实现的性能指标不理想。
方案2:
采用专用集成芯片。
专用集成波形发生芯片ICL8038能够产生方波、正弦波、三角波等多种常规波形,频率变化范围可达0.01Hz——300kHz,占空比达2%——98%,该芯片具有良好的性能,与外围电路配合调试后可以达到本题目的要求。
但是采用该方法所需要的外围电路模块较多,且较为复杂,不利于控制和问题的检查。
方案3:
采用纯单片机的方法。
利用单片机编成的发式可以产生多种波形,开发简易。
而且由于是数字量,容易受用户的控制。
但是单片机速度有限,产生的波形频率较低,难以达到题目的要求。
方案4:
利用FPGA采用直接数字式频率合成器(DirectDigitalFrequencySynthesis,简称DDS或DDFS)的方式。
在FPGA中定义Rom空间用来存储所需波形的量化数据,按照不同频率要求以频率控制字为步进对相位增量进行累加,以累加相位值作为地址码读取存放在存储器内部的波形数据,经D/A转换和幅度控制,再滤波即可得到所需的波形(如图1-1-1所示)。
DDFS具有相对带宽很宽,频率转换时间极短(可小于20nS),频率分辨率可以做到很高等优点;另外,全数字化结构便于集成,输出相位连续,而且理论上可以实现任意波形,能够比较全面的满足题目的要求。
图1-1-1:
波形产生原理
2.幅度控制模块
方案1:
幅度控制有数控电位器组成的电阻分压网络组成,但是数控电位器的分档数目较少,难以满足题目幅度0.1V步进的要求。
同时电路连接比较复杂,电路庞大。
方案2:
利用FPGA的高速计算功能,采用高效算法对波形进行全数字处理,但内部RAM有限字长效应,会造成波形具有一定的失真,不过经过滤波电路后会对波形进行一定的校正。
方案3:
幅度由DAC0832控制,利用其内部的电阻分压网络,将其作为数控电位器使用(原理见图1-2-1)。
系统板产生的波形作为DAC0832的参考电压源输入,其输出波形幅度将为V=(N/1024)×Vin,其中N为单片机输入的幅度控制字。
从方案的实现上来看,第二种方案和第三种方案都是不错的方法,但由于我们对该算法不是很熟悉,所以我们采用第三种方案。
3.显示模块
方案1:
采用LED数码管方式。
利用串转并芯片74LS164可将串行数据显示在数码管上,这种方式占用处理器端口资源少,可驱动多位显示,并且数码管易于控制,成本低廉。
但数码管的缺点是显示不够直观,不能随心所欲的显示字符。
方案2:
采用LCD液晶屏方式。
利用液晶屏幕可以显示中文,这样方便实现直观的菜单功能,能够制作比较人性化的界面,并显示丰富多彩的内容。
同时,利用液晶屏可以实现用键盘控制描点的方法绘制出任意波形,为完成本题目的发挥部分要求做准备。
但是显示过程比较复杂,需要完成大量的显示编程工作。
我们采用第二种方案,使用YM12864C(128×64)点阵液晶显示模块(原理图如图1-3-1所示),制成友好的中文人机交互菜单。
图1-3-1:
YM12864C液晶显示屏原理图
4.波形存储模块
方案1:
采用非易失NVRAM或EEPROM对当前产生波形的数据值进行实时存储,掉电后上电从当前掉电时地址读取波形数据,这样即可实现波形的掉电存储。
方案2:
受到掉电存储原理的启发,我们为FPGA(RAM定义在FPGA中)外接一锂电电池,这样即可保证掉电后RAM中的数据不丢失。
二、原理分析
1.DDS原理
我们在通过数字技术得到某一目标频率fd时,一般情况下是需要有一个基准频率源f0,一个分频系数为m0的分频器,分频器的分频系数和基准频率,目标频率有如下关系:
m0=f0÷fd
(1)
令人遗憾的是分频器的分频系数只能是整数,所以在一般情况下,实际分频系数m1,并不等于需要的分频器分频系数m0,他们有如下关系:
m1=int(m0)≤m0
(2)
因此,我们只能通过分频器得到的实际频率fd1,也就有fd1≥fd"为了得到准确的目标频率fd,我们希望分频器的输入频率不是基准频率源f0,而是另外的一个频率f1=fd×m1"这样我们通过分频系数为m1的分频器就可以得到准确的目标频率fd。
由公式
(2)我们知道m1≤m0,也就是f1≤f0。
假设f0和f1的差值为d0=f0-f1,因此只要在基准频率f0上减去d0,然后送入分频系数为m1的分频器,就可以得到我们需要目标频率了。
通过上述分析可知,频率数字直接合成技术和常规数字分频技术的区别是:
分频器输入的频率不是基准频率f0,而是经过修正的f1。
正是这个f1,使我们有可能得到准确的目标频率fd因此如何得到f1是实现数字直接分频技术的关键。
2.基本算法
在计算分频器的分频系数时,一般采用的公式如下:
f0÷fd=m0+S0(3)
式(3)中S0是f0/fd的余数。
根据式(3),可以得出DDS的原理框图如下
图2-2-1:
就是DDS的原理框图
图2-2-1就是DDS的原理框图需要注意的是,在实际应用中,应该把减去的S0个脉冲均匀的分布在单位时间上,否则最后得到的fd可能有较大的相位抖动"如果对f0信号,在单位时间内,每C0=int(f0÷S0)个脉冲减去一个脉冲,就可以使输出频率fd的相位抖动最小
3.误差分析
由于为了减少相位抖动,采用了在f0上每C0=int(f0÷S0)个脉冲减去一个脉冲方法,并且C0=int(f0÷S0),所以我们在一般情况下不可能把减去的S0个脉冲均匀的分布在单位时间上。
在大多数情况下,从f0减去S0个脉冲的时间要小于单位时间。
但是,在最坏的情况下,也不过是在单位时间内多减去1个脉冲。
因此,实际得到的f1`与期望的f1之间的关系是f1≥f1`≥f1-1。
在实际应用中只要能保证f1在1MHz以上,就可以保证相对误差小于百万分之一。
4.DDFS的特点
DDFS的频率分辨率在相位累加器的位数N足够大时,理论上可以获得相应的分辨精度,这是传统方法难以实现的。
由于DDFS中无需行为反馈控制,频率建立及频率切换快,并且与频率分辨率、频谱纯度相互独立,这一点明显的优于PPL。
DDFS的行为误差主要依赖于时钟的相位特性,相位误差小。
另外,DDFS的相位是连续变化的,形成的信号具良好的频谱,这是传统的直接频率合成方法无法实现的。
DDFS的失真度除受D/A转换器本身的噪声影响外与离散点数N和D/A字长有着密切关系,设q为均匀量化间隔,则其近似数学关系为
按上式计算,当取样点数为1024点时,失真度约为0.26%。
在最高输出频率点数为32点,量化级数为256时,失真度约为5.676%,已经足够小了,可以满足系统的要求。
三、系统设计
根据题目要求,综合分析各项指标后,我们制定总体的设计方案大体为:
用FPGA作为基本波形产生的核心,通过查找表的方式产生正弦波、方波和三角波数据,然后通过10位高速D/A芯片THS5651产生连续波形;同时我们将若干单片机外围电路芯片(如74LS02、74LS138、74LS373等)的功能以软件形式集成到了FPGA内部,这样既充分利用了FPGA的内部资源,又减少了单片机及FPGA与外围的电路的接口,简化了电路结构。
我们以AT89C55单片机为基本核心构成控制单元,完成对波形的各个参量(包括幅度控制字和频率控制字)的改变、LCD显示、功能选择的控制实现。
波形数据表中的波形数据经过D/A芯片THS5651完成数模转换,再由DAC0832内部的电阻分压网络实现波形幅度的控制,进而经过滤波以及稳幅电路后输出,得到具有一定带负载能力的所需波形。
(系统总体简略框图如图3-1-1所示,单片机与FPGA系统连接线路图如图3-1-2。
)
图3-1-2:
单片机与FPGA系统连接线路图
四、方案实现
1.波形产生
通过查找表方式产生波形是在数字系统中最常用的波形产生方法,我们在FPGA中定义一ROM,用于存储正弦波、方波、三角波的波形数据。
由于后级D/A输出采用10位的THS5651,所以ROM表采用1024*1024模式,内部DDS数值表通过在MatLab中使用其精确计算公式获得,并导入系统中。
2.频率控制
该模块由FPGA根据MCU给出的频率字K完成。
这里,使用FPGA完成设计,是由于MCU速度较慢,难以满足题目扩展部分200KHz的频率要求。
同时也节省了MCU的资源,使其能够更好的完成数据处理及其他控制功能。
这里采用了Altera公司的FPGA器件EP1C3T144C8,适合中规模应用,能够满足要求。
该模块设计由VHDL实现,框图如(图4-2-1)所示。
图4-2-1:
频率合成模块
其中相位累加器是DDFS的核心(请见图4-2-2:
DDFS累加原理),它主要由一个N位字长的二进制加法器和一个由固定时钟控制的N位相位寄存器构成。
相位寄存器的输出与累加器的一个输入端相连,而MCU送来的频率控制字K经同步寄存后与累加器的另一个输入端相连。
这样,在每个时钟脉冲到达时,相位寄存器采样上一个时钟周期内的值与频率控制字K的和,并取其高位部分作为这一时钟周期的输出序列。
频率控制字K决定了相应的相位增量,相位累加器则不断的对该相位增量进行线性累加,当相位累加器计满会产生一次溢出,从而完成DDFS合成信号的一个频率周期。
图4-2-2:
DDFS累加原理
DDFS的输出频率Fout和步进∆f可分别表示为:
…………(式1)
…………(式2)
其中,N是相位累加器的字长;Fclk为基准时钟信号;K为频率控制字。
题目要求波形频率范围100Hz-200kHz,步进≤100Hz。
为达到最优指标,我们将输出频率范围设置为1Hz——1MHz,实际步进最小值可达0.1Hz以内。
根据(式1)和(式2)综合考虑,选用波形表宽度为10位、深度为1024位,即每周期波形有1024点。
相位累加器字长N为30位(230=1073147824)而基准时钟由20MHz的晶振通过PLL倍频得到(Fclk≈50M)这输出频率Fout步进为
频率控制字K为5位,则最高输出频率为
就此,实现了输出100Hz-200KHz,步进1Hz,完全完成了题目要求且提高了输出精度。
3.幅度控制
我们采用DAC0832控制幅度,利用其内部的电阻分压网络,将其作为数控电位器使用,输出波形幅度为V=(N/1024)×Vin。
其电路连接如图4-3-1。
4.液晶显示、键盘输入
由于单片机的P0和P2口与FPGA相连接,用来进行二者之间的数据交换,因此我们可用的外部单片机数据口只有P1口和P3口,而P3口需要复用为特殊功能口,所以能够作为数据交换和控制的端口只有P1口。
我们采用P1口复用的办法来解决键盘控制和液晶显示的问题。
尽管我们采用的键盘键数较少(只有8个),但是我们用软件的方式的实现了按键的分时复用,这样以较少的按键实现了较多的功能选择和控制。
同时我们利用中文液晶屏幕制作了非常直观的中文菜单,配合按键的功能进行即时显示,这样使按键的使用变得直观和更加人性化。
5.波形存储
由于该题目的发挥部分具有“调电数据保存”的要求,所以我们本来打算采用非易失NVRAM实现波形数据的即时存储,但由于该芯片缺乏,其他EEPROM芯片又难以与我们使用的开发板进行有效连接,所以我们放弃了掉电保护功能的实现。
我们利用宏定义的方法,在FPGA内部定义一双口RAM单元,可在带电的状态下实现对当前波形的存储。
同时由于是采用双口接口,可实现的数据的高速读取和写入。
6.功率放大电路
为实现带100Ω——+∞负载,输出端接一功率放大电路,该功率放大电路采用运放驱动的闭环推挽输出电路,电压增益为1,可实现稳幅输出功能。
推挽输出级采用塑封硅三极管9012和9013,如图4-7-1所示。
图4-7-1:
功率放大电路
五、软件系统设计
程序设计流程图
六、结果测量及分析
1.基本波形测试
周期性波形包括频率和幅值可调的正弦波、方波、三角波及其线形组合波形。
用示波器来测试波形的频率和幅值,数据如表7-1-1,表7-1-2,表7-1-3所示。
表7-1-1:
波形频率测试数据(Vp-p=5V)
正弦波
方波
三角波
设定频率值(Hz)
实际频率值(Hz)
误差(%)
实际频率值(Hz)
误差(%)
实际频率值(Hz)
误差(%)
50
48
4
50
0
50
0
100
97
3
100
0
98
2
500
496
0.8
490
2
500
0
1000
999
0.1
995
0.5
987
1.3
5000
4887
2.26
5006
0.12
4955
0.9
10000
9877
1.23
9950
0.5
9860
1.4
50000
48980
2.04
49800
0.4
48700
2.6
100000
97000
3
98000
2
97588
2.4
500000
478347
4.3
500400
0.8
471005
5.7
表7-1-2:
波形幅值测试数据(f=1KHz,正弦波,空载)
设定幅值(V)
实际幅值(V)
误差(%)
0
0
0
0.10
0.10
0
0.50
0.48
4
1.00
1.01
1
2.00
1.98
1
3.00
2.88
4
4.00
3.90
2.5
5.00
4.93
2
表7-1-3:
波形稳幅测试数据(f=1KHz,正弦波,负载电阻R=90Ω)
设定幅值(V)
实际幅值(V)
误差(%)
0.1
0.1
0
0.5
0.52
4
1.0
1.02
2
2.0
2.02
1
3.0
3.03
1
4.0
4.03
0.75
2.波形编辑测试
由于正弦波、方波和三角波的基波及其多次谐波的线形组合较多,这里仅取5次以下谐波的线形组合,其每个波形的幅度系数可以实现0—9的变化,然后输出组合波形。
3.波形存储测试
在线存储测试:
先从通道A中输出波形A,按存储键,显示“完成”后可将此波形存储,用示波器在通道B输出端即可检测到先前存储的波形。
掉电存储检测:
先输出任意波形C,关闭电源后上电,可在原输出端看到先前波形。
七、功能实现
我们设计的系统不仅完成了题目的基本功能、基本指标,而且完成了大部分题目发挥部分的要求,现将题目要求指标及我们所做系统的实际性能列表比较如下:
基本要求
发挥要求
实际性能
产生正弦波、方波、三角波三种周期波形
实现
三种波形的现行组合波形,以及基波及其谐波线形组合的波形
实现
波形存储功能
实现
频率范围:
100Hz~20KHz
100Hz~200KHz
实现,1Hz~1MHz以上
频率步进≤100Hz
实现,可小于1Hz
输出波形幅度范围0~5V(峰峰值)
实现
幅度0.1V步进
实现
显示输出波形的类型、频率(周期)
实现
用键盘或其他输入装置产生任意波形
未实现
稳幅输出功能,负载变化时输出电压幅度变化不大于±3%
掉电存储功能
实现
八、总结
经过我们团队三人在四天三夜中的不断努力和团结协作,我们完全实现了该题目的基本要求,并实现了一部分发挥部分的要求。
由于我们采用了单片机加FPGA的系统结构,在整个题目的制作实现过程中,所需要扩展的外围电路比较少,软件的设计工作占了绝大部分过程,其中软件设计又分为了单片机软件设计和FPGA软件设计。
整个竞赛过程,对我们来说是一能力提高的过程,我们不仅在编程方面和电路认识的能力有所加强,而且对单片机和FPGA系统联合开发有了进一步的熟悉和了解,在意识中树立了工程项目的概念。
竞赛的过程又是一个考验我们毅力和团结精神的过程,在题目的制作过程中,我们遇到了很多困难和问题,经过我们大家的共同探讨和查阅相关资料,解决重重困难,最终完成了作品。
通过竞赛,我们也发现了自己在日常的学习中存在很多的问题。
按照题目发挥部分的要求,需要实现任意波形的输入显示,尽管我们也参考了很多可行的资料,可是该部分我们仍然没有在规定的时间内完成。
在制作实际项目的过程中我们发现自己的知识量、实践经验严重缺乏,这也是导致我们最终没有按时完成全部发挥部分要求的一方面重要原因。
加强动手能力的培养,积累实践工程经验,也是我们以后所需要努力的方向。