问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

数字示波器设计 要求如下

发布网友 发布时间:2022-04-22 03:26

我来回答

1个回答

热心网友 时间:2024-08-20 23:55

首先根据输出波形的频率和幅值进行编码,存储在单片机的ROM里,
然后以一定的时间间隔依次将这些数字量送往D/A进行转换输出,这样,只要循环送数,在D/A的双极性输出端就可以得到波形波形。

采用单片机片内的振荡器、上电复位和外部硬件看门狗电路。

至于波形编码,网上资料很多,下面是硬件电路设计的描述(这个是网上找的):
输出两路幅值相等相位相差90°的正弦波形作为物体偏转测量的基准波形;另一路输出测角波形,该波形相对基准波形的相位反映角偏差的方向、幅值反映角偏差量。专用波形发生器就是模拟角位移输出波形的装置,用来进行后续解调电路以及功放电路的检测。它以单片机为核心,经过D/A转换和放大电路的处理,最后输出反应弹体姿态的基准波形和测角波形。

软件方面的编程:
#include "reg52.h"
#define uchar unsigned char
#define uint unsigned int

unsigned char code table[]=; //共阴极0~9对应16进制数
//=============正弦波数据====================
uchar code sin_tab[256]=
{
0x80, 0x83, 0x86, 0x89, 0x8c, 0x8f, 0x92, 0x95, 0x98, 0x9c, 0x9f, 0xa2, 0xa5, 0xa8, 0xab, 0xae,
0xb0, 0xb3, 0xb6, 0xb9, 0xbc, 0xbf, 0xc1, 0xc4, 0xc7, 0xc9, 0xcc, 0xce, 0xd1, 0xd3, 0xd5, 0xd8,
0xda, 0xdc, 0xde, 0xe0, 0xe2, 0xe4, 0xe6, 0xe8, 0xea, 0xec, 0xed, 0xef, 0xf0, 0xf2, 0xf3, 0xf4,
0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfc, 0xfd, 0xfe, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfe, 0xfd, 0xfc, 0xfc, 0xfb, 0xfa, 0xf9, 0xf8, 0xf7,
0xf6, 0xf5, 0xf3, 0xf2, 0xf0, 0xef, 0xed, 0xec, 0xea, 0xe8, 0xe6, 0xe4, 0xe3, 0xe1, 0xde, 0xdc,
0xda, 0xd8, 0xd6, 0xd3, 0xd1, 0xce, 0xcc, 0xc9, 0xc7, 0xc4, 0xc1, 0xbf, 0xbc, 0xb9, 0xb6, 0xb4,
0xb1, 0xae, 0xab, 0xa8, 0xa5, 0xa2, 0x9f, 0x9c, 0x99, 0x96, 0x92, 0x8f, 0x8c, 0x89, 0x86, 0x83,
0x80, 0x7d, 0x79, 0x76, 0x73, 0x70, 0x6d, 0x6a, 0x67, 0x64, 0x61, 0x5e, 0x5b, 0x58, 0x55, 0x52,
0x4f, 0x4c, 0x49, 0x46, 0x43, 0x41, 0x3e, 0x3b, 0x39, 0x36, 0x33, 0x31, 0x2e, 0x2c, 0x2a, 0x27,
0x25, 0x23, 0x21, 0x1f, 0x1d, 0x1b, 0x19, 0x17, 0x15, 0x14, 0x12, 0x10, 0xf, 0xd, 0xc, 0xb ,
0x9, 0x8, 0x7, 0x6, 0x5, 0x4, 0x3, 0x3, 0x2, 0x1, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0 ,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x1, 0x2, 0x3, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8 ,
0x9, 0xa, 0xc, 0xd, 0xe, 0x10, 0x12, 0x13, 0x15, 0x17, 0x18, 0x1a, 0x1c, 0x1e, 0x20, 0x23,
0x25, 0x27, 0x29, 0x2c, 0x2e, 0x30, 0x33, 0x35, 0x38, 0x3b, 0x3d, 0x40, 0x43, 0x46, 0x48, 0x4b,
0x4e, 0x51, 0x54, 0x57, 0x5a, 0x5d, 0x60, 0x63, 0x66, 0x69, 0x6c, 0x6f, 0x73, 0x76, 0x79, 0x7c,
};
//三角波信号数据表
uchar code thr_tab[32]=
{
0x00,0x0f,0x1f,0x2f,0x3f,0x4f,0x5f,0x6f,0x7f,0x8f,0x9f,0xaf,0xbf,0xcf,0xdf,0xef,
0xff,0xef,0xdf,0xcf,0xbf,0xaf,0x9f,0x8f,0x7f,0x6f,0x5f,0x4f,0x3f,0x2f,0x1f,0x0f
};
//-------------------------------------------------------------------------------------------------------
//锯齿波信号数据表
uchar code jc_tab[33]=
{
0x00,0x08,0x0f,0x18,0x1f,0x28,0x2f,0x38,0x3f,0x48,0x4f,0x58,0x5f,0x68,0x6f,0x78,
0x7f,0x88,0x8f,0x98,0x9f,0xa8,0xaf,0xb8,0xbf,0xc8,0xcf,0xd8,0xdf,0xe8,0xef,0xf8,0xff
};
//数码管位选控制口定义
sbit LED4=P2^7;
sbit LED3=P2^6;
sbit LED2=P2^5;
sbit LED1=P2^4;
//按键口申明
sbit S1=P2^3;
sbit S2=P2^2;
sbit S3=P2^1;
unsigned char tabArry[4]; //保存显示数据
char flag=1; //按键标志,当flag=1时表示没有按下,当flag=0时表示有按键按下
int keycount=0; //按键计数
unsigned char waveth,wavetl; //用于对定时器付值
unsigned int frecount=100; //频率计数
unsigned int mbjs; //码表计数,共采32个点
//毫秒延时程序
void delayms(int ms)
{
uchar i;
while(ms--)
{
for(i=250;i>0;i--);
}
}

//键盘扫描
void keyscan()
{
if(flag==1)
{
if(S3==0) //用S3切换波形
{
delayms(2); //延时去抖
if(S3==0) //按键计数,便于切换波形
{
flag=0;
keycount++;
if(keycount>=4) keycount=0; //四种波形计数4次
}
}

if(S2==0) //频率加1 处理
{
delayms(2);
if(S2==0)
{
flag=0;
switch(keycount)
{
case 0: //正弦波频率加1
frecount++;
if(frecount>1000) frecount=0;
break;
case 1: //三角波频率加1
frecount++;
if(frecount>1000) frecount=0;
break;
case 2: //锯齿波频率加1
frecount++;
if(frecount>1000) frecount=0;
break;
case 3: //方波频率加1
frecount++;
if(frecount>1000) frecount=0;
break;
}
waveth=(65536-57603/frecount)/256; //重新计算初值
wavetl=(65536-57603/frecount)%256;
}
}
if(S1==0) //频率减1 处理
{
delayms(2);
if(S1==0)
{
flag=0;
switch(keycount)
{
case 0: //正弦波频率减1
frecount--;
if(frecount<0) frecount=999;
break;
case 1: //三角波频率减1
frecount--;
if(frecount<0) frecount=999;
break;
case 2: //锯齿波频率减1
frecount--;
if(frecount<0) frecount=999;
break;
case 3: //方波频率减1
frecount--;
if(frecount<0) frecount=999;
break;
}
waveth=(65536-57603/frecount)/256; //重新计算初值
wavetl=(65536-57603/frecount)%256;
}
}

}
if(S1!=0 && S2!=0 && S3!=0) flag=1; //判断按键是否弹起

}
//数据分位
void change(char wavetype,unsigned int frequency)
{
tabArry[0]=wavetype; //显示字母,表示波形类型
tabArry[1]=frequency%1000/100; //百位
tabArry[2]=frequency%100/10; //十位
tabArry[3]=frequency%10; //个位
}
//显示函数
void display()
{

switch(keycount)
{
case 0: //显示A和正弦波的频率
change(0x0a,frecount);
break;
case 1: //显示b和三角波的频率
change(0x0b,frecount);
break;
case 2: //显示C和锯齿波的频率
change(0x0c,frecount);
break;
case 3: //显示d和方波的频率
change(0x0d,frecount);
break;
}

P0 = table[tabArry[0]]; //送最高位段码
LED1=0; //打开对应的位选控制口
delayms(2); //显示延时
LED1=1; //关闭对应的位选控制后显示下一位

P0 = table[tabArry[1]];
LED2=0;
delayms(2);
LED2=1;

P0 = table[tabArry[2]];
LED3=0;
delayms(2);
LED3=1;

P0 = table[tabArry[3]];
LED4=0;
delayms(2);
LED4=1;
}
void Timerinit()
{
TMOD=0x01; //定时器0方式1

//定时器初值计算公式:X=65536-(T/T0)=65536-(f0/f/32)
TH0=waveth=(65536-57603/frecount)/256; //定时器初值 22.1184MHz
TL0=wavetl=(65536-57603/frecount)%256;
EA=1; //开总中断
ET0=1; //开定时器0中断
TR0=1; //定时器0开始计数
}
//主函数
void main()
{
Timerinit(); //定时器初始化
while(1)
{
keyscan(); //扫描按键
display(); //显示程序
}
}

void Timer0() interrupt 1
{
TH0=waveth; //重新赋初值
TL0=wavetl;
if (keycount==0) //输出正弦波
{
P1 = sin_tab[mbjs];
mbjs+=8; //256点,每隔8点输出一个数据
if(mbjs>=256)
{
mbjs=0;
}
}
else if(keycount==1) //输出三角波
{
P1 = thr_tab[mbjs];
mbjs++;
if(mbjs>=32)
{
mbjs=0;
}
}
else if(keycount==2) //输出锯齿波
{
P1 = jc_tab[mbjs];
mbjs++;
if(mbjs>=32)
{
mbjs=0;
}
}
else if(keycount==3) //输出方波
{
mbjs++;
if(mbjs>=32)
{
mbjs=0;
}
else if(mbjs<16) P1=0xff;
else P1=0x00;

}
}

摘 要
函数信号发生器是一种能够产生多种波形,如三角波、锯齿波、矩形波(含方波)、正弦波的电路。函数信号发生器在电路实验和设备检测中具有十分广泛的用途。通过对函数波形发生器的原理以及构成分析,可设计一个能变换出三角波、正弦波、方波的函数波形发生器。
本课题采用由集成运算放大器与晶体管差分放大器共同组成的方波—三角波—正弦波函数发生器的设计方法,先通过比较器产生方波,再通过积分器产生三角波,最后通过差分放大器形成正弦波。波形变换的原理是利用差分放大器传输特性曲线的非线性。
经过仿真得出了方波、三角波、正弦波、方波——三角波转换及三角波——正弦波转换的波形图。
关键字:函数信号发生器、集成运算放大器、晶体管差分放
设计目的、意义
1 设计目的
(1)掌握方波—三角波——正弦波函数发生器的原理及设计方法。
(2)掌握迟滞型比较器的特性参数的计算。
(3)了解单片集成函数发生器8038的工作原理及应用。
(4)能够使用电路仿真软件进行电路调试。
2 设计意义
函数发生器作为一种常用的信号源,是现代测试领域内应用最为广泛的通用仪器之一。
在研制、生产、测试和维修各种电子元件、部件以及整机设备时,都学要有信号源,由它产生不同频率不同波形的电压、电流信号并加到被测器件或设备上,用其他仪器观察、测量被测仪器的输出响应,以分析确定它们的性能参数。信号发生器是电子测量领域中最基本、应用最广泛的一类电子仪器。它可以产生多种波形信号,如正弦波,三角波,方波等,因而广泛用于通信、雷达、导航、宇航等领域。
设计内容
1 课程设计的内容与要求(包括原始数据、技术参数、条件、设计要求等):
1.1课程设计的内容
(1)该发生器能自动产生正弦波、三角波、方波。
(2)函数发生器以集成运放和晶体管为核心进行设计
(3)指标:
输出波形:正弦波、三角波、方波
频率范围:1Hz~10Hz,10Hz~100Hz
输出电压:方波VP-P≤24V,三角波VP-P=8V,正弦波VP-P>1V;
(4)对单片集成函数发生器8038应用接线进行设计。
1.2课程设计的要求
(1)提出具体方案
(2)给出所设计电路的原理图。
(3)进行电路仿真,PCB设计。
2 函数波形发生器原理
2.1函数波形发生器原理框图

图2.1 函数发生器组成框图
2.2函数波形发生器的总方案
函数发生器一般是指能自动产生正弦波、三角波、方波及锯齿波、阶梯波等电压波形的电路或仪器。根据用途不同,有产生三种或多种波形的函数发生器,使用的器件可以是分立器件 (如低频信号函数发生器S101全部采用晶体管),也可以采用集成电路(如单片函数发生器模块8038)。为进一步掌握电路的基本理论及实验调试技术,本课题采用由集成运算放大器与晶体管差分放大器共同组成的方波—三角波—正弦波函数发生器的设计方法。
产生正弦波、方波、三角波的方案有多种,如首先产生正弦波,然后通过整形电路将正弦波变换成方波,再由积分电路将方波变成三角波;也可以首先产生三角波—方波,再将三角波变成正弦波或将方波变成正弦波等等。本课题采用先产生方波—三角波,再将三角波变换成正弦波的电路设计方法[3]。
由比较器和积分器组成方波—三角波产生电路,比较器输出的方波经积分器得到三角波,三角波到正弦波的变换电路主要由差分放大器来完成。差分放大器具有工作点稳定,输入阻抗高,抗干扰能力较强等优点。特别是作为直流放大器时,可以有效地抑制零点漂移,因此可将频率很低的三角波变换成正弦波。波形变换的原理是利用差分放大器传输特性曲线的非线性。
2.3函数波形发生器各组成部分的工作原理
2.3.1方波发生电路的工作原理
此电路由反相输入的滞回比较器和RC电路组成。RC回路既作为延迟环节,又作为反馈网络,通过RC充、放电实现输出状态的自动转换。设某一时刻输出电压Uo=+Uz,则同相输入端电位Up=+Ut。Uo通过R3对电容C正向充电,如图2.3中实线箭头所示。反相输入端电位n随时间t的增长而逐渐增高,当t趋于无穷时,Un趋于+Uz;但是,一旦Un=+Ut,再稍增大,Uo从+Uz跃变为-Uz,与此同时Up从+Ut跃变为-Ut。随后,Uo又通过R3对电容C反向充电,如图中虚线箭头所示。Un随时间逐渐增长而减低,当t趋于无穷大时,Un趋于-Uz;但是,一旦Un=-Ut,再减小,Uo就从-Uz跃变为+Uz,Up从-Ut跃变为+Ut,电容又开始正相充电。上述过程周而复始,电路产生了自激振荡[4]。
2.3.2方波——三角波转换电路的工作原理
图2.2方波—三角波产生电路
工作原理如下:
若a点断开,整个电路呈开环状态。运算发大器A1与R1、R2及R3、RP1组成电压比较器,C1为加速电容,可加速比较器的翻转。运放的反相端接基准电压,即U-=0,同相输入端接输入电压Uia,R1称为平衡电阻。比较器的输出Uo1的高电平等于正电源电压+Vcc,低电平等于负电源电压-Vee(|+Vcc|=|-Vee|), 当比较器的U+=U-=0时,比较器翻转,输出Uo1从高电平跳到低电平-Vee,或者从低电平Vee跳到高电平Vcc。设Uo1=+ Vcc,则
(2.1)
将上式整理,得比较器翻转的下门限单位Uia_为
(2.2)
若Uo1=-Vee,则比较器翻转的上门限电位Uia+为
(2.3)
比较器的门限宽度:
(2.4)
由以上公式可得比较器的电压传输特性,如图2.3所示。
a点断开后,运放A2与R4、RP2、C2及R5组成反相积分器,其输入信号为方波Uo1,则积分器的输出Uo2为:
(2.5)
时,
(2.6)
时,
(2.7)
可见积分器的输入为方波时,输出是一个上升速度与下降速度相等的三角波,其波形关系如图2.4所示。
a点闭合,即比较器与积分器形成闭环电路,则自动产生方波-三角波。三角波的幅度为:
(2.8)
方波-三角波的频率f为:
(2.9)
由以上两式(2.8)及(2.9)可以得到以下结论:
(1) 电位器RP2在调整方波-三角波的输出频率时,不会影响输出波形的幅度。若要求输出频率的范围较宽,可用C2改变频率的范围,PR2实现频率微调。
(2) 方波的输出幅度应等于电源电压+Vcc。三角波的输出幅度应不超过电源电压+Vcc。
电位器RP1可实现幅度微调,但会影响方波-三角波的频率[3]。

图2.3比较器的电压传输特性

图2.4方波与三角波波形关系

2.3.3三角波---正弦波转换电路的工作原理
如图2.5三角波——正弦波的变换电路主要由差分放大电路来完成。
差分放大器具有工作点稳定,输入阻抗高,抗干扰能力较强等优点。特别是作为直流放大器,可以有效的抑制零点漂移,因此可将频率很低的三角波变换成正弦波。波形变换的原理是利用差分放大器传输特性曲线的非线性[1]。

图2.5 三角波——正弦波的变换电路
分析表明,传输特性曲线的表达式为:
(2.10)
(2.11)
式中
——差分放大器的恒定电流;
——温度的电压当量,当室温为25oc时, ≈26mV。
如果Uid为三角波,设表达式为
(2.12)
式中 Um——三角波的幅度;
T——三角波的周期。
为使输出波形更接近正弦波,由图2.6可见:
(1)传输特性曲线越对称,线性区越窄越好。
(2)三角波的幅度Um应正好使晶体管接近饱和区或截止区。
(3)图2.7为实现三角波——正弦波变换的电路。其中RP1调节三角波的幅度,RP2调整电路的对称性,其并联电阻RE2用来减小差分放大器的线性区。电容C1,C2,C3为隔直电容,C4为滤波电容,以滤除谐波分量,改善输出波形[2]。

图2.6三角波—正弦波变换原理
图2.7三角波—正弦波变换电路

2.4电路的参数选择及计算
2.4.1方波-三角波中电容C1变化(关键性变化之一)
实物连线中,我们一开始很长时间出不来波形,后来将C2从10uf(理论时可出来波形)换成0.1uf时,顺利得出波形。实际上,分析一下便知当C2=10uf时,频率很低,不容易在实际电路中实现。
2.4.2三角波—正弦波部分的计算
比较器A1与积分器A2的元件计算如下:
由式(2.8)得

取 ,则 ,取 ,RP1为47KΩ的点位器。取平衡电阻
由式(2.9)

当 时,取 ,则 ,取 ,为100KΩ电位器。当 时 ,取 以实现频率波段的转换,R4及RP2的取值不变。取平衡电阻 。
三角波—正弦波变换电路的参数选择原则是:隔直电容C3、C4、C5要取得较大,因为输出频率很低,取 ,滤波电容 视输出的波形而定,若含高次斜波成分较多, 可取得较小, 一般为几十皮法至0.1微法。RE2=100欧与RP4=100欧姆相并联,以减小差分放大器的线性区。差分放大器的静态工作点可通过观测传输特性曲线,调整RP4及电阻R*确定。
2.5 总电路图
先通过比较器产生方波,再通过积分器产生三角波,最后通过差分放大器形成正弦波。如图2.5.1所示,

图2.5.1三角波-方波-正弦波函数发生器实验电路

2.6 8038单片集成函数发生器
2.6.1 8038的工作原理
8038由恒流源I1、I2,电压比较器C1、C2和触发器①等组成。其内部原理电路框图和外部引脚排列分别如图2.8和图2.9所示。

图2.8 8038原理框图

图2.9 8038管脚图(顶视图)
1. 正弦波线性调节;2. 正弦波输出;3. 三角波输出;4. 恒流源调节;5. 恒流源调节;6. 正电源;7. 调频偏置电压;8. 调频控制输入端;9. 方波输出(集电极开路输出); 10. 外接电容;11. 负电源或接地;12.正弦波线性调节;13、14. 空脚
在图2.8中,电压比较器C1、C2的门限电压分别为2VR/3和VR/3( 其中VR=VCC+VEE),电流源I1和I2的大小可通过外接电阻调节,且I2必须大于I1。当触发器的Q端输出为低电平时,它控制开关S使电流源I2断开。而电流源I1则向外接电容C充电,使电容两端电压vC随时间线性上升,当vC上升到vC=2VR/3 时,比较器C1输出发生跳变,使触发器输出Q端由低电平变为高电平,控制开关S使电流源I2接通。由于I2>I1 ,因此电容C放电,vC随时间线性下降。当vC下降到vC≤VR/3 时,比较器C2输出发生跳变,使触发器输出端Q又由高电平变为低电平,I2再次断开,I1再次向C充电,vC又随时间线性上升。如此周而复始,产生振荡。若I2=2I1 ,vC上升时间与下降时间相等,就产生三角波输出到脚3。而触发器输出的方波,经缓冲器输出到脚9。三角波经正弦波变换器变成正弦波后由脚2输出。当I1<I2<2I1 时,vC的上升时间与下降时间不相等,管脚3输出锯齿波。因此,8038能输出方波、三角波、正弦波和锯齿波等四种不同的波形。
图2.8中的触发器,当R端为高电平、S端为低电平时,Q端输出低电平;反之,则Q端为高电平。
2.6.2 8038构成函数波形发生器
由图2.9可见,管脚8为调频电压控制输入端,管脚7输出调频偏置电压,其值(指管脚6与7之间的电压)是(VCC+VEE/5) ,它可作为管脚8的输入电压。此外,该器件的方波输出端为集电极开路形式,一般需在正电源与9脚之间外接一电阻,其值常选用10k左右,如图2.10所示。当电位器Rp1动端在中间位置,并且图中管脚8与7短接时,管脚9、3和2的输出分别为方波、三角波和正弦波。电路的振荡频率f约为0.3/[C(R1+RP1/2)] 。调节RP1、RP2可使正弦波的失真达到较理想的程度。
在图2.10中,当RP1动端在中间位置,断开管脚8与7之间的连线,若在+VCC与-VEE之间接一电位器,使其动端与8脚相连,改变正电源+VCC与管脚8之间的控制电压(即调频电压),则振荡频率随之变化,因此该电路是一个频率可调的函数发生器。如果控制电压按一定规律变化,则可构成扫频式函数发生器。

图2.10 8038接成波形产生器阿
3电路仿真
3.1电路仿真
3.1.1方波——三角波发生电路的仿真

图3.1 方波

图3.2 三角波

图3.3 方波——三角波
3.1.2三角波---正弦波转换电路的仿真

图3.4 三角波——正弦波

参考文献
[1]王 远.模拟电子技术(第二版)[M].北京:机械工业出版社,2000
[2]谢自美.电子线路设计实验测试(第二版)[M].武昌:华中科技大学出版社,2000
[3]路 勇.电子电路实验及仿真[M].清华大学出版社,2003
[4]胡宴如.模拟电子技术[M].北京:高等教育出版社,2000
[5]周跃庆.模拟电子技术基础教程[M].天津大学出版社, 2001
[6]曾建唐.电工电子实践教程[M].北京:机械工业出版社,2002

热心网友 时间:2024-08-20 23:53

首先根据输出波形的频率和幅值进行编码,存储在单片机的ROM里,
然后以一定的时间间隔依次将这些数字量送往D/A进行转换输出,这样,只要循环送数,在D/A的双极性输出端就可以得到波形波形。

采用单片机片内的振荡器、上电复位和外部硬件看门狗电路。

至于波形编码,网上资料很多,下面是硬件电路设计的描述(这个是网上找的):
输出两路幅值相等相位相差90°的正弦波形作为物体偏转测量的基准波形;另一路输出测角波形,该波形相对基准波形的相位反映角偏差的方向、幅值反映角偏差量。专用波形发生器就是模拟角位移输出波形的装置,用来进行后续解调电路以及功放电路的检测。它以单片机为核心,经过D/A转换和放大电路的处理,最后输出反应弹体姿态的基准波形和测角波形。

软件方面的编程:
#include "reg52.h"
#define uchar unsigned char
#define uint unsigned int

unsigned char code table[]=; //共阴极0~9对应16进制数
//=============正弦波数据====================
uchar code sin_tab[256]=
{
0x80, 0x83, 0x86, 0x89, 0x8c, 0x8f, 0x92, 0x95, 0x98, 0x9c, 0x9f, 0xa2, 0xa5, 0xa8, 0xab, 0xae,
0xb0, 0xb3, 0xb6, 0xb9, 0xbc, 0xbf, 0xc1, 0xc4, 0xc7, 0xc9, 0xcc, 0xce, 0xd1, 0xd3, 0xd5, 0xd8,
0xda, 0xdc, 0xde, 0xe0, 0xe2, 0xe4, 0xe6, 0xe8, 0xea, 0xec, 0xed, 0xef, 0xf0, 0xf2, 0xf3, 0xf4,
0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfc, 0xfd, 0xfe, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfe, 0xfd, 0xfc, 0xfc, 0xfb, 0xfa, 0xf9, 0xf8, 0xf7,
0xf6, 0xf5, 0xf3, 0xf2, 0xf0, 0xef, 0xed, 0xec, 0xea, 0xe8, 0xe6, 0xe4, 0xe3, 0xe1, 0xde, 0xdc,
0xda, 0xd8, 0xd6, 0xd3, 0xd1, 0xce, 0xcc, 0xc9, 0xc7, 0xc4, 0xc1, 0xbf, 0xbc, 0xb9, 0xb6, 0xb4,
0xb1, 0xae, 0xab, 0xa8, 0xa5, 0xa2, 0x9f, 0x9c, 0x99, 0x96, 0x92, 0x8f, 0x8c, 0x89, 0x86, 0x83,
0x80, 0x7d, 0x79, 0x76, 0x73, 0x70, 0x6d, 0x6a, 0x67, 0x64, 0x61, 0x5e, 0x5b, 0x58, 0x55, 0x52,
0x4f, 0x4c, 0x49, 0x46, 0x43, 0x41, 0x3e, 0x3b, 0x39, 0x36, 0x33, 0x31, 0x2e, 0x2c, 0x2a, 0x27,
0x25, 0x23, 0x21, 0x1f, 0x1d, 0x1b, 0x19, 0x17, 0x15, 0x14, 0x12, 0x10, 0xf, 0xd, 0xc, 0xb ,
0x9, 0x8, 0x7, 0x6, 0x5, 0x4, 0x3, 0x3, 0x2, 0x1, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0 ,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x1, 0x2, 0x3, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8 ,
0x9, 0xa, 0xc, 0xd, 0xe, 0x10, 0x12, 0x13, 0x15, 0x17, 0x18, 0x1a, 0x1c, 0x1e, 0x20, 0x23,
0x25, 0x27, 0x29, 0x2c, 0x2e, 0x30, 0x33, 0x35, 0x38, 0x3b, 0x3d, 0x40, 0x43, 0x46, 0x48, 0x4b,
0x4e, 0x51, 0x54, 0x57, 0x5a, 0x5d, 0x60, 0x63, 0x66, 0x69, 0x6c, 0x6f, 0x73, 0x76, 0x79, 0x7c,
};
//三角波信号数据表
uchar code thr_tab[32]=
{
0x00,0x0f,0x1f,0x2f,0x3f,0x4f,0x5f,0x6f,0x7f,0x8f,0x9f,0xaf,0xbf,0xcf,0xdf,0xef,
0xff,0xef,0xdf,0xcf,0xbf,0xaf,0x9f,0x8f,0x7f,0x6f,0x5f,0x4f,0x3f,0x2f,0x1f,0x0f
};
//-------------------------------------------------------------------------------------------------------
//锯齿波信号数据表
uchar code jc_tab[33]=
{
0x00,0x08,0x0f,0x18,0x1f,0x28,0x2f,0x38,0x3f,0x48,0x4f,0x58,0x5f,0x68,0x6f,0x78,
0x7f,0x88,0x8f,0x98,0x9f,0xa8,0xaf,0xb8,0xbf,0xc8,0xcf,0xd8,0xdf,0xe8,0xef,0xf8,0xff
};
//数码管位选控制口定义
sbit LED4=P2^7;
sbit LED3=P2^6;
sbit LED2=P2^5;
sbit LED1=P2^4;
//按键口申明
sbit S1=P2^3;
sbit S2=P2^2;
sbit S3=P2^1;
unsigned char tabArry[4]; //保存显示数据
char flag=1; //按键标志,当flag=1时表示没有按下,当flag=0时表示有按键按下
int keycount=0; //按键计数
unsigned char waveth,wavetl; //用于对定时器付值
unsigned int frecount=100; //频率计数
unsigned int mbjs; //码表计数,共采32个点
//毫秒延时程序
void delayms(int ms)
{
uchar i;
while(ms--)
{
for(i=250;i>0;i--);
}
}

//键盘扫描
void keyscan()
{
if(flag==1)
{
if(S3==0) //用S3切换波形
{
delayms(2); //延时去抖
if(S3==0) //按键计数,便于切换波形
{
flag=0;
keycount++;
if(keycount>=4) keycount=0; //四种波形计数4次
}
}

if(S2==0) //频率加1 处理
{
delayms(2);
if(S2==0)
{
flag=0;
switch(keycount)
{
case 0: //正弦波频率加1
frecount++;
if(frecount>1000) frecount=0;
break;
case 1: //三角波频率加1
frecount++;
if(frecount>1000) frecount=0;
break;
case 2: //锯齿波频率加1
frecount++;
if(frecount>1000) frecount=0;
break;
case 3: //方波频率加1
frecount++;
if(frecount>1000) frecount=0;
break;
}
waveth=(65536-57603/frecount)/256; //重新计算初值
wavetl=(65536-57603/frecount)%256;
}
}
if(S1==0) //频率减1 处理
{
delayms(2);
if(S1==0)
{
flag=0;
switch(keycount)
{
case 0: //正弦波频率减1
frecount--;
if(frecount<0) frecount=999;
break;
case 1: //三角波频率减1
frecount--;
if(frecount<0) frecount=999;
break;
case 2: //锯齿波频率减1
frecount--;
if(frecount<0) frecount=999;
break;
case 3: //方波频率减1
frecount--;
if(frecount<0) frecount=999;
break;
}
waveth=(65536-57603/frecount)/256; //重新计算初值
wavetl=(65536-57603/frecount)%256;
}
}

}
if(S1!=0 && S2!=0 && S3!=0) flag=1; //判断按键是否弹起

}
//数据分位
void change(char wavetype,unsigned int frequency)
{
tabArry[0]=wavetype; //显示字母,表示波形类型
tabArry[1]=frequency%1000/100; //百位
tabArry[2]=frequency%100/10; //十位
tabArry[3]=frequency%10; //个位
}
//显示函数
void display()
{

switch(keycount)
{
case 0: //显示A和正弦波的频率
change(0x0a,frecount);
break;
case 1: //显示b和三角波的频率
change(0x0b,frecount);
break;
case 2: //显示C和锯齿波的频率
change(0x0c,frecount);
break;
case 3: //显示d和方波的频率
change(0x0d,frecount);
break;
}

P0 = table[tabArry[0]]; //送最高位段码
LED1=0; //打开对应的位选控制口
delayms(2); //显示延时
LED1=1; //关闭对应的位选控制后显示下一位

P0 = table[tabArry[1]];
LED2=0;
delayms(2);
LED2=1;

P0 = table[tabArry[2]];
LED3=0;
delayms(2);
LED3=1;

P0 = table[tabArry[3]];
LED4=0;
delayms(2);
LED4=1;
}
void Timerinit()
{
TMOD=0x01; //定时器0方式1

//定时器初值计算公式:X=65536-(T/T0)=65536-(f0/f/32)
TH0=waveth=(65536-57603/frecount)/256; //定时器初值 22.1184MHz
TL0=wavetl=(65536-57603/frecount)%256;
EA=1; //开总中断
ET0=1; //开定时器0中断
TR0=1; //定时器0开始计数
}
//主函数
void main()
{
Timerinit(); //定时器初始化
while(1)
{
keyscan(); //扫描按键
display(); //显示程序
}
}

void Timer0() interrupt 1
{
TH0=waveth; //重新赋初值
TL0=wavetl;
if (keycount==0) //输出正弦波
{
P1 = sin_tab[mbjs];
mbjs+=8; //256点,每隔8点输出一个数据
if(mbjs>=256)
{
mbjs=0;
}
}
else if(keycount==1) //输出三角波
{
P1 = thr_tab[mbjs];
mbjs++;
if(mbjs>=32)
{
mbjs=0;
}
}
else if(keycount==2) //输出锯齿波
{
P1 = jc_tab[mbjs];
mbjs++;
if(mbjs>=32)
{
mbjs=0;
}
}
else if(keycount==3) //输出方波
{
mbjs++;
if(mbjs>=32)
{
mbjs=0;
}
else if(mbjs<16) P1=0xff;
else P1=0x00;

}
}

摘 要
函数信号发生器是一种能够产生多种波形,如三角波、锯齿波、矩形波(含方波)、正弦波的电路。函数信号发生器在电路实验和设备检测中具有十分广泛的用途。通过对函数波形发生器的原理以及构成分析,可设计一个能变换出三角波、正弦波、方波的函数波形发生器。
本课题采用由集成运算放大器与晶体管差分放大器共同组成的方波—三角波—正弦波函数发生器的设计方法,先通过比较器产生方波,再通过积分器产生三角波,最后通过差分放大器形成正弦波。波形变换的原理是利用差分放大器传输特性曲线的非线性。
经过仿真得出了方波、三角波、正弦波、方波——三角波转换及三角波——正弦波转换的波形图。
关键字:函数信号发生器、集成运算放大器、晶体管差分放
设计目的、意义
1 设计目的
(1)掌握方波—三角波——正弦波函数发生器的原理及设计方法。
(2)掌握迟滞型比较器的特性参数的计算。
(3)了解单片集成函数发生器8038的工作原理及应用。
(4)能够使用电路仿真软件进行电路调试。
2 设计意义
函数发生器作为一种常用的信号源,是现代测试领域内应用最为广泛的通用仪器之一。
在研制、生产、测试和维修各种电子元件、部件以及整机设备时,都学要有信号源,由它产生不同频率不同波形的电压、电流信号并加到被测器件或设备上,用其他仪器观察、测量被测仪器的输出响应,以分析确定它们的性能参数。信号发生器是电子测量领域中最基本、应用最广泛的一类电子仪器。它可以产生多种波形信号,如正弦波,三角波,方波等,因而广泛用于通信、雷达、导航、宇航等领域。
设计内容
1 课程设计的内容与要求(包括原始数据、技术参数、条件、设计要求等):
1.1课程设计的内容
(1)该发生器能自动产生正弦波、三角波、方波。
(2)函数发生器以集成运放和晶体管为核心进行设计
(3)指标:
输出波形:正弦波、三角波、方波
频率范围:1Hz~10Hz,10Hz~100Hz
输出电压:方波VP-P≤24V,三角波VP-P=8V,正弦波VP-P>1V;
(4)对单片集成函数发生器8038应用接线进行设计。
1.2课程设计的要求
(1)提出具体方案
(2)给出所设计电路的原理图。
(3)进行电路仿真,PCB设计。
2 函数波形发生器原理
2.1函数波形发生器原理框图

图2.1 函数发生器组成框图
2.2函数波形发生器的总方案
函数发生器一般是指能自动产生正弦波、三角波、方波及锯齿波、阶梯波等电压波形的电路或仪器。根据用途不同,有产生三种或多种波形的函数发生器,使用的器件可以是分立器件 (如低频信号函数发生器S101全部采用晶体管),也可以采用集成电路(如单片函数发生器模块8038)。为进一步掌握电路的基本理论及实验调试技术,本课题采用由集成运算放大器与晶体管差分放大器共同组成的方波—三角波—正弦波函数发生器的设计方法。
产生正弦波、方波、三角波的方案有多种,如首先产生正弦波,然后通过整形电路将正弦波变换成方波,再由积分电路将方波变成三角波;也可以首先产生三角波—方波,再将三角波变成正弦波或将方波变成正弦波等等。本课题采用先产生方波—三角波,再将三角波变换成正弦波的电路设计方法[3]。
由比较器和积分器组成方波—三角波产生电路,比较器输出的方波经积分器得到三角波,三角波到正弦波的变换电路主要由差分放大器来完成。差分放大器具有工作点稳定,输入阻抗高,抗干扰能力较强等优点。特别是作为直流放大器时,可以有效地抑制零点漂移,因此可将频率很低的三角波变换成正弦波。波形变换的原理是利用差分放大器传输特性曲线的非线性。
2.3函数波形发生器各组成部分的工作原理
2.3.1方波发生电路的工作原理
此电路由反相输入的滞回比较器和RC电路组成。RC回路既作为延迟环节,又作为反馈网络,通过RC充、放电实现输出状态的自动转换。设某一时刻输出电压Uo=+Uz,则同相输入端电位Up=+Ut。Uo通过R3对电容C正向充电,如图2.3中实线箭头所示。反相输入端电位n随时间t的增长而逐渐增高,当t趋于无穷时,Un趋于+Uz;但是,一旦Un=+Ut,再稍增大,Uo从+Uz跃变为-Uz,与此同时Up从+Ut跃变为-Ut。随后,Uo又通过R3对电容C反向充电,如图中虚线箭头所示。Un随时间逐渐增长而减低,当t趋于无穷大时,Un趋于-Uz;但是,一旦Un=-Ut,再减小,Uo就从-Uz跃变为+Uz,Up从-Ut跃变为+Ut,电容又开始正相充电。上述过程周而复始,电路产生了自激振荡[4]。
2.3.2方波——三角波转换电路的工作原理
图2.2方波—三角波产生电路
工作原理如下:
若a点断开,整个电路呈开环状态。运算发大器A1与R1、R2及R3、RP1组成电压比较器,C1为加速电容,可加速比较器的翻转。运放的反相端接基准电压,即U-=0,同相输入端接输入电压Uia,R1称为平衡电阻。比较器的输出Uo1的高电平等于正电源电压+Vcc,低电平等于负电源电压-Vee(|+Vcc|=|-Vee|), 当比较器的U+=U-=0时,比较器翻转,输出Uo1从高电平跳到低电平-Vee,或者从低电平Vee跳到高电平Vcc。设Uo1=+ Vcc,则
(2.1)
将上式整理,得比较器翻转的下门限单位Uia_为
(2.2)
若Uo1=-Vee,则比较器翻转的上门限电位Uia+为
(2.3)
比较器的门限宽度:
(2.4)
由以上公式可得比较器的电压传输特性,如图2.3所示。
a点断开后,运放A2与R4、RP2、C2及R5组成反相积分器,其输入信号为方波Uo1,则积分器的输出Uo2为:
(2.5)
时,
(2.6)
时,
(2.7)
可见积分器的输入为方波时,输出是一个上升速度与下降速度相等的三角波,其波形关系如图2.4所示。
a点闭合,即比较器与积分器形成闭环电路,则自动产生方波-三角波。三角波的幅度为:
(2.8)
方波-三角波的频率f为:
(2.9)
由以上两式(2.8)及(2.9)可以得到以下结论:
(1) 电位器RP2在调整方波-三角波的输出频率时,不会影响输出波形的幅度。若要求输出频率的范围较宽,可用C2改变频率的范围,PR2实现频率微调。
(2) 方波的输出幅度应等于电源电压+Vcc。三角波的输出幅度应不超过电源电压+Vcc。
电位器RP1可实现幅度微调,但会影响方波-三角波的频率[3]。

图2.3比较器的电压传输特性

图2.4方波与三角波波形关系

2.3.3三角波---正弦波转换电路的工作原理
如图2.5三角波——正弦波的变换电路主要由差分放大电路来完成。
差分放大器具有工作点稳定,输入阻抗高,抗干扰能力较强等优点。特别是作为直流放大器,可以有效的抑制零点漂移,因此可将频率很低的三角波变换成正弦波。波形变换的原理是利用差分放大器传输特性曲线的非线性[1]。

图2.5 三角波——正弦波的变换电路
分析表明,传输特性曲线的表达式为:
(2.10)
(2.11)
式中
——差分放大器的恒定电流;
——温度的电压当量,当室温为25oc时, ≈26mV。
如果Uid为三角波,设表达式为
(2.12)
式中 Um——三角波的幅度;
T——三角波的周期。
为使输出波形更接近正弦波,由图2.6可见:
(1)传输特性曲线越对称,线性区越窄越好。
(2)三角波的幅度Um应正好使晶体管接近饱和区或截止区。
(3)图2.7为实现三角波——正弦波变换的电路。其中RP1调节三角波的幅度,RP2调整电路的对称性,其并联电阻RE2用来减小差分放大器的线性区。电容C1,C2,C3为隔直电容,C4为滤波电容,以滤除谐波分量,改善输出波形[2]。

图2.6三角波—正弦波变换原理
图2.7三角波—正弦波变换电路

2.4电路的参数选择及计算
2.4.1方波-三角波中电容C1变化(关键性变化之一)
实物连线中,我们一开始很长时间出不来波形,后来将C2从10uf(理论时可出来波形)换成0.1uf时,顺利得出波形。实际上,分析一下便知当C2=10uf时,频率很低,不容易在实际电路中实现。
2.4.2三角波—正弦波部分的计算
比较器A1与积分器A2的元件计算如下:
由式(2.8)得

取 ,则 ,取 ,RP1为47KΩ的点位器。取平衡电阻
由式(2.9)

当 时,取 ,则 ,取 ,为100KΩ电位器。当 时 ,取 以实现频率波段的转换,R4及RP2的取值不变。取平衡电阻 。
三角波—正弦波变换电路的参数选择原则是:隔直电容C3、C4、C5要取得较大,因为输出频率很低,取 ,滤波电容 视输出的波形而定,若含高次斜波成分较多, 可取得较小, 一般为几十皮法至0.1微法。RE2=100欧与RP4=100欧姆相并联,以减小差分放大器的线性区。差分放大器的静态工作点可通过观测传输特性曲线,调整RP4及电阻R*确定。
2.5 总电路图
先通过比较器产生方波,再通过积分器产生三角波,最后通过差分放大器形成正弦波。如图2.5.1所示,

图2.5.1三角波-方波-正弦波函数发生器实验电路

2.6 8038单片集成函数发生器
2.6.1 8038的工作原理
8038由恒流源I1、I2,电压比较器C1、C2和触发器①等组成。其内部原理电路框图和外部引脚排列分别如图2.8和图2.9所示。

图2.8 8038原理框图

图2.9 8038管脚图(顶视图)
1. 正弦波线性调节;2. 正弦波输出;3. 三角波输出;4. 恒流源调节;5. 恒流源调节;6. 正电源;7. 调频偏置电压;8. 调频控制输入端;9. 方波输出(集电极开路输出); 10. 外接电容;11. 负电源或接地;12.正弦波线性调节;13、14. 空脚
在图2.8中,电压比较器C1、C2的门限电压分别为2VR/3和VR/3( 其中VR=VCC+VEE),电流源I1和I2的大小可通过外接电阻调节,且I2必须大于I1。当触发器的Q端输出为低电平时,它控制开关S使电流源I2断开。而电流源I1则向外接电容C充电,使电容两端电压vC随时间线性上升,当vC上升到vC=2VR/3 时,比较器C1输出发生跳变,使触发器输出Q端由低电平变为高电平,控制开关S使电流源I2接通。由于I2>I1 ,因此电容C放电,vC随时间线性下降。当vC下降到vC≤VR/3 时,比较器C2输出发生跳变,使触发器输出端Q又由高电平变为低电平,I2再次断开,I1再次向C充电,vC又随时间线性上升。如此周而复始,产生振荡。若I2=2I1 ,vC上升时间与下降时间相等,就产生三角波输出到脚3。而触发器输出的方波,经缓冲器输出到脚9。三角波经正弦波变换器变成正弦波后由脚2输出。当I1<I2<2I1 时,vC的上升时间与下降时间不相等,管脚3输出锯齿波。因此,8038能输出方波、三角波、正弦波和锯齿波等四种不同的波形。
图2.8中的触发器,当R端为高电平、S端为低电平时,Q端输出低电平;反之,则Q端为高电平。
2.6.2 8038构成函数波形发生器
由图2.9可见,管脚8为调频电压控制输入端,管脚7输出调频偏置电压,其值(指管脚6与7之间的电压)是(VCC+VEE/5) ,它可作为管脚8的输入电压。此外,该器件的方波输出端为集电极开路形式,一般需在正电源与9脚之间外接一电阻,其值常选用10k左右,如图2.10所示。当电位器Rp1动端在中间位置,并且图中管脚8与7短接时,管脚9、3和2的输出分别为方波、三角波和正弦波。电路的振荡频率f约为0.3/[C(R1+RP1/2)] 。调节RP1、RP2可使正弦波的失真达到较理想的程度。
在图2.10中,当RP1动端在中间位置,断开管脚8与7之间的连线,若在+VCC与-VEE之间接一电位器,使其动端与8脚相连,改变正电源+VCC与管脚8之间的控制电压(即调频电压),则振荡频率随之变化,因此该电路是一个频率可调的函数发生器。如果控制电压按一定规律变化,则可构成扫频式函数发生器。

图2.10 8038接成波形产生器阿
3电路仿真
3.1电路仿真
3.1.1方波——三角波发生电路的仿真

图3.1 方波

图3.2 三角波

图3.3 方波——三角波
3.1.2三角波---正弦波转换电路的仿真

图3.4 三角波——正弦波

参考文献
[1]王 远.模拟电子技术(第二版)[M].北京:机械工业出版社,2000
[2]谢自美.电子线路设计实验测试(第二版)[M].武昌:华中科技大学出版社,2000
[3]路 勇.电子电路实验及仿真[M].清华大学出版社,2003
[4]胡宴如.模拟电子技术[M].北京:高等教育出版社,2000
[5]周跃庆.模拟电子技术基础教程[M].天津大学出版社, 2001
[6]曾建唐.电工电子实践教程[M].北京:机械工业出版社,2002

热心网友 时间:2024-08-20 23:54

首先根据输出波形的频率和幅值进行编码,存储在单片机的ROM里,
然后以一定的时间间隔依次将这些数字量送往D/A进行转换输出,这样,只要循环送数,在D/A的双极性输出端就可以得到波形波形。

采用单片机片内的振荡器、上电复位和外部硬件看门狗电路。

至于波形编码,网上资料很多,下面是硬件电路设计的描述(这个是网上找的):
输出两路幅值相等相位相差90°的正弦波形作为物体偏转测量的基准波形;另一路输出测角波形,该波形相对基准波形的相位反映角偏差的方向、幅值反映角偏差量。专用波形发生器就是模拟角位移输出波形的装置,用来进行后续解调电路以及功放电路的检测。它以单片机为核心,经过D/A转换和放大电路的处理,最后输出反应弹体姿态的基准波形和测角波形。

软件方面的编程:
#include "reg52.h"
#define uchar unsigned char
#define uint unsigned int

unsigned char code table[]=; //共阴极0~9对应16进制数
//=============正弦波数据====================
uchar code sin_tab[256]=
{
0x80, 0x83, 0x86, 0x89, 0x8c, 0x8f, 0x92, 0x95, 0x98, 0x9c, 0x9f, 0xa2, 0xa5, 0xa8, 0xab, 0xae,
0xb0, 0xb3, 0xb6, 0xb9, 0xbc, 0xbf, 0xc1, 0xc4, 0xc7, 0xc9, 0xcc, 0xce, 0xd1, 0xd3, 0xd5, 0xd8,
0xda, 0xdc, 0xde, 0xe0, 0xe2, 0xe4, 0xe6, 0xe8, 0xea, 0xec, 0xed, 0xef, 0xf0, 0xf2, 0xf3, 0xf4,
0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfc, 0xfd, 0xfe, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfe, 0xfd, 0xfc, 0xfc, 0xfb, 0xfa, 0xf9, 0xf8, 0xf7,
0xf6, 0xf5, 0xf3, 0xf2, 0xf0, 0xef, 0xed, 0xec, 0xea, 0xe8, 0xe6, 0xe4, 0xe3, 0xe1, 0xde, 0xdc,
0xda, 0xd8, 0xd6, 0xd3, 0xd1, 0xce, 0xcc, 0xc9, 0xc7, 0xc4, 0xc1, 0xbf, 0xbc, 0xb9, 0xb6, 0xb4,
0xb1, 0xae, 0xab, 0xa8, 0xa5, 0xa2, 0x9f, 0x9c, 0x99, 0x96, 0x92, 0x8f, 0x8c, 0x89, 0x86, 0x83,
0x80, 0x7d, 0x79, 0x76, 0x73, 0x70, 0x6d, 0x6a, 0x67, 0x64, 0x61, 0x5e, 0x5b, 0x58, 0x55, 0x52,
0x4f, 0x4c, 0x49, 0x46, 0x43, 0x41, 0x3e, 0x3b, 0x39, 0x36, 0x33, 0x31, 0x2e, 0x2c, 0x2a, 0x27,
0x25, 0x23, 0x21, 0x1f, 0x1d, 0x1b, 0x19, 0x17, 0x15, 0x14, 0x12, 0x10, 0xf, 0xd, 0xc, 0xb ,
0x9, 0x8, 0x7, 0x6, 0x5, 0x4, 0x3, 0x3, 0x2, 0x1, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0 ,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x1, 0x2, 0x3, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8 ,
0x9, 0xa, 0xc, 0xd, 0xe, 0x10, 0x12, 0x13, 0x15, 0x17, 0x18, 0x1a, 0x1c, 0x1e, 0x20, 0x23,
0x25, 0x27, 0x29, 0x2c, 0x2e, 0x30, 0x33, 0x35, 0x38, 0x3b, 0x3d, 0x40, 0x43, 0x46, 0x48, 0x4b,
0x4e, 0x51, 0x54, 0x57, 0x5a, 0x5d, 0x60, 0x63, 0x66, 0x69, 0x6c, 0x6f, 0x73, 0x76, 0x79, 0x7c,
};
//三角波信号数据表
uchar code thr_tab[32]=
{
0x00,0x0f,0x1f,0x2f,0x3f,0x4f,0x5f,0x6f,0x7f,0x8f,0x9f,0xaf,0xbf,0xcf,0xdf,0xef,
0xff,0xef,0xdf,0xcf,0xbf,0xaf,0x9f,0x8f,0x7f,0x6f,0x5f,0x4f,0x3f,0x2f,0x1f,0x0f
};
//-------------------------------------------------------------------------------------------------------
//锯齿波信号数据表
uchar code jc_tab[33]=
{
0x00,0x08,0x0f,0x18,0x1f,0x28,0x2f,0x38,0x3f,0x48,0x4f,0x58,0x5f,0x68,0x6f,0x78,
0x7f,0x88,0x8f,0x98,0x9f,0xa8,0xaf,0xb8,0xbf,0xc8,0xcf,0xd8,0xdf,0xe8,0xef,0xf8,0xff
};
//数码管位选控制口定义
sbit LED4=P2^7;
sbit LED3=P2^6;
sbit LED2=P2^5;
sbit LED1=P2^4;
//按键口申明
sbit S1=P2^3;
sbit S2=P2^2;
sbit S3=P2^1;
unsigned char tabArry[4]; //保存显示数据
char flag=1; //按键标志,当flag=1时表示没有按下,当flag=0时表示有按键按下
int keycount=0; //按键计数
unsigned char waveth,wavetl; //用于对定时器付值
unsigned int frecount=100; //频率计数
unsigned int mbjs; //码表计数,共采32个点
//毫秒延时程序
void delayms(int ms)
{
uchar i;
while(ms--)
{
for(i=250;i>0;i--);
}
}

//键盘扫描
void keyscan()
{
if(flag==1)
{
if(S3==0) //用S3切换波形
{
delayms(2); //延时去抖
if(S3==0) //按键计数,便于切换波形
{
flag=0;
keycount++;
if(keycount>=4) keycount=0; //四种波形计数4次
}
}

if(S2==0) //频率加1 处理
{
delayms(2);
if(S2==0)
{
flag=0;
switch(keycount)
{
case 0: //正弦波频率加1
frecount++;
if(frecount>1000) frecount=0;
break;
case 1: //三角波频率加1
frecount++;
if(frecount>1000) frecount=0;
break;
case 2: //锯齿波频率加1
frecount++;
if(frecount>1000) frecount=0;
break;
case 3: //方波频率加1
frecount++;
if(frecount>1000) frecount=0;
break;
}
waveth=(65536-57603/frecount)/256; //重新计算初值
wavetl=(65536-57603/frecount)%256;
}
}
if(S1==0) //频率减1 处理
{
delayms(2);
if(S1==0)
{
flag=0;
switch(keycount)
{
case 0: //正弦波频率减1
frecount--;
if(frecount<0) frecount=999;
break;
case 1: //三角波频率减1
frecount--;
if(frecount<0) frecount=999;
break;
case 2: //锯齿波频率减1
frecount--;
if(frecount<0) frecount=999;
break;
case 3: //方波频率减1
frecount--;
if(frecount<0) frecount=999;
break;
}
waveth=(65536-57603/frecount)/256; //重新计算初值
wavetl=(65536-57603/frecount)%256;
}
}

}
if(S1!=0 && S2!=0 && S3!=0) flag=1; //判断按键是否弹起

}
//数据分位
void change(char wavetype,unsigned int frequency)
{
tabArry[0]=wavetype; //显示字母,表示波形类型
tabArry[1]=frequency%1000/100; //百位
tabArry[2]=frequency%100/10; //十位
tabArry[3]=frequency%10; //个位
}
//显示函数
void display()
{

switch(keycount)
{
case 0: //显示A和正弦波的频率
change(0x0a,frecount);
break;
case 1: //显示b和三角波的频率
change(0x0b,frecount);
break;
case 2: //显示C和锯齿波的频率
change(0x0c,frecount);
break;
case 3: //显示d和方波的频率
change(0x0d,frecount);
break;
}

P0 = table[tabArry[0]]; //送最高位段码
LED1=0; //打开对应的位选控制口
delayms(2); //显示延时
LED1=1; //关闭对应的位选控制后显示下一位

P0 = table[tabArry[1]];
LED2=0;
delayms(2);
LED2=1;

P0 = table[tabArry[2]];
LED3=0;
delayms(2);
LED3=1;

P0 = table[tabArry[3]];
LED4=0;
delayms(2);
LED4=1;
}
void Timerinit()
{
TMOD=0x01; //定时器0方式1

//定时器初值计算公式:X=65536-(T/T0)=65536-(f0/f/32)
TH0=waveth=(65536-57603/frecount)/256; //定时器初值 22.1184MHz
TL0=wavetl=(65536-57603/frecount)%256;
EA=1; //开总中断
ET0=1; //开定时器0中断
TR0=1; //定时器0开始计数
}
//主函数
void main()
{
Timerinit(); //定时器初始化
while(1)
{
keyscan(); //扫描按键
display(); //显示程序
}
}

void Timer0() interrupt 1
{
TH0=waveth; //重新赋初值
TL0=wavetl;
if (keycount==0) //输出正弦波
{
P1 = sin_tab[mbjs];
mbjs+=8; //256点,每隔8点输出一个数据
if(mbjs>=256)
{
mbjs=0;
}
}
else if(keycount==1) //输出三角波
{
P1 = thr_tab[mbjs];
mbjs++;
if(mbjs>=32)
{
mbjs=0;
}
}
else if(keycount==2) //输出锯齿波
{
P1 = jc_tab[mbjs];
mbjs++;
if(mbjs>=32)
{
mbjs=0;
}
}
else if(keycount==3) //输出方波
{
mbjs++;
if(mbjs>=32)
{
mbjs=0;
}
else if(mbjs<16) P1=0xff;
else P1=0x00;

}
}

摘 要
函数信号发生器是一种能够产生多种波形,如三角波、锯齿波、矩形波(含方波)、正弦波的电路。函数信号发生器在电路实验和设备检测中具有十分广泛的用途。通过对函数波形发生器的原理以及构成分析,可设计一个能变换出三角波、正弦波、方波的函数波形发生器。
本课题采用由集成运算放大器与晶体管差分放大器共同组成的方波—三角波—正弦波函数发生器的设计方法,先通过比较器产生方波,再通过积分器产生三角波,最后通过差分放大器形成正弦波。波形变换的原理是利用差分放大器传输特性曲线的非线性。
经过仿真得出了方波、三角波、正弦波、方波——三角波转换及三角波——正弦波转换的波形图。
关键字:函数信号发生器、集成运算放大器、晶体管差分放
设计目的、意义
1 设计目的
(1)掌握方波—三角波——正弦波函数发生器的原理及设计方法。
(2)掌握迟滞型比较器的特性参数的计算。
(3)了解单片集成函数发生器8038的工作原理及应用。
(4)能够使用电路仿真软件进行电路调试。
2 设计意义
函数发生器作为一种常用的信号源,是现代测试领域内应用最为广泛的通用仪器之一。
在研制、生产、测试和维修各种电子元件、部件以及整机设备时,都学要有信号源,由它产生不同频率不同波形的电压、电流信号并加到被测器件或设备上,用其他仪器观察、测量被测仪器的输出响应,以分析确定它们的性能参数。信号发生器是电子测量领域中最基本、应用最广泛的一类电子仪器。它可以产生多种波形信号,如正弦波,三角波,方波等,因而广泛用于通信、雷达、导航、宇航等领域。
设计内容
1 课程设计的内容与要求(包括原始数据、技术参数、条件、设计要求等):
1.1课程设计的内容
(1)该发生器能自动产生正弦波、三角波、方波。
(2)函数发生器以集成运放和晶体管为核心进行设计
(3)指标:
输出波形:正弦波、三角波、方波
频率范围:1Hz~10Hz,10Hz~100Hz
输出电压:方波VP-P≤24V,三角波VP-P=8V,正弦波VP-P>1V;
(4)对单片集成函数发生器8038应用接线进行设计。
1.2课程设计的要求
(1)提出具体方案
(2)给出所设计电路的原理图。
(3)进行电路仿真,PCB设计。
2 函数波形发生器原理
2.1函数波形发生器原理框图

图2.1 函数发生器组成框图
2.2函数波形发生器的总方案
函数发生器一般是指能自动产生正弦波、三角波、方波及锯齿波、阶梯波等电压波形的电路或仪器。根据用途不同,有产生三种或多种波形的函数发生器,使用的器件可以是分立器件 (如低频信号函数发生器S101全部采用晶体管),也可以采用集成电路(如单片函数发生器模块8038)。为进一步掌握电路的基本理论及实验调试技术,本课题采用由集成运算放大器与晶体管差分放大器共同组成的方波—三角波—正弦波函数发生器的设计方法。
产生正弦波、方波、三角波的方案有多种,如首先产生正弦波,然后通过整形电路将正弦波变换成方波,再由积分电路将方波变成三角波;也可以首先产生三角波—方波,再将三角波变成正弦波或将方波变成正弦波等等。本课题采用先产生方波—三角波,再将三角波变换成正弦波的电路设计方法[3]。
由比较器和积分器组成方波—三角波产生电路,比较器输出的方波经积分器得到三角波,三角波到正弦波的变换电路主要由差分放大器来完成。差分放大器具有工作点稳定,输入阻抗高,抗干扰能力较强等优点。特别是作为直流放大器时,可以有效地抑制零点漂移,因此可将频率很低的三角波变换成正弦波。波形变换的原理是利用差分放大器传输特性曲线的非线性。
2.3函数波形发生器各组成部分的工作原理
2.3.1方波发生电路的工作原理
此电路由反相输入的滞回比较器和RC电路组成。RC回路既作为延迟环节,又作为反馈网络,通过RC充、放电实现输出状态的自动转换。设某一时刻输出电压Uo=+Uz,则同相输入端电位Up=+Ut。Uo通过R3对电容C正向充电,如图2.3中实线箭头所示。反相输入端电位n随时间t的增长而逐渐增高,当t趋于无穷时,Un趋于+Uz;但是,一旦Un=+Ut,再稍增大,Uo从+Uz跃变为-Uz,与此同时Up从+Ut跃变为-Ut。随后,Uo又通过R3对电容C反向充电,如图中虚线箭头所示。Un随时间逐渐增长而减低,当t趋于无穷大时,Un趋于-Uz;但是,一旦Un=-Ut,再减小,Uo就从-Uz跃变为+Uz,Up从-Ut跃变为+Ut,电容又开始正相充电。上述过程周而复始,电路产生了自激振荡[4]。
2.3.2方波——三角波转换电路的工作原理
图2.2方波—三角波产生电路
工作原理如下:
若a点断开,整个电路呈开环状态。运算发大器A1与R1、R2及R3、RP1组成电压比较器,C1为加速电容,可加速比较器的翻转。运放的反相端接基准电压,即U-=0,同相输入端接输入电压Uia,R1称为平衡电阻。比较器的输出Uo1的高电平等于正电源电压+Vcc,低电平等于负电源电压-Vee(|+Vcc|=|-Vee|), 当比较器的U+=U-=0时,比较器翻转,输出Uo1从高电平跳到低电平-Vee,或者从低电平Vee跳到高电平Vcc。设Uo1=+ Vcc,则
(2.1)
将上式整理,得比较器翻转的下门限单位Uia_为
(2.2)
若Uo1=-Vee,则比较器翻转的上门限电位Uia+为
(2.3)
比较器的门限宽度:
(2.4)
由以上公式可得比较器的电压传输特性,如图2.3所示。
a点断开后,运放A2与R4、RP2、C2及R5组成反相积分器,其输入信号为方波Uo1,则积分器的输出Uo2为:
(2.5)
时,
(2.6)
时,
(2.7)
可见积分器的输入为方波时,输出是一个上升速度与下降速度相等的三角波,其波形关系如图2.4所示。
a点闭合,即比较器与积分器形成闭环电路,则自动产生方波-三角波。三角波的幅度为:
(2.8)
方波-三角波的频率f为:
(2.9)
由以上两式(2.8)及(2.9)可以得到以下结论:
(1) 电位器RP2在调整方波-三角波的输出频率时,不会影响输出波形的幅度。若要求输出频率的范围较宽,可用C2改变频率的范围,PR2实现频率微调。
(2) 方波的输出幅度应等于电源电压+Vcc。三角波的输出幅度应不超过电源电压+Vcc。
电位器RP1可实现幅度微调,但会影响方波-三角波的频率[3]。

图2.3比较器的电压传输特性

图2.4方波与三角波波形关系

2.3.3三角波---正弦波转换电路的工作原理
如图2.5三角波——正弦波的变换电路主要由差分放大电路来完成。
差分放大器具有工作点稳定,输入阻抗高,抗干扰能力较强等优点。特别是作为直流放大器,可以有效的抑制零点漂移,因此可将频率很低的三角波变换成正弦波。波形变换的原理是利用差分放大器传输特性曲线的非线性[1]。

图2.5 三角波——正弦波的变换电路
分析表明,传输特性曲线的表达式为:
(2.10)
(2.11)
式中
——差分放大器的恒定电流;
——温度的电压当量,当室温为25oc时, ≈26mV。
如果Uid为三角波,设表达式为
(2.12)
式中 Um——三角波的幅度;
T——三角波的周期。
为使输出波形更接近正弦波,由图2.6可见:
(1)传输特性曲线越对称,线性区越窄越好。
(2)三角波的幅度Um应正好使晶体管接近饱和区或截止区。
(3)图2.7为实现三角波——正弦波变换的电路。其中RP1调节三角波的幅度,RP2调整电路的对称性,其并联电阻RE2用来减小差分放大器的线性区。电容C1,C2,C3为隔直电容,C4为滤波电容,以滤除谐波分量,改善输出波形[2]。

图2.6三角波—正弦波变换原理
图2.7三角波—正弦波变换电路

2.4电路的参数选择及计算
2.4.1方波-三角波中电容C1变化(关键性变化之一)
实物连线中,我们一开始很长时间出不来波形,后来将C2从10uf(理论时可出来波形)换成0.1uf时,顺利得出波形。实际上,分析一下便知当C2=10uf时,频率很低,不容易在实际电路中实现。
2.4.2三角波—正弦波部分的计算
比较器A1与积分器A2的元件计算如下:
由式(2.8)得

取 ,则 ,取 ,RP1为47KΩ的点位器。取平衡电阻
由式(2.9)

当 时,取 ,则 ,取 ,为100KΩ电位器。当 时 ,取 以实现频率波段的转换,R4及RP2的取值不变。取平衡电阻 。
三角波—正弦波变换电路的参数选择原则是:隔直电容C3、C4、C5要取得较大,因为输出频率很低,取 ,滤波电容 视输出的波形而定,若含高次斜波成分较多, 可取得较小, 一般为几十皮法至0.1微法。RE2=100欧与RP4=100欧姆相并联,以减小差分放大器的线性区。差分放大器的静态工作点可通过观测传输特性曲线,调整RP4及电阻R*确定。
2.5 总电路图
先通过比较器产生方波,再通过积分器产生三角波,最后通过差分放大器形成正弦波。如图2.5.1所示,

图2.5.1三角波-方波-正弦波函数发生器实验电路

2.6 8038单片集成函数发生器
2.6.1 8038的工作原理
8038由恒流源I1、I2,电压比较器C1、C2和触发器①等组成。其内部原理电路框图和外部引脚排列分别如图2.8和图2.9所示。

图2.8 8038原理框图

图2.9 8038管脚图(顶视图)
1. 正弦波线性调节;2. 正弦波输出;3. 三角波输出;4. 恒流源调节;5. 恒流源调节;6. 正电源;7. 调频偏置电压;8. 调频控制输入端;9. 方波输出(集电极开路输出); 10. 外接电容;11. 负电源或接地;12.正弦波线性调节;13、14. 空脚
在图2.8中,电压比较器C1、C2的门限电压分别为2VR/3和VR/3( 其中VR=VCC+VEE),电流源I1和I2的大小可通过外接电阻调节,且I2必须大于I1。当触发器的Q端输出为低电平时,它控制开关S使电流源I2断开。而电流源I1则向外接电容C充电,使电容两端电压vC随时间线性上升,当vC上升到vC=2VR/3 时,比较器C1输出发生跳变,使触发器输出Q端由低电平变为高电平,控制开关S使电流源I2接通。由于I2>I1 ,因此电容C放电,vC随时间线性下降。当vC下降到vC≤VR/3 时,比较器C2输出发生跳变,使触发器输出端Q又由高电平变为低电平,I2再次断开,I1再次向C充电,vC又随时间线性上升。如此周而复始,产生振荡。若I2=2I1 ,vC上升时间与下降时间相等,就产生三角波输出到脚3。而触发器输出的方波,经缓冲器输出到脚9。三角波经正弦波变换器变成正弦波后由脚2输出。当I1<I2<2I1 时,vC的上升时间与下降时间不相等,管脚3输出锯齿波。因此,8038能输出方波、三角波、正弦波和锯齿波等四种不同的波形。
图2.8中的触发器,当R端为高电平、S端为低电平时,Q端输出低电平;反之,则Q端为高电平。
2.6.2 8038构成函数波形发生器
由图2.9可见,管脚8为调频电压控制输入端,管脚7输出调频偏置电压,其值(指管脚6与7之间的电压)是(VCC+VEE/5) ,它可作为管脚8的输入电压。此外,该器件的方波输出端为集电极开路形式,一般需在正电源与9脚之间外接一电阻,其值常选用10k左右,如图2.10所示。当电位器Rp1动端在中间位置,并且图中管脚8与7短接时,管脚9、3和2的输出分别为方波、三角波和正弦波。电路的振荡频率f约为0.3/[C(R1+RP1/2)] 。调节RP1、RP2可使正弦波的失真达到较理想的程度。
在图2.10中,当RP1动端在中间位置,断开管脚8与7之间的连线,若在+VCC与-VEE之间接一电位器,使其动端与8脚相连,改变正电源+VCC与管脚8之间的控制电压(即调频电压),则振荡频率随之变化,因此该电路是一个频率可调的函数发生器。如果控制电压按一定规律变化,则可构成扫频式函数发生器。

图2.10 8038接成波形产生器阿
3电路仿真
3.1电路仿真
3.1.1方波——三角波发生电路的仿真

图3.1 方波

图3.2 三角波

图3.3 方波——三角波
3.1.2三角波---正弦波转换电路的仿真

图3.4 三角波——正弦波

参考文献
[1]王 远.模拟电子技术(第二版)[M].北京:机械工业出版社,2000
[2]谢自美.电子线路设计实验测试(第二版)[M].武昌:华中科技大学出版社,2000
[3]路 勇.电子电路实验及仿真[M].清华大学出版社,2003
[4]胡宴如.模拟电子技术[M].北京:高等教育出版社,2000
[5]周跃庆.模拟电子技术基础教程[M].天津大学出版社, 2001
[6]曾建唐.电工电子实践教程[M].北京:机械工业出版社,2002
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
空气炸锅番薯 空气炸锅怎么炸番薯 空气炸锅炸番薯要多久 空气炸锅炸番薯要多长时间 回奶最长时间是多少天 国外LOL和DOTA2哪个火 那位高手能帮我翻译几个英文电影名? 小时候青春期都有黑眼圈是怎莫回事 眼睛周围有黑色圈圈是怎么回事 ...早晨也运动.就是不知道为何眼睛下会出现黑圈圈??? 锡林郭勒职业学院介绍 锡林郭勒职业学院地址是什么 测量方波转换成三角波中的积分电路都需要什么仪器... 为什么断开积分运算电路中的反馈电阻常会输出不正... multisim仿真积分电路的问题 怎么测积分电路的有效积分时间 基本积分电路实验报告 反向积分电路后的波形周期变了吗 我想学习php编程,如何系统的学习,推荐看什么书自... 你好 积分电路 方波积分得到的三角波为什么是下面... 用multisim做积分电路仿真,但出来的波形不对,一... 积分运算电路的实验步骤 用 proteus 仿真 积分 电路, 用示波器 没有波形显... 自学PHP用什么书 ,想制定个详细学习计划 积分电路中,当输入信号的频率为50HZ时,输出为什么... 通过运放组成的积分电路,输出了三角波10KHZ,在我... 为什么在积分电路中,随着输入方波重复频率的降低,... 求助推荐几本比较好的PHP开发的书籍啊..... 利用示波器观察积分电路的输入,输出波形时,示波器... 利用示波器观察积分电路的输入输出波形时,示波器的... 模电积分电路输出要满足什么条件才能观测到积分波形? 在观察积分电路输出波形时为什么要将Y轴输入衰减放... 小米note3换个音量键和开关机键多少钱 小米音量键坏了换一个多少钱 小米6修音量键要多少钱 用纸箱可以做什么? 换一个小米4音量下键多少钱?到维修点修要多少钱? 三年级用纸箱子可以做什么东西 小米note音量键坏了换个要多少钱 小米3的音量按键坏了修他要多少钱? 一个纸箱,可以做,什么东西? 换个小米2音量键大概多少钱 纸箱可以做些什么手工 我的小米音量键摔坏了,需要多少钱来维修 小米6换个音量键多少钱 换小米1的音量键多少钱呀 小米10音量键到底部多长 小米10换音量键 用箱子可以做什么手工? 小米6音量键摔坏了,怎么换? 每天快递收到手软,想没想过快递纸箱能用来做什么? 王者荣耀职业联赛kpl比赛BP环节时的背景音乐是什么...