《课程设计(论文)基于Atmega128的并行DA(DAC0832)设计.doc》由会员分享,可在线阅读,更多相关《课程设计(论文)基于Atmega128的并行DA(DAC0832)设计.doc(20页珍藏版)》请在三一办公上搜索。
1、基于Atmega128的并行DA(DAC0832)设计院系:武汉理工大学华夏学院信息系实验学生: 指导老师: 二零一一年七月目录1、设计任务42、芯片简介4 2.1 特点4 2.2 引脚说明4 2.3 工作原理5 2.4 时序分析63、系统方案设计9 3.1 DA转换模块的论证与选择93.2电流转电压模块的论证与选择10 3.3 软件程序模块的论证与选择 104、系统理论分析与计算 11 4.1 电流转电压电路的分析与计算11 4.2 软件程序的分析与实现115、电路设计165.1 系统总体框图165.2 单极性电路原理图165.3 双极性电路原理图165.4 电源176、测试方案与测试结果1
2、76.1 测试方案176.2 测试条件与仪器176.3 测试结果与分析17 6.3.1 测试结果(数据)18 6.3.2 测试分析与结论.18附录1 参考文献 19附录2 系统原理图 19 1、设计任务 设计制作一个DA转换电路,要求使用Atmega128对测量数据进行处理及显示。DA转换芯片要求使用单片直流输出型8位并行数/模转换器DAC0832。2、芯片简介2.1 特点双缓冲,单缓冲,或直通数字数据输入 n 可容易地与12位1230系列D/A转换器进行互换且插脚兼容 n 可直接与所有流通的微型处理器相接 n 线性指定为零,且只能进行全面调整不是最佳直线拟合 n 在10V全参考4象限倍增中工
3、作 n 可用于电压转换模式 n 逻辑输入满足TTL电压水平说明(1.4V逻辑门限值) n 需要时,可运行“STAND ALONE”(没有P) 2.2 引脚说明* D0D7:8位数据输入线,TTL电平,有效时间应大于90ns(否则锁存器的数据会出错); * ILE:数据锁存允许控制信号输入线,高电平有效; * CS:片选信号输入线(选通数据锁存器),低电平有效; * WR1:数据锁存器写选通输入线,负脉冲(脉宽应大于500ns)有效。由ILE、CS、WR1的逻辑组合产生LE1,当LE1为高电平时,数据锁存器状态随输入数据线变换,LE1的负跳变时将输入数据锁存; * XFER:数据传输控制信号输入
4、线,低电平有效,负脉冲(脉宽应大于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的范围
5、为-10V+10V; * AGND:模拟信号地 * DGND:数字信号地2.3 工作原理 DAC0832是8分辨率的D/A转换集成芯片。与微处理器完全兼容。这个DA芯片以其价格低廉、接口简单、转换控制容易等优点,在单片机应用系统中得到广泛的应用。D/A转换器由8位输入锁存器、8位DAC寄存器、8位D/A转换电路及转换控制电路构成。2.4 时序分析 单缓冲方式。单缓冲方式是控制输入寄存器和DAC寄存器同时接收资料,或者只用输入寄存器而把DAC寄存器接成直通方式。此方式适用只有一路模拟量输出或几路模拟量异步输出的情形。在微处理器控制系统中,首先关心的是对 DAC的最大数据流量,或在一次中,若干个
6、DAC只有一个需要更新时,可以使用单缓冲配置。两个内部寄存器中的一个允许数据通过,另外一个将作为数据锁存器。如果输入寄存器被用作数据锁存器,数字信号馈通会被小型化。通过选通使WR1 降低,使CS,WR2,XFER 接地,以及使 ILE 架高来更新DAC,从而在“独立”系统中实现了单缓冲。 双缓冲方式。双缓冲方式是先使输入寄存器接收资料,再控制输入寄存器的输出资料到DAC寄存器,即分两次锁存输入资料。此方式适用于多个D/A转换同步输出的情节。 以双缓冲的方式更新这些 DAC的模拟输出基本上是一个两步或双输入操作。在微型处理器系统中两个不同的系统地址必须被解码,一个是由CS 引脚控制的输入锁存器,
7、第二个是由 XFER 控制的 DAC 锁存器。如果多于一个 DAC被运行,那么每个 DAC的CS 线将被单独解码,但是所有的转换器将共享一个相同的XFER 地址,以允许DAC 任何数据的同步更新。值得注意的是那些将在同步转换后改变的模拟输出是来自于在XFER 命令之前的已经更进的输入寄存器的DAC。ILE引脚是一个活跃的高芯片选择,它可以从作为限定器的地址库中解码,这是在输入操作中正常的 CS 信号产生的。这能用于为特定的 DAC 提供更高级别的解码独有控制信号,最终产生更为有效的寻址计划。直通方式。直通方式是资料不经两级锁存器锁存,即 CS*,XFER* ,WR1* ,WR2* 均接地,IL
8、E接高电平。此方式适用于连续反馈控制线路和不带微机的控制系统,不过在使用时,必须通过另加I/O接口与CPU连接,以匹配CPU与D/A转换。简单地接地CS,WR1,WR2 和XFER,以及高ILE 允许两个内部寄存器都允许数字量输入(流通),并直接影响到DAC 模拟输出。3、系统方案设计本系统方案通过选择的DAC0832的工作方式连接数/模转换电路模块,通过电阻分压网络来调节输入基准电压模块,通过应用运算放大器的高输入阻抗的特点并连接片内反馈电阻来实现电流转换电压模块等模块组成。程序的设计是根据所选的芯片工作模式来编写芯片驱动程序,以及通过对输入数据量的改变来完成一定形式的波形输出,本次实验共可
9、产生三种波形形式输出,分别为三角波、正弦波、方波,并且可以通过按键控制波形的输出。3.1 DA转换模块的论证与选择 本次实验选择DAC0832的直通模式进行实验,因为此模式编程简单,只需要不断的给DAC输入不断变化的数据量来完成波形输出。输出波形的频率可调范围也相对较宽。3.2电流转电压模块的论证与选择通过通过应用运算放大器的高输入阻抗的特点来实现电流转电压。由图示,根据运放的“虚短虚断”得到输出电压与输入电流的关系。运放的选择 方案一:采用普通运放NE5532来完成,但是实际测量时会发现有一个频率大600KHz的类正弦波的干扰存在,无法消去。所以放弃使用NE5532。 方案二:采用低噪声双极
10、性运算放大器集成电路OP07由于OP07具有非常低的输入失调电压(对于OP07最大为25V),所以OP07在很多应用场合不需要额外的调零措施。OP07同时具有输入偏置电流低(OP07为2nA)和开环增益高(对于OP07为300V/mV)的特点。在实验过程中,输出波形没有干扰,很理想。所以选择使用OP07。输出极性的选择 本设计采用单、双极性两种输出方式。3.3软件程序模块的论证与选择 由于选择的DAC0832的直通工作方式,所以编程容易,只需要在单片机的一组I/O端口上输出不断变化的数据量就可以完成。键盘控制采用“while语句”循环判断实现输出波形的转换。4、系统理论分析与计算 4.1电流转
11、电压电路的分析与计算单极性输出 模拟输出电压的极性总是与的极性相反,为单极性输出。双极性输出在某些微机控制系统中,要求D/A的输出电压是双极性的。例如要求输出(-5+5 )V 。如图有如下计算公式: 模拟输出电压的极性总是与的极性相反,为单极性输出。模拟输出电压可利用基尔霍夫节点电流定律列出方程: 将代入上式,且当时解得: 当时,模拟输出电压的极性与的极性相同;当时,模拟输出电压的极性与的极性相反。 4.2软件程序的分析与实现实验程序:/* DAC0832.h */#include #include #define uchar unsigned char#define uint unsigne
12、d int#define ulong unsigned long#define _1602C_P PORTF#define _1602C_D DDRF#define _1602D_P PORTE#define _1602D_D DDRE#define CS 1#define WR 2#define ILE 0#define control_P PORTA#define control_D DDRA#define zhuangtai PINA#define DAT_P PORTC#define DAT_D DDRC/* main.c */#include #include #include DA
13、C0832.h#define V 5.0uchar data_thr256= 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,
14、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,0x9
15、2,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,
16、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,0x6
17、2,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 ; uchar data_sin256= 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,0
18、xBB,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
19、,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,0x
20、5B,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
21、,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; uchar data_fangbo
22、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,0xB
23、F,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,0
24、xBF,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
25、,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,0
26、x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00;void init()/端口初始化函数 control_P=0X0F; control_D=0XF0; DAT_P=0XFF; DAT_D=0XFF; _1602C_D=0XFF; _1602D_D=0XFF;void delay(uint ms) uint i,j;for(i=0;ims;i+) for(j=0;j10;j+); void main() uchar
27、 q; uint DAT,m,i; init(); while(1) if(q=0x0f) show_sin(); while(q=0x0f) for(i=0;i255;i+) PORTC=data_sini; if(q!=0x0f) break; if(q=0x0E) show_thr(); while(q=0x0E) for(i=0;i255;i+) PORTC=data_thri; if(q!=0x0E) break; if(q=0x0D) show_fangbo(); while(q=0x0D) for(i=0;i255;i+) PORTC=data_fangboi; if(q!=0x
28、0D) break; /* 1602.c*/#include #include #include DAC0832.hconst uchar thr=SANJIAOBO;const uchar sin=SIN;const uchar fangbo=FANGBO;void show_thr() uchar i,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;i9;i
29、+) write_dat(thri); delay(2); void show_sin() uchar i,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;i3;i+) write_dat(sini); delay(2); /*/void show_fangbo() uchar i,j; _1602C_P&=BIT(2); write_com(0x38); de
30、lay(5); write_com(0x0c); delay(5); write_com(0x06); delay(5); write_com(0x80+0x01); delay(5); for(i=0;i6;i+) write_dat(fangboi); delay(2); void write_com(uchar com) _1602C_P&=BIT(0); _1602C_P&=BIT(1); _1602D_P=com; _1602C_P|=BIT(2); delay(1); _1602C_P&=BIT(2);void write_dat(uchar dat) _1602C_P|=BIT(
31、0); _1602C_P&=BIT(1); _1602D_P=dat; _1602C_P|=BIT(2); delay(1); _1602C_P&=BIT(2); 5、电路设计5.1 系统总体框图5.2 单极性电路原理图5.3 双极性电路原理图5.4 电源电源为DA芯片提供+12V的电源,为电流转电压电路提供12V电源,确保电路的正常稳定工作。要确保正负极接法的准确性。6、测试方案与测试结果6.1 测试方案 将电路分级进行测试,也就是说,从方波振荡信号产生到最后波形合成,一级一级的检测。确认一级准确无误后,再接上下一级电路,测量前后两级是否正常工作。所有模块板子都要保证所有地线共线、电源线共线
32、。6.2 测试条件与仪器测试条件:检查无误,硬件电路必须与系统原理图完全相同,并且检查无误,硬件电路保证无虚焊。测试仪器:数字万用表、示波器、稳压电源。6.3 测试结果与分析6.3.1 测试结果(数据) 输出的正弦波、三角波、方波波形完美,频率为2.34KHz。 6.3.2 测试分析与结论 根据实验数据,随着输入信号频率的增加,误差也随着增加。误差基本保持在10mv以内。误差率为:1%。附录1 参考文献1 邱关源、罗先觉 主编电路。北京:高等教育出版社。2006.52 康光华 主编模拟电子技术基础。北京:高等教育出版社。2006.13 森 荣二 主编LC滤波器设计于制作。北京:科学出版社。2006.1 4 马场清太郎 主编运算放大器应用电路设计。北京:科学出版社。2007.4附录2 系统原理图