采用TLC5620设计各种波形发生器Word下载.docx
《采用TLC5620设计各种波形发生器Word下载.docx》由会员分享,可在线阅读,更多相关《采用TLC5620设计各种波形发生器Word下载.docx(24页珍藏版)》请在冰点文库上搜索。
![采用TLC5620设计各种波形发生器Word下载.docx](https://file1.bingdoc.com/fileroot1/2023-5/5/f649977e-bb49-44c3-a063-9eb23abedb52/f649977e-bb49-44c3-a063-9eb23abedb521.gif)
只要对电路稍加修改,调整程序,即可完成功能升级。
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<
reg52.h>
intrins.h>
#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;
//发送8位DAC数据
n=8;
DAT=(bit)(dat&
0x80);
dat<
//装载数据
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_();
}
}
voidInit_TLC5620()//初始化TLC5620
DAT=1;
LOAD=1;
voidmain()
sanjiao=1;
juchi=1;
tixing=1;
Sinanjian=1;
flag=0;
Init_TLC5620();
while
(1)
if(!
sanjiao)
{
delayms(10);
if(!
flag=0;
}
elseif(!
juchi)
flag=1;
tixing)
flag=2;
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;
0xff;
Dac(0,0,i);
_nop_();
for(i=0xff;
i>
0;
i--)
voidjuchiwave()
Dac(1,0,i);
Dac(1,0,0xff);
voidtixingwave()
0xfe;
Dac(2,0,i);
Dac(2,0,0xff);
//for(i=0;
//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//数字设置多少,可调节正弦波平滑度
};
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信号转换器的设计终于告一段落了,本论文的研究工作是在欧阳老师的悉心指导下完成的。
论文的每一步进展都倾注着老师的关怀,教导和帮助。
在此我们要对帮助我的老师们和同学们真诚的说声谢谢。