基于51单片机的函数发生器系统设计及四种波形频率详解

摘要

设计了一个基于DAC0832的信号发生器,使之输出不同频率的正弦波、三角波、锯齿波和方波,并通过按键切换不同的波形,也可以改变频率以及频率变化的步进。本方案选择了DAC0832作为核心芯片,并与51单片机结合,设计出一款建议的高精度频率信号发生器,具有体积小功率等优点。DAC0832是国家半导体公司生产的一款DA转换器。为了实现幅度可程控的功能,这里选用了2个DAC0832芯片完成功能,其中一个用来产生波形,另外一个设计成程控放大器进行改变幅度,它的放大倍数通过DAC0832的数字端口来实现,根据设定的输出幅值,单片机只需要通过公式换算出给予的对应电平。所有要输出的参数都能通过液晶LCD1602显示。

关键词:单片机; LCD1602;信号发生器;DAC0832

1 引言

1.1 目的和意义

信号发生器亦称信号发生器,主要作为实验用信号源,是现今各种电子电路实验设计应用中必不可少的仪器设备之一。目前,市场上常见的波形发生器多为纯硬件的搭接而成,波形种类多为锯齿、正弦、方波、三角等波形。用分立元件组成的信号发生器,通常是单信号发生器且频率不高,其工作不很稳定,不易调试;用集成芯片的信号发生器,可达到较高的频率和产生多种波形信号,但电路较为复杂且不易调试。利用DA转换器配合单片机可以实现波形产生的功能,而且可以根据需要进行调整,设计灵活。

当今是科学技术及仪器设备高度智能化飞速发展的信息社会,电子技术的进步,给人们带来了根本性的转变。现代电子领域中,单片机的应用正在不断的走向深入,这必将导致传统控制与检测技术的日益革新。单片机构成的仪器具有高可靠性、高性能价格比,在智能仪表系统和办公自动化等诸多领域得以极为广泛的应用,并走入家庭,从洗衣机、微波炉到音响汽车,处处可见其应用。因此,单片机技术开发和应用水平已逐步成为一个国家工业发展水平的标志之一。

信号发生器作为一种常见的应用电子仪器设备,传统的一般可以完全由硬件电路搭接而成,如采用555振荡电路发生正弦波、三角波和方波的电路便是可取的路径之一,不用依靠单片机。但是这种电路存在波形质量差,控制难,可调范围小,电路复杂和体积大等缺点。在科学研究和生产实践中,如工业过程控制,生物医学,地震模拟机械振动等领域常常要用到低频信号源。而由硬件电路构成的低频信号其性能难以令人满意,而且由于低频信号源所需的RC要很大。大电阻,大电容在制作上有困难,参数的精度亦难以保证。体积大,漏电,损耗显著更是其致命的弱点。一旦工作需求功能有增加,则电路复杂程度会大大增加。

信号发生器作为一种常见的电子仪器设备,既能够构成独立的信号源,也可以是高新能的网络分析仪,频谱仪以及自动测试装备的组成部分,信号信号发生器的关键技术是多种高性能仪器的支的组成部分,信号信号发生器的关键技术是多种高性能仪器的支撑技术,因为它是能够提高质量的精密信号源及扫描源,可使相应系统的检测过程大大简化,降低检测费用并且提高检测精度。

1.2 研究概况及发展趋势

波形发生器是能够产生大量的标准信号和用户定义信号,并保证高精度、高稳定性、可重复性和易操作性的电子仪器。信号波形发生器具有连续的相位变换、和频率稳定性等优点,不仅可以模拟各种复杂信号,还可对频率、幅值、相移、波形进行动态、及时的控制,并能够与其它仪器进行通讯,组成自动测试系统,因此被广泛用于自动控制系统、震动激励、通讯和仪器仪表领域。在 70 年代前,信号发生器主要有两类:正弦波和脉冲波,而信号发生器介于两类之间,能够提供正弦波、余弦波、方波、三角波、上弦波等几种常用标准波形,产生其它波形时,需要采用较复杂的电路和机电结合的方法。这个时期的波形发生器多采用模拟电子技术,而且模拟器件构成的电路存在着尺寸大、价格贵、功耗大等缺点,并且要产生较为复杂的信号波形,则电路结构非常复杂。同时,主要表现为两个突出问题,一是通过电位器的调节来实现输出频率的调节,因此很难将频率调到某一固定值;二是脉冲的占空比不可调节。在 70 年代后,微处理器的出现,可以利用处理器、A/D/和 D/A,硬件和软件使波形发生器的功能扩大,产生更加复杂的波形。这时期的波形发生器多以软件为主,实质是采用微处理器对 DAC的程序控制,就可以得到各种简单的波形。90 年代末,出现几种真正高性能、高价格的信号发生器、但是HP公司推出了型号为 HP770S的信号模拟装置系统,它由 HP8770A任意波形数字化和 HP1776A波形发生软件组成。     HP8770A实际上也只能产生8 中波形,而且价格昂贵。不久以后,Analogic公司推出了型号为 Data-2020的多波形合成器,Lecroy 公司生产的型号为9100 的任意波形发生器等。 到了二十一世纪,随着集成电路技术的高速发展,出现了多种工作频率可过 GHz 的DDS 芯片,同时也推动了信号波形发生器的发展,2003 年,Agilent的产品 33220A能够产生 17  种波形,最高频率可达到 20M,2005 年的产品N6030A  能够产生高达 500MHz  的频率,采样的频率可达 1.25GHz。由上面的产品可以看出,信号波形发生器发展很快近几年来,国际上波形发生器技术发展主要体现在以下几个方面:

(1)过去由于频率很低应用的范围比较狭小,输出波形频率的提高,使得波形发生器能应用于越来越广的领域。波形发生器软件的开发正使波形数据的输入变得更加方便和容易。波形发生器通常允许用一系列的点、直线和固定的信号段把波形数据存入存储器。同时可以利用一种强有力的数学方程输入方式,复杂的波形可以由几个比较简单的公式复合成 v=f (t)形式的波形方程的数学表达式产生。从而促进了信号波形发生器向任意波形发生器的发展,各种计算机语言的飞速发展也对任意波形发生器软件技术起到了推动作用。目前可以利用可视化编程语言(如Visual Basic ,Visual C 等等)编写任意波形发生器的软面板,这样允许从计算机显示屏上输入任意波形,来实现波形的输入。

(2)与VXI资源结合。目前,波形发生器由独立的台式仪器和适用于个人计算机的插卡以及新近开发的VXI模块。由于VXI总线的逐渐成熟和对测量仪器的高要求,在很多领域需要使用VXI系统测量产生复杂的波形,VXI的系统资源提供了明显的优越性,但由于开发VXI模块的周期长,而且需要专门的VXI机箱的配套使用,使得波形发生器VXI模块仅限于航空、军事及国防等大型领域。在民用方面,VXI模块远远不如台式仪器更为方便。

(3)随着信息技术蓬勃发展,台式仪器在走了一段下坡路之后,又重新繁荣起来。不过现在新的台式仪器的形态,和几年前的己有很大的不同。这些新一代台式仪器具有多种特性,可以执行多种功能。而且外形尺寸与价格,都比过去的类似产品减少了一半。

2.1主控模块的选型和论证

方案一:

采用MSP430系列单片机,该单片机是TI公司1996年开始推向市场的一种16位超低功耗的混合信号处理器。其内部集成了很多模拟电路、数字电路和微处理器,提供强大的功能。不过该芯片昂贵不适合一般的设计开发。

方案二

采用51系列的单片机,该单片机是一个高可靠性,超低价,无法解密,高性能的8位单片机,32个IO口,且STC系列的单片机可以在线编程、调试,方便地实现程序的下载与整机的调试。

因此选用方案二中的51系列单片机作为主控芯片。

2.2显示模块的选型和论证

方案一:

采用点阵式数码管显示,点阵式数码管是由八行八列的发光二极管组成,对于显示文字比较合适,如采用在显示数字显得太浪费,且价格也相对较高,所以不用此种作为显示。

方案二:

采用LED数码管动态扫描,LED数码管价格虽适中,对于显示数字也最合适,而且采用动态扫描法与单片机连接时,占用单片机口线少。但是由于数码管动态扫描需要借助74LS164移位寄存器进行移位,该芯片在电路调试时往往有很多障碍,所以不采用LED数码管作为显示。

方案三:

采用LCD液晶显示屏,液晶显示屏的显示功能强大,可显示大量文字,图形,显示多样,清晰可见,对于本设计而言一个LCD1602的液晶屏即可,价格也还能接受,需要的借口线较多,但会给调试带来诸多方便。

所以本设计中方案三中的LCD1602液显示屏作为显示模块。

2.3信号产生模块的选型和论证

方案一:

利用R2R型DA转换器DAC0832进行产生信号,把要产生的信号根据其规则建立一个ROM表,单片机每隔一段时间根据ROM表的值去改变数模转换器的电压输出值,如果ROM表示根据正弦变化记录的表则输出的波形则为正弦波,如此类推,只用通过改变时间的间隔即可改变输出波形的频率。

方案二:

利用集成芯片DDS芯片AD9833进行产生信号,该芯片可以通过与单片机通信设定其输出波形和频率,而且设定的频率精度非常高。DDS芯片中主要包括频率控制寄存器、高速相位累加器和正弦计算器三个部分。频率控制寄存器可以串行或并行的方式装载并寄存用户输入的频率控制码。

方案一由于使用的独立的DA转换器,设计比较灵活,只要预先先把波形的ROM表生产好存储到单片机内即可输出,定频率的设定波形而选用DDS芯片则只需要通过固定的时序控制则能方便产生设。但是由于DDS成本较为高昂,因此本设计选用DA转换器来实现波形产生的功能。

2.4程控放大模块的选型和论证

方案一:

选用DAC0832搭配外部电路构成程控放大器,由于DAC0832是一个8位DA转换器,因此能设置成256档放大倍数。通过单片机控制DA转换器的数字端口即可改变放大倍数。

方案二:

选用VCA810作为主芯片进行程控放大,VCA是一款高性能的压控放大器芯片,它有一个增益控制引脚,用户可以通过改变该脚的电压进行增益的控制,增益的控制范围为-40dB~40dB,不过VCA810需要搭配外部的DA转换器才能实现程控放大的功能。

由于DAC0832的价格较VCA810便宜,而且VCA810需要搭配外部DA转换器才能实现增益改变的功能,因此这里选用DAC0832进行程控放大。

一、硬件方案

硬件组成:本系统采用51单片机+LCD1602+DAC0832+按键+UA741等而成。

二、设计功能

1. 单片机型号:STC89C52/51、AT89C52/51、AT89S52/51都可通用。
2.产品自带单片机上电复位电路、手动复位电路(复位按键)、晶振电路(给单片机提供时钟周期)。
3.可以通过按键设置切换波形和频率。
4.可以产生4种波形,矩形波、三角波、正弦波、锯齿波。
5.通过1602液晶显示波形和输出频率,频率范围为1HZ-10000HZ,步进频率为1HZ。
6.输出幅度范围为0.1V到5V,步进为0.1V。
7.输出方波时,占空比可以设置,占空比范围10%–99%。

三、成品实物图

四、原理图   

五、PCB图   

六、 程序源码 

部分代码:

	TH0 = 0xf0;
    TL0 = 0xf0;
	TR0=1;                    //计数器停止计数	    
	ET0=1;                    //开启计数器0中断
	switch(gType)
	{
		case 0: LCDDispString(5,1,"Sin");break;
		case 1: LCDDispString(5,1,"Squ");break;
		case 2: LCDDispString(5,1,"Tri");break;
		case 3: LCDDispString(5,1,"Saw");break;
	}
	LCDDispNum(12,1,SaveTable[5]);LCDDispNum(14,1,SaveTable[6]);
	for(i=0;i<5;i++)
		LCDDispNum(3+i,2,SaveTable[i]);
	if(gType == 1)
	{
		LCDDispNum(13,2,SaveTable[7]);
		LCDDispNum(14,2,SaveTable[8]);
	}
	else
	{
		LCDDispChar(13,2,'-');
		LCDDispChar(14,2,'-');
	}

	EA=1;                     //开总中断
	   
	while(1)
	{
		key_scan();
	}
}	
//gType=0:正弦波
//gType=1:方波
//gType=2:三角波
//gType=3:锯齿波
void timer0(void) interrupt 1 //计数器0中断	 
{
	count = count + fword;
	switch(gType)
	{
		case 0:	DAPort = TableSin[count>>8];
				break;	   
		case 1: if(count>Duty*655)
					DAPort = 0xff;



				gTimeCount=0;
				LCDCursor();
				LCDDispChar(13,1,'.');
			}
			//功能设定四:设置方波占空比
			else if((gFunctionCount==4)&&(gType==1))
			{
				gTimeCount=0;
				LCDCursor();
				LCDDispNum(14,2,DutyNum[1]);
				LCDDispNum(13,2,DutyNum[0]);
			}
			//设定完毕
			else if((gFunctionCount==5)||((gFunctionCount==4)&&(gType!=1)))
			{
				gFunctionCount=0;
				
				LCDNotCursor();
				//计算频率值		
				freqtemp=(unsigned int )FreqNum[0]*10000+(unsigned int )FreqNum[1]*1000+(unsigned int)FreqNum[2]*100+(unsigned int)FreqNum[3]*10+(unsigned int)FreqNum[4];
				if(freqtemp>10000)//当输入频率大于10kHz时,将频率设置成10kHz
				{
					freqtemp = 10000;
					LCDDispNum(3,2,1);LCDDispNum(4,2,0);LCDDispNum(5,2,0);LCDDispNum(6,2,0);LCDDispNum(7,2,0);
					FreqNum[0]=1;FreqNum[1]=0;FreqNum[2]=0;FreqNum[3]=0;FreqNum[4]=0;
				}
				else if(freqtemp<1)//当输入频率小于1Hz时,将频率设置成1Hz
				{
					freqtemp = 1;
					LCDDispNum(3,2,0);LCDDispNum(4,2,0);LCDDispNum(5,2,0);LCDDispNum(6,2,0);LCDDispNum(7,2,1);
				}
				//计算幅值
				amptemp =(unsigned int )AmpNum[0] *10 +(unsigned int )AmpNum[1];
				if(amptemp>50)
				{
					LCDDispNum(12,1,5);LCDDispNum(14,1,0);
					AmpNum[0]=5;AmpNum[1]=0;
				}
				//计算占空比
				dutytemp=(unsigned char)DutyNum[0]*10   +(unsigned char)DutyNum[1];
				if(dutytemp>90)//当输入占空比大于90%时,将占空比设置成90%
				{	
					dutytemp = 90;
					LCDDispNum(13,2,9);LCDDispNum(14,2,0);
				}
				else if(dutytemp<10)//当输入占空比小于10%时,将占空比设置成10%
				{	
					dutytemp = 10;
					LCDDispNum(13,2,1);LCDDispNum(14,2,0);
					DutyNum[0]=1;DutyNum[1]=0;	
				}
				if(gType!=1)//当波形不为方波时,显示横杠表示无效

 资料包括:

需要完整的资料可以加入我的纷传圈子,里面有资源压缩包的百度网盘下载地址及提取码。

纷传点击用微信打开即可,过程有点繁琐请见谅。

物联沃分享整理
物联沃-IOTWORD物联网 » 基于51单片机的函数发生器系统设计及四种波形频率详解

发表评论