直接数字频率合成
ad9851的原理
ad9851可以产生一个频谱纯净、频率和相位都可编程控制且稳定性很好的模拟正弦波,这个正弦波能够直接作为基准信号源,或通过其内部高速比较器转换成标准方波输出,作为灵敏时钟发生器来使用。
ad9851的各引脚功能如下,引脚排列,如图5:
d0~d7:8位数据输入口,可给内部寄存器装入40位控制数据。
pgnd:6倍参考时钟倍乘器地。
pvcc:6倍参考时钟倍乘器电源。
w-clk:字装入信号,上升沿有效。
fq-ud:频率更新控制信号,时钟上升沿确认输入数据有效。
frefclock:外部参考时钟输入。
cmos/ttl脉冲序列可直接或间接地加到6倍参考时钟倍乘器上。在直接方式中,输入频率即是系统时钟;在6倍参考时钟倍乘器方式,系统时钟为倍乘器输出。
agnd:模拟地。
avdd:模拟电源(+5V)。
dgnd:数字地。 图5
dvdd:数字电源(+5V)。
rset、dac:外部复位连接端。
voutn:内部比较器负向输出端。
voutp:内部比较器正向输出端。
vinn:内部比较器的负向输入端。
vinp:内部比较器的正向输入端。
dacbp:dac旁路连接端。
ioutb:“互补”dac输出。
iout:内部dac输出端。
reset:复位端。低电平清除dds累加器和相位延迟器为0hz和0 相位,同时置数据输入为串行模式以及禁止6倍参考时钟倍乘器工作。
ad9851在信号源中的应用
为了能够完成调频、调幅、调相的各种功能,要向ad9851输入频率/相位控制字,这是通过ad9851和微处理器相连接来实现。可以和ad9851的数据线直接相连接的单片机类型很多,本文中选用的是atmel公司生产的单片机at89s51,如图6所示,为at89s51和ad9851的硬件串行接口框图。当然也可以选用at89s52、mcs51、ad9851、ad9850等。
ad9851在本系统的应用电路
由于ad9851是贴片式的体积非常小,引脚排列比较密,焊接时必须小心,还要防静电,焊接不好就很容易把芯片给烧坏。还有在使用中数据线、电源等接反或接错都很容易损坏芯片。所以在ad9851外围采用了电源、输入、输出、数据线的保护电路。为了不受外界干扰,添加了不少的滤波电路,显得整个电路完美。
图6
低通滤波器(lpf)
为了使输出的频率不受高频斜波的干扰,所以选用了两级的π型lc低通滤波器,其动态范围宽0~83mhz,增益高83mhz时刚衰减1.4db,波形图如图8。输入、输出阻抗为50Ω。原理图如图7。
图7
图8
锁相环频率合成
由于dds的准确度决定于它的基准信号,所以采用准确度、稳定度比较高的锁相环频率合成为dds芯片提供基准信号。mc145151是motorola公司生产的大规模集成电路,它是一块采用半行码输入方式置定、由14根并行输入数据编程的双模cmos-lsi锁相环频率合成器,其内部组成框图如图9。
图9
ra0、ra1、ra2(5、6、7端):参考分频地址码输入端。14×8rom参考(基准)译码器通过地址码的控制对14位÷r分频器进行编程,使得r分频比有8种选择。本电路中选用的是第二种分频比128,分频模式为:ra0 1,ra1 0,ra2 0。地址码与分频的关系如表1:
表1
锁相环频率合成mc145151在本电路中的应用
为了使锁相环频率合成能够锁定在30mhz,本电路(图10)的基准选用12.8mhz的高精度、高稳定度的温度补偿晶体振荡器,分频比为128,所以根据公式,它的步进为100khz。它的n应该为300,化为二进制为100101100。把n送到mc145151就能准确的把频率锁定在30mhz 的稳定频率。
图10
压控振荡器(vco)
本电路(图11)选用了电容三点式分立元件的压控振荡器(vco),它与mc145151芯片构成锁相环,为了使ad9851能够经6倍频后输出最高频率,vco必须控制在30mhz。
图11
缓冲放大器
由于压控振荡器(vco)起振产生的频率的电压幅度远达不到dds的基准5v所要的要求。为了使压控振荡产生的频率更加稳定,所以先加了一级电流缓冲,后再放大,正好满足dds的基准的要求。详细电路如下图12:
图12
单片机控制的整体电路
本系统的微处理控制器选用的是at89s51,它是美国atmel公司生产新一代的51芯片,atmel公司对89s51/2在工艺上进行了改进,采用0.35新工艺,成本降低,而且将功能提升,增加了竞争力。89cxx与89sxx可以兼容。更重要的是at89sxx支持在线编程,非常方便。
存储芯片采用i2c总线标准的是容量是2k的普通外部存储芯片24c02,它也是美国atmel公司的低功耗cmos串行eeprom,它是内含256×8位存储空间,具有工作电压宽(2.5~5.5v)、擦写次数多(大于10000次)、写入速度快(小于10ms)等特点。
系统中的 dm-162带有背光的液晶模块,它是字符型液晶模块,是5x7点阵图形显示字符的液晶显示器,它显示的容量为2行16个字,具有简单而功能较强的指令集,可实现字符移动/闪烁等功能。与mcu的传输可采用8位并行传输或4位并行传输两种方式。其微功耗、体积小、显示内容丰富、超薄轻巧的诸多优点,在仪表、仪器和低功耗应用系统中得到越来越广泛的应用。整体电路如图案13。
图13
功率放大
根据设计要求,选择能够满足功率增益10db,输出1w,频率领域1m~50mhz条件的晶体管。在此,使用2scl970。输入电路可以将阻抗做50Ω---12.5Ω之变换。频带为1mhz~50mhz之宽带,因此,使用变压器l1做为阻抗变换。t2直接使用了rfc(高频扼流圈),使其在1mhz~50mhz时的阻抗值比50Ω大。详细电路如图14。
图14
本系统的软件设计
本系统在显示平台上采用了2行16个字的显示界面,操作平台上是3x4的键盘,所以在软件设计上采用了菜单的形式进行显示。使得整个平台更加美观、简洁操作起来方便、易懂更能显示出电子科技现代化的味道。整体的大概程序流程图如下:
(1)dds(ad9851)启动和数据传送
ad9851时序图:
时间规格表:
;**********************************************************
根据上面的时序图,ad9851启动、送数的子程序如下:
;初始化dds
;dds启动、设置
;**************************************************************
;初始化dds
;================================================
;------------------------------------------------
setup_ad9851:
clr w_clk ;初始化信号脚
clr fq_ud
setb w_clk ;设置为串行输入
clr w_clk
setb fq_ud
clr fq_ud
ret
;-------------------------------------------------
;=================================================
;发送数据到dds
;=================================================
;-------------------------------------------------
w_ad9851: clr fq_ud
mov a,r0
lcall send_pllrdata
mov a,r1
lcall send_pllrdata
mov a,r2
lcall send_pllrdata
mov a,r3
lcall send_pllrdata
mov a,#001b ;000b关倍频,001b是开倍频
lcall send_pllrdata
setb fq_ud
clr fq_ud
ret
;--------------------------------------------------
;==================================================
;==================================================
;--------------------------------------------------
send_pllrdata:
mov c,acc.0
mov data7,c
setb w_clk
clr w_clk
mov c,acc.1
mov data7,c
setb w_clk
clr w_clk
mov c,acc.2
mov data7,c
setb w_clk
clr w_clk
mov c,acc.3
mov data7,c
setb w_clk
clr w_clk
mov c,acc.4
mov data7,c
setb w_clk
clr w_clk
mov c,acc.5
mov data7,c
setb w_clk
clr w_clk
mov c,acc.6
mov data7,c
setb w_clk
clr w_clk
mov c,acc.7
mov data7,c
setb w_clk
clr w_clk
ret
;-------------------------------------
;=====================================
;**********************************************************
(2)lcd与单片机连接
dm-162采用标准的14脚接口,其中vss为地电源,vdd接5v正电源,v0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10k的电位器调整对比度。rs为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。rw为读写信号线,高电平时进行读操作,低电平时进行写操作。当rs和rw共同为低电平时可以写入指令或者显示地址,当rs为低电平rw为高电平时可以读忙信号,当rs为高电平rw为低电平时可以写入数据。e端为使能端,当e端由高电平跳变成低电平时,液晶模块执行命令。d0~d7为8位双向数据线。
dm-162液晶模块内部的字符发生存储器(cgrom)已经存储了160个不同的点阵字符图形,如表1所示,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“a”的代码是01000001b(41h),显示时模块把地址41h中的点阵字符图形显示出来,我们就能看到字母“a”
dm-162液晶模块内部的控制器共有11条控制指令,如表2所示,它的读写操作、屏幕和光标的操作都是通过指令编程来实现的。(说明:1为高电平、0为低电平) 指令1:清显示,指令码01h,光标复位到地址00h位置 指令2:光标复位,光标返回到地址00h 指令3:光标和显示模式设置 i/d:光标移动方向,高电平右移,低电平左移 s:屏幕上所有文字是否左移或者右移。高电平表示有效,低电平则无效 指令4:显示开关控制。 d:控制整体显示的开与关,高电平表示开显示,低电平表示关显示 c:控制光标的开与关,高电平表示有光标,低电平表示无光标 b:控制光标是否闪烁,高电平闪烁,低电平不闪烁 指令5:光标或显示移位 s/c:高电平时移动显示的文字,低电平时移动光标 指令6:功能设置命令 dl:高电平时为4位总线,低电平时为8位总线 n:低电平时为单行显示,高电平时双行显示 f: 低电平时显示5x7的点6:功能设置命令 dl:高电平时为4位总线,低电平时为8位总线 n:低电平时为单行显示,高电平时双行显示 f: 低电平时显示5x7的点阵字符,高电平时显示5x10的点阵字符
表2
指令7:字符发生器ram地址设置 指令8:ddram地址设置 指令9:读忙信号和光标地址 bf:为忙标志位,高电平表示忙,此时模块不能接收命令或者数据,如果为低电平表示不忙。 指令10:写数据 指令11:读数据
dm-162液晶显示模块可以和单片机at89c51直接接口,电路如图15所示。
图15
液晶显示模块是一个慢显示器件,所以在执行每条指令之前一定要确认模块的忙标志为低电平,表示不忙,否则此指令失效。要显示字符时要先输入显示字符地址,也就是告诉模块在哪里显示字符,表3是dm-162的内部显示地址.
表3
比如第二行第一个字符的地址是40h,那么是否直接写入40h就可以将光标定位在第二行第一个字符的位置呢?这样不行,因为写入显示地址时要求最高位d7恒定为高电平1所以实际写入的数据应该是01000000b(40h)+10000000b(80h)=11000000b(c0h)
以下程序显示“s”
start:
acall lcdstart
mov a,#01h;清屏
lcall wrtc
mov a,#'s' ;'s'
lcall wrts
ajmp $
;**********************************************************
;lcd子程序
;**********************************************************
;==============================================
lcdstart:
mov a,#101000b;4位总线
lcall wrtc
mov a,#10b
lcall wrtc
mov a,#01h;清屏
lcall wrtc
mov a,#1111b;显示开,光标开,闪烁开
lcall wrtc
mov a,#110b;光标自动右移,显示文字不动
lcall wrtc
mov a,#10000000b;设置显示地址00h
lcall wrtc
;mov a,#11000000b;设置显示地址00h
;lcall wrtc
ret
;==================
readbusy:
setb db7
clr rs
setb rw
wait: setb e
mov c,db7
jc wait
ret
;==================
wrtc: ;送指令
lcall readbusy
clr rs
clr rw
setb e
mov c,acc.7
mov db7,c
mov c,acc.6
mov db6,c
mov c,acc.5
mov db5,c
mov c,acc.4
mov db4,c
clr e
setb e
mov c,acc.3
mov db7,c
mov c,acc.2
mov db6,c
mov c,acc.1
mov db5,c
mov c,acc.0
mov db4,c
clr e
ret
;===================
wrts: ;送数据
lcall readbusy
setb rs
clr rw
setb e
mov c,acc.7
mov db7,c
mov c,acc.6
mov db6,c
mov c,acc.5
mov db5,c
mov c,acc.4
mov db4,c
clr e
setb e
mov c,acc.3
mov db7,c
mov c,acc.2
mov db6,c
mov c,acc.1
mov db5,c
mov c,acc.0
mov db4,c
clr e
ret
;====================
图纸和本资料见附件