基于STM32的DDS信号发生器的设计

目录

摘要…1
Abstract…2
第一章绪论…3
1.1课题研究背景及意义…3
1.2设计内容…3
第二章 频率合成与DDS技术概述…5
2.1 频率合成技术概述…5
2.2 DDS基本原理和相位累加器…6
2.3 DDS优缺点及性能分析…8
第三章 芯片选型与使用方法…11
3.1 芯片选型综述…11
3.2 AD9850芯片的使用…11
3.2.1 AD9850的引脚定义…12
3.2.2 AD9850的控制字…13
3.2.3 AD9850的时序与工作…15
3.3 LCD12864的使用…17
第四章 电路构思及搭建…21
4.1 信号发生电路…21
4.2 LCD显示电路…23
4.3 按键控制电路…24
4.4 核心控制电路…25
4.5 电路搭建注意事项及小结…26
第五章 程序设计…27
第六章 设计结果及性能分析…31
6.1 频率特性
6.2 幅值特性
6.3 纹波抑制特性
参考文献
致谢

摘 要

在电子与电气实验中,我们常常需要一个精度高且能在一定范围内产生任意频率的信号发生器,以得到电路所需要的测试信号。
为了得到各种我们所需要的频率,我们需要进行频率合成。常见的频率合成方式有三种:直接模拟频率合成(DAFS)、锁相频率合成(PLFS)和直接数字频率合成(DDS)[1]。其中直接数字频率合成(DDS)是三者之中最新的技术,它从相位的概念出发,以相位累加器为核心进行频率合成,具有响应快,输出频点多等优点。在本设计之中,我们将使用采用DDS技术的AD9850芯片。
除了AD9850芯片,我们还将使用一款当下十分流行的高性能、低功耗、低成本的单片机——STM32,以及一块128*64分辨率的屏幕,来完成一个能在0.1Hz-20MHz之间产生任意频率和幅值的正弦波和方波的信号发生器。这款信号发生器能将频率数值显示在屏幕上,利用外置按键我们可以输入想要的频率数据并应用于输出信号,调节外接电阻则可以改变输出幅值。
关键词:AD9850芯片;直接数字频率合成(DDS);STM32;相位累加器

Abstract

In electric and electronic experiments, a high-precision signal generator is usually needed for testing the circuit, which can generate any frequency in a certain range.
To get the required frequency. frequency synthesis is indispensable. There are three common methods of frequency synthesis: Direct Analog Frequency Synthesis(DAFS),Phase Locked Frequency Synthesis(PLFS) and Direct Digital Synthesis(DDS). DDS, which is based on phase, is the up-to-date technique. The core section of DDS is the phase accumulator, and it has the advantage of short response time and massive discrete frequency point. In this design, DDS chip AD9850 will be used.
Except AD9850, a now very popular microcontroller STM32, which has characteristics of high performance, low power consumption and low cost, and a 128*64 LCD screen will also be used. The signal generator can be made by these components and it can generate sine wave and square wave of any amplitude and any frequency between 0.1Hz and 20MHz. The value of frequency, which can be modified by the key outside, will be showed on the LCD screen connected to STM32. The value of amplitude can be changed by the connected resistance.
Keywords: chip AD9850; Direct Digital Synthesis(DDS); STM32; phase accumulator

第一章绪论

1.1课题研究背景及意义

信号发生器是电子、电气实验的一件重要器材,它能够输出各种频率、幅值以及一些典型波形(如正弦波、方波、三角波)的信号,以满足被测试电路对于信号的各种要求。
在这里插入图片描述
随着电子科技的发展,对信号发生器的精度、频率特性和稳定性的要求越来越高,但同时工业上也希望同时能够以更低的成本完成更高的要求。目前,频率合成技术是信号发生器的主流设计方法[2], 即由一个或多个频率稳定度和精确度很高的参考信号源通过频率域的线性运算,产生众多与参考频率特性相近的新频率[3]。其中直接数字频率合成(DDS)是频率合成的一项新技术,于1971年由美国Joseph Tierney等3人首先提出[4],它响应快,频率分辨率高,理论上能够合成各种想要的波形,并且目前而言成本较低,非常适合用于信号发生器的设计。
美国ADI公司(Analog Devices, Inc)在制作DDS芯片处于行业领先地位,本设计将采用ADI公司的AD9850芯片,接入125MHz晶振时频率分辨率达到0.03Hz,可以输出正弦波,接入芯片内置比较器还可以输出方波,滤波后波形稳定不失真,可以满足平时实验中需求,并且与市场上的专业信号发生器相比,具有体积小,易于携带,只需电池供电,成本低等优点。

1.2设计内容

本设计的核心器件可以分成四部分:控制模块,信号发生模块,显示模块,按键控制模块。控制模块即单片机模块用于整个电路的控制,是整个设计的“大脑”,而信号发生模块则接受单片机的控制,受指令产生相应频率和波形的信号,显示模块则实现了人机交互功能,让我们得知整个信号发生器的运行状态,便于我们利用按键控制模块对于发生的信号进行调整。
整个设计各模块之间的关系如下图所示。

在这里插入图片描述

第二章频率合成与DDS技术概述

2.1频率合成技术概述

频率合成的定义为从一个或多个高稳定度、高精确度的参考频率产生众多新的频率。目前,这项技术广泛地应用于通信、雷达、仪器仪表等设备中[5]。
常见的频率合成方式主要有以下三种:
①直接模拟频率合成(DAFS);
这是最先出现的频率合成方式。这种合成方式是利用参考信号产生一系列谐波,然后从这些谐波之中取出一些频率,得到这些频率的和或差,然后再利用倍频器、分频器、混频器、滤波器这些器件直接进行各种运算,以得到所需的频率。
这种频率合成方式速度快,相位噪声低,但是由于使用了大量的倍频器、分频器、混频器,电路会比较复杂,并且由于上述器件的非线性特性,杂散抑制比较难,另外无论是体积、重量、耗电都会比较大,目前而言这种频率合成技术的应用范围已经比较窄。
②锁相频率合成(PLFS);
这种频率合成技术是由于锁相技术的发展而产生的,核心即是锁相环。锁相环是一种典型的反馈电路,输出信号的频率能够自动跟踪输入信号。它的原理是输出信号通过反馈回路接到鉴相器上,由鉴相器比较输入信号和压控振荡器输出信号之间的相位差,产生一个误差控制电压以控制压控振荡器的输出,使其输出信号频率于输入信号相等[6]。
锁相频率合成器的基本结构如图2-1所示:
在这里插入图片描述

频率为f0的晶体振荡器通过一个m倍分频器产生一个基准频率作为锁相环的输入信号[7],即输入信号的频率为f0/m,锁相环的反馈回路之中再串入一个n倍分频器,设输出频率为f,则反馈给鉴相器的频率为f/n ,由于反馈回路的作用,鉴相器的两个输入端频率应当相等,即得到等式:

对等式进行变形,得到锁相环压控振荡器的输出频率为:

理论上,只要改变m和n两个参数,便能够输出任意频率。
相对于直接模拟频率合成器来说,锁相频率合成器的结构比较简单,体积和重量也小了很多。由于锁相环回路中存在低通滤波器,因此对杂散的抑制比较好。但与此同时,锁相频率合成器的最大缺点是转换时间比较长,通常大于1毫秒,这是由于反馈环节的惯性所致。
③直接数字频率合成(DDS)
七十年代DDS的出现使频率合成进行了一场革命,它直接从相位概念出发,进行全数字的频率合成,具有低成本、高分辨率、转换时间快等优点[8],得到了广泛的运用。
详见2.2及2.3节。

2.2DDS基本原理和相位累加器

直接数字合成技术(DDS)的基本原理之一是时域Shannon采样定理(又称Nyquist采样定理),即最大频率为F的连续信号f(t),如果以2F的采样频率对其进行等间隔采样,则我们将采样到的离散信号可以无失真地完全恢复为原来的连续信号[9]。DDS就相当于一个将离散信号恢复为连续信号的过程,它实际上输出一系列离散的与相位对应的点,每隔一个周期更新一下与相位对应的电平,表现在实际输出便是阶梯信号,示意图见图2-2。这个阶梯信号再通过一个理想的低通滤波器便能够得到一个连续的我们想要的信号。
从上述叙述可知,关键是需要找到一个方法,使每一个相位的输出幅值能够正确对应。我们可以通过纯软件的方法来实现,即“查表法”,在0-360°的相位和幅

在这里插入图片描述

值之间建立一个映射,利用软件模拟所需频率的相位-时间函数,再通过D/A转换,输出端口在对应相位就能够输出正确的幅值,相位间隔取得越小,输出波形便能更接近理想状态。
DDS的原理与纯软件的“查表法”十分类似,它也拥有一个查询表,只要我们在查询表内输入每一个相位对应的幅值,便能够输出我们想要的波形,只不过不同于纯软件方法,DDS对于相位-时间函数的确定是通过相位累加器来实现的(不同频率拥有不同的相位-时间函数),这是DDS的核心部件。除去查询表和相位累加器两个部件,DDS还需要D/A转换器、低通滤波器、高稳定度晶体振荡器这三个部分。
相位累加器由N位加法器和N位寄存器组成,其中位数N决定了相位的精度,它与晶振频率共同决定了频率分辨率。具体来说,寄存器中的数据000…0到111…1代表了相位0°到360°(均匀分割),那么相位的精度可以表示为:

先给一个频率控制字K,每隔一个晶振周期,加法器将寄存器中的数据与频率控制字相加,再返回给寄存器,这经过一个晶振周期相位便增加:

重复上述过程,相位随着晶振重复累加φK,合成信号的相位由此确定,当累加器溢出时,合成信号的一个周期便宣告完成,寄存器舍去N+1位,并继续累加的过程。改变K的值,便能改变合成信号的频率,当控制字K的值越大,相位累加的速度越快,输出信号的频率便越高,反之亦然。

在这里插入图片描述

不过,虽然寄存器的数据和实际相位是一一对应的,但是寄存器中存储的数据并不直接等于相位,因此在查询表中,我们建立的映射其实是寄存器的数值与幅值数据的映射,或者可以这么说,寄存器的数据可以当作一个地址,对查询表进行寻址便能得到有效的幅值信息。
如果是合成正弦波,这个过程还可以简化为图2-3。将一个圆分成2N等份,则寄存器的数值便能和圆上的角一一对应,这个角便是输出信号的相位。当控制字为K时,角度即为φK,相位每隔一个晶振周期便增加φK。以圆心为原点,以0°射线为x轴,90°射线为y轴,每个相位的输出幅值便等于这个相位对应圆上点的y轴坐标。
输出的幅值信息通过D/A转换便能得到一个合成信号,每有一个输入晶振脉冲,输出信号便更新一次,这样就得到了和理想信号十分类似的阶梯波信号,再经过低通滤波器,使信号变得平滑,并滤除不需要的信号分量,便能够得到理想的信号。

2.3DDS优缺点及性能分析

DDS作为第三代频率合成技术,采用全数字合成,与其他频率合成方式相比有着无可比拟的优势。
DDS的优点如下:
①波形输出任意。理论上而言,只要在查询表内输入不同的幅值数据,就能够得到任意的波形;
②转换速率极快。相对于锁相环频率合成,DDS是一个开环的系统,没有任何反馈环节,这一点使DDS的转换速度快很多。另外,一般DDS的输入晶振都能达到MHz级别,甚至GHz级别,而转换速率又直接和晶振速率相关,这一点也使得DDS的速度得到加快;
③频率分辨率高。频率分辨率同时受相位累加器位数N和输入晶振频率fCLK影响,由式2-3可以推导出,DDS的频率分辨率为:

理论上,相位累加器位数N越大,输入晶振频率fCLK越高,DDS的频率分辨率便越高。目前,DDS的分辨率量级普遍能达到1mHz量级甚至更小,和其他类型频率合成器相比拥有无可比拟的优势;
④频带宽。由Shannon采样定理可得,理论上能够得到最高fCLK/2的合成频率,实际上由于输出杂散和滤波器等器件限制,大概最高能得到40%左右的合成频率。最小频率由式2-5可得,为fCLK/2N;
同时,DDS工作原理本身和目前的器件能力限制也会导致一些缺陷:
①杂散和噪声大。这是目前DDS的最大问题之一,当合成频率越高,这个问题越严重,主要由三个因素引起:
一是相位截断[10]。一般为了使频率分辨率足够小,相位累加器的位数N都会取的比较大,然而N取的越大,查询表所需的ROM大小就呈指数性增长,以一个相位对应2个字节的幅值数据,N=32为例,这样查询表所需ROM空间大小则为:

这样的大小在ROM里显然不可行,而且即使在DDS系统内能够放入这么大的ROM,表内查找的时间可能会非常漫长,根本无法跟上晶振的速度。因此,目前在DDS之中普遍采取了相位截断的方法,即当相位累加器中数据位数比较大的时候,只保留高位,舍去低位[11],这样损失了一定精度但是查询表所需ROM空间大大缩小。以一个14位的查询表为例,当相位数据在14位以下时,正常查表,当相位数据位数M高于14时,高14位的数据被保留,而低(M-14)位的数据则被截断,这样随着相位累加器位数增长,查询表所需空间不再是指数增长而是线性增长;
二是量化幅度误差。模拟量要完全精确表示需要无限长的数据,由于ROM容量是有限的,查询表中的幅值数据不是一个完全精确的值,只能是由有限位数的代码来近似表示,因此量化幅值数据时需要进行一定位数的舍弃;
三是D/A转换误差。DAC的分辨率是有限的。
②输出频率上限有限[12]。一个DDS输出的上限频率由晶振输入决定,之前已提及,约为输入晶振频率的40%,但是输入晶振频率并不能无限增大,因为ROM、DAC等器件的工作速度是有限制的,晶振频率必须要跟这些器件匹配。

第三章芯片选型与电路搭建

33.1芯片选型综述

在1.2节,已经阐明整个设计由控制模块,信号发生模块,显示模块,按键控制模块这四个部分组成,本节将具体阐述每个部分采用的芯片或元件及其理由。
①控制模块:
选用了意法半导体(STMircoelectronics)公司的STM32F103C8T6芯片。STM32系列芯片采用了目前最为先进的ARM内核,并且成本较低,性价比很高,资料丰富便于学习和调试,现在在嵌入式开发领域十分流行。这款芯片能满足此次设计的要求,引脚数量和内存容量够用并能留有一定裕量,并且一块核心板的成本只需要20元左右。
②信号发生模块:
选用了ADI公司(Analog Devices, Inc)的AD9850芯片。AD公司在DDS技术上投入了相当大的研究力量,目前已经生产出AD9833,AD9851,AD9956等一系列型号产品,能满足不同类型的需求,其中AD9850价格适中,性能优秀,输出频率分辨率能够达到0.0291Hz,符合此次设计的要求。
③显示模块:
选用了LCD12864。这款显示屏拥有中文字库,支持串行/并行输入,四行显示。
④按键控制模块:
选用了4个常见的常开按键开关,与STM32四个引脚相连,不操作时通过下拉电阻接地,摁下时接3.3V电源。

3.2AD9850芯片介绍

AD9850由美国ADI 公司1996年推出,该芯片采用SSOP-28封装,工作温度-40℃~85℃,是一款可完全数字编程的高集成度、高性能的直接数字频率合成器[13],当接上一个精准的时钟信号时,AD9850便能产生一个频谱纯净的正弦波,而且频率和相位皆可由程序控制。芯片最大输入时钟频率125MHz,当接入这个时钟时,可以输出的频率为0.0291Hz-40MHz,分辨率为0.0291Hz。芯片还内置有比较器,将输出的正弦波接到比较器上,便可以输出与正弦波频率、相位一致的方波。AD9850支持串行和8位并行两种输入方式,可以自由选择。

3.2.1AD9850的引脚定义

AD9850的引脚如图3-1所示我

在这里插入图片描述

引脚号 名称 功能
41/2528 D0~D7 用于控制字输入,D0~D7可以进行8位并行输入,其中D7口可以单独用于串口输入
5/24 DGND 数字地
6/23 DVDD 给数字电路供电
7 W_CLK 并行:载入D7~D0共8位至输入寄存器
串行:载入控制字中的D7至输入寄存器
上升沿有效
8 FQ_UD 频率更新。将40位控制字从输入寄存器载入至数据寄存器,并将地址指针初始化至开头
9 CLKIN 时钟输入
10/19 AGND 模拟地
11/18 AVDD 给模拟电路供电

引脚号 名称 功能
12 RSET DAC外接电阻,可以设定DAC输出电流大小(即IOUT口最大输出电流),IOUTM=32(1.248V/ RSET)。典型值3.9K,电阻另一端接地。
13 QOUTB 内部比较器的互补输出
14 QOUT 内部比较器的真实输出
15 VINN 内部比较器负输入
16 VINP 内部比较器正输入
17 DACBL DAC参考电压,通常悬空
20 IOUTB DAC的互补输出,即互补正弦波电流输出
21 IOUT DAC的实际输出,即实际正弦波电流输出
22 RESET 复位端,高电平有效,且不低于5个参考时钟周期。

3.2.2AD9850的控制字

AD9850的控制字共40位,其中32位用于频率控制,5位用于相位控制,2位用于选择工作模式,1位用于电源管理,具体见表3-2。

载入字
(载入先后顺序排列) D7 D6 D5 D4 D3 D2 D1 D0
W0 P4 P3 P2 P1 P0 电源 W1 W0
W1 F31 F30 F29 F28 F27 F26 F25 F24
W2 F23 F22 F21 F20 F19 F18 F17 F16
W3 F15 F14 F13 F12 F11 F10 F9 F8
W4 F7 F6 F5 F4 F3 F2 F1 F0
(说明:P代表相位控制字,F代表频率控制字,W代表工作方式控制字,后面的数字n代表该功能控制字的第n位)
下面将具体叙述控制字4个部分的使用:
①频率控制:
共32位,为控制字的b31~b0部分。设晶振输入频率为fCLK,由式2-4推导可得,当所需频率为f时,频率控制字应设为:

由此可以推导出AD9850的频率分辨率为:

②相位控制:
共5位,为控制字的b39~b35部分。设相移为φ,这5位控制字与相移应满足下式:

以相位控制字01110为例,此时φ=90°+45°+22.5°=157.5°
③电源管理:
共1位,为控制字的b34。当b34=1,DAC内部时钟失能,输出为0,当b34=0,DAC内部时钟使能,正常输出。
④工作方式控制:
共2位,为控制字的b33和b32。当这两位都为0时,输入为并行模式,D0~D7同时进行输入;当这两位都为1时,输入为串行模式,只有D7一个端口用作输入;另外两种组合方式01和10为工厂测试使用,实际使用芯片时最好不要 这两个工作方式,否则可能会带来难以预料的结果。

b33b32 功能
00 并行输入
11 串行输入
01 工厂保留
10 工厂保留

3.2.3AD9850的时序与工作
在这里插入图片描述

①并行方式:
每当W_CLK得到一个上升沿,D0~D7便一次性并行读入8位数据,存入输入寄存器,当W_CLK上升沿重复5次,则40位控制字都已经读入,此时W_CLK上升沿不再生效,直到得到复位信号或者FQ_UD得到一个上升沿。其中如果FQ_UD得到上升沿,则40位控制字从输入寄存器载入到数据寄存器,经过时间tCF后DAC输出频率和相位得到更新。
无论是复位还是FQ_UD生效,输入寄存器的指针均初始化,即均指向第一个输入寄存器,因此在上述两种信号生效后,都可以进行重新输入控制字的操作。

②串行方式:
在这里插入图片描述

串行工作方式并不是默认的,所以并不能一开始就通过D7口串行通讯,必须进行配置,具体方式见图3-3,首先利用并行方式载入一个控制字W0,这个控制字只有后三位有效,由表3-3可得,要设为串行工作方式这3位应设为011。一般来说,这一步骤通过将D2接地,D1、D0接高电平的方式来实现,如图3-4所示。

在这里插入图片描述

采用上述电路后,W_CLK给一个上升沿,之后FQ_UD也给一个上升沿,芯片便能进入串行模式。
串行模式配置完毕后,便可通过D7口进行控制字的输入,时序图见图3-5。
在这里插入图片描述
与并行模式相反,串行模式的输入是从低位开始的,即从b0开始直到b39。W_CLK每得到一个上升沿,芯片便从D7口接收一个数据,重复40次便得到了一个40位的控制字,之后给FQ_UD一个上升沿这个控制字便能载入到数据寄存器,芯片的输出频率和相位得到更新。
其中必须要注意一点,在串行模式使能时,b32和b33这两个工作方式控制位都应设为1,但是在串行输入时,这两位都应设为0。

3.3LCD12864的使用

LCD12864为点阵液晶显示模块,显示分辨率为12864,可以显示4行字符或者图形。本次设计选用的版本带有汉字字库,内置8192个汉字和128个字符[14]。汉字为1616点阵,一行显示8个,字符为8*16点阵,一行显示16个。引脚定义见表3-4。
引脚 功能
GND 接地
VCC 接5V电源
V0 对比度调整,电压越大对比度越小
RS(CS) 并行:选择需要操作的存储器。RS=0时,对控制寄存器进行操作,即进入显示设置模式,RS=1时,进入RAM读写模式。
串行:片选信号,高电平有效。
R/W(SID) 并行:读/写控制,R/W=1时MCU可以从DBx读数据,R/W=0时MCU可以用DBx写数据
串行:读/写数据
E(SCLK) 并行:使能信号,MCU写数据时下降沿有效,读数据时高电平有效
串行:参考时钟信号
DB0~DB7 三态数据端口
PSB PSB=1时为并行模式,PSB=0时为串行模式
NC 悬空
RST 复位,低电平有效。模块内部有上电复位电路,因此不常复位时该脚可以悬空
VOUT LCD驱动电压输出,一般使用时悬空
BLA 背光正端,接5V电源
BLK 背光负端,接地
由于此次实验采用并行通讯方式,囿于篇幅,这里只介绍并行模式的时序,串行不再介绍。
在这里插入图片描述
当R/W=0,即模块处于写数据模式时,时序见图3-6。首先写RS位和R/W位,再向D0~D7写入数据,最后给E一个下降沿使数据生效。
在这里插入图片描述
当R/W=1,即模块处于读数据模式时,时序见图3-7。首先同样写RS位和R/W位,之后E持续给高电平,便可从DB0~DB7读到所需的数据。
读RAM数据时要注意,首先要进行一次假读,即E第一次高电平时MCU从DB0~DB7读到的数据并不正确,第二次高电平时读到的才是正确的数据。

在使用LCD12864显示所需内容之前,首先要设置一下显示选项,即向控制寄存器写入相应的指令,由表3-4得此时RS=0,R/W=0。具体指令所对应的内容如表3-5所示(基本指令集,RE=0,扩充指令集在此不表)。
RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 功能
0 0 0 0 0 0 0 0 0 1 清除显示,同时DDRAM的地址计数器归位(设为00H)
0 0 0 0 0 0 1 X DDRAM地址计数器归位
0 0 0 0 0 1 I/D S I/D=1:当写入一个数据时游标右移,DDRAM地址计数器自动+1
I/D=0:与上相反
S=1:整体显示位移
0 0 0 0 1 D C B D=1:显示开启
C=1:游标显示
B=1:游标闪烁
0 0 0 1 S/C R/L X X 00:游标左移1位
01:游标右移1位
10:整体左移1位
11:整体右移1位
0 0 1 DL X RE X X RE=0:基本指令集
RE=1:扩充指令集
DL=0:4位并行控制
DL=1:8位并行控制
注意:DL、RE不能同时设置,必须先DL,后RE
0 1 CG5 CG4 CG3 CG2 CG1 CG0 设定CGRAM地址计数器

RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 功能
0 0 1 DD6 DD5 DD4 DD3 DD2 DD1 DD0 设定DDRAM地址计数器
80H~87H:第一行
90H~97H:第二行
88H~8FH:第三行
98H~9FH:第四行
注1:X代表该位可以取任意值。
注2:DDRAM为数据显示RAM,显示屏会显示DDRAM中ASCII码对应字符或GB码对应汉字。CGRAM为字模RAM,用于存放自设16*16字模。

在写入任何指令之前,必须要判定显示模块是否处于忙状态,如果不进行该步骤,则有可能导致数据无法正确写入。具体方法为令RS=0,R/W=1,从DB7口就可以读出一个忙碌标志BF,当BF=1,则模块内部处于忙碌状态,此时不能写入数据,必须等待直到BF=0。
当正确写入显示控制指令后,就可以写数据到RAM之中了。具体方法为令RS=1,R/W=0,从DB7~DB0就可以并行输入一个字节的数据。一个字符的ASCII码大小为一个字节,按上述方法直接输入即可。一个汉字的GB码为两个字节,不能一次性输入,应当连续输入两次,第一次输入高8位,第二次输入低8位。

第四章电路构思及搭建

44.1信号发生电路

信号发生电路的核心为AD9850,因此我们必须首先做好AD9850的基础设置,使其得到控制信号后便能够正常工作。
基础电路如图4-1所示。
首先需要接好电源,考虑到数字电路主要为方波,带有大量的谐波,如果随便与模拟电路接到一起,对模拟信号的波形会产生较大的影响,尤其是在处理高频信号时。AD9850输出的最高频率达到了MHz数量级,毫无疑问是高频信号,因此必须要做好隔离工作。
表现在电路图上,将模拟电路和数字电路隔开的方法为分开设模拟地和数字地。这里两个地的意思并不是说两个地的电位不一样,相反,这两个地接到同一点,但是除了这一点之外模拟地和数字地不再相连。也就是说,这两个地并不大面积相连,这样不仅保证参考电位一致,而且交叉面积小,模拟电路和数字电路之间的干扰也随之大大减小,这对输出波形的质量有着较大意义。
其次,AD9850需要一个时钟源。这里的晶振频率选择芯片所能接受的最大值125MHz,这样能够获得最大的输出信号频带宽度。由于DDS对于输入时钟信号的稳定度和精度要求很高,因此这里舍弃了精度和稳定度较低的无源晶振,采用有源晶振作为输入时钟。另外,为了使有源晶振输出频率更加稳定,晶振的电源端并联了旁路电容减少干扰。
对于RSET口,电阻采用了典型值3.9K,这样DAC输出电流为10mA。

接下来便是STM32控制端口的连接,设置见表4-1。
AD9850端口 STM32端口
D0~D7 PA0~PA7
WLCK PA8
FQ_UD PA9
RST PA10

此时,若STM32能正确控制AD9850,就可以从IOUT合IOUTB两个端口得到输出。由于该输出为电流输出,因此可以通过接一个接地电阻的方式将电流输出转化为电压输出。
由2.3节叙述可知,输出的波形杂散和噪声大,因此输出信号必须接一个低通滤波器抑制高频杂散和噪声。AD9850的官方数据表之中采用了椭圆滤波器,这种滤波器过渡区小,衰减极为陡峭[15],符合设计要求。计算椭圆滤波器各元件参数的主要方法为归一化法,即归结为截止频率1/2π的低通滤波器的设计[16]。首先在归一化表内查询符合指标的椭圆滤波器,然后计算待设计滤波器的截止频率与(1/2π)Hz的比值M,以及待设计滤波器特征阻抗与1Ω的比值K,将归一化表内相应滤波器的电容值缩小K·M倍,电感值缩小M/K倍,便能得到实际需要的椭圆低通滤波器。
实际采用了7阶椭圆滤波电路,具体电路图如图4-2所示。
在这里插入图片描述

4.2LCD显示电路

显示电路主要是注意STM32与液晶模块的连接,具体连接方式见表4-2,另外背光源端口BLA和BLK同样需要接VCC和GND,电路见图4-3。
LCD12864端口 STM32端口
DB0~DB7 PB8~PB15
RS PB0
R/W PB1
E PB2

在这里插入图片描述

4.3按键控制电路

按键控制电路用于调节频率大小,具体来说,KEY3、KEY4用于左右调节操作的位,KEY1、KEY2用于上下调节该位的大小,电路如图4-4所示

在这里插入图片描述

当按键松开时,电路断开,此时端口电压为3.3V,即数字信号1,当按键按下时,端口直接与地相连,此时端口电压为0,即数字信号0。将STM32相接端口配置成浮空输入,便能够读取相应的数字信号,循环检测这四个端口,如果读取1,则不进行任何操作;如果读取0,则进行相应按键所配置的功能。
KEY1~KEY4对应STM32端口如表4-3所示。

按键控制电路端口 STM32端口
KEY1 PA11
KEY2 PA12
KEY3 PB5
KEY4 PB6

4.4核心控制电路

本设计采用了STM32F103C8T6的核心板,外围电路已经配置好,因此不做详细介绍。外围电路以及芯片与其他外设的连接情况见图4-5及图4-6
在这里插入图片描述

在这里插入图片描述

4.5电路搭建注意事项及小结

在选用STM32的端口与外设相连时,一定要注意引脚的复用问题,比如PA13、PA14、PA15、PB3、PB4这5个引脚兼做JTAG功能,这些引脚不能直接作为普通I/O口控制外设,否则会导致外设不能正常工作,必须要经过相对麻烦的配置,而且可能会带来不良的后果,对程序烧录造成影响,因此不建议使用这几个口与外设连接,特别是利用JTAG口对程序进行调试的时候。
此外,由于信号发生电路的核心AD9850的精度较高,且最大发生频率也比较高,因此做好滤波非常重要,这里的滤波主要有两方面,一个是对于输出信号的滤波,这里采用了一个7阶的椭圆低通滤波器,能够有效滤掉高频杂散及噪声,使波形光滑;另外一个是对输入时钟信号的滤波,这样使得时钟信号更加稳定,提高了输出频率的精度。

第五章程序设计

编写的程序需要控制三个部分:信号发生电路,显示模块,按键。STM32读取按键的信息,并控制信号发生电路和显示模块做出相应改变,总的程序框图如图5-1所示。

在这里插入图片描述

和其他嵌入式程序一样,程序是最后是一个死循环。本设计中,这个死循环用于循环探测PA11,PA12,PB5,PB6这四个与按键相接的引脚,如果按键没有按下,即引脚接收到低电平,那么就不进行任何操作,继续检测端口,直到检测到按键按下,即引脚接收到高电平,执行按键定义的操作,再刷新显示屏和信号发生频率。

控制显示模块的程序框图如图5-2所示。
简单来说,就是先写入对于显示屏的一些基础设置,再向DDRAM里写入所需要显示的字符串。无论是输入设置数据还是显示数据,无一例外都先要进行判断显示模块是否处于忙状态,否则可能会造成部分数据无法正常写入,判忙函数如下:
void LCD_WaitBusy(void)

在这里插入图片描述

{
GPIO_ResetBits(LCDIO,RS);
GPIO_SetBits(LCDIO,RW);
GPIO_SetBits(LCDIO,E);
GPIO_Config_In_Floating();//引脚设为浮空输入
while(GPIO_ReadInputData(LCDIO)&0x8000);
GPIO_Config_Out_PP(); //引脚设为推挽输出
GPIO_ResetBits(LCDIO,E);
}
将RS置0,R/W置1,E置1,这样便能从DB7,即STM32的PB15脚读取忙碌标志,只要这个忙碌标志为1,程序就一直处于读取忙碌标志的循环之中,直到标志位为0,才能跳出循环执行下一语句。
在判忙时要特别注意STM32引脚功能的配置,将RS、R/W、E置位时,对应引脚应配置为推挽输出,读取忙碌标志位时,对应引脚应配置为浮空输入
控制信号发生电路的程序框图如图5-3所示。

在这里插入图片描述

输入频率后,首先利用公式3-1计算出40位总控制字W中低32位的频率控制字K,体现在程序中为下述代码:
w=freq*(pow(2,32))/125000000
其中freq为频率数值。由于使用了指数计算函数pow,因此我们一定要include头文件<math.h>。
接下来需要将AD9850初始化,主要是给RESET脚至少5个参考时钟周期的高电平,以及将W_CLK和FQ_UD置0,方便后续给上升沿。
之后将40位控制字每8位一组由高位到低位写入AD9850,每当从D7~D0写入8位,W_CLK给一个上升沿使其能够存入AD9850的输入寄存器。当40位控制字K都写入完毕后,再给FQ_UD一个上升沿进行输出频率更新。在这里关键是需要控制正好并行输入5次数据以及由高到低从40位控制字W中提取所需的8位数据。这里解决的方法是使用了一个for循环,设一个变量i初始值为32,每循环一次减8,直到0跳出循环,这样正好循环了5次,可以进行5次数据输入,而在每一次循环中,控制字W右移i位时的低8位恰好是此时应当输入的控制字。
最后FQ_UD输入一个上升沿,信号发生电路就可以输出所需的频率。

第六章设计结果及性能分析

参考文献

[1] 张建斌. 频率合成新技术及其应用[J]. 江苏技术师范学院学报, 2003, 9(2): 18-23.
[2] 王佳荣, 崔炜, 冯驰. 基于DDS 的高频率高精度信号发生器[J]. 吉林大学学报(信息科学版), 2016, 34(4): 501-506.
[3] 殷雷, 金海军, 李映雪. 基于DDS 的高精度函数信号发生器的研制[J]. 现代电子技术, 2009, 32(1): 68-70.
[4] J·Tierney, C·Rader, B·Gold. A digital frequency synthesizer[J]. IEEE Transactions on Audio & Electroacoustics, 1971, 19(1): 48-57.
[5] 王庆生, 陆栋材. 频率合成技术综述[J]. 通信对抗, 2005(2): 3-10.
[6] 李尧, 董姝敏, 乔双. 锁相环的改进及仿真[J]. 东北师大学报自然科学版, 2005, 37(4): 53-56.
[7] 琚新刚. 锁相环频率合成器[J]. 河南教育学院学报(自然科学版), 2004, 13(4): 25-27.
[8] 恽小华. 现代频率合成技术综述[J]. 电子学报, 1995, 10: 148-151.
[9] 朱维仲. 采样定理的时域分析[J]. 天津职业技术师范学院学报, 1995, 00: 5-7.
[10] 李海松, 张奇荣, 权海洋. DDS的相位截断及相应的杂散信号分析[J]. 微电子学与计算机, 2006, 23(2): 141-143.
[11] Dayu Yang, Fa Foster Dai, Weining Ni, Shi Yin, Richard C. Jaeger. Delta-Sigma Modulation for Direct Digital Frequency Synthesis [J]. IEEE Transactions on Very Large Scale Intergration (VLSI) Systems, 2009, 17(6): 793-802.
[12] 高泽溪, 高成. 直接数字频率合成器(DDS)及其性能分析[J]. 北京航空航天大学学报, 1998, 24(5): 615-618.
[13] Analog Devices, Inc. . “CMOS, 125 MHz Complete DDS Synthesizer” AD9850 [EB/OL]. 2017-2-23.
[14] 育松电子. 液晶显示模块QC12864B使用说明书[EB/OL].
[15] 刘抒珍, 童子权, 任丽军, 刘小红. DDS波形合成技术中低通椭圆滤波器的设计[J]. 哈尔滨理工大学学报, 2004, 9(5): 22-24.
[16] 王涛, 刘洋, 左月明. 7阶椭圆型低通滤波器的设计及仿真[J]. 机电工程技术, 2013, 42(11): 17-18, 30.

致 谢

本文是在导师的悉心关怀和指导下完成的,在设计选题、论文撰写、元器件采购等方面李老师给予了我极大的帮助,在此致以极大感谢。
毕业设计是大学生涯之中最后一项任务,这是对大学四年所学的总结。无论从应用层面还是从理论层面,我在毕业设计的过程之中学到了很多,这些东西对我今后的学习和工作都有极大帮助,我也投入了巨大的精力去完成这个设计。
在此还要感谢大悦创新医疗器械有限公司对本人实验场地的提供,使我能够在电路设计之后完成电路的焊接工作。
同样感谢与本人相同毕业设计导师的同学,指导我进行任务书和最终论文的撰写。
感谢舍友,给予我实验场地和以及论文撰写场地,并且相互之间对于STM32的编程进行了一些交流,感到受益匪浅。
最后感谢大学内所有帮助我的同学和老师,有你们的存在,我的大学四年才如此精彩。

  • 33
    点赞
  • 63
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值