综合测试仪.docx
- 文档编号:7727344
- 上传时间:2023-01-26
- 格式:DOCX
- 页数:21
- 大小:278.17KB
综合测试仪.docx
《综合测试仪.docx》由会员分享,可在线阅读,更多相关《综合测试仪.docx(21页珍藏版)》请在冰豆网上搜索。
综合测试仪
综合测试仪
毛伟张良周旭
摘要:
本次设计是由以数字频率直接合成芯片AD9851为核心的电平发生器和采用真有效值转换集成电路AD637的电平测量仪两部分组成的综合测试仪器。
电平发生器合成的正弦信号带宽可达0.2Hz~30MHz,分辨率为0.2Hz,幅值可数控调节。
电平测量仪通过真有效值变换测量交流信号的有效值,测量精确度达0.02V。
本测试仪还具有幅频特性测试和数据采集存储回放的功能。
关键词:
频率合成,真有效值转换,程控增益,高精度
一、系统方案
根据题目要求,本次设计可分为电压表部分和正弦波发生部分,因此我们可以分开来做。
1、方案的选择与比较
(1)电压表
方案一:
通过高速A/D转换器对被测交流信号直接采样,再通过数据处理得到信号的电平值。
方案二:
通过峰峰值检波,由高速的AD采样,再由单片机读取计算得出结果。
方案三:
先采用真有效值/直流转换器将被测的交流信号电压转换为与其有效值相等的直流电压,然后通过A/D转换器对该电压进行采样,即可得到被测交流信号的电平值。
比较:
方案一对直接采样的AD芯片要求很高,要想达到对1MHz的采样,每周期采样64个点,采样速率必须达到64MHz,对芯片要求苛刻;方案二存在较大的误差;方案三适合各种形状的波形,且相对误差较小。
经比较,选择方案三。
(2)电平发生器
方案一:
采用分立元件,利用锁相环产生频率可控的时钟信号驱动地址计数器读取EPROM钟的波形数据,然后经D/A转换器转化为模拟信号输出。
图1-1采用锁相环的系统框图
方案二:
采用模拟乘法器14527进行数控分频,产生的寻址信号
EPROM中存储的波形数据。
方案三:
采用专用的直接数字频率合成集成电路AD9851直接合成号。
比较:
方案一系统较复杂,且输出高频信号比较困难,如要求输出1MHz信号,如果存储的波形数据为每周期64个点,则要求驱动地址计数器的锁相环输出信号频率达到64MHz,同样D/A转换器的转换速率也要达到64MHz,而普通的锁相环和D/A转换器都难以达到这样的要求;方案二精度高,但很难产生1MHz以上的信号。
方案三频率转换快,一般在纳秒级;分辨率高,一般在1Hz的数量级上或者更高;合成频率范围广,一般为0——70MHz。
经比较,选择方案三。
2、理论分析及整体实现
1.电平发生器
电平发生器以直接数字频率合成器AD9851作为核心,该芯片由32位相位累加器、正弦函数功能查找表、D/A变换器以及低通滤波器集成到。
这种高速DDS芯片时钟内部最高工作频率可达180MHz,最大输出频率可达70MHz,最大分辨率为0.04Hz。
由于内部集成了时钟6倍频器和一个高速比较器,要达到180MHz的参考频率仅需一个30MHz晶振,减小了高频辐射,提高了系统的电磁兼容能力。
图2-1电平发生器结构框图
(1)合成频率值的控制:
本设计中参考频率选用20MHz有源晶振,则经AD9851内部倍频器6倍频后的系统时钟为120MHz,由频率直接合成公式:
因此在20MHz晶振产生的参考频率下的最大分辨率可达0.03Hz。
AD9851内部有5个输入寄存器,储存来自外部数据总线的32位频率控制字,单片机通过对32位控制字的赋值则可精确控制最终合成的信号频率。
最终合成信号的频率为:
由于DDS的最大输出频率受奈奎斯特抽样定理限制,所以:
,本设计的
。
AD9851集成的正弦函数表位数N值为32,其中
为单片机所输入到AD9851的二进制32位频率控制字。
(2)合成幅值的控制:
将DDS输出的交流信号输入VCA810中,通过单片机对vca810的程控可实现六个步进的控制。
后级幅值控制电路是固定增益的线性放大电路,此放大电路采用宽频带运算放大器AD637减小幅频响应引起的非线性误差。
前级数控衰减和后级固定增益放大的设计使得电路可对信号幅值进行大范围地数控调节,达到了题目所要求的电平可控的要求。
2、电平表
电平振荡器主要由进行真有效值变换的AD637部分和对直流电压信号采样的max197部分构成。
max197采集来的数据经单片机处理计算得输入交流信号的真有效值。
图2-2电压表流程图
3、电路设计
(1)程控放大器模块
如图3-1所示:
题中要求电压测量显示范围为0.001-9.99V,有效值转换模块要求输入电压范围为0.7-7V,因而需要进行量程转换。
根据被测信号的大小把量程分为10V、1V和0.1V三档,相应放大倍数为1倍、10倍和100倍。
图3-1程控放大
(2)真有效值转换模块
图3-2真有效值转换
如图3-2:
题目要求有效值测量误差小于0.3dB,选用专用真有效值测量芯片AD637,其内部由硬件实现高精度的真有效值算法。
当输入电压100mV时,带宽标称值600KHz;输入电压为2V时,带宽标称值8MHz。
经实际测量,其在输入信号为2MHz以下、有效值为0.7~7V范围内能保证测量误差
。
当被测信号的有效值远小于1V时,会出现较大的测量误差,所以当被测信号幅值较小时,须在前级对被测信号进行放大,以保证测量精度。
(3)电平振荡器设计
图3-4电平发生器
如图3-4电平振荡器要求输出频率范围为20Hz~1MHz,为了简化电路的设计,选用了直接频率合成芯片AD9851,它内部包含高速、高性能D/A转换器和高速比较器,以及6倍参考时钟倍乘器,可作为全数字编程控制的频率合成器和时钟发生器。
外接精密时钟源时,AD9851可以产生一个频谱纯净、频率和相位都可以编程控制且稳定性很好的模拟正弦波。
AD9851的最高工作频率为180MHz,最高输出频率为系统时钟的一半,四十位控制字(其中5位为相位控制,32位为频率控制)输入控制输出信号的相位频率,输出频率的计算公式为
fout=(PhaseXSystemClock)/
通过计算,在外部时钟源为30M时,使用该芯片系统时钟6倍频的功能使系统时钟达到180M,输出信号的最高频率可以达到70M,完全可以满足1MHz输出频率的要求,且步进精度高于1Hz。
(4)总体电路图:
电压表:
图3-5电压表总体电路图
2,信号发生器:
图3-6信号发生器总电路
4、程序设计
1电压表程序流程图
图4-1电压表流程图
2电平发生器流程图
图4-2电平发生器程序流程图
附件:
程序:
#include
#include
#include
#defineLCD_CWXBYTE[0xFB00]
#defineLCD_DWXBYTE[0xFB01]
#defineLCD_CRXBYTE[0xFB02]
#defineKEY_HXBYTE[0xFC00]
#defineKEY_LXBYTE[0xFE00]
#defineCS0XBYTE[0x8000]//cs0
#definecs5XBYTE[0xD000]//cs5
#defineucharunsignedchar
#defineuintunsignedint
#defineWHILE_BUSYwhile(LCD_CR&0x80)
doublefrequency;
unsignedlongfreq;
doublea,data_ad,dy;
uintm,DaDate,vol=0,da=0;
ucharw0,w1,w2,w3,w4,d,date_h,date_l;
sbitCS=P1^0;//输出片选信号
sbitCLK=P1^1;//输出时钟
sbitSDI=P1^2;//输出数据
sbitLD=P1^3;//输出数/模转换过程启动信号
sbits0=P1^4;
sbits1=P1^5;
sbitga=P1^6;
sbithben=P1^7;
voidnint_LCD()
{
LCD_CW=0x0c;
WHILE_BUSY;
LCD_CW=0x38;
}
voidprint(uchar*str,ucharaddr)
{
WHILE_BUSY;
LCD_CW=0x80|addr;
while(*str!
='\0')
{
WHILE_BUSY;
LCD_DW=*str;
str++;
}
}
voiddis_LCD(uchardate,ucharaddr)
{
WHILE_BUSY;
LCD_CW=0x80|addr;
WHILE_BUSY;
LCD_DW=date;
}
voiddelay(uintz)
{
uintx,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
voidinit_da(void)//7611初始化
{
LD=0;
CS=1;
CLK=1;
SDI=0;
}
voidclock(void)//时钟脉冲子函数
{
CLK=0;
_nop_();
CLK=1;
_nop_();
}
voidDAC_7611(unsignedintvol)//7611转换
{
uinti;
DaDate=vol;
LD=1;
_nop_();
CS=0;
for(i=0;i<12;i++)
{
SDI=DaDate&0x800;
clock();
DaDate<<=1;
}
CLK=1;
_nop_();
CS=1;
_nop_();
LD=0;
_nop_();
_nop_();
_nop_();
_nop_();
LD=1;
}
voidkeyscan()
{
KEY_H=0xfe;
if(KEY_L==0xfe)
{
delay(200);
if(KEY_L==0xfe);
frequency=frequency+10;
}
if(KEY_L==0xfd)
{
delay(200);
if(KEY_L==0xfd);
frequency=frequency-10;
}
KEY_H=0xfd;
if(KEY_L==0xfe)
{
delay(200);
if(KEY_L==0xfe);
frequency=frequency+100;
}
if(KEY_L==0xfd)
{
delay(200);
if(KEY_L==0xfd);
frequency=frequency-100;
}
KEY_H=0xfb;
if(KEY_L==0xfe)
{
delay(200);
if(KEY_L==0xfe);
frequency=frequency+1000;
}
if(KEY_L==0xfd)
{
delay(200);
if(KEY_L==0xfd);
frequency=frequency-1000;
}
KEY_H=0xf7;
if(KEY_L==0xfe)
{
delay(200);
if(KEY_L==0xfe);
frequency=frequency+10000;
}
if(KEY_L==0xfd)
{
delay(200);
if(KEY_L==0xfd);
frequency=frequency-10000;
}
KEY_H=0xef;
if(KEY_L==0xfe)
{
delay(200);
if(KEY_L==0xfe);
frequency=frequency+100000;
}
if(KEY_L==0xfd)
{
delay(200);
if(KEY_L==0xfd);
frequency=frequency-100000;
}
KEY_H=0xdf;
if(KEY_L==0xfe)//-30dB
{
delay(200);
if(KEY_L==0xfe);
{
vol=230;
print("dB=-30",0x4a);
}
}
if(KEY_L==0xfd)//-20dB
{
delay(200);
if(KEY_L==0xfd);
{
vol=405;
print("dB=-20",0x4a);
}
}
KEY_H=0xbf;
if(KEY_L==0xfe)//-10dB
{
delay(200);
if(KEY_L==0xfe);
{
vol=686;
print("dB=-10",0x4a);
}
}
if(KEY_L==0xfd)//0dB
{
delay(200);
if(KEY_L==0xfd);
{
vol=900;
print("dB=+0",0x4a);
}
}
KEY_H=0x7f;
if(KEY_L==0xfe)//10dB
{
delay(200);
if(KEY_L==0xfe)
{
vol=1200;
print("dB=+10",0x4a);
}
}
if(KEY_L==0xfd)//20dB
{
delay(200);
if(KEY_L==0xfd)
{
vol=1580;
print("dB=+20",0x4a);
}
}
}
voidDAC_9851()
{
freq=(unsignedlongint)(23.86092942*frequency);
w4=freq;
w3=freq>>8;
w2=freq>>16;
w1=freq>>24;
CS0=w0;//6倍频使能
CS0=w1;
CS0=w2;
CS0=w3;
CS0=w4;
m=CS0;
dis_LCD((unsignedlong)frequency/100000000+0x30,2);
dis_LCD((unsignedlong)frequency/10000000%10+0x30,3);
dis_LCD((unsignedlong)frequency/1000000%10+0x30,4);
dis_LCD((unsignedlong)frequency/100000%10+0x30,6);
dis_LCD((unsignedlong)frequency/10000%10+0x30,7);
dis_LCD((unsignedlong)frequency/1000%10+0x30,8);
dis_LCD((unsignedlong)frequency/100%10+0x30,10);
dis_LCD((unsignedlong)frequency/10%10+0x30,11);
dis_LCD((unsignedlong)frequency%10+0x30,12);
}
voiddisplay()
{
da=(vol*4.096/4096)*1000;
}
voiddang()
{
if(d==0)//10V
{s0=1;
s1=1;
print("X001",0x40);
}
if(d==1)//1V
{
s0=1;
s1=0;
print("X010",0x40);
}
if(d==2)//0.1V
{
s0=0;
s1=0;
print("X100",0x40);
}
}
voidjudge_Prage()
{
if(d==2)
{
dy=(dy*100)-4;
dis_LCD((unsignedlong)dy/100+0x30,3);
dis_LCD((unsignedlong)dy/10%10+0x30,4);
dis_LCD('.',5);
dis_LCD((unsignedlong)dy%10+0x30,6);
dis_LCD('m',7);
dis_LCD('V',8);
}
elseif(d==1)
{
dy=(dy*100)-6;
dis_LCD('.',3);
dis_LCD((unsignedlong)dy/100%10+0x30,4);
dis_LCD((unsignedlong)dy/10%10+0x30,5);
dis_LCD((unsignedlong)dy%10+0x30,6);
dis_LCD(0x10,7);
dis_LCD('V',8);
}
elseif(d==0)
{
dy=(dy*100);
dis_LCD((unsignedlong)dy/100+0x30,3);
dis_LCD('.',4);
dis_LCD((unsignedlong)dy/10%10+0x30,5);
dis_LCD((unsignedlong)dy%10+0x30,6);
dis_LCD(0x10,7);
dis_LCD('V',8);
}
}
voidAD()
{
while(ga==0)
{
hben=1;
date_h=cs5;
hben=0;
date_l=cs5;
hben=0;
data_ad=256*date_h+date_l;
cs5=0x50;
}
dy=data_ad*15.6/4096;
delay(50);
}
voiddt()
{AD();
if(dy<0.1)
{
if(d<2)
{
d=d+1;
dang();
delay(50);
}
}
AD();
if(dy<1.00)
{
if(d<2)
{
d=d+1;
dang();
delay(50);
}
}
AD();
if(dy>9.99)
{
if(d>0)
{
d=d-1;
dang();
delay(50);
}
}
}
voidmain()
{
nint_LCD();
frequency=20;
w0=0x01;w1=0x00;w2=0x00;w3=0x01;w4=0xdd;
dy=0;
cs5=0x50;
d=0;
dis_LCD('F',0);
dis_LCD('=',1);
dis_LCD(',',5);
dis_LCD(',',9);
dis_LCD('H',13);
dis_LCD('Z',14);
dis_LCD('D',0x40);
dis_LCD('Y',0x41);
dis_LCD('=',0x42);
while
(1)
{
keyscan();
DAC_9851();
init_da();
DAC_7611(vol);
keyscan();
dt();
judge_Prage();
}
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 综合 测试仪
![提示](https://static.bdocx.com/images/bang_tan.gif)