基于单片机的多功能信号发生器.docx
《基于单片机的多功能信号发生器.docx》由会员分享,可在线阅读,更多相关《基于单片机的多功能信号发生器.docx(33页珍藏版)》请在冰豆网上搜索。
基于单片机的多功能信号发生器
单位代码:
005
分类号:
TN
本科毕业论文(设计)
题目:
基于单片机的多功能
信号发生器设计
专业:
电子信息工程
姓名:
学号:
指导教师:
职称:
毕业时间:
基于单片机的多功能信号发生器设计
摘要:
信号发生器常被用来当作信号发生源,它可以产生多种波形,如三角波、锯齿波、矩形波(含方波)、正弦波,并且各波形的幅度和频率可调,正是因为信号发生器可以产生各种波形的信号,因此在在电路实验和设备检测生产实践和科技领域中都有着广泛的应用。
本系统主要包括四个部分,电源供电,单片机最小系统,DA转换,显示。
本系统主要用89C52单片机与DA转换器TLC5615构成的函数信号发生器,可产生方波、三角波、正弦波,可以由程序控制改波形的周期,并可以通过按钮实现不同波形切换。
DA输出信号的幅值为0-2.5V,频率步进1KHz可调,实际信号频率通过4位数码管显示。
关键字:
TLC5615;89C52;DA转换;信号发生器
Multi-functionsignalgeneratorbasedonsinglechipmicrocomputer
Abstract:
Placingsignageatsignalgeneratorisoftenusedasasignal,itcanproducevariouswaveform,suchastrianglewave,sawtoothwave,rectanglewave(includingsquarewave),sinewave,andthewaveamplitudeandfrequencyadjustable,itisbecausethesignalgeneratorcanproducevariouswaveformsignal,thereforeincircuitexperimentandtestequipmentinthefieldofproductionpracticeandscienceandtechnologyhasawiderangeofapplications.Systemmainlyincludesfourparts,powersupply,singlechipmicrocomputerminimumsystem,DAconversion,display.ThissystemmainlyUSESthe89c51andconstituteoftheDAconverterTLC5615functionsignalgenerator,canproducesquarewave,trianglewave,sinewave,canbecontrolledbytheprogramtochangethecycleofthewaveform,andcanimplementdifferentwaveformbypressingthebuttonswitch.Outputsignalamplitudeof0-2.5V,step1KHZfrequencyisadjustable,theactualsignalfrequencythroughthefourdigitaltubedisplay.
Keywords:
TLC5615;89C52;DAconverter;signalgenerator
目录
1引言1
2方案论证1
2.1单片机选择与论证1
2.2DA选择与论证1
2.3显示模块选择与论证2
2.4输入按键选择与论证3
3硬件电路设计4
3.1硬件设计总体框图4
3.2系统原理框图简介4
3.3单片机最小系统设计4
3.3.1单片机主控电路5
3.3.2单片机最小系统组成5
3.4DA输出设计6
3.4.1芯片简介7
3.4.2TL431简介7
3.4.3D/A转换器的组成8
3.4.4D/A转换器的主要技术指标8
3.6按键电路10
4软件设计11
4.1软件设计总流程图11
4.2波形输出软件设计11
4.2.1DA转换器软件设计12
4.2.2方波产生软件设计13
4.2.3三角波产生软件设计13
4.2.4正弦波产生软件设计14
4.3显示程序设计15
4.4波形频率设定16
5系统调试与仿真17
5.1方波仿真图17
5.2正弦波仿真图18
5.3三角波仿真图18
6结语18
致谢20
参考文献21
附录1电路原理图22
附录2电路PCB图23
附录3程序24
1引言
便携式和智能化越来越成为仪器的基本要求,对传统仪器的数字化,智能化,集成化也就明显得尤为重要。
平时常用信号源产生正弦波,方波,三角波等常见波形作为待测系统的输入,测试系统的性能。
在某些场合,我们需要特殊波形对系统进行测试,这是传统的模拟信号发生器和数字信号发生器很难胜任的。
新型数字信号发生器,利用单片机的强大功能,设计合适的人机交互界面,使用户能够通过手动的设定,设置所需波形。
本文是做基于单片机的信号发生器的设计,将采用编程的方法来实现三角波、方波、正弦波的发生。
根据设计的要求通过程序来改变波形的频率,并将所写程序装入单片机的程序存储器中。
在程序运行中,当接收到来自外界的命令,需要输出某种波形时再调用相应的中断服务子程序和波形发生程序,经电路的数/模转换器和运算放大器处理后,从信号发生器的输出端口输出。
2方案论证
2.1单片机选择与论证
一、单片机选择:
方案一:
采用增强型51单片机,内部自带DA。
方案二:
采用MCS-51系列89C52单片机。
2、方案论证:
我们在网上找了许多增强型的的单片机,内部自带AD及DA的,但是发现一般内部自带8位的AD及DA,带10位和12位AD及DA的价格太高,考虑到成本的问题,我们放弃了方案一。
方案二采用89C52单片机,89C52具有32个I/O口可以满足对I\O口的需求,同时该单片机价格便宜,并且我们对此单片机比较熟悉。
综合考虑,我们选择方案二。
2.2DA选择与论证
一、DA选择:
方案一:
采用我们熟悉的8位DA,DAC0832.
方案二:
采用10位DA,TLC5615.
方案三:
采用内部自带基准源的12位DAMAX531
2、方案论证:
方案一中选择DAC0832虽符合题目的要求,但是输出精度不高,误差大,输出的波形不圆滑,与理想的正弦波相差大,所以我们放弃方案一。
方案二为10位DA,输出的精度更高,同时也可通程序改进精度,使其变为精度更高的步进0.01V,同时该DA芯片价格适合。
方案三中MAX531内部自带2.048V基准源,输出精度高,但价格太贵,本着满足设计要求尽量节约成本的前提,我们放弃方案三。
综上所述,我们选择方案二。
图2-1TLC5615引脚图
2.3显示模块选择与论证
一、显示模块选择:
方案一、采用1602液晶屏作为显示模块
方案二、采用数码管作为显示模块
二:
方案论证:
方案一中1602可以显示2行英文字符和数字,电路连接简单,占用单片机I/0口少。
缺点是显示字符小,不易看清,价格太高,程序编写复杂。
图2-2LCD1602实物图
方案二采用数码管至少要4位,则要占用12个I/O口。
数码管显示时采用动态扫描功耗较低,显示清楚,易于辨认。
程序编写简单,价格低,缺点是显示信息量较少,不能显示符号。
图2-34位数码管实物图
综合考虑,我们决定选取方案二。
2.4输入按键选择与论证
1、输入按键选择:
方案一、采用4*4键盘
方案二、采用6按键,第一个和第二个加减频率100Hz,第三个变换波形,第四个空置,第五个和第六个加减频率10Hz。
二、方案论证:
方案一中主要采用4*4的矩阵键盘,可以设置0-9和步进,小数点等按键,可以快速的输入。
但是4*4键盘占用的PCB面积较大,增加了PCB的成本,增加了PCB的布线难度,并且得占用8个单片机I/0口,这种方案不可取。
方案二中虽不能直接输入0-9,但是可以通过“+”和“-”来实现0-9数字的输入,这样只占用了6个单片机I/O口,节约3个I/O口,同时PCB的面积和成本也进一步缩小。
综上考虑,我们选择方案二。
3硬件电路设计
3.1硬件设计总体框图
信号输出
图3-1硬件设计总体框图
3.2系统原理框图简介
本系统主要包括:
电源,单片机最小系统,按键,数码管显示,DA转换器,5个部分。
系统采用5V供电,用户通过按键设定选择所要输出的波形,单片机控制DA输出相关的波形,DA输出的信号经过运算放大器放大信号幅值,然后输出,信号的频率通过数码管显示。
输出的波形类型通过LED状态灯来显示。
3.3单片机最小系统设计
本系统主要采用AT89C52单片机,AT89C52是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。
使用Atmel公司高密度非易失性存储器技术制造,与工业80C52产品指令和引脚完全兼容。
片上Flash允许程序存储器在系统可编程,亦适于常规编程器。
在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得AT89C52为众多嵌入式控制应用系统提供高灵活、有效的解决方案。
3.3.1单片机主控电路
图3-2单片机最小系统
图3-2中,LED1-LED4是输出波形状态指示灯,P0口接的是数码管的段,P2口低4位接数码管的位选,高三位接DA转换器TLC5615,SW1-SW6是接按键,X1,X2是单片机时钟电路,RST是单片机复位电路。
3.3.2单片机最小系统组成
单片机最小系统是指单片机能工作的最基本的系统,89C52单片机的最小系统主要包括以下几个部分:
4V-5.5V的数字电源,时钟,复位,此外由于我们是从单片机内部存储器读取程序,所以单片机的EA引脚必须接为高电平。
电源部分连到3.7V锂电池。
在单片机的电源端必须接一个瓷片电容,主要起退耦作用,以使单片机能稳定工作。
时钟电路主要是提供单片机内部时钟信号,产生单片机所必须的时钟频率,单片机的一切指令的执行都是建立在这个基础上的,晶振的提供的时钟频率越高,那单片机的运行速度也就越快。
本系统主要采用的是12M晶振,配合2个30pF的电容构成晶体振荡电路。
为确保微机系统中电路稳定可靠工作,复位电路是必不可少的一部分,复位电路首先是进行上电复位,复位电路旁边的1uF电容在上电瞬间给RST端一个瞬时的高电平信号,当这个电容上面的电量充满时高电平的信号将回落,即RST端的高电平信号保持的时间是由外部这个充电电容决定的。
另外,在复位期间,端口引脚处于随机状态,复位后,系统将端口置为全“l”态。
如果系统在上电时得不到有效的复位,则程序计数器PC将得不到一个合适的初值,因此,CPU可能会从一个未被定义的位置开始执行程序,此时会造成单片机在上电的瞬间出现不稳定的情况发生,所以为了能让单片机稳定的工作,必须提供必要的复位电路。
3.4DA输出设计
DA输出主要采用10位DATLC5615,电压基准源采用TL431分压得到。
C2为滤波电容,TL431输出电压时,流过它的电流最低为1mA,,所以我们通过一个1K电阻使其工作电流大于1mA。
这样其1脚对地的电压就为基准电压2.5V。
图3-3DA输出
图3-4基准电压电路
基准电压连接如图3-4所示。
3.4.1芯片简介
TLC5615为美国德州仪器公司1999年推出的产品,是具有串行接口的数模转换器,其输出为电压型,最大输出电压是基准电压值的两倍。
带有上电复位功能,即把DAC寄存器复位至全零。
性能比早期电流型输出的DAC要好。
只需要通过3根串行总线就可以完成10位数据的串行输入,易于和工业标准的微处理器或微控制器(单片机)接口,适用于电池供电的测试仪表、移动电话,也适用于数字失调与增益调整以及工业控制场合。
图3-5TLC5615引脚图
/CS:
芯片选用通端,低电平有效;
DOUT:
用于级联时的串行数据输出端;
AGND:
模拟地;
REFIN:
基准电压输入端,2V~(VDD-2);
OUT:
DAC模拟电压输出端;
VDD:
正电源端,4.5~5.5V,通常取5V。
3.4.2TL431简介
德州仪器公司(TI)生产的TL431是一个有良好的热稳定性能的三端可调分流基准源。
他的输出电压用两个电阻就可以任意的设置到从Verf(2.5V)到36V范围内的任何值。
该器件的典型动态阻抗为0.2Ω,在很多应用中用它代替齐纳二极管,例如,数字电压表,运放电路,可调压电源,开关电源等。
图3-6TL431引脚图
TL431是一种并联稳压集成电路。
因其性能好、价格低,因此广泛应用在各种电源电路中。
输出电压范围为2.5~36V,
稳压值从2.5--36V连续可调,
内基准电压为2.5V,
输出电流1.0--100毫安。
低动态输出阻抗:
0.22Ω。
3.4.3D/A转换器的组成
1、倒T形电阻网络D/A转换器它由即倒T电阻网络、模拟开关、求和放大器及基准电源组成。
2、输出模拟电压U0值与输入二进制值D为成正比的关系,从而能实现了D/A转换。
U0=-UR(Dn-12n-1+Dn-22n-2+---+D12+D00)/2n
U0为输出电压,D为输入二进制值,UR或(UREF)为基准电压
3.4.4D/A转换器的主要技术指标
1、分辨率
DAC分辨率是指最小输出电压与最大输出电压之比。
分辨率与DAC的位数有关,位数越高,分辨率值越小,分辨能力越高。
例如十二位数一模转换器的分辨率为
TLC5615的分辨率为
VSEP=VREF*
2.5V/1023
0.0024V
DA输出电压为UOUT
UOUT=VSEP*A
其中A由用户设置,调节输出电压大小
3.5数码管显示电路
图3-7数码管显示电路
3.5.1数码管显示分析
显示电路为四位数码管,用来显示实时波形的频率。
通过数码管上显示,我
们可以清楚的知道当前波形的频率,以及工作的状态。
并可以通过按键来调节实时的工作频率。
在实际的单片机系统中,往往需要多位显示。
动态显示应用非常广泛是一种最常见的多位显示方法,。
用数码管显示测得的数据,数码管有8段而每段必需占用一个单片机的IO口,所以一位数码管必须占个单片机IO口,本次设计采用4位数码管,则需要32个I/O口,而89C52单片机的I/O口只有32个。
动态显示能够很好的解决数码管占用单片机IO口过多的问题。
所有数码管的段选全部连接在一起,如何能显示不同的内容呢?
动态显示的原理是多位数码管,交替来进行显示,利用人的视觉暂留效果使人看到好像有多个数码管同时显示。
在编程时,要用单片机控制段选和位选,所谓的位选是选中其中一个数码管,然后利用单片机输出段码,需要显示的数字就能显示在这位数码管上了,延时一段时间后,再选中另一个数码管,再输出对应的段码,高速交替。
在动态程序中,各个位的延时时间长短是非常重要的,如果延时时间长,则
会出现闪烁现象;如果延时时间太短,则会出现显示发暗且有重影。
静态驱动就是给单独每一个LED供电。
这样每个LED都有足够的电流,亮度也相应的比较高。
动态扫描驱动就是把本来供给一个LED灯的电流,同时分给了N个灯,所以它的亮度会有所降低。
当然在同时供给两个led灯电流时不是平均的分配电流,而是led间扫描期间电流不断地交替,扫描的频率依据单片机的速度决定,也就是说各位的数码管上的电流在扫描频率内是供个其中一个led,在下一个扫描频率内是供给了另一个led。
若我们想让这个4位数码管的每段工作时的电流为8mA.Uled为正常工作时的电压取1.7V。
所以我们选取100欧的限流电阻。
这样每个LED工作时的电流约为8mA.在保证LED能亮的同时不会被烧坏。
3.6按键电路
图3-7为键盘接口电路的原理图,图中键盘和TLC5615的PA口相连,AT89C51的P0口和TLC5615的D0口相连,AT89C51不断的扫描键盘,看是否有键按下,如有,则根据相应按键作出反应。
其中“SW1”号键频率加100HZ,“SW2”号键频率减100HZ,“SW3”号键波形切换。
“SW4”号键为备用空按键,“SW5”号键为减10Hz,“SW6”号键为加10HZ。
图3-7按键电路
4软件设计
4.1软件设计总流程图
N
图4-1软件流程图
软件系统设计主要分为DA输出,显示,按键这三个部分。
通电之后,程序先初始化,判断键盘有无输入,若无输入,则输出默认的波形与频率。
若有输入,则读取输入的值,并相应的改变输出,并显示输出。
4.2波形输出软件设计
键盘对单片机输入数据,(所要得到的电压值),单片机将得到的数据进行转化成D/A转换器TLC5615所需要的数字信号。
假设键盘输入的电流值为A,由于TLC5615为10位的D/A转换器,待转换的数字信号最大值为2^10-1=1023,考虑到数值连续性问题细调D/A采用990档.
而我们选用的基准电压源为2.5V,所以每档的电压值为0.01V。
DA最大输出为990/1023。
输出最大电压为0.99V,经过放大之后变为9.9V。
波形产生的流程图如下所示。
三角波
图4-2DA波形产生原理
4.2.1DA转换器软件设计
voidda5615(unsignedintda)//DA子函数
{
unsignedchari;
da<<=6;
CS=0;
SCLK=0;
for(i=0;i<12;i++)
{
DIN=(bit)(da&0x8000);
SCLK=1;
da<<=1;
SCLK=0;
}
CS=1;
SCLK=0;
for(i=0;i<12;i++);//12位数值转换成串行输给DA芯片
}
4.2.2方波产生软件设计
voidfangbo()
{
da5615(512);
delay(f1);
da5615(0);
delay(f1);
P1=0xf7;Au
}
t
图4-3方波
方波电平变化为0到最大幅值,所以让单片机控制DA输出在最大与最小之间变化,这样不可以产生一个方波。
4.2.3三角波产生软件设计
voidsanjiao()
{
unsignedinti;
for(i=0;i<512;i++)
{
temp=i;
da5615(temp);
}
for(i=512;i>0;i--)
{
temp=i;
da5615(temp);
}
P1=0xfb;AU
}
T
图4-4三角波
三解波产生的原理为,让单片机控制DA输出模拟电压幅度从0逐渐增加到最大幅度,然后再由最大幅度降到0,这样便产生了一个三角波
4.2.4正弦波产生软件设计
voidvout_sin()//输出正弦波
{
floatx,vout;//用于正弦波发生器
for(x=-3.1415;x<3.1415;x+=0.05)//正弦波发生器
{
vout=512*(1+sin(x))/2;//输出值Vout必须大于0
temp=(unsignedint)vout;
da5615(temp);
//delay
(2);
delay
(2);
}
P1=0xfe;
}
图4-5正弦波
正弦波的产生原理为电压幅值点必须接近于一个正弦信号,我们采用以下公式512*(1+sin(x))/2来得到近似正弦信号的点。
最终得到的波形信号并不是完整的正弦波,而是由一个一个离散的点组成的近似正弦信号的波形。
4.3显示程序设计
voidTimer1_ISR(void)interrupt3using1
{
unsignedcharj;
EA=0;//禁止全局中断
TR1=0;
P2=counter[j]&0xf0;
//delay
(2);
switch(j)
{case0:
P0=0xff;delay
(2);P0=seven_seg[scan1];break;
case1:
P0=0xff;delay
(2);P0=seven_seg[scan2];break;
case2:
P0=0xff;delay
(2);P0=seven_seg[scan3];break;
case3:
P0=0xff;delay
(2);P0=seven_seg[scan4];break;
default:
break;//j为其他情况是跳出循环
}
j++;
if(j==4)j=0;
TH1=0xEC;//定时5ms
TL1=0x78;
EA=1;
TR1=1;
}
显示部分采用4位数码管,为动态显示原理,4位数交替显示。
为了能让单片机更有效的执行显示程序,故把显示程序放入中断程序里面执行,这样可以在按键时避免因为按键的延时而让单片机不能执行显示程序,从而造成在按键时会出现数码管抖动的现象发生。
4.4波形频率设定
voidTimer0_isr(void)interrupt1using1
{
if(K1==0)
{scan3++;
if(scan3==10)scan3=9;
f1=scan3*10+scan2;
}
if(K2==0)
{scan3--;
if(scan3<0)scan3=0;
f1=scan3*10+scan2;
}
if(K5==0)
{scan2++;
if(scan2==10)scan2=9;
f1=scan3*10+scan2;
}
if(K6==0)
{scan2--;
if(scan2<0)scan2=0;
f1=scan3*10+scan2;
}
}
voidISR_Key(void)interrupt0using1
{//EX0=0;
if(K3==0)
wave++;
if(wave==5)wave=1;
}
输出频率主要能过按键来设定,AT89C51不断的扫描键盘,看是否有键按下,如有,则根据相应按键作出反应。
5系统调试与仿真
软件部分主要采用keil结合C语言来编写,上位机采用VB语言来编写。
KeilC51是美国KeilSoftware公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明