【内容摘要】本文主要研究的是基于at89s51单片机作为系统的主控制芯片的一种dds信号发生器电路设计。此电路主要包括5部分:采用at89s51单片机的相位累加器及波形数据存储器电路部分,数/模转换器电路部分,低通滤波器电路部分, 采用at89s51单片机的频率控制字电路部分和电源电路部分。
本系统采用c语言和汇编语言实现了信号频率和幅度的程控输出,为了便于信号发生器的功能更改和扩展,软件采用模块化结构设计,使程序间的逻辑层次更加简明。
【关键词】直接数字频率合成;数/模转换器;低通滤波器;at89s51单片机
a dds signal generator of low frequency
[abstract]:this paper studies a dds signal generator of low frequency, which bases on the at89s51 single-chip microprocessor as the main control chip in the system. it comprises five parts:at89s51 single-chip uses for phasic adder and wave data memorizer unit, digital signal transforms into analog signal unit,low pass filter unit, at89s51 single-chip uses for frequency data unit and power unit.the functions of frequency and volt of signal by controlling are implemented in c language and assemble language. in order to facilitate the system expansion, the controlling software architecture is designed by adopting modular.
[keywords]:direct digital frequency synthesize; digital/ analog transformer; low pass filter; at89s51 mcu.
1 引 言
目前在科学研究、工程教育及生产实践中,低频信号发生器得到极为广泛应用,如生物医学、机械振动、教学实验、工业过程控制等领域。同时dds也被广泛应用于仪器仪表、通信系统、雷达系统等。
传统信号发生器是由大量的模拟电路单元构成,而且基本都高频范围在工作。如果采用这种方法设计在低频工作范围的信号发生器,其需构建更多的模拟电路单元,而且输出频率大多为机械调整,参数也无法保证,其体积也相应加大,同时开发和使用成本也加大。当前虽然数字式系统已经渗透到低频信号发生器的设计当中,其性能方面也得到了保障,但是数字式系统eda的开发平台价格极为昂贵,而且体积方面问题也没有得到解决。
本文介绍的是一款采用两片at89s51单片机和d/a电阻转换网络的数字式低频dds信号发生器,其性价高,体积小,易操作,频率稳定度高等特点。
2 低频dds信号发生器电路简介及其作用综述
根据直接数字频率合成(ddfs)的工作原理及电路模块的功用,本系统设计将整体电路划分为:相位累加器及ram(或rom)电路模块,数/模转换器电路模块,低通滤波器电路模块,频率控制字电路模块,电源电路模块。以下为各功能模块的的详细介绍:
(1)相位累加器及波形数据存储器电路电路模块。该功能模块是低频dds信号
发生器的核心部分,主要采用一片at89s51单片机作为相位累加器(ddfs的核心)以及存储所需频率信号的量化数据的ram或rom,对要求输出不同频率波形,可以通过频率控制字x为步进对相位增量进行累加,并以相位累加值作为地址,读取ram或rom存储的波形数据,然后送往dac模块。
(2)数/模转换器电路模块(dac)。该功能模块主要将ram或rom存储的波形
数据进行模拟转换。
(3)低通滤波器电路模块(lpf)。该功能模块主要滤除谐波信号,干扰信号,
起到平滑输出波形的作用。
(4)频率控制字电路模块。该功能模块主要采用一片at89s51单片机键盘设定
和数码管显示频率控制字,此外附加数字电位器x9313控制输出波形的幅度。
(5)电源电路模块。该功能模块主要为整个系统提供稳定的+5v。
3 系统硬件设计
系统硬件主要包括:相位累加器及波形数据存储器电路,数/模转换器电路,低通滤波器电路,频率控制字电路,电源电路5个部分。图3-1是系统总体设计方案图。
图3-1 系统总体设计图
3.1 相位累加器及波形数据存储器电路
图3-2 相位累加器及波形数据存储器构建电路
这部分电路根据直接数字频率合成(ddfs)工作原理,构建相位累加器及波
形数据存储器,如图3-2所示。
3.1.1 at89s51的性能特点[3]
(1) 51单片机内部共有256个ram单元,其中后128个单元被专用存储器占用,前128个单元用于存放可读写的数据(即内部ram)。
(2) 51单片机内部共有4kb掩膜rom(程序存储器),用于存放程序和原始数据。
(3) 51单片机的中断功能较强,可以满足控制应用的需要,内部共有5个中断源:2个外中断,2个定时/计数中断, 1个串行中断。同时中断还可以划分2个优先级别。
(4) 为了实现数据的并行输入输出,51单片机共有4个8位并行的双向i/o口(p0、p1、p2、p3),其中p3具有第二功能。
3.1.2 相位累加器及波形数据存储器的实现
相位累加器是ddfs的核心部分,它由一个n位加法器和一个n位相位寄存器构成。随着基准时钟脉冲的出现,相位寄存器以步长(频率控制字)x增加,相位寄存器的累加值作为波形数据存储器(即查找表)的波形数据的查找地址,而波形数据存储器一般用ram或rom构成。从at89s51的性能特点可知,51单片机内部可以为相位累加器及波形数据存储器的构建提供128个单元ram和4kb的掩膜rom。
(1)相位累加器
根据ddfs 的基本原理,相位累加器每经过2n/x个fclk时钟周期后回到初始状态,相应地波形数据存储器也经过一个循环回到初始地址,此时ddfs输出一个完整的正选波形。也就是说,输出的正选波形的周期:
t=(2^32/x)*tclk,公式(一)
频率:
f=(x/2^32)*fclk,公式(二)
其中基准时钟频率fclk。
本文设计的相位累加器采用32 位,并由at89s51单片机在ide(汇编:伟福v3.20)开发环境下实现。由于51单片机的一个机器周期共有12个振荡脉冲周期(机器周期为振荡脉冲的12分频),在本设计中,at89s51采用外部时钟24mhz,亦即振荡脉冲频率为24mhz,此时51单片机的机器周期0.5us,而实现相位累加器的汇编语句(具体见系统软件设计)需要20 个时钟周期,所以相位累加时钟周期为10us,即基准时钟频率fclk为100khz。
据公式(二),当频率控制字x=1 时(即相位累加器的累加步长为1),则系统输出的最低频率为fmin= fclk /2^32=0.00002328hz,可见此时fmin远远小于0hz。通常情况下,当相位累加器位数很高时,最低输出频率远远低于1hz时,可以认为dds 的最低合成频率为零频;在单片机系统时钟允许的情况下,当频率控制字x=2^23 时,系统输出的最高频率fmax=100khz。
(2)波形数据存储器
在ide turbo c开发环境下生成波形数据(正弦波查找表),具体见系统软件设计。
3.2 数/模转换器电路
图3-3 d/a转换器
d/a转换器就是将数字信号转换成模拟信号的电路。数据转换精度和转换速度是衡量d/a转换器的重要指标。
本系统设计采用8位电阻网络d/a转换器,如图3-3所示。鉴于倒t形电阻网络d/a转换器[4]工作原理,本电阻网络d/a转换器省略了模拟开关和运算放大器求和电路,由r-2r呈倒t形的电阻解码网络构成。
3.3 低通滤波器电路及放大电路
图3-4 巴特沃斯二阶低通滤波器
ddfs 合成波形存在高次谐波,同时在硬件电路设计中也会引入干扰信号,在d/a转换器输出信号也相应地存在谐波,防止谐波对输出负载的影响,故在d/a转换器输出信号后,也就是放大器前端,先将高此谐波以及干扰信号滤除,本设计采用巴特沃斯二阶低通滤波器,此外,放大器ne5532的反馈增益由x9313w控制,实现对输出信号的同相比例放大。
3.4 频率控制字电路
图3-5 频率控制字主控电路
3.4.1 at89s5最小系统
at89s5最小系统由51单片机、外接24mhz晶体振荡电路及复位电路组成,小系统为外设提供4个8位i/o驱动和控制接口,如图3-5所示。以下为i/o接口的资源分配:
(1)p0口:通过p0口将产生的频率控制字送给相位累加器单片机,其中外接r8~r15上拉电阻与相位累加器单片机的p1口内部的场效应管共同组成驱动电路。
(2)p1口:由p1.5~p1.7,rst(复位),+5v电源和gnd(地)组成小系统的isp程序下载口,p1.0~p1.4共接5个按键,分别控制频率的增减、当前步进,以及波形输出的幅度增益。
(3)p2口:因为产生频率控制字单片机和相位累加器单片机之间的数据传输采用并行数据传输,同时相位累加器单片机采用外中断接收方式,p2.0为相位累加器单片机提供外中断信号;p2.1~p2.2分别为数码管驱动芯片74hc164的时钟线和数据线;p2.3~p2.7共接5个d1~d5发光二极管作为频率步进指示。
(4)p3口:p3.6和p3.7驱动数字电位器x9313。
3.4.2 按键电路
目前按键大多采用两种按键方式:a/d按键和i/o按键。
a/d按键形式原理是将每个按键与电阻网络中电压不同的节点相连,当不同的按键按下时单片机的i/o读取不同的模拟电压值,也就是通常我们认为的a/d值。每个按键连接点的a/d值都不相同,那么单片机就可以判断区分哪个按键按下。但是此按键方式非常特别,只能与内部自带a/d功能的单片机i/o口相连使用,而at89s51不具有a/d功能的i/o口,所以不采用此按键方式。
i/o按键又称动态按键,或扫描式按键。此按键方式要求单片机必须具有较多的普通i/o接口,本次设计中采用的就是i/o按键。
按键一端接地,另一端与单片机的i/o口相连,当有键按下时,单片机的i/o引脚将被拉低,当单片机检测到信号后就会执行这个对应按键的功能。其中p1.0控制频率按当前频率步进递增,p1.1控制频率按当前频率步进递减,p1.2设定当前频率步进值,p1.3控制x9313,增大波形输出幅度增益,p1.4控制x9313,减小大波形输出幅度增益。
3.4.3 数码管显示电路
在目前的设计中,作为输出显示的方式众多,如液晶屏,点阵屏,数码管等等。鉴于比较直观操作性强,本设计采用数码管扫描显示方式。
显示方式如果采用液晶屏或是点阵屏,将会占用单片机的大部分i/o资源。考虑单片机有限i/o资源的分配,为了减少i/o资源的占用,数码管驱动电路选用74hc164,如图3-6所示。
图3-6 数码管显示电路
74hc164是一款5v供电,2位串行—8位并行转换芯片,通过串行时钟(scl)控制串行数据(sda)输入,qa~qh将数据分配给数码管,实现动态扫描显示实时数据。
图3-7 74hc164真值表
图3-8 74hc164时序图
3.5 电源电路
本系统工作需要5v稳压电源,设计采用lm7805实现,如图3-9所示。图中cpi均用于滤波,此外,cp1和cp4还有储能作用。
图3-9 5v稳压电路
4 系统软件设计
系统软件编程采用c语言和汇编语言实现了相位累加器和波形数据存储器的构建,频率输出和波形幅度增益控制,频率数据显示以及两机通信。为了方便系统管理和功能扩展,本系统软件采用模块化结构设计,使程序间的逻辑层次更加简明。整个程序大部分的编译和调试都在keil uvision3的集成开发环境下来完成。
4.1 相位累加器和波形数据存储器构建
汇编语言程序代码能较精准地确定执行时间,所以相位累加器和波形数据存储器构建,基于51单片机汇编语言,在伟福v3.20汇编开发环境下实现,程序代码如下:
mov a,buff0
add a,x0
mov buff0,a
mov a,buff1
addc a,x1
mov buff1,a
mov a,buff2
addc a,x2
mov buff2,a
mov a,buff3
addc a,x3
mov buff3,a
mov dptr,#tab_sin ;
mov a,buff3
movc a,@a+dptr
mov p0,a
以上代码执行时间为51单片机的20 个时钟周期,亦即相位累加时钟周期为10us,基准时钟频率fclk为100khz。
4.2 波形数据的生成
波形数据[1]运用turbo c 2.0生成,程序如下:
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
void main(void)
{
flaot sinvalue,normalvalue;
int i,dacvalue;
file *fp;
fp=fopen(“sinwaveval.h”,“w”);
for(i=0;i<512;i++)
{
sinvalue=sin(i*3.14/256);
normalvalue=( sinvalue+1)/2;
dacvalue=(int)(normalvalue*255);
if(i%8= =0) fprintf(fp,“\n”);
fprintf(fp,“%d,”, dacvalue);
}
}
4.3频率显示
74hc164通过8位移位寄存器给数码管分配显示数据,以下为移位子程序:
void shift(int t)
{
int ledbuf,i;
ledbuf=led[t];
clk=0;
for(i=0;i<8;i++) {
if(ledbuf&0x80) dat=1;
else dat=0;
clk=1;
clk=0;
ledbuf=ledbuf<<1;
}
}
4.4 波形幅度增益控制
4.4.1 递增控制
当cs=0(硬件已接地),up_down=1,_inc为下降沿时,数字电位器x9313递增波形幅度增益。
void rangeadd_set( ) //幅度加函数
{
_inc=1; _nop_(); _nop_();_nop_();
up_down=1;
_inc=0; _nop_();_nop_();_nop_();
_inc=1; _nop_();_nop_();_nop_();
}
4.4.2 递减控制
当cs=0(硬件已接地),up_down=0,_inc为下降沿时,数字电位器x9313递减波形幅度增益。
void rangedec_set( ) //幅度减函数
{
_inc=1; _nop_(); _nop_();_nop_();
up_down=0;
_inc=0; _nop_();_nop_();_nop_();
_inc=1; _nop_();_nop_();_nop_();
}
4.5 两机通信
产生频率控制字单片机与相位累加器单片机采用并行数据通信方式,相位累加器单片机接收频率控制字采用外中断0接收方式,中断服务程序如下:
int0:
push a
mov p1,#0ffh ;此时p1口作为输入脚(先向p1锁存器写“1”,关闭fet,
;此时p1才能作为输入脚)
mov a,p1 ;读p1口
mov @r0,a
inc r0
inc r7
cjne r7,#04h,rev
mov r0,#x0 ;重新刷新数据暂存区地址
mov r7,#00h ;接收完数据后计数器清零
rev:
pop a
reti
4.6 软件设计总体架构
4.6.1 软件设计方案图
系统软件设计总体架构图,如图4-1所示。
4.6.2 系统主程序
void main(void)
{ f_step_set(); //初始化步进值,1hz
dispose_f_vlaue(); //输出初始化频率值1khz
f_display(output_f_value); //显示初始化频率输出值1khz
while(1) {
if(add_key==0) f_add_set(); //频率递增
if(dec_key==0) f_dec_set(); //频率递减
if(step_key==0) f_step_set(); //频率步进设置
if(rangeadd_key==0) rangeadd_set(); //幅度递增
if(rangedec_key==0) rangedec_set(); //幅度递减 }
}
图4-1 软件设计总体架构图
5 系统安装调试及结果
5.1 系统安装调试
系统调试主要分三部分:电路焊接,软件调试及程序下载,外观包装。
5.1.1 电路焊接
完成pcb板的制作后,在电路板上安装元件,并焊接。由于pcb板布线过细,在制作过程中出现断线多处现象,而且本系统也有部分元件采用贴片封装,焊接也有相应的难度。经过将近一周的电路焊接,系统电路焊接基本完成。很大程度上焊接工作是否到位,将影响后续的软件调试工作。
5.1.2 程序下载及程序下载
软件编程采用c语言和汇编语言设计,c语言在keil uvision3开发环境和turb c开发环境下完成设计和编译,而汇编语言在伟福v3.20汇编开发环境下完成设计和编译。
在系统板以及各功能模块连接好后,将从pc机并口接上isp下载线,给系统上电,并对系统板进行程序下载测试,51单片机支持isp在线编程。
5.1.3 外观包装
采用数控雕刻机刻制外壳和面板说明字样。
5.2 系统调试结果
5.2.1 调试所用工具
表5-1 仪器设备使用说明
仪器设备名称 仪器设备型号
示波器 tds2012型
万用表 dt9205a型
信号发生器 sp f40型
稳压电源 hh1733b2型
5.2.2 记录测试数据
本文按照课题设计要求,对各项指标进行测试,并将结果记录于表5-2和表5-3。
表5-2输出波形频率测试
频率预置值(hz) 输出正弦波信号频率(hz)
f1 f2 f3
1 0.9 0.9 1.0
10 10.1 10.0 9.9
100 100.0 99.9 100.0
1000 1000.0 1000.0 1000.0
5000 5000.0 5000.5 5000.1
10000 10000.0 9999.5 9999.9
20000 19999.6 19999.9 20000.2
表5-3设计指标
设计指标 理论输出值 实际输出值
输出带宽值(hz) 20000.0 20000.0
频率分辨率(hz) 1 1
6 总结
据调试和所测量数据,本系统采用at89s51单片机作为主控核心,按照设计要求,完成了低频dds信号发生器的设计。低频dds信号发生器输出频率和幅度增益均为程控,容易操作,为一款性价较高的低频dds 信号发生器,设计简单,容易实现,适合于要求不同的电子技术应用领域。
8 注释
[1] 黄任.avr单片机与cpld/fpga 的应用入门[j].北京:北京航空航天大学出
版社,2004.第172页.
9 参考文献
[1] 许慧波,张厥盛.dds-直接数字式频率合成器综述[j].西安:西安电子科技大
学出版社,1989.
[2] 高泽溪,高成.直接数字频率合成器dds 及其性能分析[j].北京:北京航空
航天大学学报,1998.
[3] 李广弟,朱月秀,王秀山.单片机基础-2版(修订本)[j].北京:北京航空航
天大学出版社,2001.第13页.
[4] 康华光,邹寿彬. 电子技术基础-数字部分(第四版)[j].北京:高等教育出
版社,2000.第389页.
[5] [日]森 荣二 著,薛培鼎 译. lc滤波器设计与制作[j].北京:科学出版社,
2006.