资源描述
电子电路课程设计说明书原件
20
资料内容仅供参考,如有不当或者侵权,请联系本人改正或者删除。
电子电路课程设计说明书
设计题目: 函数信号发生器
课 程代 码: 8207251
专业及班级: 自动化 一班
学 生 姓名: 陈银龙
学 号: 31
指导教 师 : 唐 浦 华
一、 设计题目
函数信号发生器
二、 设计内容
设计一个能产生正弦波、 矩形波( 方波) 和三角波( 锯齿波) 的函数发生器
三、 功能要求
设计并制作一个函数信号发生器, 其要求如下:
[1] 信号频率范围: 1Hz∽100kHz;
[2] 频率控制方式:
① 手控 经过改变RC参数实现;
② 键控 经过改变控制电压实现;
③ 为能方便地实现频率调节, 建议将频率分档;
[3] 输出波形要求
① 方波 上升沿和下降沿时间不得超过200nS, 占空比在48%∽50%之间;
② 非线性误差≤2%;
③ 正弦波 谐波失真度≤2%;
[4] 输出信号幅度范围: 0∽20V;
[5] 信号源输出阻抗: ≤1Ω;
[6] 应具有输出过载保护功能;
[7] 具有数字显示输出信号频率和电压幅值功能
四、 基本设计思路
本系统以ICL8038集成块为核心器件, 制作一种函数信号发生器, 制作成本较低。ICL8038是一种具有多种波形输出的精密振荡集成电路, 只需要个别的外部元件就能产生低失真正弦波、 三角波、 矩形波等脉冲信号, 其振荡频率可经过外加的直流电压进行调节, 因此是压控集成信号产生器。输出波形的频率和占空比还能够由电流或电阻控制。由于外接电容C的充、 放电电流由两个电流源控制, 因此电容C两端电压UC的变化与时间成线形关系, 从而能够获得理想的三角波输出。8038电路中含有正弦波变换器, 故能够直接将三角波变成正弦波输出。另外还能够将三角波经过触发器变成方波输出。该方案的特点是十分明显的:
⑴线性良好、 稳定性好;
⑵频率易调, 在几个数量级的频带范围内, 能够方便地连续地改变频率, 而且频率改变时, 幅度恒定不变;
⑶不存在如文氏电桥那样的过渡过程, 接通电源后会立即产生稳定的波形;
⑷三角波和方波在半周期内是时间的线性函数, 易于变换其它波形。
五、 基本原理
ICL8038 芯片简介
1、 性能特点
具有在发生温度变化时产生低的频率漂移, 最大不超过50ppm/℃; 具有正弦波、 三角波和方波等多种函数信号输出; 正弦波输出具有低于1%的失真度; 三角波输出具有0.1%高线性度; 具有0.001Hz~1MHz的频率输出范围; 工作变化周期宽, 2%~98%之间任意可调; 高的电平输出范围, 从TTL电平至28V; 易于使用, 只需要很少的外部条件。
2、 I CL8038的应用
ICL8038是精密波形产生与压控振荡器, 其基本特性为: 可同时产生和输出正弦波、 三角波、 锯齿波、 方波与脉冲波等波形。
( 1) ICL8038电源电压范围宽, 采用单电源供电时, V+-GND的电压范围+10-+30V; 采用双电源供电时, V+-V-的电压可在±5-±15V内选取。电源电流约15mA。
( 2) 振荡频率范围宽, 频率稳定性好。频率范围是0.001Hz-300kHz, 频率温漂仅50ppm/℃(1ppm=10-6)。
( 3) 输出波形的失真小。正弦波失真度<5%, 经过仔细调整后, 失真度还可降低到0.5%。三角波的线性度高达0.1%。
( 4) 矩形波占空比的调节范围很宽, D=1%-99%, 由此可获得窄脉冲、 宽脉冲或方波。
( 5) 外围电路非常简单, 易于制作。经过调节外部阻容元件值, 即可改变振荡频率, 产生高质量的中、 低频正弦波, 矩形波( 或方波, 窄脉冲) ,三角波( 或锯齿波) 等函数波形, 其应用领域比普通单一波形的信号发生器更为广阔。另外8038还能实现FM调制, 扫描输出
3、 ICL8038原理简介
ICL8038采用DIP-14封装, 管脚如下图所示。芯片内部包括两个恒流源,
两个电压比较器, 两个缓冲器, 正弦波变换器, 模拟开关, RS触发器。在构成
函数波形发生器时, 应将第7,8两脚短接。其工作原理如下: 利用恒流源对外接电容进行充放电, 产生三角波(或锯齿波), 经缓冲器I从第3脚输出, 由触发器获得的方波( 或锯形波) , 经缓冲器Ⅱ从第九脚输出。再利用正弦波变换器将三角波变换成正弦波, 从第2脚输出。改变电容器的充放电时间, 可实现三角波与锯齿波方波与矩形波的互相转换。
如图为ICL8038的管脚排列图, 工作频率0.001HZ~300KHZ, 电源电压Vcc=30V, 输出三角波线性度≤0.1%, 输出电压4.2V-28V, 输出正弦波失真度≤1%, 占空系数在1-99%内可调。4脚、 5脚可外接电阻来调节恒流源的I2与I1比值, 以改变输出脉冲占空比。如果输出方波则R取值为10K即可, 也能够外接一个电位器来调节占空比。7脚、 8脚用来经过外加电压控制振荡频率, 即改变8脚电阻就能够改变电容C的充放电电流, 达到改变输出频率的目的。1脚、 12脚经过接入两个微调网络能够调节正弦波的失真度。
首先恒流源I2对电容C充电, 当充电至Vc=2/3Vcc时, 比较器A1输出高电平, 使RS触发器置1状态, Q=1。则电子开关S闭合, C上的电荷经恒流源I2进行放电, 设计时要求恒流源I2=2I1。当放电至1/3Vcc时, 比较器A2输出高电平, 使触发器置0态, Q=0, 则开关S断开, 放电截止, I1对C重新充电。这样在电容C上产生线性三角波, 经缓冲器后由③脚输出。RS触发器Q端的输出信号( 即控制开关S的脉冲) 本身就是方波脉冲, 由9脚输出。由电阻与三极管组成的折线逼近转换网络——正弦波变换器, 能够实现较宽频率范围内的三角波导正弦波的变换, 由2脚输出正弦波。
正弦波变换器的原理电路如图所示。它是利用折线近似的原理进行变换的。用了八段折线由R15~R23组成电阻分压链来提供波形变换时的电压转折点( 工作点) , 由十六个三极管组成八对PNP—NPN复合管射极跟随器进行三角波—正弦波的转换。八对复合管的直流偏置相对三角波的直流电平时对称分布的。这样当三角波为上升段变化时, 三极管T9、 T11、 T13、 T15因反偏而截止, T1、 T3、 T5、 T7则随三角波的上升而逐渐导通, 并使三角波在峰值附近进行衰减, 变换成正弦波的正版周。同样在三角波下降变化时, T1、 T3、 T5、 T7反偏截止, 而T9、 T11、 T13、 T15逐渐导通, 形成正弦波的负半周。在三角波一个周期内变化时, 经过电路已变换为正弦波。
六、 电路设计
图为由ICL8038构成的多波形发生器。由于ICL8038是集成的芯片, 只需要在ICL8038的芯片外加上一些电阻、 电容就能够实现一个函数信号发生器
1、 信号发生电路设计
单片函数发生器ICL80387能够同时输出方波、 三角波及正弦波, 在使用的时候只需要外接少量的电阻、 电容元件即可。R3、 R4为方波输出占空比调节电阻, 阻值为5kΩ, RV1用来对R1、 R2阻值进行微调; RV4、 RV5、 RV6以及R9组成分压网络, 能够改变输出的频率; C1、 C2、 C3、 C4、 C5为外接定时电容, 改变开关SW1的位置, 能够获得五个频率段的输出信号; 为了减小正弦波的失真度, 在ICL8038外又采用了两套微调网络RV3和RV2, 分别调节1脚和12脚的电位, 以调节正弦波的失真度。
由于ICL8038单片函数发生器有两种工作方式, 即输出函数信号的频率调节电压能够由内部供给, 也能够由外部供给。由于第7脚频率调节电压偏置一定, 因此函数信号的频率和占空比由R3、 R4和10脚上的电容决定, 其频率为F, 周期T, t1为振荡电容充电时间, t2为放电时间。
T=t1+t2 f=1/T
由于三角函数信号在电容充电时, 电容电压上升到比较器规定输入电压的1/3倍, 分得的时间为
t1=CV/I=(C+1/3•Vcc•R A)/(1/5•Vcc)=5/3RA•C
在电容放电时, 电压降到比较器输入电压的1/3时, 分得的时间为
t2=CV/I=(C+1/3•VCC)/(2/5•VCCRB-1/5•VCC/RA)=(3/5•RA*RB•C)/(2RA-RB)
f=1/( t1+t2) =3/{5RAC[1+RB/( 2RA-R) ]}
如果R3=R4, 就能够获得占空比为50%的方波信号。其频率f=3/( 10RAC) 。
2、 频率调节电路设计
当R3=R4=5kΩ时, 根据公式f=3/( 10RAC) 能够算出在1HZ~10HZ、 10HZ~100HZ、 100HZ~1kHZ、 1kHZ~10kHZ、 10kHZ~100kHZ这几个频率段时对应的10脚上的电容值。
8脚上的分压电路用来调节8脚的输入电阻, 这样能够对输出信号进行微调。经过对RV4、 RV5、 RV6的调节, 能够在当SW1处于不同档位的时候得到任意的频率, 首先对输出频率的连续可调。
3、 数据显示电路设计
对于正弦波、 方波和三角波的显示用一个示波器显示出来。
正弦波的幅值, 能够用一个LCD1602显示出来。首先, 把方波信号用ADC0832进行模数转换, 得到一个单片机89C52能够识别的数字信号, 再由单片机计算、 转换输出到LCD1602中显示出来。
对于信号的频率显示能够用两种方案:
方案一: 由于已经使用了单片机来显示方波信号的幅值, 我们也同时能够用单片机来检测方波信号的频率。在设计单片机测频程序是我们能够用单片机的两个定时器/计数器来实现, 定时器0来定时1s, 计数器1来记录方波信号点位改变的次数, 当定时器0引起中断时, 停止计数器1对方波信号电位改变次数的计数, 同时用单片机把这个时间段内计数器1所记录的书保存下来, 并送到LCD1602中显示出来。
方案二: 由于有频率计, 我们能够直接使用一个频率计来显示信号的频率。
对比喻案一和方案二, 方案二的可行性较高, 因为单片机的晶振频率为12MHZ, 则我们能够算出单片机的一个机器周期为1μs, 而我们的函数信号发生器的最高频率能够达到100kHZ。当函数信号发生器产生了100kHZ的信号时, 单片机就不能保证准确无误的记录1s内方波信号的电位变化次数, 容易产生误差, 而且频率计更容易实现。因此, 最终选择了方案二来显示信号的频率。
4、 正弦信号失真度的调节电路设计
正弦信号失真度的调节是经过对连在1脚、 12脚上的滑动变阻器阻值的改变来调节正弦信号的失真度的, 在调节时, 应该先保持与各滑动变阻器的值不变, 改变另一个滑动变阻器, 观察正弦波的变化情况, 当调节到最佳时, 就能够去调节另一个了。最后就能够调出最佳的正弦波信号。
5、 频率调节电路的设计
在对频率进行调节时, 要先把SW1打到相应的档位上去, 然后再对8脚上的电压进行调节, 也能够先保持一个不变调节另一个的方法, 直到调出特定的频率。
图为函数信号发生器的电路原理图。
七、 程序支持
//LCD1602头文件
#ifndef _LCD1602_H_
#define _LCD1602_H_
#include <reg52.h>
#include"lcd1602.h"
#define key_port P1
unsigned char key_down(void);
unsigned char key_code(void);
sbitLcdRs =P2^0;
sbitLcdRw =P2^1;
sbitLcdEn =P2^2;
sfrDBPort =0x80;
voidLCD_Write(bit style,unsigned char input);
voidLCD_Initial();
#define LCD_SHOW 0x04
#define LCD_HIDE 0x00
#define LCD_CURSOR 0x02
#define LCD_NO_CURSOR 0x00
#define LCD_FLASH 0x01
#define LCD_NO_FLASH 0x00
voidLCD_SetDisplay(unsigned char DisplayMode);
voidGotoXY(unsigned char X,unsigned char Y);
void Print (unsigned char *str);
#endif
//ADC0832驱动程序
#ifndef _adc0832_H_
#define _adc0832_H_
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsignedint
sbit ADCS =P3^3;
sbit ADDI =P3^7;
sbit ADDO =P3^7;
sbit ADCLK =P3^6;
uchar adc0832(uchar channel)
{
uchar i=0;
uchardat=0;
if(channel==0) channel=2;
if(channel==1) channel=3;
ADDI=0;ADCS=1;ADCLK=0;
ADDI=1;ADCS=0;ADCLK=1;
ADCLK=0;ADCLK=1;
ADDI=channel&0x1;
ADCLK=0;ADCLK=1;
ADDI=(channel>>1)&0x1;
ADCLK=0;ADDI=1;
dat=0;
for (i=0;i<8;i++)
{
dat|=ADDO;
ADCLK=1;
ADCLK=0;
dat<<=1;
if(i==7) dat|=ADDO;
}
ADCS=1;ADCLK=0;ADDO=1;
return(dat);
}
#endif
//LCD1602驱动程序
#include<reg52.h>
#include<intrins.h>
#include"lcd1602.h"
unsigned char LCD_Wait(void)
{
LcdRs=0;
LcdRw=1;
LcdEn=1;
LcdEn=0;
returnDBPort;
}
#define LCD_COMMAND 0
#define LCD_DATA 1
#define LCD_CLEAR_SCREEN 0x01
#define LCD _HOMING 0x02
voidLCD_Write(bit style,unsigned char input)
{
LcdEn=0;
LcdRs=style;
LcdRw=0; _nop_();
DBPort=input; _nop_();
LcdEn=1; _nop_();
LcdEn=0; _nop_();
LCD_Wait();
}
#define LCD_SHOW 0x04
#define LCD_HIDE 0x00
#define LCD_CURSOR 0x02
#define LCD_NO_CURSOR 0x00
#define LCD_FLASH 0x01
#define LCD_NO_FLASH 0x00
voidLCD_SetDisplay(unsigned char DisplayMode)
{
LCD_Write(LCD_COMMAND, 0x08|DisplayMode);
}
#define LCD_AC_UP 0x02
#define LCD_AC_DOWN 0x00
#define LCD_MOVE 0x01
#define LCD_NO_MOVE 0x00
voidLCD_SetInput(unsigned char InputMode)
{
LCD_Write(LCD_COMMAND,0x04|InputMode);
}
voidLCD_Initial()
{
LcdEn=0;
LCD_Write(LCD_COMMAND,0x38);
LCD_Write(LCD_COMMAND,0x38);
LCD_SetDisplay(LCD_SHOW|LCD_NO_CURSOR);
LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN);
LCD_SetInput(LCD_AC_UP|LCD_NO_MOVE);
}
voidGotoXY(unsigned char x,unsigned char y)
{
if(y==0)
LCD_Write (LCD_COMMAND,0x80|x);
if(y==1)
LCD_Write (LCD_COMMAND,0x80|(x-0x40));
}
void Print(unsigned char *str)
{
while(*str!='\0')
{
LCD_Write(LCD_DATA,*str);
str++;
}
}
//主程序
#include<reg52.h>
#include<lcd1602.h>
#include<adc0832.h>
void main()
{
unsigned char ad_data;
unsigned char a;
unsigned char disbuffer[6];
LCD_Initial();
a=adc0832(0)*50/256;
if(a!=0)
{
ad_data=a;
}
disbuffer[0]=(ad_data/100)+0x30;
disbuffer[1]=(ad_data%100/10)+0x30;
disbuffer[2]='.';
disbuffer[3]=(ad_data%10)+0x30;
disbuffer[4]='v';
disbuffer[5]='\0';
GotoXY(6,0);
Print(disbuffer);
}
八、 原件清单
元器件清单如下:
器件型号
数量
规格
备注
LCD1602
1
无
用于显示电压
频率计
1
无
用于频率的测量与显示
示波器
1
无
用来显示函数信号发生器产生的信号
上拉电阻x8
1
10kΩ
提高单片机的驱动能力
ADC0832
1
无
对信号进行模数转换
At89C52
1
无
对数字信号进行处理
ICl8038
1
无
用来产生信号
限流电阻
6
10kΩ
滑动变阻器
2
100kΩ
滑动变阻器
1
1kΩ
滑动变阻器
1
5kΩ
滑动变阻器
1
500Ω
滑动变阻器
1
3.3Ω
电容
1
6μF
电容
1
600nF
电容
1
60nF
电容
1
6nF
电容
1
0.6nF
多向开关
1
无
展开阅读全文