基于ARM核心的STM32F103VCT6微控制器设计的简易数码相机Word文档格式.docx
《基于ARM核心的STM32F103VCT6微控制器设计的简易数码相机Word文档格式.docx》由会员分享,可在线阅读,更多相关《基于ARM核心的STM32F103VCT6微控制器设计的简易数码相机Word文档格式.docx(77页珍藏版)》请在冰豆网上搜索。
(2)频率分辨率高、频点数多。
DDS输出频率的分辨率和频点数随机位累加器的位数的增长而呈指数增长。
分辨率高达μHz。
(3)相位连续。
DDS在改变频率时只需改变频率控制字(即累加器累加步长),而不需改变原有的累加值,故改变频率时相位是连续的。
(4)相位噪声小。
DDS的相位噪声主要取决于参考源的相位噪声。
(5)控制容易、稳定可靠。
高集成度、高速和高可靠是FPGA/CPLD最明显的特点,其时钟延迟可达纳秒级,结合其并行工作方式,在超高速应用领域和实时测控方面有非常广阔的应用前景。
在高可靠应用领域,如果设计得当,将不会存在类似于MCU的复位不可靠和PC可能跑飞等问题。
CPLD/FPGA的高可靠性还表现在,几乎可将整个系统下载于同一芯片中,实现所谓片上系统,从而大大缩小了体积,易于管理和屏蔽。
所以,采用FPGA来实现DDS有明显的好处。
2.2具体工作过程
图2-1DDS结构
上图所示是一个基于的DDS电路的工作原理框图
每来一个时钟脉冲Fclk,N位加法器将频率控制数据X与累加寄存器输出的累加相位数据相加,把相加后的结果Y送至累加寄存器的输入端。
累加寄存器一方面将在上一时钟周期作用后所产生的新的相位数据反馈到加法器的输入端,以使加法器在下一时钟的作用下继续与频率控制数据X相加;
另一方面将这个值作为取样地址值送入幅度/相位转换电路,幅度/相位转换电路根据这个地址输出相应的波形数据。
最后经D/A转换器和低通滤波器将波形数据转换成所需要的模拟波形。
相位累加器在基准时钟的作用下,进行线性相位累加,当相位累加器加满量时就会产生一次溢出,这样就完成了一个周期,这个周期也就是DDS信号的频率周期。
DDS输出信号的频率由下式给定:
(2-1)
假定基准时钟为
,累加器为24位,则再假定X=1000000Mhz,则
可见,通过设定相位累加器位数、频率控制字X和基准时钟的值,就可以产生任意频率的输出。
DDS的频率分辨率定义为:
Fout=Fclk/Y(2-2)
由于基准时钟一般固定,因此相位累加器的位数就决定了频率分辨率。
如上面的例子,相位累加器为24位,那么频率分辨率就可以认为是24位。
位数越多,分频率越高。
3系统电路的设计及原理
3.1系统原理
用FPGA实现多波形信号发生器基于直接数字频率合成技术。
图1以正弦输出为例,概括了直接数字频率合成器的结构和原理。
图1中频率控制字和相位控制字分别控制DDS输出波形的频率和相位。
DDS系统的核心是Nbit相位累加器。
相位累加器以频率控制字为步长进行地址抽取,以参考时钟周期为采样率,产生待合成信号的数字化相位取样值。
随后通过查表变换,数字相位取样值被转化为信号波形的数字幅度序列,再由数/模变换器(DAC)将代表波形幅度的数字序列转化为模拟电压,最后经由低通滤波器将DAC输出的阶梯状波形平滑为所需的连续波形。
若频率控制字设为K,相位累加器为N位,参考时钟频率fc,则输出频率为
(3-1)
最小频率分辨率为
(3-2)
DDS的输出频率下限对应于频率控制字K=0的情形,即
fout=0
根据奈奎斯特抽样定律,DDS的输出上限频率为时钟频率的1/2,即
(3-3)
但由于实际输出低通滤波器的非理想特性,工程上可实现的频率上限为
(3-4)
即若参考频率为fc,DDS的输出频率范围是0~2/5fc。
由于DDS的模块化结构,其输出波形由波形查找表中的数据来决定,因此,只需改变查找表中的数据,即可以方便地利用DDS产生出正弦波之外的其他波形,如余弦波、方波、三角波、锯齿波甚至调频、调相波以及带限的噪声信号。
系统总框图如(图3-1)所示。
图3-1系统整体框图
3.2各模块具体实现原理分析和说明
3.2.1外围电路
FPGA的外围电路如(图3-2)所示
图3-2FPGA的外围电路
单片机是用来控制整个电路的,他负责输入FPGA的频率、相位信息,对键盘和显示模块的控制。
键盘用来输入需要的频率和相位信息,经单片机再输入FPGA。
显示模块用来显示输入的频率、相位信息以及输出频率等状态。
DAC用来将FPGA输出的数字信息转换成模拟信息。
LPF滤除不必要的频率,使波形更加平滑。
3.2.2频率控制模块
这一模块是由FPGA实现的,FPGA完成相位累加器的功能,而频率控制字X是由外部拨码开关给出的。
相位累加器(见图3-3)是实现DDS的核心,它由一个N位字长的二进制加法器和一个固定时钟脉冲取样的N位相位寄存器组成。
相位寄存器的输出与加法器的一个输入端在
fc
频率控制字X输出序列N
图3-3相位累加器结构
内部相连,加法器的另一个输入端是外部输入的频率控制字X。
这样,在每个时钟到达时,相位寄存器采样上个时钟周期内相位寄存器的值与频率控制字X之和,并作为相位累加器在这一时钟周期的输出。
频率控制字X决定了相应的相位增量,相位累加器则不断地对该相位增量进行线性累加,当相位累加器积满两时就会产生一次溢出,从而完成一个周期性的动作,这个动作周期即是DDS合成信号的一个频率周期。
于是,输出信号波形的频率表示式为
(3-5)
由该式可知,输出信号频率主要取决于频率控制字X,当X增大时,
可以不断的增高,由抽样定理,最高输出频率不得大于
/2,而根据实验所得,实际工作频率小于
/3时较为合适。
由于受到FPGA芯片资源限制,所能达到的频率不是很高,范围也不是很广。
根据设计目标,决定取
=51200Hz,选取4.096MHz有源晶振,经过80分频,得到基准频率为51200Hz。
N为9位。
这样,频率分辨率为
可以达到的最高最佳频率为51200/3≈17KHz。
另外Altera还在它们公司的VHDL设计平台MAX+PLUS上提供了LPM_ADD_SUB核和LPM_DFF核,利用MAX+PLUS综合可以自动编译包含LPM_ADD_SUB和LPM_DFF元件的文件,本设计利
用LPM_ADD_SUB核以及LPM_DFF核在FPGA上实现相位累加器。
3.2.3ROM查找表设计
FPGA的结构是由基于半定制门陈列的设计思想而得到的。
从本质上讲,FPGA是一种比半定制还方便的ASIC设计技术。
FPGA的结构主要分为三部分:
可编程逻辑块、可编程IˆO模块、可编程内部连线。
可编程逻辑块的构造主要有两种类型:
即基于查找表
的结构类型和基于乘积项的结构类型。
查找表型FPGA的可编程逻辑单元是由功能为查找表的SRAM构成逻辑函数发生器,实现与其它功能块的可编程连接。
在此,选用FLEX10K系列FPGA作为目标芯片,FLEX10K系列是Altera公司于1995年推出的产品,它的集成度达到了10万门,而且在FPGA中首次集成了嵌入式存储器块的芯片。
它是查找表型FPGA,由输入-输出控制模块(IOC)、嵌入式阵列块(EAB)、逻辑阵列块(LAB)和快速通道(FASTTRACK)构成。
其中EAB是一种输入输出端带有寄存器的非常灵活的RAM,它既可以用来作为存储器使用,也可以用来实现逻辑功能。
每一个EAB有容量为2048位的RAM,可配置为存储器或逻辑函数,FLEX10K系列中不同型号的芯片其中包含的EAB的数目不同,FLEX10K10有3个EAB。
另外Altera还在它们公司的VHDL设计平台MAX+PLUS上提供了LPMROM核,利用MAX+PLUS综合可以自动编译包含LPMROM元件的文件,在FLEX10K10的EAB上产生ROM功能。
本设计利用LPMROM核预置正弦查找表在FPGA上。
LPM2ROM核简介:
输入端口:
address[]~ROM的地址信号;
输出端口:
q[]~ROM的输出数据。
具体参数:
LPM_WIDTH:
输出数据的宽度(1~64任选);
LPM_WIDTHAD:
输入地址的宽度(1~12任选);
LPM_FILE:
存储器初始化文件名(.mifor.hex)。
本设计中各参数设置如下:
=>
8;
LPM_WIDTHAD=>
9;
LPM_OUTDATA=>
”UNREGISTERED”;
LPM_ADDRESS_CONTROL=>
"
UNREGISTERED"
;
其中LPM_FILE的“.mif”中存放正弦的值,可由文本形式生成,也可由高级语言如C语言生成。
ROM查找表在整个设计中是一个比较重要的部分。
为了保证波形的平滑,设计时可将一个周期分为512个点。
但是,点数太多时,用文本方式输入可能有很多困难。
因此,应当用C语言描述正弦方程式,最后再将其转化为所需的mif文件。
下面是用TC来在512.mif文件里产生512个点的正弦波数据的源程序:
#include<
stdio.h>
#include"
math.h"
intmain()
{ints;
inti;
FILE*fp;
fp=fopen("
512.mif"
"
r+"
);
fprintf(fp,"
--MAX+plusII-generatedMemoryInitializationFile\n"
--By00022809\n\n\n\n\n"
fprintf(fp,"
WIDTH=8;
\n\n"
DEPTH=512;
ADDRESS_RADIX=HEX;
DATA_RADIX=HEX;
CONTENTBEGIN\n"
for(i=0;
i<
512;
i++)
{s=abs(sin(atan(1.0)*8/512*i)*255);
fprintf(fp,"
%x\t:
\t%x;
\n"
i,s);
}
END;
fclose(fp);
}
这样就可以得到一个周期512个点的波形数据。
ROM存储器是设计人员在许多设计电路中不可缺少的关键部件,特别是在一些特殊的运算场合,设计人员通常利用ROM改造出各种各样的查找表,以简化电路,提高电路的处理速度和稳定性。
在FPGA器件中实现存储器功能,需要占用芯片的存储单元,而这种资源是十分有限的,如何在FPGA器件的存储单元和逻辑单元的使用效率上取得最佳折衷是设计人员必须细心考虑的问题。
一个好的设计应该是速度、可靠性和资源利用率三者的最佳结合。
对于锯齿波、三角波、方波等相位/幅度对应关系比较简单的信号,则可以通过直接计算得到幅度数据,无需占用有限的ROM资源。
这一部分相位/幅度转换采用VerilogHDL语言完成。
3.2.4数模转换模块
数模转换。
本来欲打算采用转换速度为85ns,带宽为10MHz的8位单调高速乘法器ADDAC08或者是DAC0800。
但由于都购买不到,而改为使用转换速度为1us带宽为1MHz的DAC0832,这样最高频率就不是很高。
DAC0832为电流输出型D/A转换器,需要外接运算放大器进行电流电压变换才能得到模拟电压输出。
输出方式为单极性输出方式的时候,输出级接一低电压温漂运放op07作为电压电流转换器,在运算放大器的输出端就可以得到单极性模拟电压
:
(3-6)
3.2.5滤波输出电路模块
D/A输出后,通过滤波电路,使信号平滑。
滤波器在通带内的平坦程度对我们而言,比其衰减更为重要,而且,巴特沃斯滤波器的元件值也较合乎实际情况,不像绝大多数其他类型滤波器对元件值要求那么苛刻。
在截止频率附近,频率响应钝化可能使这些滤波器在要求锐截止的地方不合要求。
二阶巴特沃斯有源低通滤波器设计(图3-4):
正弦波的输出频率小于10KHz,为保证10KHz频带内输出幅度平坦,又要尽可能抑制谐波和高频噪声,综合考虑取
R1=1KΩ,R2=1KΩ,C1=100pF,C=100pF
图3-4有源低通滤波器设计
3.3设计所用关键元器件的介绍
3.3.1FLEX10K系列FPGA
(1)概述。
FLEX10K是工业界第一个嵌入式的可编程逻辑器件,采用可重构的CMOSSRAM工艺,把连续的快速通道互连与独特的嵌入式阵列结构相结合,同时也结合了众多可编程器件的优点来完成普通门阵列的宏功能。
由于其具有高密度、低成本、低功率等特点,所以脱颖而出成为当今AlteraPLD中应用最好的器件系列。
其集成度已达到25万门。
它能让设计人员轻松地开发出集存储器、数字信号处理器及特殊逻辑包括32位多总线系统等强大功能于一身的芯片。
到目前为止,已经推出了FLEX10K、FLEX10KA、FLEX10KV、FLEX10KE等分支系列。
FLEX10K结构类似于嵌入式门阵列,是门阵列市场中成长最快的器件。
像标准门阵列一样,嵌入式门阵列采用一般的门海(seaofgates)结构实现普通逻辑,因此,在实现大的特殊逻辑时会有潜在死区。
与标准门阵列相比,嵌入式门阵列通过在硅片中嵌入逻辑块的方法来减少死区,提高速度。
然而,典型的嵌入式宏功能模块通常是不能改变的,这就限制了设计人员的选择。
相反,FLEX10K器件是可编程的,在调试时它允许设计人员全面控制嵌入式宏功能模块和一般的逻辑,可以方便地反复修改设计。
每个FLEX10K器件包含一个嵌入式阵列和一个逻辑阵列。
嵌入式阵列用来实现各种存储器及复杂的逻辑功能,如数字信号处理、微控制器、数据传输等。
逻辑阵列用来实现普通逻辑功能,如计数器、加法器、状态机、多路选择器等。
嵌入式阵列和逻辑阵列结合而成的嵌入式门阵列的高性能和高密度特性,使得设计人员可在单个器件中实现一个完整的系统。
FLEX10K器件的配置通常是在系统上电时,通过存储于一个串行PROM中的配置数据或者由系统控制器提供的配置数据来完成。
Altera提供EPC1、EPC2、EPC16和EPC1441等配置用的PROM器件,配置数据也能从系统RAM和BitBlaster串行下载电缆或ByteBlasterMV并行下载电缆获得。
对于配置过的器件,可以通过重新复位器件、加载新数据的方法实现在线可配置(ICR,In-CircuitReconfigurability)。
由于重新配置要求少于320ms,因此可在系统工作时实时改变配置。
FLEX10K器件由MAX+PLUSII开发软件支持。
(2)FLEX10K器件系列的特点。
①FLEX10K是工业界第一种嵌入式的PLD器件系列,具有实现宏功能的嵌入式阵列(例如实现高效存储器和特殊的逻辑功能)和实现普通功能的逻辑阵列,可提供可编程单芯片系统(SOPC)集成。
②高密度:
1万~25万个可用门。
高达40960位内部RAM(每个EAB有2048位),所有这些都可在不减少逻辑能力的情况下使用。
③系统级特点:
支持多电压接口;
在FLEX10KA器件中允许输入的引脚电压为5.0V,在FLEX10KB器件中允许输入的引脚电压为3.3V和5.0V;
低功耗(维持状态小于0.5mA);
遵守PCI总线规定;
内带JTAG边界扫描测试电路;
边界扫描测试电路;
器件采用先进的工艺制造并可在2.5V、3.3V、5.0V电源电压下工作。
所有器件都100%经过功能测试。
④灵活的内部连接:
快速、可预测连线延时的快速通道(FastTrack)连续式布线结构;
实现快速加法器、计数器和比较器的专用进位链;
实现高速、多输入逻辑函数的专用级联链;
实现内部三态总线的三态模拟;
多达六个全局时钟信号和四个全局清除信号。
⑤强大的I/O引脚功能:
每个引脚都有一个独立的三态输出使能控制及漏极开路配置选项(Open-drainoption);
可编程输出电压的摆率控制,可有减少开关噪声。
FLEX10KA、FLEX10KE、FLEX10KS器件支持热拔插。
⑥多种封装方式:
用户可任意选择84~600引脚的各种封装。
封装形式有PLCC、TQFP、PQFP、RQFP、PGA、BGA等,同一种封装中的各种FLEX10K系列器件的引脚相兼容。
FLEX10K还包括了一个优化界面,允许微处理器以串行方式或并行方式、同步方式或异步方式对FLEX10K器件进行配置。
FLEX10K的这些特点使得FLEX10K器件成为替代传统门阵列专用的理想选择,其使用非常广泛;
又由于FLEX10K系列的芯片都带有JTAG口(JointTestActionGroup—联合测试行动组),能够使用JTAGPROGRAM指令进行配置;
为了尽量简化电路,所以本设计采用FLEX10K系列产品中的FLEX10K器件,该型号芯片采用PLCC封装,有84个管脚,其中I/O引脚个数为59。
FLEX10K的主要引脚和引脚名称的对应关系如(表3-1)所示。
表3-1FLEX10K10的主要引脚和引脚名称
引脚名称
输出引脚
MSEL0
(2)
31
MSEL1
(2)
32
nSTATUS
(2)
55
nCONFIG
(2)
34
DCLK
(2)
13
CONF-DONE
(2)
76
INIT-DONE(3)
69
nCE
(2)
14
nCEO
(2)
75
nWS(4)
80
nRS(4)
81
nCS(4)
78
CS(4)
79
RDYnBSY(4)
70
CLKUSR(4)
73
DATA7(4)
5
DATA6(4)
6
DATA5(4)
7
DATA4(4)
8
DATA3(4)
9
DATA2(4)
10
DATA1(4)
11
DATA0
(2),(5)
12
TDI
(2)
15
TDO
(2)
74
TCK
(2)
77
TMS
(2)
57
TRST
(2)
56
DedicatedInput
2,42,44,84
DedicatedClockPins
1,43
DEVB-CLRn(3)
3
DEV-OE(3)
83
VCCINT
4,20,33,40,45,63
GNDINT
26,41,46,68,82
TotalUserI/OPins
59
注:
⑴没有列出所有的用户I/O引脚。
⑵该引脚为专用引脚,不能用作用户I/O引脚。
⑶该引脚如果没有用于器件配置功能,则它可用作用户I/O引脚。
⑷该引脚在器件配置后可用作用户I/O引脚。
⑸该引脚在用户模式中是三态。
⑹用户I/O引脚数包括专用输入引脚、专用时钟引脚和所有I/O引脚。
(3)FPGA结构与原理
①查找表(Look-Up-Table)的原理与结构
采用这种结构的PLD芯片我们也可以称之为FPGA:
如altera的ACEX,APEX系列,xilinx的Spartan,Virtex系列等。
查找表(Look-Up-Table)简称为LUT,LUT本质上就是一个RAM。
目前FPGA中多使用4输入的LUT,所以每一个LUT可以看成一个有4位地址线的16x1的RAM。
当用户通过原理图或HDL语言描述了一个逻辑电路以后,PLD/FPGA开发软件会自动计算逻辑电路的所有可能的结果,并把结果事先写入RAM,这样,每输入一个