高精度正弦全自动激励信号源的设计与实现
更新时间:2006-01-14 00:00:00作者:未知
在许多工程测量中,都需要某种固定频率的正弦信号作为激励源,如利用模拟传感器的输出情况对所研制的监测系统、检测单元进行功能的验证:或者进行采集量程的标定工作等。在这些情况下,直接采用一个性能优越的信号发生器固然可以满足工作要求,但是这又带来了新的问题,一方面信号发生器是外配仪器,增加了系统的成本,另一方面也不便于自动化测量。利用D/A转换器加高阶滤波器的方式也可实现以上功能要求,但是在windows操作平台下,对软件技术提出了更高的要求。本文在科研项目的研究工作中恰好遇到了这样一个问题,在信号的检测与标定工作中需要一个120Hz、峰值从0.01V到10V可调的、失真小于1%的高精度正弦激励信号。本文采用常规的电路实现了这个功能。
2.原理与实现过程简述
本科研项目是基于PC-104总线的某型飞机发动机参数的检测系统,该系统需要一个用于飞机振动校准的激励信号给定单元。经仔细分析技术指标的要求,该单元需要一个幅值从0.01伏到10伏可调,且给定幅值稳定、波形失真小、频率为120Hz的交流信号源,幅值给定以0.01伏为一个间隔。如果我们利用砖码称重的原理,能很快地完成这一功能。显然,信号激励中只需要小数点后两位,即正弦信号峰值变化范围从10mV到10V,它有一位整数位、两位小数位。如果我们集中实现一个120Hz的高精度正弦波振荡器,然后从中取5伏、4伏、2伏、和l伏的“砖码”信号,可以通过电子开关组合,再用加法器形成l伏到10伏之间的任意一个峰值,类似地用0.5伏、0.4伏、0.2伏和0.1伏的“砖码”信号可以形成0.1伏到0.9伏的正弦信号,用0.05伏、0.04伏、0.02伏和0.01伏的“砝码”信号可以形成0.01伏到0.09伏的正弦信号,这三组“砝码”信号组合在一起则可以给出峰值从0.01伏到10伏、幅值变化台阶为0.01伏的任一峰值的正弦激励信号,完全可以满足工程的需要。
根据上述分析,我们设计出如图1所示的硬件框图。在图1中,正弦波信号源选用MAX038芯片,其输出正弦波频率可以在较宽的范围内调节,该芯片内部的结构设计可以保证向外提供失真度小于1%的正弦信号;为了提高信号的比例精度,所有的分压电阻全部定制,阻值精度可达千分之一;运放选用低漂移运放LM124;电子开关选用高性能的MAX4536的4路单刀单掷开关;另外,考虑到电子开关导通后有几十欧姆的压降,为了减小其影响,在加法器中反馈电阻与累加电阻均选择为几十千欧左右,进一步削弱电子开关导通电阻在比例加法器中的影响。由于以上措施的作用,可以大幅度提高电路在实际使用中的性能。
在图1所示电路中,电子开关为译码后控制,一位控制码控制一路开关,因此电子开关的控制共需要12个数字量输出接口,这在笔者所采用的嵌入式系统中是不允许的,因为没有这么多的资源,为了进一步满足系统的要求,采用单并转换技术,用三片4位移位寄存器CT1194串联组成一个12位的移位寄存器,框图如图2所示。
图1中,12个电子开关共有4096种组合,其每种组合对应着一个特定大小的正弦交流信号,这些电子开关的控制,虽然需要12个I/O口,但只要借助于图2的串入并出移位寄存器,我们通过数据口DATA1和时钟口CLK两个输出口可以把4096种组合的任意一种送到Q1到Q12上,从而用两个I/O口实现了12路电子开关的控制。而在笔者所用的PC-104的I/O卡中,其外扩I/O口是用8255实现的,由于8255的C口具有位控功能〈位置位或位清零〉,则从C口中任取两位作为移位寄存器的数据端口和时钟端口,在12个脉冲上升沿作用下,可以将任意一个12位二进制数送到Q1到Q12口,从而完成对电子开关的期望控制,在图l中Vout处得到所希望幅值大小的定频正弦波。
3.实现过程
为了获得激励信号所需要的幅值,本单元使用PC.104的I/O模块的C口的位控功能对电子开关进行控制。首先在控制面板上给出激励信号所需的幅值,然后将此值利用5421码序列进行编码,所谓5421码是指码制相应位的权值分别为5、4、2、1,即相应位为1时所代表的十进制值分别是5、4、2、1。具体的编码规则如表1所示。对激励所需幅值编码后,将所得二进制编码按由低到高的顺序输入移位寄存器,该编码由寄存器并行输出给电子开关的控制端,控制开关的开闭,从而控制加法器的输出结果,获得所需幅值的正弦激励信号。控制过程的流程图如图3所示,为了更详细地介绍此流程的实现过程,下面举例进行说明。 砝码十进制数 对应于激励实际需要的数值
0 1 2 3 4 5 6 7 8 9
5 0 0 0 0 0 0 0 0 1 1
4 0 0 0 0 1 1 1 1 0 1
2 0 0 1 1 0 0 1 1 1 0
1 0 1 0 1 0 1 0 1 1 0
输出编码 0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x0B 0x0C
转换后输出给电子开关,对输出进行控制
4.例子
例如需要一个f(t)=3.95sin240πtV的正弦激励信号,按照软件框图获得此激励信号的方法如下。在开始编程之前,首先进行端口分配,I/O模块C口的地址为Address,设C2为RD的控制口,C3为DATA的控制口,C4为CLK的控制口。程序首先要将移位寄存器复位,即对C口的C2位进行操作,如下所述:
Ootp(Address,0x04); //使C2口输出0
Delay(0.01);
Outp(Address,0x05); //使C2口输出1
Delay(0.01);
输入幅值为:3.956,即a=3.956:则b=100*3.956=395.6,四舍五入得396;
396除以10取余得6,所以C1=6:
396整除lO得到39,39除以10取余得到9,所以C2=9;
396整除100得到3,所以C3=3。
将C1、C2、C3按照5421码序列进行编码,编码规则见表1,根据表1的规则转换后,得:
C1’=0000 0110=0x06
C2’=0000 1100=0x0C
C3’=0000 0011=0x03
将C1’的数值赋予d1(即1=0000 0110);将C2’左移4位后,变成0000 1100 0000,赋予d2(即d2=0000 1100 0000);将C3’左移8位后,变成0011 0000 0000,赋予d3(即将上面得到的12位二进制数的每一位依次赋与数组。然后分12次将数组中的数据作为控制信号输入到寄存器中,得到相应的控制权值,用来控制输出正弦激励信号幅值的大小。C3为DATA的控制口,C4为CLK的控制口,具体实现过程如下:
当输出数据bit[I]=1时:
outp(Address,0x08); //脉冲信号为低电平。
Delay(0.01);
Outp(Address,0x07); //位操作置1。
Delay(0.01);
Outp(Address,0x09); //脉冲信号为高电平。
当输出数据bit[I]=0时:
oout(Address,0x08); //脉冲信号为低电平。
Delay(0.01);
Outp(Address,0x06); //位操作置0.
Delay(0.01);
Outp(Address,0x09); //脉冲信号为高电平。
5.结束语
本单元利用常规电路实现了固定频率的正弦信号的给定功能。它能得到从10mV到10V之间任意幅值的正弦信号,对所需激励信号的频率及幅值的要求,精度能达到1%,且正弦信号的失真度也不超过1%。本检测单元己在基于PC.104总线的某型飞机发动机参数的检测系统中为飞机振动校准提供了激励信号,经调试完全能满足本文所述的各种参数要求。
本文标签: