修改好基于单片机与FPGA的实用信号源的设计.docx
《修改好基于单片机与FPGA的实用信号源的设计.docx》由会员分享,可在线阅读,更多相关《修改好基于单片机与FPGA的实用信号源的设计.docx(20页珍藏版)》请在冰豆网上搜索。
修改好基于单片机与FPGA的实用信号源的设计
实用信号源的设计
班级:
07级电信
(2)姓名:
李威学号:
1665070210
摘要:
本设计选用Altera公司的EPF1OK10LC84芯片作为数字处理主芯片、Atmel公司的AT89C51单片机作为控制芯片,采用直接数字频率合成技术。
利用MAX+plusII10.0并结合VHDL语言设计FPGA,利用Wave6000并结合汇编语言设计MCU。
经模拟仿真达到了预期的性能要求。
关键词:
信号源;直接数字频率合成;EDA;FPGA;单片机
一.设计的原理
1.1本设计采用DDS技术
该技术是一种用数字控制信号的相位增量技术,具有频率分辨率高、稳定性好、可灵活产生多种信号的优点。
基于DDS技术的信号源是通过改变相位增量值(每个时钟周期的度数)来改变输出频率的。
所有相位点的数据都放在查找表中。
采用插值描点的方式,将要产生的波形用若干个点代替,然后依次输出,每个点的电平由查找表中的相应点的数据经过D/A得到。
这个过程相当于采样保持及A/D转换的逆过程。
将经过D/A转换器产生的波形经过低通滤波,就得到了所需要的波形。
控制D/A转换器的参考电压,就可以实现幅值可调;控制两个插值点之间的相位,就可以实现频率可调。
本设计的控制器利用单片机完成,DDS合成芯片利用FPGA实现。
单片机通过键盘进行人机交互,获得欲输出信号的波形,幅值,频率,或者,通过A/D转换器获得欲再生的波形;然后,将生成波形的参数送给FPGA芯片,并控制启动FPGA芯片工作。
FPGA芯片控制基准电源产生合适电压,作为D/A转换器的参考电压,然后从查找表中获得数据,送到D/A转换器,送出一个点的数值。
依次处理完查找表一个周期数据后,再重新开始,输出下一个周期的波形。
经过D/A转换的信号再经过低通滤波,滤掉插值频率和高次干扰波,就可以得到需要的任意波形。
控制单片机上外接的A/D转换器和片外的EEPROM,即可实现波形的采集与存储。
根据设计要求、实际需要及实验室条件,相应地选择了以下器件及设计工具。
在进行系统硬件电路设计时,选用Atmel公司的AT89C51单片机作为控制主芯片、Altera公司的EPF10K10LC84作为DDS合成FPGA芯片。
选择CaptureCIS设计系统电路的原理图,选择PowerPcb5.0设计PCB图,选择PSpice软件和Matlab软件进行模拟仿真。
在进行FPGA芯片设计时,选用了Altera公司的MAX+plusII10.0工具作为芯片设计平台,选择VHDL硬件描述语言进行设计;在进行单片机设计时,选用Wave公司的Wave6000和汇编语言进行设计。
1.2DDS(直接数字合成)技术理论
DDS技术是一种用数字控制信号的相位增量技术,具有相位连续、频率分辨率高、频率转换速率快、稳定性好、可灵活产生多种信号的优点。
它采用插值取样的方式,将要合成的波形用若干个点代替,然后依次等时间间隔输出,每个取样点的电平由预先存贮好的数据经过D/A得到。
这个过程相当于采样保持及A/D转换的逆过程。
控制两个取样点之间的时间间隔及相位,就实现了频率连续可调。
DDS由于具有极高的频率分辨率,极快的变频速度,变频相位连续,相噪较低,易于功能扩展和全数字化便于集成等优点。
1.3DDS设计原理和结构
下图是DDS原理的电路结构图:
其主要部件完成功能如下:
相位累加器(PhaseRegister)功能是控制每次采样的相位增量,并输出模2π的累积相位,相位累加器可用一累加器完成。
频率控制字FC(FrequenceControl)决定了每次累加的相位增量。
二.系统硬件结构图
本设计遵循尽量使电路简单和模块化,并充分利用软件智能化功能这一原则,在实现硬件电路功能的前提下,尽量简化硬件电路设计,并将设计清晰地分成多个模块。
系统的硬件结构图如下图所示。
输出
系统的硬件结构图
2.1整个系统设计
分为控制电路和数据处理电路两大部分,控制电路以Atmel公司的AT89C51单片机为核心,加上一些外围电路组成,主要完成人机对话、数据接口、显示信息以及控制数据处理电路工作等功能。
数据处理电路以Altera公司的FPGA芯片为核心,结合D/A转换器以及低通滤波器,实现DDS数据处理,完成任意波形的输出。
整个系统的工作过程是:
首先单片机通过串口通信或键盘输入得到命令,然后将要生成波形的参数数据送入FPGA芯片,最后控制启动FPGA芯片工作。
FPGA芯片完成DDS数据处理功能。
将波形幅值数据送入第一个D/A转换器,其输出作为第二个D/A转换器的参考电压,以达到控制输出波形幅值的目的。
将波形数据送入第二个D/A转换器,以实现任意波形的输出。
2.2AT89C51的时钟电路
AT89C51的时钟可以通过两种方式产生:
内部振荡方式和外部振荡方式。
本系统中采用内部振荡方式。
即在XTAL1和XTAL2两端跨接石英晶体和两个微调电容,就可以构成稳定的自激振荡器并产生振荡时钟脉冲。
其时钟电路如下图所示。
时钟电路
2.3AT89C51的复位电路
复位电路的功能是产生复位信号,即能在Vcc、振荡器和反偏置发生器稳定后,给RESET引脚提供至少能维持两个状态周期的低电平信号,而后由片内的上拉电路将RESET引脚的电位拉高以使单片机执行10个状态周期的复位序列。
AT89C51的复位电路分片内、片外两部分,RESET引脚为复位引脚,复位信号通过RESET加到单片机的内部复位电路上。
内部复位电路在每个机器周期S2P2对片外复位信号采样一次,当RESET引脚上出现连续两个机器周期的高电平时,单片机就能完成一次复位。
外部复位电路就是为内部复位电路提供两个机器周期以上的高电平而设计的[18]。
AT89C51通常采用上电自动复位和按键手动复位两种方式。
图3.2.3是系统的单片机复位电路。
该复位电路既可以实现上电自动复位,又可以实现人工手动复位。
在加电瞬间,电容通过电阻充电,就在RESET端出现一定时间的高电平,只要高电平时间足够长,就可以使单片机有效的复位。
当按下开关时,就在RESET端就出现一段时间的高电平,使单片机复位。
复位电路
2.4芯片的应用功能及使用配置
在本设计中,FPGA有两个功能,其主要功能是进行DDS处理,生成任意波形;第二个功能是作为功能寄存器,将单片机传来的64位数据分开成8位的波形选择寄存器、8位的幅值寄存器、12位的相位控制字、12位的频率控制字和24位的分频控制字寄存器,同时产生EN信号,提供给液晶显示使用。
与这两个功能对应,FPGA芯片内部由功能寄存器模块和DDS处理模块两个模块组成。
(1)引脚及其功能
该芯片共有84个引脚。
除去下载电路和电源、地线所用去的引脚外,还有53个I/0引脚和2个全局输入时钟引脚可供使用。
本设计使用了其中的38个引脚,下面按照其实现的功能将它们分成三组,各引脚功能说明如下:
第一组实现功能寄存器功能,将单片机传来的64位数据分开。
作为输入的信号有AD0~AD7,接单片机P0口,ALE引脚作为功能寄存器的控制信号,低电平时锁存,外部接单片机ALE引脚。
同时单片机的WR和RD引脚通过与非门产生EN信号,控制液晶显示模块的工作。
第二组实现DDS数据处理功能,作为DDS处理模块,需要连接数据总线,和地址总线。
地址总线一共有3根,用来寻址DDS内部的5个命令字寄存器,数据总线一共有8根,用来与单片机交换数据。
CLK作为全局时钟信号,为DDS芯片提供工作时钟;ENA引脚接单片机的A3,作为片选信号,低电平有效,此时可以将数据写入命令字寄存器。
作为DDS模块的输出有两组ADP0~ADP7,ADV0~ADV7。
ADV0~ADV7作为波形幅值控制信号输出,接第一个D/A转换器的数据端输入,其输出作为第二个D/A转换器的参考电压,以达到控制幅值的目的。
ADP0~ADP7接第二个D/A转换器的数据端输入,达到生成任意波形的目的。
(2)FPGA与单片机的连接方式
本设计中,FPGA与单片机的连接方式如下图所示。
可以看出,当作为DDS数据处理芯片时,该芯片作为单片机的外围电路使用。
在DDS与单片机连接时,采用了直接访问方式。
直接访问方式就是将DDS模块的接口作为存储器或I/O设备直接挂在单片机总线上,单片机以访问存储器或I/O设备的方式控制DDS模块的工作。
FPGA与单片机的连接方式
三.外设及接口电路实现
3.1液晶显示
液晶显示作为单片机的外围电路,起着提供人机交互界面和提供系统运行状态的作用。
市面上的液品显示屏很多,大多都己集成了液品显示控制电路。
选用何种控制芯片的显示屏就决定了液晶显示屏的工作方式。
根据本设计需要,选用了精电的MDLS40266液晶显示屏。
该液晶显示屏内置一块HD44780液晶显示驱动控制器。
这种液晶显示电路简单,价格便宜,易于操作。
它具有字符发生器ROM,可显示192种字符[19]。
具有64个字节的自定义字符和80个字节的RAM,单+5电源供电。
液晶显示电路以直接访问的方式与单片机相连,其与单片机的连接电路如下图所示。
液晶显示器与单片机的连接电路
3.2串口通信
为实现本系统与微机之间的通信,本系统利用AT89C51的一个异步通信串行接口,并选用了MAX232芯片作为电平转换和收发器。
其电路图如下图所示。
串口通信电路
3.3波形生成电路
通过DDS处理后的信号还是数字信号,只有通过D/A转换电路才能将数据转换成为我们需要的波形,波形生成电路如下图所示。
可以看出该电路由两个D/A转换电路组成,DAC0832是电流输出型D/A转换器,必须外接运放构成D/A转换电路。
下面一个D/A转换器输入接DDS芯片,输出接第二个D/A转换器的参考电压。
这是输出波形幅值控制电路,控制输出波形电压。
该电路采用单极性输出,输出电压反相,输出电压范围-5~0V,第二个转换器输入接DDS芯片输出的波形数据,采用双极性输出,电压输出范围为-5~5V。
该电路输出电压反相,但由于其参考电压已反相,所以输出波形正确。
波形生成电路
3.4整体设计结构
本设计中,FPGA芯片主要作为DDS数据处理芯片,另外还附带一个其它功能:
功能寄存器。
因此,在FPGA芯片设计时,整体上将FPGA芯片划分为两个功能模块:
功能寄存器模块和DDS模块。
功能寄存器模块的结构示意图如下图所示。
功能寄存器的结构示意图
结合上图,介绍功能寄存器的工作过程。
当ALE来一个上升脉冲,8位锁存器把AD0~AD7上的数据锁存到锁存器中,同时通过并-串转换器把8位并行数据转换成一位位的数据。
A0~A2通过译码器译出5个控制寄存器的使能信号,当其使能信号有效时,便把并-串转换器输出的数据一位位移入寄存器中。
功能寄存器内部有5个控制寄存器,他们分别控制波形选择、幅值大小、相位、频率和分频系数。
WR和RD信号通过与非门产生EN信号控制液晶显示器的工作。
DDS模块的结构示意图下如图所示。
DDS模块的结构示意图
结合上图,DDS模块工作的过程如下:
DDS模块在全局时钟CLK的驱动下,启动24位分频器,对50MHz的时钟信号进行分频,分频系数由功能寄存器中的分频系数寄存器给出,分频器输出的新时钟信号驱动相位寄存器工作和控制查找表中各点的间隔。
当A3信号有效时,启动频率、相位累加器工作。
频率控制字通过累加器不断的在原来的基础上加上一个固定的值,然后通过相位寄存器输入到相位累加器中。
相位累加器再把相位寄存器输出的值和相位控制字相加产生各点在查找表的有效地址。
最后通过查询查找表中的数值,再通过波形选择开关将数值输出到第二个DAC0832中。
而幅值寄存器的输出直接通过锁存器输出到第一个DAC0832中,作为第二个DAC0832的基准电压,最后通过低通滤波器滤波后产生所需要的波形。
四.设计模块的划分和各模块设计、仿真
整个设计只有一个顶层模块,按照功能要求划分成两个功能模块,即功能寄存器模块和DDS模块。
功能寄存器模块主要是对单片机传过来的64位控制字进行分开,子模块比较简单,就不必细说了。
设计的主要部分是DDS模块,它是本系统的核心部分,可以分为6个主要的模块,即分频器模块、相位累加模块、相位锁存模块、频率累加模块和查找表模块。
本设计中,功能寄存器模块的实现比较简单,下面主要介绍DDS处理子模块的实现过程。
4.1分频模块(COUNTER_24)
分频模块是实现对全局时钟进行分频,其实质上就是一个计数器,它有3个输入:
CLOCK,CLR,FENPIN_WORD;一个输出:
NEWCLK。
其外部端口如下图所示:
COUNTER_24的端口
观察仿真结果,在当CLR信号无效,ENA信号有效时,COUNTER_24在CLOCK信号
的作用下,开始计数,当计数到达FENPIN_WORD时就输出一个脉冲,这样就完成了对
CLOCK的分频。
仿真结果如下图所示。
COUNTER_24的仿真图
4.2相位累加模块(PHASE_ADDER)
相位累加模块是实现对查找表地址的输出。
它把从相位寄存器输出的相位值与相位控制字相加,从而产生查找表的地址。
其外部端口如下图所示:
PHASE_ADDER的外部端口
其仿真结果如下图所示。
通过分析,在CLR信号无效的情况下,当CLK来一个上升沿时,PHASE_ADDER就将相位控制值和原来累加的相位进行相加,产生12位的地址。
PHASE_ADDER的仿真图
4.3相位锁存模块(PHASE_REGISTER)
相位锁存模块主要是对每次累加后的新的相位进行锁存的作用。
其外部端口如下图所示.
PHASE_REGISTER的外部端口
由仿真结果下图可知,当CLK来一次上升沿时,相位锁存模块就将输入的12位相位值锁存到相位锁存模块中。
PHASE_REGISTER的仿真图
4.4频率累加模块(ADDER_12)
频率累加模块主要是实现产生初始累加相位的作用,实质上是一个12位的加法器。
它有两个输入端口:
频率控制字(PHASE_CONTROL)和经过相位锁存器锁存的12位原始相位。
其外部端口如下图所示。
ADDER_12的外部端口
其仿真结果如下图所示。
经分析仿真图可以知道,它完全达到预期的设计效果。
ADDER_12的仿真图
4.5查找表模块(LMP_ROM_SIN)
查找表模块主要是存放一些波形数据,每一个数据都一一对应着一个地址。
通过具体的地址就可以得到所需的波形数据。
其外部端口如下图所示。
LMP_ROM_SIN的外部端口
仿真结果如下图所示。
通过分析,可以知道,每输入一个地址就会得到一个波形数值。
LMP_ROM_SIN的仿真图
4.6芯片引脚功能定义
在设计一个系统时,选定器件型号后,I/O引脚及一些特定引脚就确定下来了。
设计者要按照芯片的引脚定义进行原理图及PCB印制板设计,然后在MAX+plusII软件中打开Pin/Locationg/chip对话框,参考设计原理图来对顶层文件分配输入、输出引脚。
下图是FPGA芯片在系统中的连接图,根据该图可以看到系统用到了该芯片的43个引脚,其中有26个输入引脚,17个输出引脚。
FPGA在系统原理图中的连接
4.7各级菜单的设计
本系统采用英文菜单显示,通过菜单选择键来选取相应的子菜单和菜单项,系统菜单的结构如下图所示:
系统菜单结构图
整个操作菜单分为两级结构,通过4×4键盘进行选择,选中后按“确认”键,如果选中的是菜单项,程序就执行该选项;如果选中的是子菜单项,那么就进入子菜单。
如果在子菜单中按“取消”键,则返回上一级菜单。
主菜单包括两个子菜单和一个菜单项。
当执行菜单项“当前状态”时,就显示当前输出的波形参数。
选择“波形输出”子菜单,就进入输出波形设置界面。
该菜单共有5个菜单项。
“波形选择”设置要输出的信号波形,有正弦、余弦等波形,选中后,按“确认”键即可。
“幅值设置”设置输出波形的幅值,输入范围为0~5V。
“频率设置”设置输出波形的频率控制字。
“相位设置”设置输出波形的相位控制字。
“分频系数设置”设置输出波形的分频系数,可以控制FPGA中的时钟信号。
在主菜单中选择“通信功能”,即可以实现本系统与微机的串口通信。
五.系统软件设计
整个系统软件设计采用Wave公司的Wave6000集成开发环境,使用汇编语言进行编程。
主程序设计及流程
主程序流程图
本系统的主程序流程图见上图。
首先,程序初始化,将系统中的所有命令状态和有关的存储单元置位成初始状态;然后程序进行系统自检,检查FPGA芯片和外围硬件电路是否正常工作;若有错误则给出提示,否则在屏幕上显示主菜单,然后判断是否有键按下,如果有键按下,则进入键盘处理子程序。
如没有键按下则显示主菜单,等待有键按下。
5.1自检子程序
自检就是利用事先编好的检测程序对仪器的主要部件进行自动检测。
本系统自检主要是对单片机的RAM和ROM,以及单片机的外围电路如键盘,液晶显示器进行检查。
存储器是否正常是通过检验其读写功能是否有效来实现的,通常选用特征字55H(01010101B)或AAH(10101010B)分别对存储器的每一个单元进行先读后写的操作,其自检子程序的流程图如下所示。
自检子程序流程图
5.2键盘扫描子程序
键盘扫描子程序是对4×4键盘进行扫描并把输入的键值储存到数据存储器中。
每一个键就是一个机械开关,当键按下时,开关闭合;当键松开时,开关断开。
由于机械开关的撞击作用,开关在闭合和断开时,开关的动作会产生抖动,抖动时间约为5ms~10ms。
为了保证按键的准确性,必须在子程序中设计一个消除抖动的软件延时程序。
当键盘检测到有键按下时,并不直接进行处理,而是将键值保存下来,在主程序里进行处理。
键盘扫描子程序的流程图如下图所示。
键盘扫描子程序流程图
5.3串口通信子程序设计
为了实现本系统与微机之间的通信,本设计保留了一个串行接口RS-232。
串口通信子程序分为发送和接收程序,大致的流程是相同,下图是串口通信发送程序的流程图。
在进行串行通信前要对串行口进行初始化,设置波特率和串行口的工作模式。
工作方式1时波特率的计算公式为:
(1)
当波特率为9600,晶振为12MHz时,
Y
Y
串口通信发送子程序流程图
5.4电路调试
设计完成后,要对系统进行模拟仿真和试验仿真,由于本系统工作量比较大,在有限的时间里,还不能进行试验仿真,只好利用计算机软件进行模拟仿真。
5.5DDS电路的模拟仿真
由于MAX+plusII的设计软件中的.tbl文件是纯文本文件,它包含了.scf文件或.wdf文件中的所有信息。
.tbl文件的生成很简单,在MAX+plusII波形仿真结束后,打开.scf文件,然后从“File”菜单中选择“CreateTableFiles”选项,就可以产生.tbl文件。
下面给出了一段用Matlab语言编写的程序,它首先读取“dds.tbl”文件,将输出数据抽取出来并转换为十进制数,然后绘出DDS电路的仿真波形曲线。
用Matlab语言编写的数值抽取和数值转换程序(DDS.M):
clearall;
fid=fopen(‘c:
\xiaoxiong\dds.tbl’,’r’);
data=fscanf(fid,’%s’);
fclose(fid);
b=find(data==’=’);
number=length(b);
j=0;
fori=1:
number
ifdata(b(i)-1)==’0’
j=j+1;
c_c(j,1)=data(b(i)+1);
c_c(j,2)=data(b(i)+2);
c_s(j,1)=data(b(i)+3);
c_s(j,2)=data(b(i)+4);
end
end
d_c=hex2dec(c_c);%hex------->dec,d_c是输出余弦波的数据
d_s=hex2dec(c_s);%hex------->dec,d_s是输出正弦波的数据
figure
(1);
subplot(2,1,1);
plot(d_c);%DDS输出的余弦波
subplot(2,1,2);
plot(d_s);%DDS输出的正弦波
在Matlab6.5运行DDS.M得到DDS电路的仿真波形如下图所示。
由下图可见模拟仿真达到了预期的要求.
DSS电路的仿真波形
5.6低通滤波器的设计
低通滤波器是对DAC0832输出的模拟信号进行滤波作用,去除高频干扰信号以及相位噪声和杂散噪声。
下图是本设计的截至频率为500Hz的三阶巴特沃斯低通滤波器。
该滤波器中的电阻和电容值是通过滤波器设计软件FilterWizPROV3.2算出来的。
低通滤波器的原理图
通过PSpice软件对其进行仿真,可以看到它的频率特性如下图所示。
可见该滤波器达到了预期的滤波效果。
低通滤波器的频率特性
六.系统误差分析
系统误差是指在测量过程中产生的大小和方向有一定规律的误差,也称为确定误差。
一般来说系统误差具有一个明显的特点,即在测量条件一定的情况下,系统误差就获得一个客观上恒定值。
根据上面这一特点,人们可以依据系统误差产生的原因,采取一定的措施,设法减弱甚至消除它。
本系统涉及到了模拟电路系统和数字电路系统,采用了单片机和FPGA芯片作为本系统设计的核心部分,充分发挥了单片机和FPGA芯片的优点。
通过系统的模拟仿真,该设计还是存在着一定的系统误差,下面是对系统误差的分析:
(1)时钟的延时误差。
由于单片机和FPGA采用了不同的时钟信号,当单片机向FPGA传送数据时,必定存在着一定的延时,使得单片机传送过来的数据不能马上就存入FPGA中,当延时过长时,可能使得一些数据丢失。
(2)器件本身的误差。
由于所用到的器件不可能是理想中的器件,或多或少会给系统带来一定的误差。
如模拟部分各元器件的固有特性所带来的偏差,如电阻的精度以及计算取舍误差等。
数字部分各元器件的信号不同步和相互干扰等。
(3)输出信号的精度误差。
由于DAC0832的转换精度不是很高,输出的波形频率范围大,对低通滤波器的设计带来有很大的困难,使得输出信号或多或少参杂了一些高频信号和高斯噪声,对输出信号的质量有很大的影响。
七.结语
通过本次设计,受益匪浅,充分意识到自己所学的东西还是非常有限的,不过通过设计,还是学到了一些书本上没有学到的东西,为自己以后的工作奠定了一定的基础。
在撰写本文的过程中,深切地体会到当今科技技术飞速的发展,特别是数字技术的发展使得许多技术难题迎刃而解,高速DDS技术和FPGA技术的出现只是飞速发展的数字技术的冰山一角。
参考文献:
[1]赵建华,朱少君,甘中明.利用单片机和CPLD设计多用信号源[J].西安工业学院学报,2003,23(3):
201~205.
[2]李志华,张庆顺.高精度可调频调相的正弦信号源[J].电子技术,2003,2:
51~53.
[3]蒋兴才,廖湘平.直接数字频率合成器(DDS)的频谱特性及改善方法[M].北京:
电子工业出版社,1997.
[4]宋万杰,罗丰吴顺昌.CPLD技术及其应用[M].西安:
西电子科技大学出版社,2000.
[5]王金明,杨吉斌.数字系统设计与VHDL应用技术[M].北京:
电子工业出版社,2001.
[6]程锴,樊锐,李岩冰.基于DDS技术的多路程控信号源[J].电子测量技术,2004,1:
9~10.
[7]褶振勇,翁木云.FPGA的设计与应用[M].北京:
西安电子科技大学出版社,2002
[8]李伯成.基于MCS-51单片机的