串行DA转换电路设计.docx
《串行DA转换电路设计.docx》由会员分享,可在线阅读,更多相关《串行DA转换电路设计.docx(12页珍藏版)》请在冰豆网上搜索。
串行DA转换电路设计
1、课程设计目的………………………………………………………2
2、设计内容和要求……………………………………………………2
3、 设计方案
3.1、设计思路…………………………………………………………2
3.2、设计框图…………………………………………………………2
3.3、工作原理及硬件框图……………………………………………5
4、软件编程
4.1、程序流程图………………………………………………………6
4.2、程序代码…………………………………………………………7
5、电路仿真……………………………………………………………8
6、电路原理图…………………………………………………………11
7、PCB版图……………………………………………………………12
8、课程设计总结………………………………………………………12
9、参考文献……………………………………………………………13
1、课程设计目的
(1)掌握电子电路的一般设计方法和设计流程;
(2)了解串行D/A转换电路的基本实现原理;
(3)理解D/A转换与相关接口电路的基本原理;
(4)掌握利用Protues软件对电路进行仿真的方法。
(5)掌握利用protel绘制电路原理图与制作PCB图的方法;
(6)学习掌握硬件电路设计的全过程。
2.设计内容和要求
绘制电路原理图完成对不同信号波形的采集,实现PCB图绘制。
串行D/A转换电路具体设计要求如下:
(1)查阅所用器件技术资料,详细说明系统工作流程;
(2)设计电路能够通过数/模转换得到设定的模拟量波形。
3、设计方案
3.1设计思路
由于本设计是串行D/A转换,可以使用单片机作为电路的主控制器来控制设定的数据串行输入到串行D/A转换器中,然后经过DA转换输出模拟量。
3.2设计框图
控制器采用单片机AT80C51,串行DA转换器采用TLC5615,时钟振荡电路采用石英晶体振荡器,串行DA转换电路设计框图如下。
复位电路
串行DA转换器
主控制器
时钟振荡电路
图1总体方框设计图
3.2.1主控制器
80C51单片机的40个引脚大致可分为4类:
电源、时钟、控制和I/O引脚。
⒈电源:
⑴VCC-芯片电源,接+5V;
⑵VSS-接地端;
⒉时钟:
XTAL1、XTAL2-晶体振荡电路反相输入端和输出端。
⒊控制线:
控制线共有4根,
⑴ALE/PROG:
地址锁存允许/片内EPROM编程脉冲
①ALE功能:
用来锁存P0口送出的低8位地址
②PROG功能:
片内有EPROM的芯片,在EPROM编程期间,此引脚输入编程脉冲。
⑵PSEN:
外ROM读选通信号。
⑶RST/VPD:
复位/备用电源。
①RST(Reset)功能:
复位信号输入端。
②VPD功能:
在Vcc掉电情况下,接备用电源。
⑷EA/Vpp:
内外ROM选择/片内EPROM编程电源。
①EA功能:
内外ROM选择端。
②Vpp功能:
片内有EPROM的芯片,在EPROM编程期间,施加编程电源Vpp。
⒋I/O线
80C51共有4个8位并行I/O端口:
P0、P1、P2、P3口,共32个引脚。
P3口还具有第二功能,用于特殊信号输入输出和控制信号(属控制总线)。
3.2.2复位电路
复位电路的基本功能是:
系统上电时提供复位信号,直至系统电源稳定后,撤销复位信号。
为可靠起见,电源稳定后还要经一定的延时才撤销复位信号,以防电源开关或电源插头分-合过程中引起的抖动而影响复位。
RC复位电路可以实现上述基本功能,复位电路如图2所示。
图2复位电路原理图
3.2.3时钟振荡电路
单片机是一种时序电路,必须供给脉冲信号才能正常工作,在单片机内部已集成了振荡器,使用晶体振荡器,接18、19脚。
只要买来晶体震荡器,电容,连上就能了,按图3接上即可。
图3时钟晶振电路
3.2.4串行DA转换电路
TLC5615为美国德州仪器公司1999年推出的产品,是具有串行接口的数模转换器,其输出为电压型,最大输出电压是基准电压值的两倍。
带有上电复位功能,即把DAC寄存器复位至全零。
性能比早期电流型输出的DAC要好。
只需要通过3根串行总线就可以完成10位数据的串行输入,易于和工业标准的微处理器或微控制器(单片机)接口,适用于电池供电的测试仪表、移动电话,也适用于数字失调与增益调整以及工业控制场合。
它主要由以下几部分组成:
1、10位DAC电路;
2、一个16位移位寄存器,接受串行移入的二进制数,并且有一个级联的数据输出端DOUT;
3、并行输入输出的10位DAC寄存器,为10位DAC电路提供待转换的二进制数据;
4、电压跟随器为参考电压端REFIN提供很高的输入阻抗,大约10MΩ;
5、×2电路提供最大值为2倍于REFIN的输出;
6、上电复位电路和控制电路。
TLC5615的内部功能框图如图4所示。
图4TLC5615功能框图
两种工作方式:
(A)从图4可以看出,16位移位寄存器分为高4位虚拟位、低两位填充位以及10位有效位。
在单片TLC5615工作时,只需要向16位移位寄存器按先后输入10位有效位和低2位填充位,2位填充位数据任意,这是第一种方式,即12位数据序列。
(B)第二种方式为级联方式,即16位数据列,可以将本片的DOUT接到下一片的DIN,需要向16位移位寄存器按先后输入高4位虚拟位、10位有效位和低2位填充位,由于增加了高4位虚拟位,所以需要16个时钟脉冲。
3.3、工作原理及硬件框图
3.3.1TLC5615的时序
TLC5615工作时序如图5所示。
当CS为低电平时,在每一个SCLK时钟的上升沿将DIN的一位数据移入16位移寄存器。
注意,二进制最高有效位被导前移入。
接着,SCLK的上升沿将16位移位寄存器的10位有效数据锁存于10位DAC寄存器,供DAC电路进行转换;当片选CS为高电平时,串行输入数据不能被移入16位移位寄存器。
注意,SCLK的上升和下降都必须发生在CS为低电平期间。
图5TLC5615工作时序图
3.3.2系统软件算法分析
系统程序主要功能为:
设定系统要输出的模拟量的值,首先将十进制数强制转换为二进制数,然后根据TLC5615的时序将数据逐位发送到TLC5615的Din输入端,最后在TLC5615的Out输出端输出转换后的模拟量。
系统软件算法基本流程图如图6所示。
图6系统软件算法基本流程图
4、软件编程
4.1程序流程图
4.2程序代码
#include
#include
/*********PLC5615定义********************/
sbitsclk=P3^1;
sbitdin=P3^2;
sbitcs=P3^0;
voidwrite5615(floatdianya_5615);
//*****************************************************************//
//TLC5615DA转换器,最大输出为2倍的REFIN的参考电压;
//Vout=2*REFIN*da(十位数字信号)/1024;
//那么da=1024*Vout/(2*REFIN),通过此公式可以提前预置转换后的数据,以便最后测算误差;
//前十位数据有用,后两位为填充位,却保为12位数据,可以任意。
//*****************************************************************//
voidwrite5615(floatdianya_5615)//向TLC5615中写数据
{
unsignedintshuju;
unsignedcharj;
shuju=(unsignedint)(160*dianya_5615);//160是1024除以2倍的基准电压(3.2v)得到的
shuju=shuju<<6;//目的是让这十位有效数据放倒高位去
cs=1;
sclk=0;
cs=0;
for(j=0;j<12;j++)
{
_nop_();
sclk=0;
_nop_();
din=(bit)(shuju&0x8000);//取shuju右数第十位给din端
_nop_();
_nop_();
_nop_();
shuju<<=1;//shuju左移一位
sclk=1;
_nop_();
_nop_();
_nop_();
}
sclk=0;
cs=1;
}
voidmain(void)
{
unsignedinti;
for(i=0;i<256;i++)
write5615(3.54);//3.54为要输出的实际电压
}
5、电路仿真
由于转换恒定电压在仿真结果上不是很明显,在这里我们将数据设定为一个变化的信号,以便于仿真结果的查看,在keil软件中输入下列程序,通过设定模拟波形为正弦波,将这些数据存放在一个数组中,然后利用循环将数组的数据循环转换成模拟量输出,代码如下:
#include
#include
#defineuintunsignedint
#defineucharunsignedchar
/******************************************************************/
/*
(1)sclk的上升沿把数据移入输入寄存器*/
/*
(2)cs的跳变发生在sclk输入低电平*/
/*(3)cs的上升沿把数据从输入寄存器存入Dac寄存器开始转化*/
/*(4)最高位在前*/
/*******************************************************************/
sbitcs=P3^0;
sbitsclk=P3^1;
sbitdin=P3^2;
ucharcodesine_tab[256]={
//输出电压从0到最大值(正弦波1/4部分)
0x80,0x83,0x86,0x89,0x8d,0x90,0x93,0x96,0x99,0x9c,0x9f,0xa2,0xa5,0xa8,0xab,
0xae,0xb1,0xb4,0xb7,0xba,0xbc,0xbf,0xc2,0xc5,0xc7,0xca,0xcc,0xcf,0xd1,0xd4,
0xd6,0xd8,0xda,0xdd,0xdf,0xe1,0xe3,0xe5,0xe7,0xe9,0xea,0xec,0xee,0xef,0xf1,
0xf2,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,0xfd,0xfe,0xff,0xff,
0xff,0xff,0xff,0xff,
//输出电压从最大值到0(正弦波1/4部分)
0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfd,0xfd,0xfc,0xfb,0xfa,0xf9,0xf8,0xf7,
0xf6,0xf5,0xf4,0xf2,0xf1,0xef,0xee,0xec,0xea,0xe9,0xe7,0xe5,0xe3,0xe1,0xde,
0xdd,0xda,0xd8,0xd6,0xd4,0xd1,0xcf,0xcc,0xca,0xc7,0xc5,0xc2,0xbf,0xbc,0xba,
0xb7,0xb4,0xb1,0xae,0xab,0xa8,0xa5,0xa2,0x9f,0x9c,0x99,0x96,0x93,0x90,0x8d,
0x89,0x86,0x83,0x80,
//输出电压从0到最小值(正弦波1/4部分)
0x80,0x7c,0x79,0x76,0x72,0x6f,0x6c,0x69,0x66,0x63,0x60,0x5d,0x5a,0x57,0x55,
0x51,0x4e,0x4c,0x48,0x45,0x43,0x40,0x3d,0x3a,0x38,0x35,0x33,0x30,0x2e,0x2b,
0x29,0x27,0x25,0x22,0x20,0x1e,0x1c,0x1a,0x18,0x16,0x15,0x13,0x11,0x10,0x0e,
0x0d,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x00,0x00,
0x00,0x00,0x00,0x00,
//输出电压从最小值到0(正弦波1/4部分)
0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x07,0x08,
0x09,0x0a,0x0b,0x0d,0x0e,0x10,0x11,0x13,0x15,0x16,0x18,0x1a,0x1c,0x1e,0x20,
0x22,0x25,0x27,0x29,0x2b,0x2e,0x30,0x33,0x35,0x38,0x3a,0x3d,0x40,0x43,0x45,
0x48,0x4c,0x4e,0x51,0x55,0x57,0x5a,0x5d,0x60,0x63,0x66,0x69,0x6c,0x6f,0x72,
0x76,0x79,0x7c,0x80};
voidwrite_5615(uintda)
{uchari;
cs=1;
sclk=0;
cs=0;
da=da&0x03ff;//让数据与0011,1111,1111相与得到的是十位有效数据
for(i=0;i<12;i++)
{din=(da&0x0200);//取数据的第十位给din端
sclk=1;
da<<=1;//数据左移一位
sclk=0;}
sclk=0;
cs=1;
_nop_();
_nop_();
}
voidmain()
{uchari;
while
(1)
{write_5615(sine_tab[i]);
i++;}
}
仿真电路图和仿真波形分别如图7和图8所示。
图7仿真电路图
图8程序仿真波形图
由仿真波形图可以看出,本系统可以较好的将提前设定好的数字正弦波转换成为模拟波形图。
6、电路原理图
7、PCB版图
8、课程设计总结
在本次课程设计中,我遇到了很多问题,这是我第一次做课程设计,虽然过程很辛苦,但是我从中学到了很多东西。
本次课程设计的重点在于软件算法的设计及硬件之间的接口问题。
我之前也写过一些程序,可是从未用过十六进制数的运算。
还有就是此次用到的串行DA转换器是我之前没有见过的一个器件,对于单片机的了解也不多,这些都需要去自学。
有些事情我们只有去做了才能真正了解并掌握它。
从这次课程设计中,我真正意识到理论联系实际的重要性。
在以后的学习过程中,我要在学好课本的理论知识之余,多锻炼自己的动手操作能力,这是我在这次课程设计中的最大收获。
9、参考文献
1.童诗白.模拟电子技术基础.北京:
高等教育出版社,2002
2.张建华.数字电子技术.北京:
机械工业出版社,2004
3.陈汝全.电子技术常用器件应用手册.北京:
机械工业出版社,2005
4.毕满清.电子技术实验与课程设计.北京:
机械工业出版社,2005
5.潘永雄.电子线路CAD实用教程.西安:
西安电子科技大学出版社,2002
6.张亚华.电子电路计算机辅助分析和辅助设计.北京:
航空工业出版社,2004