350 likes | 454 Views
综合课程设计课题. —— DDS 直接数字合成信号源. Yj.xu@263.net. 技术指标要求. 产生信号类型: 正弦波、方波、三角波。 输出信号频率范围: 1 Hz~20KHz 步进1 Hz 频率偏移小于5% 输出信号幅度范围: 0.1 V~5V, 步进0.1 V, 幅度误差小于10%。. 工作要求. 硬件部分 要求用 MCU 和 FPGA 来实现 软件部分 FPGA 要求用原理图或 VHDL 设计实现 MCU 要求用 C51 实现。 设计时要充分考虑系统的可兼容性及可扩展性。. DDS 系统概述.
E N D
综合课程设计课题 ——DDS直接数字合成信号源
技术指标要求 • 产生信号类型: 正弦波、方波、三角波。 • 输出信号频率范围: 1Hz~20KHz步进1Hz频率偏移小于5% • 输出信号幅度范围: 0.1V~5V,步进0.1V,幅度误差小于10%。
工作要求 • 硬件部分 要求用MCU和FPGA来实现 • 软件部分FPGA要求用原理图或VHDL设计实现MCU要求用C51实现。 • 设计时要充分考虑系统的可兼容性及可扩展性。
DDS系统概述 DDS技术一般都是以数字控制振荡器NCO(Numerically Controlled Oscillator)为核心,来产生频率可调的sin正弦波的波形的数字量表示的幅值。这些数字量表示的波形幅值再通过一个DAC(Digital-Analog Converter),得到正弦波的模拟量波形。它是在时域中进行频率合成,从而能够对输出频率进行快速而且精确的控制,并且这种控制全部都是数字控制,因此可以提供非常高的频率精度。
DDS工作原理 奈奎斯特抽样定理: 任意一个频率带宽为F的连续信号f(t),d都可以用一系列离散取样值f(t), f(t+T), f(t+2T)….. f(t+nT)来表示。 只要取样点的时间间隔T小于1/2F,表示就是完整的,包含了连续信号f(t)的全部信息
相位取样地址 离散相位的幅度序列 ROM 量化的正弦波幅值 DDS工作原理 d c b a
DDS工作原理 对于一个连续的正弦波信号,其角频率ω可以用相位斜率Δφ/Δt表示。当角频率ω为定值时,其相位斜率Δφ/Δt也是一个确定值。此时,正弦波信号的相位与时间成线性关系,即φ=t
DDS工作原理 参考时钟 相位 累加器 LUT 或幅度 转换算法 DAC 平滑 调整字 设定输出频率 … 累加相位值查找表地址 输出波形幅值
相位累加器 在标准频率参考源地控制下(频率控制字K决定了相应的相位增量),相位累加器则不断地对该相位增量进行线性累加,当相位累加器积满量时就会产生一次溢出,从而完成一个周期性的动作,这个动作周期即是DDS合成信号的一个频率周期。 N位加法器 N位相位寄存器 频率控制字 输出序列
参数选择原理 DDS技术在本质上,是实现了一个数字分频器的功能,它的频率精度是由相位累加器或者是频率控制字M的比特数决定的,即输入的参考频率除以2M就决定了DDS所能够实现的频率精度。输出信号波形的频率及频率分辨率可以表示如下: fout=Mfc/2N fmin=fc/2N fout为输出信号频率; fmin为输出信号分辨率;M为频率控制字;N为相位累加器字长;fc为标准参考频率源工作频率
结论 • DDS输出信号的频率主要取决于频率控制字M • 相位累加器字长N决定DDS的频率分辨率 • 当M增大时,fout可以不断地提高,但根据采样定理,最高输出频率不得大于fc/2 • 工作输出频率达40%fc时,输出波形的相位抖动就很大 • 实际工作时输出频率小于fc/3较为合适。
设计方案一 采用专用波形发生器ICL8038和数字电位器 ICL8038是一种单片多种信号发生器,它内部的自激振荡器发生方波和三角波,波形变换电路把三角波转换成正弦波,改变振荡器的占空比,从而把方波转变为脉冲波,三角波转变为锯齿波。其中测频电路测出ICL8038的输出频率,控制数字电位器,从而改变ICL8038的参考电压,控制输出频率值直到与输入频率相等。此方案采用了专用波形发生电路,三角波的非线性度不大于0.1%,正弦波的失真度小于1%,工作频率可为0.001Hz~300KHz,可以满足频率范围的要求,但是步长1Hz要求要求数字电位器有足够的抽头,而且不能编辑生成三种波形的线性组合。故不适宜采用此种方案。
设计方案二 采用传统的直接频率合成技术 这种方案能实现快速频率变换,具有低相位噪声以及所有方案中最高的工作频率。但由于采用大量的倍分频、混频和滤波环节,导致其结构复杂、体积庞大、成本高,且容易产生过多的杂散分量。故此方案也不适于在本次设计中采用。
设计方案三 用单片机实现的DDFS直接数字频率合成 利用单片机实现逻辑控制和累加器,用存储器存储波形的量化数据,单片机按照不同频率要求以频率控制字的步进对相位增量进行累加,以累加值作为地址码去读取存储器相应地址单元里的量化数据,经D/A转换和幅值控制,再通过低通滤波器可得所需波形。此方案系统简单,但受单片机运算速度的影响,频率无法做高,同时易受干扰
设计方案四 用FPGA实现的DDFS直接数字频率合成 利用可编程逻辑器件FPGA实现复杂的逻辑控制,用存储器存储波形的量化数据,FPGA按照不同频率要求以频率控制字的步进对相位增量进行累加,以累加值作为地址码去读取存储器相应地址单元里的量化数据,经D/A转换和幅值控制,再通过低通滤波器可得所需波形。
键盘控制单元 由于系统要求功能较多,若不加处理的利用单片机P1口扩展键盘,则很有可能出现键盘满足不了显示要求的情况,因此必须有效的利用键盘。而且实验板本身在其设计中,当RAM及D/A被使用时,K0~KF键盘均被禁用,所以设计中,我们采用了实验底板上一个已经与单片机的P1口相连的4×4的小键盘,通过输入的数字长度、范围和确认键来区别发送的信息。同时利用延时来解决键盘消抖动问题。
数码显示单元 采用了五个共阴极数码管作为显示单元。因为当RAM和D/A被使用时,所有LED灯均被禁用。由于实验底板上已用三片GAL22V10D完成了所有数码管的译码功能,所以设计中不需要对数码管另行做译码的工作。而当RAM被使用时,显示方式为4位2进制数控制显示数据、3位2进制数控制显示位数的扫描显示。采用高速时钟进行扫描显示
波形存储单元 采用实验箱自带的随机存储器RAM62256来存储正弦波形数据,它的存储空间是32K。可以采用全波存储、半波存储或1/4波存储。 采用半波存储时存储从最低点幅值数据’00’开始到最高点幅值数据’FF’的半个周期的波形数据,在读取数据时,顺序读完这半个周期后继续反相读取下个半周的数据值,这样合起来就是一整个周期的波形
D/A及外围电路 TLC7528是双路、8位分辨率的数字-模拟转换器。该D/A转换器工作频率较高,在5V电源下工作时其建立时间只有100nS,传输延时时间是80nS,完全可以满足本次设计的要求,其控制信号主要包括:片选CS,低电平有效;D/A选择端DACA/DACB,低电平位DACA,高电平位DACB;数据写入使能WR,低电平有效。通道A作为整个波形的输出,通道B的输出作为A通道的基准电平,这样可以实现输出波形幅度的数字控制。在实际电路连接时,将7528的20脚OUTB与4脚VREF A相连,VREFB接+5V,这样就可以实现所需要的功能了。
系统总线 在实验箱上是单片机的P0口和P2口与FPGA、D/A及RAM均连接在一起,必须采取措施防止在系统运行时出现的总线冲突。。可采用P3.0口对总线进行控制,P3.1口选择D/A的通道。
相位累加器参数设定 相位累加器的位数定为20位。输入频率采用实验板上标准晶振,频率为11.0592MHz,根据任务书上最小频率分辨率为1Hz的要求,则 11.0592MHz/(div*2N)=1Hz 其中div为将11.0592MHz的时钟分频的数值,N为相位累加器的位数。当div=12,N=20时 11.0592MHz/(div*2N)=0.8789Hz 用相位累加器的高15位作为RAM的地址线
FPGA部分原理框图 系统时钟 相位分频器 显示分频器 总线仲裁器 单 片 机 接 口 RAM地址 累加值 相位累加器 单 片 机 显示值 动态显示 RAM数据 控制电路 RAM,D/A控制信号
分频模块 将输入的时钟频率进行分频,根据系统方案中的计算,实验板上的clk1设定为11.06MHz,将其进行12分频得到相位累加器的时钟phaseclk,频率为921.6KHz;将11.06MHz的时钟500分频得到数码管扫描时钟display。
锁存单片机低位地址模块 将单片机写操作时的低位地址进行锁存。在单片机中的p0口是地址数据复用口,在读写操作时需要有一个8位的地址锁存器根据ALE信号进行锁存操作,当mcu_ale为的下降沿时将port0引脚的数据送到寄存器low_address
单片机写FPGA内寄存器模块 8051系列单片机的寻址范围是216,因此根据系统方案中地址的分配,把波形参数以及显示数据写入FPGA内各个寄存器。mcu_wr触发该进程,当mcu_wr为下降沿时,如果port2_7和bus_ctrl都为'1',根据low_address的低3位地址进行写入操作,也就是地址为'8000h'时,port0引脚上的数据给m0寄存器,m0存储显示数据的高位,以此类推'8007h'时port0引脚上的数据给m7。
相位累加器模块 这是整个dds系统的核心,由phaseclk或者bus_ctrl触发。触发后,如果bus_ctrl为'1',phase_add赋值'0',否则在phaseclk的上升沿,进行phase_add=phase_add+dphase的加法操作
数码管扫描显示模块 由segclk触发,在segclk的上升沿,信号ssegport进行累加操作,当达到'100'时就赋值'000'。segport的输出值就是ssegport,这样在segclk的上升沿segport轮流扫描5个数码管。同时根据ssegport的值将m0到m4中的值分别送到segnum引脚上。
其他信号处理 port1引脚始终置为高阻态,确保单片机p1口上的键盘电路不受影响。 port0引脚在改变DA的B通道的值,即输入引脚mcu_sel_da='1'时,输出m7,即经过换算的幅度值数据;其他时候始终置为高阻态。 ram_rd信号在总线控制权由FPGA掌握而且DA的通道为A,即bus_ctrl='0'和mcu_sel_da='0'时,输出'0',即ram保持在读状态;其他时候始终与单片机的rd信号相连,即输出mcu_rd的值。
其他信号处理 ram_wr信号在总线控制权由FPGA掌握,即bus_ctrl=‘0’时,输出‘1’,即ram写禁止;其他时候始终与单片机的rd信号相连, DA_sel信号一直输出mcu_sel_da的值,mcu_sel_da与单片机的p3.1口控制,'0'代表选择A通道。
初始化正弦波 • 直接用单片机计算32768个点的正弦幅度值,涉及的多次浮点运算,初始化时间很长。 • DA是8位的,所以每个幅度值也是8位的,共有256个不同的幅度值 • ram中存储的是余弦函数从π到2π的幅度值 • 将每个幅度值的个数记下。根据余弦函数的对称性,幅度为255的点的个数和幅度为0的点的个数是相同的,因此将幅度0到127的点的个数分别存储到一个step[128]的数组中,这个数组位于程序存储器中。初始化余弦函数的波形的时候就可以直接根据step[128]向ram中写数据
键盘定义 合法的键盘输入只有5种: • 5个数字键加’A’键,用来设定频率。当设定频率超过20000Hz,认为无效,不改变原先的频率。 • 2个数字键加’B’键,用来设定信号幅度。当设定幅度超过5V,认为无效,不改变原先的幅度。 • 1个数字键加’C’键,用来设定输出信号类型。0、1、2分别指正弦波、三角波、方波。其他数字无效 • 1个数字键加’D’键,用来设定方波的占空比。 • 任何时候输入’E’键,都表示清除前面的所有输入,回到原来的状态。