湖南工业大学 波形信号发生器
姓名 唐小军
赵俊达 许 涛
2011年3月25日
波形信号发生器设计报告
摘要:
本设计采用ICL8038为波形信号的发生器,用STCC52单片机为控制芯片,通过AD8032来控制频率和幅度,并且利用模拟开关CD4051来切换方波,正弦波和三角波。 关键词:
ICL8038 52单片机 DAC0832 模拟开关CD4051
方案比较:
经过我们认真搜索资料,发现我们对波形发生器最为熟悉,这个可以联系到我们学过的模电、数电、单片机、等重要知识,做起来比较得心应手,我们决定做波形发生器。
流程图
波形信号发生部分
采用ICL8038信号发生器来产生方波,正弦波和三角波。当调节外部
电路参数时,还可以获得占空比可调的矩形波和锯齿波,其频率范围从 1Hz 到几百 kHz,
频率的大小与外接相应电阻和电容有关,目前广泛应用于仪器仪表之
中。单片集成函数发生
器ICL8038函数发生器的原理框图及管脚排列图分别见图 1和图2. ICL8038 是一款性能优良的集成函数发生器,即可用单电源供电,也可双电源供电。
单电源供电时,将引脚 11 接地,6 脚接+VCC,其值为 10~30V:可双电源供电时,引脚 11接-V EE,引脚 6 接+VCC,它们的值为±5~±15V。频率的可调范围为 0.001Hz~300 kHz。输出矩形波的占空比可调范围为 2%~98%,上升时间为 180ns,下降时间为 40 ns,输出三角波的非线性小于 0.05%,输出正弦波的失真小于 1%。 在图1中,缓冲电路Ⅰ是电压跟随器,缓冲电路Ⅱ是反相器,用于隔离波形发生电路和负载,以提高负载能力;电压比较器Ⅰ和电压比较器Ⅱ的阀值电压分别为 2/3 V CC 和 1/3VCC,它们的输入电压为电容 C 两端的电压 uc,它们的输出电压分别控制 RS 触发器的置位端和复位端;为得到在比较宽的频率范围内由三角波到正弦波的转换,内设一个由电阻与晶体管组成的折线近似转换网络(正弦波变换器)以得到低失真的正弦信号输出;RS 触发器状态输出端用来控制电子模拟开关 S,以实现对电容的充放电功能;电流源电流 IS1与IS2的
1.
ILC8038 图1.ICL8038函数发生器原理框图
大小可通过外接电阻调节,但 IS2 必须大于等于 IS1,若 IS2= IS1,则触发器的输出为方波,经缓冲电路 2 输出到管脚 9; 在IS2= 2IS1 的条件下, Uc 上升与下降的时间相等,其电压输出为三角波,经缓冲电路Ⅰ输出到管脚 2,并通过三角波变正弦波的变换电路从管脚 3 输出正弦波,当 IS1﹤IS2﹤2IS1 时,UC 上升与下降的时间不相等,管脚 2 输出锯齿波,管脚 9 输出矩形波。当通电后,触发器的输出端 Q 为低点平时,开关 S 断开,电流源 Is1 给电容充电,因充电电流是恒流,故它两端的电压 uc 随时间线性上升,当 uc 达到电源电压的 2/3 倍时,电压比较器Ⅰ的输出电压发生跳变,使触发器的输出端 Q 由低电平跳为高电平,开关 S 接通。由于电流源的电流 IS2 大于 IS1 ,因放电电流是恒流,所以 uc 随时间线性下降。当它下降到电源电压的 1/3 倍时,电压比较器Ⅱ的输出电压发生跳变,使触发器的输出端 Q 由高电平跳变为低电平,开关 S 断开,电流源 IS1 再给电容充电,uc 又随时间线性上升。如此周而复始,电路产
生了自激振荡。
通过以上分析可知,改变电容充放电电流,可以输出占空比可调的矩形波和锯齿波。
但是,当输出不是方波时,输出也得不到正弦波了。
在图2中,引脚 8 为频率调节电压输入端,电路的振荡频率与该电压成正比;引脚
7 输出频率调节偏置电压,数值是引脚 7 偏置电压与电源+VCC 之差,它可作为引脚 8 的输入电压;引脚 4 和引脚 5 外接电阻和电位器,进行恒流源调节,用以改变输出信号的占空比和频率;引脚 10 外接充放电电容,改变其容量则改变了充放电时间常数,也即改变了触发器的翻转时间;引脚 13 和引脚 14 为空脚(NC)。
ICL8038的接法
显示部分:
控制部分
1. 利用8个共阴极数码管来显示波形的种类,波形的幅度以及波形的频率,利用74LS138来进行位选,将8段的数码管接到接了4.7K上拉电阻的P0口,来驱动数码管
2. 将按钮分别接到P1.5,P1.6,P1.7,三个接口分别用来控制波形的种类,幅度和频率。 接法如图所示:
D/A转换器DAC0832
DAC0832是采用CMOS工艺制成的单片直流输出型8位数/模转换器。如图4-82所示,它由倒T型R-2R电阻网络、模拟开关、运算放大器和参考电压VREF四大部分组成。运算放大器输出的模拟量V0为:
图4-82
由上式可见,输出的模拟量 与输入的数字量( 成正比,这就实现了从数字量到模拟量的转换。
一个8位D/A转换器有8个输入端(其中每个输入端是8位二进制数的一位),有一个模拟输出端。输入可有28=256个不同的二进制组态,输出为256个电压之一,即输出电压不是整个电压范围内任意值,而只能是256个可能值。图4-83是DAC0832的逻辑框图和引脚排列。
)
D0~D7:数字信号输入端。
ILE:输入寄存器允许,高电平有效。 CS:片选信号,低电平有效。 WR1:写信号1,低电平有效。 XFER:传送控制信号,低电平有效。 WR2:写信号2,低电平有效。 IOUT1、IOUT2:DAC电流输出端。
Rfb:是集成在片内的外接运放的反馈电阻。 Vref:基准电压(-10~10V)。 Vcc:是源电压(+5~+15V)。
AGND:模拟地 NGND:数字地,可与AGND接在一起使用。
DAC0832输出的是电流,一般要求输出是电压,所以还必须经过一个外接的运算放大器转换成电压
3. 控制频率的AD8032与P2口相连,控制幅度的AD8032与P3口相连。 调频
4. 控制幅度的AD8032与P2口相连,控制幅度的AD8032与P3口相连。 调幅
输入不同的的P3口的值(例如0xf0),可以调节不同幅度的波形
5. 利用CD4051模拟开关来切换波形
CD4051/CC4051是单8通道数字控制模拟电子开关,有三个二进控制输入端A、B、C和INH输入,具有低导通阻抗和很低的截止漏电流。幅值为4.5~20V的数字信号可控制峰值至20V的模拟信号。例如,若VDD=+5V,VSS=0,VEE=-13.5V,则0~5V的数字信号可控制-13.5~4.5V的模拟信号。这些开关电路在整个VDD-VSS和VDD-VEE电源范围内具有极低的静态功耗,与控制信号的逻辑状态无关。当INH输入端=“1”时,所有的通道截止。三位二进制信号选通8通道中的一通道,可连接该输入端至输出。
CD4051引脚功能说明 引脚号 1 2 4 5 12 13 14 15 9 10 11 3 符号 IN/OUT A B C OUT/IN 功能 输入/输出端 地址端 公共输出/输入端 P2 频率P2 (HZ) 频率 (HZ) INH VEE Vss VDD P2 频率 (HZ) P2 频率 (HZ) 6 7 8 16 输入状态 接通通道 INH C B A 0 0 0 0 “0” 0 0 0 1 “1” 0 0 1 0 “2” 0 0 1 1 “3” 0 1 0 0 “4” 0 1 0 1 “5” 禁止端 模拟信号接地端 数字信号接地端 电源+ 0 1 1 0 “6” 0 1 1 1 “7” 1 均不接通
P2的值与频率之间的关系图
P2 0xfc 0xf6 0xfc 100 0xf0 0xf6 110 0xea 0xf0 120 0xe4 0xea 130 0xde 0xe4 140 …… 0xde 150 0xd8 160 …… …… 0x70
300 频率(KHZ) P2 10 11 0xfc 310 12 Oxfa 320 13 0xf8 330 14 0xf6 340 15 0xf4 350 …… 0xf2 360 0xf0 370 …… …… 0xfc 频率(KHZ) 31 0xfa 32 0xfc 1100 0xfc 3100 0xf8 33 Oxf6 1200 0xfa 3200 0xf6 34 Oxf0 1300 Oxf8 3300 0xf4 35 0xea 1400 0xf6 3400 0xf2 0xe4 1500 …… 0xde 1600 0xd8 1700 …… …… 0x70 3000 36 0xf4 3500 …… 0xf2 3600 0xf0 3700 …… …… 0x84 10000 0x84 1000 0x70 30 0x84 100 P3口的值与幅度的关系图 方波
P3 0x03 Ox07 0x0b 0xof 正弦波 P3 0x05 0x0a 0x0f 0x15 三角波 P3 0x04 0x08 0x0c 0x10
UA741作为放大电路
幅值(V) P3 0.1 0.2 0.3 0.4 0x28 0x70 Ox94 Oxb8 幅值(V) 1.0 3.0 4.0 5.0 幅值(V) 0.1 0.2 0.3 0.4 P3 0x35 Ox65 0x95 0xf5 幅值(V) 1.0 2.0 3.0 5.0 幅值(V) 0.1 0.2 0.3 0.4 P3 0x27 …… 0x4f 0xbb 幅值(V) 1.0 …… 2.0 5.0
其他电路部分
外部电源输入接入全桥,可以使用交直流电源,使用直流电源时 可以进行极性转换,可以防止电源输入反接。电源稳压部分由三端稳 压提供正负12V 电源供给运算放大器,7805 提供正5V 电源供给单片机,LM78XX为正的电压,而Lm79XX为负的电压。 图如下
程序:
#include unsigned char frc; unsigned char FF=1; unsigned char AA=0x03; unsigned char BB=0x04; unsigned char CC=0x05; unsigned char count=0; unsigned char Q; void delay1() { unsigned char i,j; for(j=10;j>0;j--) for(i=0;i<110;i++); } void delay2() { unsigned char i,j; for(i=1000;i>0;i--) for(j=100;j>0;j--); } code code //------------------------------------选择波形 void chang_wave() { count++; if(count>3) { count=1; } if(count==1) { p14=0; p13=1; P3=0x04; FF=1; Q=1; } if(count==2) { p14=1; p13=0; P3=0x05; FF=1; Q=2; } if(count==3) { p14=0; p13=0; P3=0x03; FF=1; Q=3; } } //-------------------------------------幅度 void width_add() { if((p14==0)&&(p13==0)) { AA=AA+0x04; P3=AA; FF=FF+1; if(FF>=50) { FF=50; P3=0xc7; } } if((p14==0)&&(p13==1)) { BB=BB+0x04; P3=BB; FF=FF+1; if(FF>=50) { FF=50; P3=0xc8; } } if((p14==1)&&(p13==0)) { CC=CC+0x04; P3=CC; FF=FF+1; if(FF>=50) { FF=50; P3=0xc9; } } } void width_dec() { if((p14==0)&&(p13==0)) { AA=AA-0x04; P3=AA; FF=FF-1; if(FF<=1) { FF=1; P3=0x03; } } if((p14==0)&&(p13==1)) { BB=BB-0x04; P3=BB; FF=FF-1; if(FF<=1) { FF= P3=0x04; } } if((p14==1)&&(p13==0)) { CC=CC-0x04; P3=CC; FF=FF-1; if(FF<=1) { FF=1; P3=0x05; } } } void display() { unsigned int a1,a2; unsigned int b1,b2,b3,b4,b5; p10=0; p11=0; p12=0; P0=table1[Q]; delay1(); a1=FF/10; a2=FF%10; b1=num/10000; b2=num/1000%10; b3=num/100%10; b4=num/10%10; b5=num%10; p10=1; p11=0; p12=0; P0=table2[a1]; delay1(); p10=0; p11=1; p12=0; P0=table1[a2]; delay1(); p10=1; p11=1; p12=0; P0=table1[b1]; delay1(); p10=0; p11=0; p12=1; P0=table1[b2]; delay1(); p10=1; p11=0; p12=1; P0=table1[b3]; delay1(); p10=0; p11=1; p12=1; P0=table1[b4]; delay1(); p10=1; p11=1; p12=1; P0=table1[b5]; delay1(); } void frc_dec() { if(num<=100) { P2=0xfc; num=100; } else if(num<=300) { frc=frc+0x06; P2=frc; num=num-10; if(num==100) { frc=0xfc; } } else if((num>300)&&(num<=1000)) { frc=frc+0x02; P2=frc; num=num-10; if(num==300) { frc=0x84; } } else if((num>1000)&&(num<=3000)) { frc=frc+0x06; P2=frc; num=num-100; if(num==1000) { frc=0x70; } } else if((num>3000)&&(num<=10000)) { frc=frc+0x02; P2=frc; num=num-100; if(num==3000) { frc=0x84; } } else if((num>10000)&&(num<=30000)) { frc=frc+0x06; P2=frc; num=num-1000; if(num==10000) { frc=0x70; } } else if((num>30000)&&(num<=100000)) { frc=frc+0x06; P2=frc; num=num-1000; if(num==30000) { frc=0x84; } } } void frc_add() { if(100<=num<300) { frc=frc-0x06; P2=frc; num=num+10; if(num==300) { frc=0xfc; } } else if((num>=300)&&(num<1000)) { frc=frc-0x02; P2=frc; num=num+10; if(num==1000) { frc=0xfc; } } else if((num>=1000)&&(num<3000)) { frc=frc-0x06; P2=frc; num=num+100; if(num==3000) { frc=0xfc; } } else if((num>=3000)&&(num<10000)) { frc=frc-0x02; P2=frc; num=num+100; if(num==10000) { frc=0xfc; } } else if((num>=10000)&&(num<30000)) { frc=frc-0x06; P2=frc; num=num+1000; if(num==30000) { frc=0xfc; } } else if((num>=30000)&&(num<=100000)) { frc=frc-0x06; P2=frc; num=num+1000; if(num==100000) { frc=0xfc; } } } //------------------------------------主函数 void main() { unsigned char num1,num3; unsigned long num2,num4; frc=0xfc; P2=frc; p14=0; p13=0; Q=1; P3=0x03; while(1) { if(p15==0) { delay2(); if(p15==0) { chang_wave(); } } if(p16==0) { delay2(); while(p16==0) { num1++; if(num1>100) { num1=0; num2++; } // display(); } delay2(); while(p16==0); if(num2>80) { frc_dec(); } else { frc_add(); } num2=0; } if(p17==0) { delay2(); while(p17==0) { num3++; // } } if(num3>100) { num3=0; num4++; } display(); } delay2(); while(p17==0); if(num4>80) { width_dec(); } else { width_add(); } num4=0; } display();
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- baoaiwan.cn 版权所有 赣ICP备2024042794号-3
违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务