基于Atmega128的并行DADAC0832设计.docx
- 文档编号:6541590
- 上传时间:2023-01-07
- 格式:DOCX
- 页数:18
- 大小:281.06KB
基于Atmega128的并行DADAC0832设计.docx
《基于Atmega128的并行DADAC0832设计.docx》由会员分享,可在线阅读,更多相关《基于Atmega128的并行DADAC0832设计.docx(18页珍藏版)》请在冰豆网上搜索。
基于Atmega128的并行DADAC0832设计
基于Atmega128的并行DA(DAC0832)设计
院系:
武汉理工大学华夏学院信息系
实验学生:
韩韬(电信1091)
指导老师:
钟学斌
二零一一年七月
1、设计任务………………………………………4
2、芯片简介………………………………………4
2.1特点…………………………………………4
2.2引脚说明……………………………………4
2.3工作原理……………………………………5
2.4时序分析……………………………………6
3、系统方案设计…………………………………9
3.1DA转换模块的论证与选择…………9
3.2电流转电压模块的论证与选择………………10
3.3软件程序模块的论证与选择……………10
4、系统理论分析与计算………………………11
4.1电流转电压电路的分析与计算………………11
4.2软件程序的分析与实现……………………11
5、电路设计………………………………………16
5.1系统总体框图………………………………16
5.2单极性电路原理图…………………16
5.3双极性电路原理图…………………………16
5.4电源…………………………………………17
6、测试方案与测试结果…………………………17
6.1测试方案……………………………………17
6.2测试条件与仪器……………………………17
6.3测试结果与分析……………………………17
6.3.1测试结果(数据)……………………18
6.3.2测试分析与结论……………………….18
附录1参考文献…………………………………19
附录2系统原理图………………………………19
1、设计任务
设计制作一个DA转换电路,要求使用Atmega128对测量数据进行处理及显示。
DA转换芯片要求使用单片直流输出型8位并行数/模转换器DAC0832。
2、芯片简介
2.1特点
双缓冲,单缓冲,或直通数字数据输入
可容易地与12位1230系列D/A转换器进行互换且插脚兼容
可直接与所有流通的微型处理器相接
线性指定为零,且只能进行全面调整——不是最佳直线拟合
在±10V全参考4象限倍增中工作
可用于电压转换模式
逻辑输入满足TTL电压水平说明(1.4V逻辑门限值)
需要时,可运行“STANDALONE”(没有μP)
2.2引脚说明
*D0~D7:
8位数据输入线,TTL电平,有效时间应大于90ns(否则锁存器的数据会出错);
*ILE:
数据锁存允许控制信号输入线,高电平有效;
*CS:
片选信号输入线(选通数据锁存器),低电平有效;
*WR1:
数据锁存器写选通输入线,负脉冲(脉宽应大于500ns)有效。
由ILE、CS、WR1的逻辑组合产生LE1,当LE1为高电平时,数据锁存器状态随输入数据线变换,LE1的负跳变时将输入数据锁存;
*XFER:
数据传输控制信号输入线,低电平有效,负脉冲(脉宽应大于500ns)有效;
*WR2:
DAC寄存器选通输入线,负脉冲(脉宽应大于500ns)有效。
由WR2、XFER的逻辑组合产生LE2,当LE2为高电平时,DAC寄存器的输出随寄存器的输入而变化,LE2的负跳变时将数据锁存器的内容打入DAC寄存器并开始D/A转换。
*IOUT1:
电流输出端1,其值随DAC寄存器的内容线性变化;
*IOUT2:
电流输出端2,其值与IOUT1值之和为一常数;
*Rfb:
反馈信号输入线,改变Rfb端外接电阻值可调整转换满量程精度;
*Vcc:
电源输入端,Vcc的范围为+5V~+15V;
*VREF:
基准电压输入线,VREF的范围为-10V~+10V;
*AGND:
模拟信号地
*DGND:
数字信号地
2.3工作原理
DAC0832是8分辨率的D/A转换集成芯片。
与微处理器完全兼容。
这个DA芯片以其价格低廉、接口简单、转换控制容易等优点,在单片机应用系统中得到广泛的应用。
D/A转换器由8位输入锁存器、8位DAC寄存器、8位D/A转换电路及转换控制电路构成。
2.4时序分析
⑴单缓冲方式。
单缓冲方式是控制输入寄存器和DAC寄存器同时接收资料,或者只用输入寄存器而把DAC寄存器接成直通方式。
此方式适用只有一路模拟量输出或几路模拟量异步输出的情形。
在微处理器控制系统中,首先关心的是对DAC的最大数据流量,或在一次中,若干个DAC只有一个需要更新时,可以使用单缓冲配置。
两个内部寄存器中的一个允许数据通过,另外一个将作为数据锁存器。
如果输入寄存器被用作数据锁存器,数字信号馈通会被小型化。
通过选通使WR1降低,使CS,WR2,XFER接地,以及使ILE架高来更新DAC,从而在“独立”系统中实现了单缓冲。
⑵双缓冲方式。
双缓冲方式是先使输入寄存器接收资料,再控制输入寄存器的输出资料到DAC寄存器,即分两次锁存输入资料。
此方式适用于多个D/A转换同步输出的情节。
以双缓冲的方式更新这些DAC的模拟输出基本上是一个两步或双输入操作。
在微型处理器系统中两个不同的系统地址必须被解码,一个是由CS引脚控制的输入锁存器,第二个是由XFER控制的DAC锁存器。
如果多于一个DAC被运行,那么每个DAC的CS线将被单独解码,但是所有的转换器将共享一个相同的XFER地址,以允许DAC任何数据的同步更新。
值得注意的是那些将在同步转换后改变的模拟输出是来自于在XFER命令之前的已经更进的输入寄存器的DAC。
ILE引脚是一个活跃的高芯片选择,它可以从作为限定器的地址库中解码,这是在输入操作中正常的CS信号产生的。
这能用于为特定的DAC提供更高级别的解码独有控制信号,最终产生更为有效的寻址计划。
⑶直通方式。
直通方式是资料不经两级锁存器锁存,即CS*,XFER*,WR1*,WR2*均接地,ILE接高电平。
此方式适用于连续反馈控制线路和不带微机的控制系统,不过在使用时,必须通过另加I/O接口与CPU连接,以匹配CPU与D/A转换。
简单地接地CS,WR1,WR2和XFER,以及高ILE允许两个内部寄存器都允许数字量输入(流通),并直接影响到DAC模拟输出。
3、系统方案设计
本系统方案通过选择的DAC0832的工作方式连接数/模转换电路模块,通过电阻分压网络来调节输入基准电压模块,通过应用运算放大器的高输入阻抗的特点并连接片内反馈电阻来实现电流转换电压模块等模块组成。
程序的设计是根据所选的芯片工作模式来编写芯片驱动程序,以及通过对输入数据量的改变来完成一定形式的波形输出,本次实验共可产生三种波形形式输出,分别为三角波、正弦波、方波,并且可以通过按键控制波形的输出。
3.1DA转换模块的论证与选择
本次实验选择DAC0832的直通模式进行实验,因为此模式编程简单,只需要不断的给DAC输入不断变化的数据量来完成波形输出。
输出波形的频率可调范围也相对较宽。
3.2电流转电压模块的论证与选择
通过通过应用运算放大器的高输入阻抗的特点来实现电流转电压。
由图示,根据运放的“虚短虚断”得到输出电压与输入电流的关系。
①运放的选择
方案一:
采用普通运放NE5532来完成,但是实际测量时会发现有一个频率大600KHz的类正弦波的干扰存在,无法消去。
所以放弃使用NE5532。
方案二:
采用低噪声双极性运算放大器集成电路OP07由于OP07具有非常低的输入失调电压(对于OP07最大为25μV),所以OP07在很多应用场合不需要额外的调零措施。
OP07同时具有输入偏置电流低(OP07为±2nA)和开环增益高(对于OP07为300V/mV)的特点。
在实验过程中,输出波形没有干扰,很理想。
所以选择使用OP07。
②输出极性的选择
本设计采用单、双极性两种输出方式。
3.3软件程序模块的论证与选择
由于选择的DAC0832的直通工作方式,所以编程容易,只需要在单片机的一组I/O端口上输出不断变化的数据量就可以完成。
键盘控制采用“while语句”循环判断实现输出波形的转换。
4、系统理论分析与计算
4.1电流转电压电路的分析与计算
①单极性输出
模拟输出电压的极性总是与
的极性相反,为单极性输出。
①双极性输出
在某些微机控制系统中,要求D/A的输出电压是双极性的。
例如要求输出(-5~+5)V。
如图有如下计算公式:
模拟输出电压的极性总是与
的极性相反,为单极性输出。
模拟输出电压可利用基尔霍夫节点电流定律列出方程:
将
代入上式,且当
时解得:
当
时,
模拟输出电压的极性与
的极性相同;
当
时,
模拟输出电压的极性与
的极性相反。
4.2软件程序的分析与实现
实验程序:
/*************************DAC0832.h**********************/
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
#defineulongunsignedlong
#define_1602C_PPORTF
#define_1602C_DDDRF
#define_1602D_PPORTE
#define_1602D_DDDRE
#defineCS1
#defineWR2
#defineILE0
#definecontrol_PPORTA
#definecontrol_DDDRA
#definezhuangtaiPINA
#defineDAT_PPORTC
#defineDAT_DDDRC
/*************************main.c**********************/
#include
#include
#include"DAC0832.h"
#defineV5.0
uchardata_thr[256]={
0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,
0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,
0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,
0x98,0x99,0x9A,0x9B,0x9C,0x9D,0x9E,0x9F,
0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7,
0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE,0xAF,
0xB0,0xB1,0xB2,0xB3,0xB4,0xB5,0xB6,0xB7,
0xB8,0xB9,0xBA,0xBB,0xBC,0xBD,0xBE,0xBF,
0xBF,0xBE,0xBD,0xBC,0xBB,0xBA,0xB9,0xB8,
0xB7,0xB6,0xB5,0xB4,0xB3,0xB2,0xB1,0xB0,
0xAF,0xAE,0xAD,0xAC,0xAB,0xAA,0xA9,0xA8,
0xA7,0xA6,0xA5,0xA4,0xA3,0xA2,0xA1,0xA0,
0x9F,0x9E,0x9D,0x9C,0x9B,0x9A,0x99,0x98,
0x97,0x96,0x95,0x94,0x93,0x92,0x91,0x90,
0x8F,0x8E,0x8D,0x8C,0x8B,0x8A,0x89,0x88,
0x87,0x86,0x85,0x84,0x83,0x82,0x81,0x80,
0x7F,0x7E,0x7D,0x7C,0x7B,0x7A,0x79,0x78,
0x77,0x76,0x75,0x74,0x73,0x72,0x71,0x70,
0x6F,0x6E,0x6D,0x6C,0x6B,0x6A,0x69,0x68,
0x66,0x66,0x65,0x64,0x63,0x62,0x61,0x60,
0x5F,0x5E,0x5D,0x5C,0x5B,0x5A,0x59,0x58,
0x55,0x55,0x55,0x54,0x53,0x52,0x51,0x50,
0x4F,0x4E,0x4D,0x4C,0x4B,0x4A,0x49,0x48,
0x44,0x44,0x45,0x44,0x43,0x42,0x41,0x40,
0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,
0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F,
0x50,0x51,0x52,0x53,0x55,0x55,0x56,0x57,
0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F,
0x60,0x61,0x62,0x63,0x66,0x65,0x66,0x67,
0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F,
0x70,0x71,0x72,0x73,0x77,0x75,0x76,0x77,
0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x7F
};
uchardata_sin[256]={
0x80,0x83,0x85,0x88,0x8A,0x8D,0x8F,0x92,
0x94,0x97,0x99,0x9B,0x9E,0xA0,0xA3,0xA5,
0xA7,0xAA,0xAC,0xAE,0xB1,0xB3,0xB5,0xB7,
0xB9,0xBB,0xBD,0xBF,0xC1,0xC3,0xC5,0xC7,
0xC9,0xCB,0xCC,0xCE,0xD0,0xD1,0xD3,0xD4,
0xD6,0xD7,0xD8,0xDA,0xDB,0xDC,0xDD,0xDE,
0xDF,0xE0,0xE1,0xE2,0xE3,0xE3,0xE4,0xE4,
0xE5,0xE5,0xE6,0xE6,0xE7,0xE7,0xE7,0xE7,
0xE7,0xE7,0xE7,0xE7,0xE6,0xE6,0xE5,0xE5,
0xE4,0xE4,0xE3,0xE3,0xE2,0xE1,0xE0,0xDF,
0xDE,0xDD,0xDC,0xDB,0xDA,0xD8,0xD7,0xD6,
0xD4,0xD3,0xD1,0xD0,0xCE,0xCC,0xCB,0xC9,
0xC7,0xC5,0xC3,0xC1,0xBF,0xBD,0xBB,0xB9,
0xB7,0xB5,0xB3,0xB1,0xAE,0xAC,0xAA,0xA7,
0xA5,0xA3,0xA0,0x9E,0x9B,0x99,0x97,0x94,
0x92,0x8F,0x8D,0x8A,0x88,0x85,0x83,0x80,
0x7D,0x7B,0x78,0x76,0x73,0x71,0x6E,0x6C,
0x69,0x67,0x65,0x62,0x60,0x5D,0x5B,0x59,
0x56,0x54,0x52,0x4F,0x4D,0x4B,0x49,0x47,
0x45,0x43,0x41,0x3F,0x3D,0x3B,0x39,0x37,
0x35,0x34,0x32,0x30,0x2F,0x2D,0x2C,0x2A,
0x29,0x28,0x26,0x25,0x24,0x23,0x22,0x21,
0x20,0x1F,0x1E,0x1D,0x1D,0x1C,0x1C,0x1B,
0x1B,0x1A,0x1A,0x1A,0x19,0x19,0x19,0x19,
0x19,0x19,0x19,0x19,0x1A,0x1A,0x1A,0x1B,
0x1B,0x1C,0x1C,0x1D,0x1D,0x1E,0x1F,0x20,
0x21,0x22,0x23,0x24,0x25,0x26,0x28,0x29,
0x2A,0x2C,0x2D,0x2F,0x30,0x32,0x34,0x35,
0x37,0x39,0x3B,0x3D,0x3F,0x41,0x43,0x45,
0x47,0x49,0x4B,0x4D,0x4F,0x52,0x54,0x56,
0x59,0x5B,0x5D,0x60,0x62,0x65,0x67,0x69,
0x6C,0x6E,0x71,0x73,0x76,0x78,0x7B,0x7D};
uchardata_fangbo[256]={
0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,
0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,
0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,
0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,
0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,
0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,
0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,
0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,
0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,
0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,
0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,
0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,
0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,
0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,
0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,
0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,0xBF,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
voidinit()//端口初始化函数
{
control_P=0X0F;
control_D=0XF0;
DAT_P=0XFF;
DAT_D=0XFF;
_1602C_D=0XFF;
_1602D_D=0XFF;
}
voiddelay(uintms)
{
uinti,j;
for(i=0;i { for(j=0;j<10;j++); } } voidmain() { ucharq; uintDAT,m,i; init(); while (1) { if(q==0x0f) { show_sin(); while(q==0x0f) { for(i=0;i<255;i++) { PORTC=data_sin[i]; } if(q! =0x0f)break; } } if(q==0x0E) { show_thr(); while(q==0x0E) { for(i=0;i<255;i++) { PORTC=data_thr[i]; } if(q! =0x0E)break; } } if(q==0x0D) { show_fangbo(); while(q==0x0D) { for(i=0;i<255;i++) { PORTC=data_fangbo[i]; } if(q! =0x0D)break; } } } } /*************************1602.c**********************/ #include #include #include"DAC0832.h" constucharthr[]="SANJIAOBO"; constucharsin[]="SIN"; constucharfangbo[]="FANGBO"; voidshow_thr() { uchari,j; _1602C_P&=~BIT (2); write_com(0x38); delay(5); write_com(0x0c); delay(5); write_com(0x06); delay(5); write_com(0x80+0x01); delay(5); for(i=0;i<9;i++) { write_dat(thr[i]); delay (2); } } voidshow_sin() { uchari,j; _1602C_P&=~BIT (2); write_com(0x38); delay(5); write_com(0x0c); delay(5); write_com(0x06); delay(5); write_com(0x80+0x01); delay(5); for(i=0;i<3;i++)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 Atmega128 并行 DADAC0832 设计