采用TLC5620设计各种波形发生器.docx
《采用TLC5620设计各种波形发生器.docx》由会员分享,可在线阅读,更多相关《采用TLC5620设计各种波形发生器.docx(23页珍藏版)》请在冰豆网上搜索。
![采用TLC5620设计各种波形发生器.docx](https://file1.bdocx.com/fileroot1/2023-6/20/ab43a608-40d4-4c6a-878f-0167018424f7/ab43a608-40d4-4c6a-878f-0167018424f71.gif)
采用TLC5620设计各种波形发生器
采用DA设计各种波形发生器
导师:
欧阳斌林
班级:
电信1001
组员:
杨利红A07100205
张甲林A07100206
日期:
2013年6月18日
摘要
本次D/A转换器设计以单片机AT89S52为主控制器,实现了波形的产生,频率的选择以及波形的选择等功能。
本设计的主要功能是用单片机产生三角波,正弦波等波形,然后通过开关按键选择不同的频率和波形输出。
本设计采用常用的D/A转换器件TLC5620来使单片机输出的数字信号转换为模拟信号,然后再通过运算放大器把D/A输出的电流信号转换为电压信号输出,这样以便用示波器对波形信号进行测量。
这样就完成了D/A转换器的核心部分的设计。
关键词:
单片机TLC5620三角波正弦波梯形波
采用DA设计各种波形发生器
第一章引言
1.1系统背景介绍
D/A转换器,作为实验用的模拟信号源,是现今各种电子电路实验设计应用中必不可少的仪器设备之一。
目前,市场上常见的D/A转换器多为纯硬件的搭接而成,且波形种类有限,多为锯齿、正弦、方波、三角等波形。
当今是科学技术及仪器设备高度智能化飞速发展的信息社会,电子技术的进步,给人们带来了根本性的转变。
现代电子领域中,单片机的应用正在不断的走向深入,这必将导致传统控制与检测技术的日益革新。
单片机构成的仪器具有高可靠性、高性能价格比,在智能仪表系统和办公自动化等诸多领域得以极为广泛的应用,并走入家庭,从洗衣机、微波炉到音响汽车,处处可见其应用。
因此,单片机技术开发和应用水平已逐步成为一个国家工业发展水平的标志之一。
D/A作为一种常见的应用电子仪器设备,传统的波形产生一般可以完全由硬件电路搭接而成,如采用555振荡电路发生正弦波、三角波和方波的电路便是可取的路径之一,不用依靠单片机。
但是这种电路存在波形质量差,控制难,可调范围小,电路复杂和体积大等缺点。
在科学研究和生产实践中,如工业过程控制,生物医学,地震模拟机械振动等领域常常要用到低频信号源。
而由硬件电路构成的低频信号其性能难以令人满意,而且由于低频信号源所需的RC要很大。
大电阻,大电容在制作上有困难,参数的精度亦难以保证。
体积大,漏电,损耗显著更是其致命的弱点。
一旦工作需求功能有增加,则电路复杂程度会大大增加。
利用单片机采用程序设计方法来产生低频信号,其频率底线很低。
具有线路相对简单,结构紧凑,价格低廉,频率稳定度高,抗干扰能力强,用途广泛等优点,并且能够对波形进行细微调整,改良波形,使其满足系统的要求。
只要对电路稍加修改,调整程序,即可完成功能升级。
1.2D/A转换器的工作原理
数字/模拟转换器(D/A)用来将数字量转变为模拟量。
本设计是基于C52单机的D/A转换器,其可以产生正弦波,锯齿波,方波以及三角波。
本设计的原理大概为:
以正弦波为例,它实现的原理是把正弦波在一个周期分为256或者64或者32个点,点和点之间的间隔是相等的并通过延时程序来实现。
我们先使单片机P0口先输出00H,然后间隔一段时间再输出第二个点,再延时相同的时间输出第三个点,直到输出FFH。
这样算一个周期完成。
但单片机这样输出的信号只是正弦波的大概,并不是一个平滑完整的波形。
我们必须通过一个D/A转换器件把它从数字信号变为模拟信号,但是此时又产生了一个问题,通过D/A转换的模拟信号为电流信号。
这样的信号示波器是无法识别的,这样我们就必须通过一个运算放大器把电流信号转换为标准电压信号。
这样就基本完成了发生器的设计。
当然方波和三角波的实现和正弦波的实现原理基本相同,所以在此我们就不必赘述。
我设计的D/A转换器是可以调频的。
其调频的原理是:
把单片机定时/计数器的最大可计数的时间计算出来,然后我们就可以等间隔步进的从最小的一个计数值来改变计数的时间,使得定时/计数器的溢出时间长短不同,这样就可以改变波形的频率。
第二章系统概述
2.1单片机概述
2.1.1单片机的选择
随着微电子技术的飞速发展,CPU已经变成低成本器件。
在可能的情况下,各种机电设备已经或者正在嵌入CPU构成的嵌入式系统。
据VirginiaTech公司报告,嵌入式系统中所使用的CPU数量已经超过通用PC中CPU数量的30倍。
现在系统研究的重点已从通用系统转向专用系统,以及从一般性能转向可靠性、可用性、安全性、自主性、可扩展性、功能性、灵活性、成本、体积、功耗及可管理性上。
2.1.2AT89C52单片机介绍:
图1.AT89C52单片机引脚图
AT89C52是一个低电压,高性能CMOS8位单片机,片内含8kbytes的可反复擦写的Flash只读程序存储器和256bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元,功能强大的AT89C52单片机可为您提供许多较复杂系统控制应用场合。
AT89C52有40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,3个16位可编程定时计数器,2个全双工串行通信口,2个读写口线,AT89C52可以按照常规方法进行编程,也可以在线编程。
其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的Flash存储器可有效地降低开发成本。
AT89C52有PDIP、PQFP/TQFP及PLCC等三种封装形式,以适应不同产品的需求。
主要功能特性:
·兼容MCS51指令系统·8k可反复擦写(>1000次)FlashROM
·32个双向I/O口·256x8bit内部RAM
·3个16位可编程定时/计数器中断·时钟频率0-24MHz
·2个串行中断·可编程UART串行通道
·2个外部中断源·共6个中断源
·2个读写中断口线·3级加密位
·低功耗空闲和掉电模式·软件设置睡眠和唤醒功能
2.2D/A概述
2.2.1D/A转换技术指标
D/A转换器的输入为数字量,经转换后输出为模拟量。
有关D/A转换器的技术性能指标很多,例如绝对精度,相对精度,线性度,输出电压范围,温度系数,输入数字代码种类等等。
对这些技术性能指标,这里不做全面的详细说明,仅对几个与接口有关的技术性能指标作以介绍。
(1)分辨率。
分辨率是D/A转换器对输入量变化敏感程度的描述,与输入数字量的为数有关。
如果数字量的位数为n,则D/A转换器的分辨率为1/2n。
这就意味着D/A转换器能对满刻度的1/2n输出量作出反应。
例如,8位数的分辨率为1/256,10位数的分辨率为1/1024。
因此,数字量的位数越多,分辨率就越高,亦即转换器对输入量变化的敏感程度也就越高。
使用时,应根据分辨率的需要来选定转换器的位数。
(2)建立时间。
建立时间是描述D/A转换速度快慢的一个参数,指从输入数字量变化到输出达到终值误差+1/2LSB时所需的时间,通常以建立时间来表明转换速度。
转换器输出形式为电流时,建立时间较短,而输出形式为电压时,由于建立时间还要加上运算放大器的延迟时间,因此建立时间要长一些。
但总的来说,D/A转换速度远高与A/D转换,例如快速的D/A转换器的建立时间仅为1us。
(3)接口形式。
D/A转换器与单片机的接口方便与否,主要决定于转换器本身是否带数据锁存器。
通常有两类D/A转换器:
一类不带锁存器;另一类则带锁存器。
对于不带锁存器的D/A转换器,为了保存来自单片机的转换数据,在接口要加锁存器,因此这类转换器必须接在口线上而不能直接接在数据总线上;而带锁存器的D/A转换器,可以把它看作是一个输出口,因此可以直接接在数据总线上,而不需另加锁存器。
2.2.2TLC5620简介:
(1)TLC5620C是带有高阻抗缓冲输入的4通道8位电源输出数模转换器集合。
这些转换器可以产生单调的、一至两倍于基准电压和接地电压差值的输出。
通常情况下TLC5620的供电电压为一个5V电源。
器件内集成上电复位功能,确保启动时的环境是可重复的。
对TLC5620C的数字控制是通过一根简单的3路串行总线实现的。
该总线兼容CMOS,并易于向所有的微处理器和微控制器设备提供接口。
11位的命令字包括8位数据位,2位DAC选择位和1位范围位,后者用来选择输出范围是1倍还是2倍。
DAC寄存器采用双缓存,允许一整套新值被写入设备中。
通过LDAC实现DAC输出值的同时更新。
数字量的输入采用史密斯触发器,从而有效降低噪声。
TLC5620的特点对应原理框图如下:
图2.TLC5620原理框图
(2)TLC5620硬件接口
图3.TLC5620引脚名称如图所示
TLC5620可方便的与单片机连接使用。
与单片机的接口如图所示:
图4.TLC与单片机的连接图
其中VREF为2.5V基准源,四个通道都采用其作为基准源,输入5V电压不输出电压都经过滤波,保证精度。
(3)TLC5620工作时序
TLC5620是串联型8位D/A转换器(DAC),它有4路独立的电压输出D/A转换器,具备各自独立的基准源,其输出还可以编程为2倍戒1倍,在控制TLC5620时,只要对该芯片的DATA、CLK、LDAC、LOAD端口控制即可,TLC5620控制字为11位,包括8位数字量,2位通道选择,1位增益选择。
其中命令格式第1位、第2位分别为A1、A0,第3位为RNG,即可编程放大输出倍率,第4到11位为数据位,高位在前,低位在后。
通道不同输出关系如下
图5.不同通道输出关系图
管脚DATA为芯片串行数据输入端,CLK为芯片时钟,数据在每个时钟下降沿输入DATA端,数据输入过程中LOAD始终处于高电平,一旦数据输入完成,LOAD置低,则转换输出,实验中LDAC一直保持低电平,DACA、DACB、DACC、DACD为四路转换输出,REFA、REFB、REFC、REFD为其对应的参考电压。
TLC5620的时序图如图所示。
图6.TLC5620的时序图
当LOAD为高电平时,数据在CLK每一下降沿由时钟同步送入DATA端口。
如图(a)所示,一旦所有的数据位送入,LOAD变为脉冲低电平,以便把数据从串行输入寄存器传送到所选择的DAC。
如果LDAC为低电平,则所选择的DAC输出电压更新且LOAD变为低电平。
在图(b)中,串行编程期间内LDAC为高电平,新数值被LOAD的脉冲低电平打入第一级锁存器后,
再由LDAC脉冲低电平传送到DAC输出。
数据输入时最高有效位(MSB)在前。
使用两个8时钟周期的数据传送示于图(c)和图(d)中。
第三章电路设计
3.1波形发生器的设计电路原理图
图7.波形发生器设计原理图
3.2D/A转换器总流程图
Y
图8.系统总流程图
第四章波形发生器程序设计
#include
#include
#defineucharunsignedchar
//定义I/O端口
sbitCLK=P0^0;//串行时钟,下降沿有效
sbitDAT=P0^1;//串行数据
sbitLOAD=P0^2;//串行数据装载,下降沿有效
sbitLDAC=P0^3;//DAC更新锁存控制,下降沿有效
sbitsanjiao=P3^2;//按键
sbitjuchi=P3^3;//按键
sbittixing=P3^4;//按键
sbitSinanjian=P3^5;//按键
ucharflag=0;
voidsanjiaowave();
voidjuchiwave();
voidtixingwave();
voidSinWave();
/**************************************************************************************************
函数:
Dac()
功能:
发送数据至TLC5620串行DAC
参数:
addr:
DAC通道地址,取值0~3,对应通道A~D
rng:
附加的范围位,rng=0时,Vo不会超过Vref,rng=1时,Vo变为2倍
dat:
8位DAC数据
公式:
rng=0时,Vo=Vref*(dat/256)
rng=1时,Vo=Vref*(dat/256)*2
**************************************************************************************************/
voidDac(unsignedcharaddr,bitrng,unsignedchardat)
{
unsignedcharn;
//发送通道地址
n=2;
do
{
DAT=(bit)(addr&0x02);
addr<<=1;
CLK=0;
CLK=1;
}while(--n!
=0);
//发送RNG位
DAT=rng;
CLK=0;
CLK=1;
//发送8位DAC数据
n=8;
do
{
DAT=(bit)(dat&0x80);
dat<<=1;
CLK=0;
CLK=1;
}while(--n!
=0);
//装载数据
LOAD=0;
LOAD=1;
//数据锁存到DAC转换器
LDAC=0;
LDAC=1;
}
/*
函数:
Delay()
功能:
延时1ms~256ms
参数:
t>0时,延时(t)ms
t=0时,延时256ms
*/
voiddelayms(ucharms)
{
uchari;
while(ms--)
{
for(i=0;i<250;i++)
_nop_();
_nop_();
_nop_();
_nop_();
}
}
voidInit_TLC5620()//初始化TLC5620
{
DAT=1;
CLK=1;
LDAC=1;
LOAD=1;
}
voidmain()
{
sanjiao=1;
juchi=1;
tixing=1;
Sinanjian=1;
flag=0;
Init_TLC5620();
while
(1)
{
if(!
sanjiao)
{
delayms(10);
if(!
sanjiao)
flag=0;
}
elseif(!
juchi)
{
delayms(10);
if(!
juchi)
flag=1;
}
elseif(!
tixing)
{
delayms(10);
if(!
tixing)
flag=2;
}
elseif(!
Sinanjian)
{
delayms(10);
if(!
Sinanjian)
flag=3;
}
//Init_TLC5620();
if(flag==0)
{
sanjiaowave();
}
elseif(flag==1)
{
juchiwave();
}
elseif(flag==2)
{
tixingwave();
}
elseif(flag==3)
SinWave();
}
}
voidsanjiaowave()
{
uchari=0;
for(i=0;i<0xff;i++)
{
Dac(0,0,i);
_nop_();
}
for(i=0xff;i>0;i--)
{
Dac(0,0,i);
_nop_();
}
}
voidjuchiwave()
{
uchari=0;
for(i=0;i<0xff;i++)
Dac(1,0,i);
Dac(1,0,0xff);
}
voidtixingwave()
{
uchari=0;
for(i=0;i<0xfe;i++)
Dac(2,0,i);
for(i=0;i<0xff;i++)
{
Dac(2,0,0xff);
}
for(i=0xff;i>0;i--)
Dac(2,0,i);
//for(i=0;i<0xff;i++)
//Dac(2,0,0);
}
/*
函数:
SinWave()
功能:
利用TLC5620串行DAC在通道B产生正弦波
说明:
请用示波器观察SmartSOPC实验箱D5区的DACB通道
*/
voidSinWave()
{
codeunsignedcharSinTab[]=
{
128,147,167,185,202,218,231,241,249,253,
255,253,249,241,231,218,202,185,167,147,
127,108,88,70,53,37,24,14,6,2,
0,2,6,14,24,37,53,70,88,108//数字设置多少,可调节正弦波平滑度
};
unsignedcharn;
for(n=0;n<40;n++)
{
Dac(3,0,SinTab[n]);
delayms
(1);//调节正弦
}
}
第五章系统调试
系统调试是利用开发机系统、基本测试仪器(万用表、示波器等),通过执行开发系统有关命令或运行适当的测试程序(也可以是与硬件有关的部分用户程序段),检查用户系统硬件中存在的故障。
系统调试可分静态调试和动态调试两步进行。
5.1静态调试
静态调试是在用户系统未工作时的一种硬件检查。
目测,通过目测检查一些明显的器件、设备故障并及时排除。
万用表测试。
加电检查。
联机检查。
5.2动态调试
动态调试是在用户系统中的工作的情况下发现和排除系统硬件中存在的故障、器件间连接逻辑错误等的一种硬件检查。
由于单片机应用系统的硬件动态调试是开发系统的支持下完成的,故又成为联机仿真或联机调试。
首先,将编辑好的程序烧到单片机里,将单片机,DA转换器与示波器连接,调试出波形。
第六章总结与结束语
6.1实验结果
图9实际电路连接图
图10三角波信号
图11正弦波输出
图12锯齿波输出
图13梯形波输出
6.2设计历程与体会
设计中存在的不足:
单片机在执行单个程序的时候波形很完美,但是同时执行多个程序的时候,波形会有些变化,不太完整了。
由于时间的原因,其中还存在很多要改进的地方,但是这毕竟是我们的实战练习。
在毕业设计的过程中,学到了很多书本中永远学不到的知识。
这些知识对于以后的工作将会有巨大的帮助。
学会了如何巧妙的去完成一件复杂的项目。
在工作中与人的交流合作可以提高工作的效率,加速项目的进展。
时至今日,几个月的毕业设计终于可以画上一个句号了,但是现在回想起来做毕业设计的整个过程,颇有心得,经过三个多月的设计和开发,我们通过自己动手实现了基于C52单片机的简易D/A转换器。
毕业设计不仅仅只是对前面所学知识的一种检验,而且更是对自己能力的一种质的提高。
下面我将对在毕业设计过程中一些印象深刻的东西做些简单的阐述。
(1)分析题目确定设计方案。
在分析题目的过程中一定要多查资料多听取老师同学的意见,尽量站在别人的肩膀上少走弯路。
对所选的题目也大概有了一些了解,下一步就是在这样一个基础上,综合已有的资料来更透彻的分析题目。
(2)查阅资料。
上网查资料是必不可少的,目前各大搜索引擎都推出有自己特色的搜索服务,一定要找到适合自己的东西。
(3)学习的能力。
明确了问题并且分析了题目然后就是如何实现的问题了。
这个时候学习能力显得特别的重要。
如何通过自己的努力把不明白的东西搞明白,这对学习的能力有很高的要求。
接着自己开始编写简单的程序来检验一下学习的效果,理论学习和工作实际紧密结合起来。
(4)要实际动手,防止眼高手底。
基于C52单片机的D/A信号转换器的设计终于告一段落了,本论文的研究工作是在欧阳老师的悉心指导下完成的。
论文的每一步进展都倾注着老师的关怀,教导和帮助。
在此我们要对帮助我的老师们和同学们真诚的说声谢谢。