ImageVerifierCode 换一换
格式:DOCX , 页数:19 ,大小:810.28KB ,
资源ID:9045355      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/9045355.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(基于AD5064芯片的DA转换程序设计报告.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

基于AD5064芯片的DA转换程序设计报告.docx

1、基于AD5064芯片的DA转换程序设计报告基于AD5064芯片的DA转换程序设计报告一、设计目的:1) 掌握D/A转换芯片AD5064的性能和编程方法。2) 以c8051f340单片机控制器,结合LCD1602液晶显示模块,可以实现在室温条件下将给定数字电压信号,经过AD5064转化为相应的模拟量,并用示波器或万用表可显示输出的电压值。二、设计环境:1)软件编程部分是在Silicon Laboratories IDE软件下完成的。2)DA转换的数据是在目前室温(3-14)下进行的。3)本次DA转化设计的参考电压值为5V。三、设计内容: 本次设计包含了:硬件电路的设计,DA转换程序的设计,硬件电

2、路和程序的调试三大部分。3.1、硬件电路的设计:3.1.1 DA转换部分硬件电路的设计AD5064原理图设计如图3-1所示, 图3-1 AD5064原理图3.1.2 硬件电路的连接将c8051f340单片机与lcd1602,及AD5064相互连接。各模块连线示意图如图3-2所示,输入控制信号有串行数据时钟信号(SCLK)、串行数据输入信号(DIN)、帧同步信号(SYNC)、DAC装载寄存器(LDAC),三个控制信号,实物连接图如图3-3所示:图3-2 各模块连线示意图图3-3 各模块连接实物图3.2、DA程序设计:通过阅读AD5064芯片使用手册,结合c8051f340对DA转化的初步程序进行

3、了编写:测试程序是以DA芯片AD5064为主体,结合c8051f340单片机实现对AD5064的控制,以按键选择,先在LCD1602显示要输出的电压值,再完成输出电压的值DA转化,最后在输出端输出。3.1.1 程序设计总体框图:图3-4 程序设计总体框图3.1.2 程序设计部分:(1)、AD5064是一个是低功耗、四通道16位位缓冲电压输出,能够以最高50 MHz的时钟速率工作,并与标准SPI、QSPI、MICROWIRE和DSP接口标准兼容。片内提供集成基准电压缓冲器和输出放大器。输入控制信号有串行数据时钟信号(SCLK)、帧同步信号(SYNC)、DAC装载寄存器(LDAC),三个控制信号,

4、可以分别控制4通道输出不同的电压值,片内有两个寄存器,输入寄存器,DAC寄存器,一旦输入寄存器中有数据,可以分别用软件或者硬件来控制DAC寄存器值得更新。结合AD5064使用手册,首先对一些指令进行了定义,方便之后程序的调用。#define _0V 0x0000 /参考电压为5V时,输出为0V时数据位应存入的值#define _1V 0x3333 /参考电压为5V时,输出为1V时数据位应存入的值 #define _2V 0x6666 /参考电压为5V时,输出为2V时数据位应存入的值#define _3V 0x9999 /参考电压为5V时,输出为3V时数据位应存入的值#define _4V 0x

5、cccc /参考电压为5V时,输出为4V时数据位应存入的值#define C_Writ_IR 0X00 /给输入寄存器写值命令#define C_Rest 0X07 /复位命令#define A_A 0X00 /DAC A通道选择#define A_B 0X01 /DAC B通道选择#define A_C 0X02 /DAC C通道选择#define A_D 0X03 /DAC D通道选择#define A_ALL 0X0F /DAC 所有通道选择sbit SCLK = P10; /串行数据时钟信号sbit DIN = P11; /串行数据输入sbit SYNC = P15; /帧同步信号sb

6、it LDAC = P16; /DAC装载寄存器(2)、结合AD5064使用手册中的移位寄存器分布图3-5和时序工作图3-6,对AD5064DA转化的操作命令进行了编写,因为数据是大端存储,先送命令位,故以写命令为例,由时序图可知,在时钟下降沿,数据在被帧同步信号锁存,由于本次DA主控器件为单片机,故选用8位为一次操作,先把时钟信号SCLK置1,再将8位数据循环送入数据串行入端口(DIN),完成写命令操作。图3-5移位寄存器分布图图3-6时序图工作写命令子程序:输入:为相应的命令伪指令输出:无此程序完成功能:完成操作控制DA执行的相应命令。在8次循环中,先将时钟信号置高电平,再将数据位上的第8

7、位数据送入数据串行入端口(DIN)延时一段时间,将时钟电平置0,锁存第8位数据;再次循环,将数据左移一位,取出第8位,送入数据串行入端口(DIN),再延时一段时间后,将时钟电平置0,再次锁存第7位数据,直到8位数据全部送完,从而完成命令控制功能。注意:如图3-5所示,本次命令控制程序只有低4位有用。void Write_Cmd(uchar dat) /写命令操作 uchar i; /用以循环的变量 for(i=0;i8;i+) /写8位,高4位无用 SCLK = 1; /时钟信号置高电平 DIN = (dati)&0x80)?1:0; /数据从高位到低位依次循环送入数据串行入端口 Delay(

8、30); /延时 SCLK = 0; /将SCLK置0,时钟下降沿触发,将输入数据锁存。 Delay(30); /下降沿保持,保证时钟低电平与高电平对应 写地址子程序:输入:为相应的输出通道伪指令输出:无此程序完成功能:完成操作控制DA通道选择命令。在8次循环中,先将时钟信号置高电平,再将数据位上的第8位数据送入数据串行入端口(DIN)延时一段时间,将时钟电平置0,锁存第8位数据;再次循环,将数据左移一位,取出第8位,送入数据串行入端口(DIN),再延时一段时间后,将时钟电平置0,再次锁存第7位数据,直到8位数据全部送完,从而完成命令控制功能。注意:如图3-5所示,本次命令控制程序只有4位有用

9、,故只循环4次。void Write_Addr(uchar dat) /写地址 uchar i; /用以循环的变量 dat=dat4; /地址只有四位右移使之处在高4位 for(i=0;i4;i+) /写8位,高4位无用循环四次 SCLK = 1; /时钟信号置高电平 DIN = (dati)&0x80)?1:0; /数据从高位到低位依次循环送入数据串行入端口 Delay(30); SCLK = 0; /将SCLK置0,时钟下降沿触发,将输入数据锁存。 Delay(30); /下降沿保持,保证时钟低电平与高电平对应 写数据子程序:输入:为相应的电压数据指令输出:无此程序完成功能:完成操作控制D

10、A通道选择命令。在8次循环中,先将时钟信号置高电平,再将数据位上的第8位数据送入数据串行入端口(DIN)延时一段时间,将时钟电平置0,锁存第8位数据;再次循环,将数据左移一位,取出第8位,送入数据串行入端口(DIN),再延时一段时间后,将时钟电平置0,再次锁存第7位数据,直到8位数据全部送完,从而完成命令控制功能。注意:如图3-5所示,因数据位16位,故数据位分高低两个8位完成传输,调用两次此程序。void Write_Date(uchar dat) /写数据 uchar i; /用以循环的变量 for(i=0;i8;i+) /单片机中,写8位数据,分两次 SCLK = 1; /时钟信号置高电

11、平 DIN = (dat8; /取出高8位 datl=dat&0x00ff; /取出低8位 SYNC = 0; /将帧同步信号置0 Delay(30); Write_Cmd(cmd); /调用写命令子程序 Write_Addr(add); /调用写地址子程序 Write_Date(dath); /写数据高8位 Write_Date(datl); /写数据低8位 Write_Addr(0x00); /无效数据位或ldac SYNC = 1; /将帧同步信号置0 Delay(30); LDAC = 0; /通过硬件对DAC寄存器进行刷新,使相应端口输出电压值 Delay(30); LDAC = 1

12、; Delay(30);(3)、调用方法举例:当程序调用时可以直接调用ADC5064_write总体写程序,就可以实现对ADC5064的控制。例如:ADC5064_write(C_Rest,A_ALL,_0V);本程序可以使ADC5064的所有输出端口复位为0V。C_Rest为控制命令,A_ALL为选择所有输出通道地址,_0V为使输出为0V时的数据。ADC5064_write(C_Writ_IR,A_A,_3V);本程序可以使ADC5064的A通道输出端口输出3V。C_Writ_IR为控制命令,是将从数据串行入端口(DIN)送入的数据送到输入寄存器中,A_A为选择A通道输出,_3V为使输出为3

13、V。四、 硬件电路的测试和程序调试:4.1、硬件电路的调试结合PCB板子,对DA芯片AD5064的硬件电路进行了焊接、测试和调试,仔细检查各个管脚走线,确保了各个管脚无错误相连以及板子上各个芯片正常供电。4.2、对程序进行调试: 在对测试程序调试之后,可以满足通过c8051f340开发板上的按键来控制所要输出的电压值。调试结果选取如图4-1所示:图4-14.3 信号时序图测试:在调试过程中主要对时钟信号和帧同步信号、LDAC进行了测试,因为数据是在时钟信号的下降沿被送入输入寄存器的,因为数据各不相同,所以只需要观察时钟信号即可知完成一次数据所用的时间。时钟信号如图4-2所示:图4-2 时钟信号

14、两个下降沿相隔110us。故完成一次对AD5064的数据操作,需要3200us。从帧同步信号的下降沿开始,时钟信号必须要延迟一段时间才可以进行数据的数据,故帧同步信号的下降沿到数据的第一位开始锁存之间加了一个延时,时间为112us.用示波器观察如图4-3所示。图4-3 帧同步信号之后的延时LDAC信号为DAC寄存器更新信号控制信号,该信号置0时,输出通道才有电压输出,该信号置0时间必须延时一段时间,才可以完成输出端口电压的更新。延时时间软件设计时间为50us。示波器观察如图4-4所示:图4-4五、调试结果分析通过对AD5064芯片的调试,分别对输入从0V-5V进行了测试,测试结果如表5-1所示

15、,并作测试图如图5-2所示。输入电压(V)0.000.501.501.001.502.002.503.003.504.004.505.00显示电压(V)0.100.501.511.101.512.082.513.023.524.024.474.47表5-1图5-2注:显示电压是以直流稳压电源作为电源电压Vref=5.02V。由表5-1和图5-2可知:本测试程序可以实现0V-4.5V之间的DA转化,结果十分接近。目前存在的问题和不足:经过多次反复测试,发现:当输入电压为5V时输出的电压只有4.47V左右,出现了比较大的偏差,原因正在检查之中。附录:DA转换测试主程序/-/AD5064_TEST.

16、c/-/* File name : DA_MAIN.c* Compiler : Silicon Laboratories IDE* Project name:DA_TEST* Author : Wendell Neil(倪文龙)* Date : 2012.10.7* Description :本程序是以AD公司的DA芯片AD5064为主体,结合c8051f340单片机实* 对AD5064的控制,以按键选择,先在LCD1602显示要输出的电压值,再* 完成输出电压的值DA转化,最后在输出端口输出。* comments :参考电压本程序以为5V基准,即Vref外接5V电压 */#includec8

17、051f340.h#includeLCD1602.h#includesource.h#define _0V 0x0000 /参考电压为5V时,输出为0V时数据位应存入的值#define _1V 0x3333 /参考电压为5V时,输出为1V时数据位应存入的值 #define _2V 0x6666 /参考电压为5V时,输出为2V时数据位应存入的值#define _3V 0x9999 /参考电压为5V时,输出为3V时数据位应存入的值#define _4V 0xcccc /参考电压为5V时,输出为4V时数据位应存入的值#define C_Writ_IR 0X00 /给输入寄存器写值命令#define

18、C_Rest 0X07 /复位命令#define A_A 0X00 /DAC A通道选择#define A_B 0X01 /DAC B通道选择#define A_C 0X02 /DAC C通道选择#define A_D 0X03 /DAC D通道选择#define A_ALL 0X0F /DAC 所有通道选择sbit SCLK = P10; /串行数据时钟信号sbit DIN = P11; /串行数据输入sbit SYNC = P15; /帧同步信号sbit LDAC = P16; /DAC装载寄存器void Write_Cmd(uchar dat) /写命令 uchar i; for(i=0

19、;i8;i+) /写8位,高4位无用 SCLK = 1; /Delay1us(1); DIN = (dati)&0x80)?1:0; /数据从高位到低位传送 Delay(30); /12M晶振,延时50us SCLK = 0; Delay(30); void Write_Addr(uchar dat) /写地址 uchar i; dat=dat4; for(i=0;i4;i+) SCLK = 1; DIN = (dati)&0x80)?1:0; Delay(30); SCLK = 0; Delay(30); void Write_Date(uchar dat) /写数据 uchar i; fo

20、r(i=0;i8;i+) SCLK = 1; DIN = (dat8; datl=dat&0x00ff; SYNC = 0; Delay(30); Write_Cmd(cmd); Write_Addr(add); Write_Date(dath); /写数据高8位 Write_Date(datl); /写数据低8位 Write_Addr(0x00); /无效数据位或ldac SYNC = 1; Delay(30); LDAC = 0; Delay(30); LDAC = 1; Delay(30);void main() /测试程序,用按键控制输出值。 int i; Init_Device();

21、 LCD_Initial(); Delay_ms(5); LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN); Delay1ms(1000); GotoXY(0,0); Print(Input value is); GotoXY(0,1); Print( V); Delay1ms(1000); Led1=0; Led2=0; ADC5064_write(C_Rest,A_ALL,_0V); /AD5064上电复位,每个Vout输出为零 Delay1ms(1000); for(i=0;i3;i+) Led1=Led1; Led2=Led2; Delay1ms(1000

22、); Led1=Led1;while(1) ADC5064_write(C_Writ_IR ,A_C,_3V); /如果Key1按下,C通道输出3V ADC5064_write(C_Writ_IR ,A_B,_0V); /如果Key1按下,B通道输出0V if(Key1=0) GotoXY(5,1); Print(1.00); Delay1ms(1000); ADC5064_write(C_Writ_IR ,A_A,_1V); /如果Key1按下,A通道输出1V / Led1=Led1; if(Key2=0) GotoXY(5,1); Print(2.00); Delay1ms(1000); ADC5064_write(C_Writ_IR,A_A,_2V); /如果Key2按下,A通道输出2V

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1