AD5686R(16位高精度DAC)硬件和程序设计

目录

  • AD5686R(16位高精度DAC)硬件和程序设计
    • 前言
    • 简介
    • 硬件设计
    • 硬件设计
      • 代码移植部分
      • API部分
    • 芯片性能
    • 开源地址

前言

  由于不太喜欢使用STM32内部的DAC和想要学习外部DAC的原因,做了这个DAC的硬件和程序,作为自己的技术积累,和大家分享

简介

AD5686R:
  16位精度、自带2.5V基准电压源.
在2.5V基准电压下,通过内部2倍增益,最大可以输出5V电压
接口:SPI,最大速度:25M(官方),我跑到过32M

硬件设计



  首先是电源部分,AD5686R最大可以输入5.5V电压,数字IO电压独立,所以可以兼容STM32和arduino两大最常用的阵营。在VDD方面,通过排针可以选择输入的电压,分别是3.3V,直接输入的5V,和LDO稳压后的5V。
  数字引脚方面,除了SPI的上下拉之外,对复位、LDAC、RSTSEL、GAIN等功能引脚均有上下拉,做了硬件调试的冗余。
  四个模拟输出都有滤波电容和泄放电阻。
  整体设计参照了官方给出的DEMO。并且已经实验,完全可用,PCB和原理图全部开源,和代码一起放在Github上了,链接在文末,自行取用。

硬件设计

  AD5686R的寄存器不多,驱动部分也比较简单。由于驱动的代码太过长(约500行)。所以在这里只介绍移植相关和API代码。

代码移植部分

  代码文件由AD5684_5_6R.c和AD5684_5_6R.h,两个文件构成。需要与HAL库配合使用,需要硬件部分一个完整的四线SPI和两个GPIO输出的资源,SPI时钟小于25M。
  将代码文件复制和添加到开发环境后。以下是需要按照硬件不同而修改的部分:

int AD5686x_Init(void)
{/*用户定义参数*/DAC1_AD5686.Name = AD5686;DAC1_AD5686.SPI_Aisle=hspi1;DAC1_AD5686.EN_Pin=GPIO_PIN_4;DAC1_AD5686.EN_Prot=AD5686R_EN_GPIO_Port;DAC1_AD5686.LDAC_Pin=GPIO_PIN_3;DAC1_AD5686.LDAC_Prot=AD5686R_LDAC_GPIO_Port;DAC1_AD5686.RESET_Pin=AD5686R_RESET_Pin;DAC1_AD5686.RESET_Prot=AD5686R_RESET_GPIO_Port;DAC1_AD5686.Vref = 2.5;DAC1_AD5686.GAIN = Double_GAIN;DAC1_AD5686.Renew_Mode = asynchronous;
}

解释一下,这是创建了一个关于AD5686的结构体,各个参数有一些规范
  Name:由于此代码兼容三种芯片规格,所以需要在Name中表明芯片型号:AD5684、AD5685、AD5686
  SPI_Auske:所使用的SPI的结构体名称,可以在SPI.c的文件中复制过来。
  脚位设置:NSS(EN)、LDAC、RESET,的脚位,可以在Main.h中复制(需要在STM32 CUBEMX设置引脚的名称)
  Vref:参考电压,一般使用片内自带的2.5V电压,也可以从外部输入。
  GAIN:是否使用片内的增益,Single_GAIN(不使用增益)、Double_GAIN(2倍增益)
  Renew_Mode:更新方式,可以选择同步更新(Synchronize)和异步更新(asynchronous)。在使用写入寄存器n的API时,如果模式为同步更新,则会自动使能LDAC引脚同步数据。
  到此,代码部分已经移植完毕,十分的简单。

API部分

  先呈上一个最常用的API,如果对输出时许没有太多要求的场合,学习这一个API就可以操作这个芯片了

/*** @brief 使用V为单位直接写入DAC* @param AD568x:写目标设备* @param Aisle:选择的通道* @param Mode:选择的模式* @retval 写操作反馈*/
int AD568x_write_V(AD5686_5_4R *AD568x, uint8_t Aisle, double DATA_D)
例如
AD568x_write_V(&DAC1_AD5686,Aisle_A,1.75);

Aisle:选择的通道,可以为Aisle_A、Aisle_B、Aisle_C、Aisle_D。
DATA_D:可以是0-(参考电压*增益倍数)的任意小数

  其他的API

/*** @brief 设置LDAC屏蔽* @param AD568x:写目标设备* @param Aisle:选择的通道* @param Mode:选择的模式* @retval 写操作反馈*/
int AD568x_ldac_mask(AD5686_5_4R *AD568x, uint8_t Aisle, int Mode)
/*** @brief 设置掉电模式* @param AD568x:写目标设备* @param Aisle:选择的通道* @param Mode:选择的模式* @retval 写操作反馈*/
int AD568x_power_mode(AD5686_5_4R *AD568x, uint8_t Aisle, int Mode)
/*** @brief 写入并更新n* @param AD568x:写目标设备* @param Aisle:选择的通道* @retval 写操作反馈*/
int AD568x_write_update_register(AD5686_5_4R *AD568x, uint8_t Aisle, int DATA)
/*** @brief 通过写入寄存器n更新DAC* @param AD568x:写目标设备* @param Aisle:选择的通道* @retval 写操作反馈*/
int AD568x_update_register(AD5686_5_4R *AD568x, uint8_t Aisle)
/*** @brief 写入输入寄存器n* @param AD568x:写目标设备* @param Aisle:选择的通道* @param DATA:数值* @retval 写操作反馈*/
int AD568x_set_shift_reg(AD5686_5_4R *AD568x, uint8_t Aisle, int DATA)
/*** @brief 通过LDAC引脚对AD568x的寄存器数据更新* @param AD568x:写目标设备* @retval 无*/
int AD568x_Renew_LDAC(AD5686_5_4R *AD568x)

其一些模式和参数在.h文件夹中有解释。

芯片性能

  使用这些程序简单的测试了一下这个DAC,基本可以满足我对DAC的需求,从0-5V的跳跃是需要4ns,输出频率由于SPI的限制,只能跑到15k左右。但作为高精度的DAC也是足够了。

开源地址

可以去白嫖了~下载的时候求求点一下星星,抱拳了!
github :https://github.com/lijinlong21549/AD5686R-Module
关于硬件有什么问题欢迎私信。

AD5686R(16位高精度DAC)硬件和程序设计相关推荐

  1. 高性能工业级16位高精度UART转PWM接口SOC芯片

    ZW10U8系列 ● 接口标准 - 通用的UART异步通讯协议,固定波特率4800,1位开始,1位停止,无校验,TTL3.3-5V. - 1个使能脚(ZW10U8xE后缀带E的),低功耗应用中可以让芯 ...

  2. 硬件设计与实践:16位CPU设计

    课程设计报告 名 称: 硬件设计与实践 题 目: 16位CPU设计 硬件设计与实践 任 务 书 一. 目的与要求 1.目的 1.1 培养学生在计算机硬件方面的动手实践能力: 1.2 熟悉VHDL硬件描 ...

  3. STM32管脚模拟协议驱动双路16位DAC芯片TM8211

    STM32管脚模拟协议驱动双路16位DAC芯片TM8211 TM8211是一款国产的低成本双路16位DAC驱动芯片,可以应用于普通数模转换领域及音频转换领域等.这里介绍STM32 HAL库驱动TM82 ...

  4. c语言16位字节只能用到255,《C语言程序设计》月考试题(第三章).doc

    实验五班<C语言程序设计>月考试题 学号 姓名 一.填空题 1.应用程序ONEFUNC.C中只有一个函数,这个函数的名称是________________. 2.在一个C源程序中,注释部分 ...

  5. Stc8硬件乘除法器_16位除16位_汇编

    ;-----------------------------------------------MDU16硬件乘除法器相关 MD3 EQU 0FCF0H ;第一操作数: MD3MD2MD1MD0 见S ...

  6. 8通道16位DAC芯片LTC2600编程使用

    1.简介 LTC2600是亚德诺公司的单极性八通道16位轨至轨DAC,体积小,分辨率高.使用SPI驱动方式编程控制. 2.引脚功能 先上一张手册里面的引脚功能描述,重点关注片选引脚CS,时钟引脚SCK ...

  7. STM32模拟SPI时序控制双路16位数模转换(16bit DAC)芯片DAC8552电压输出

    STM32模拟SPI时序控制双路16位数模转换(16bit DAC)芯片DAC8552电压输出 STM32部分芯片具有12位DAC输出能力,要实现16位及以上DAC输出需要外挂DAC转换ASIC. D ...

  8. 主题:瑞萨16 位R8C/TINY 系列单片机

    主题:瑞萨16 位R8C/TINY 系列单片机– 小型,少脚数,高速,高效能,含闪存的MCU 在线问答: [问:winalltech] WDT通过软件来开关,有可能不可靠吗?会因为干扰而造成其突然关闭 ...

  9. 一个电路分析(设计经典的单片机采样电阻 C8051F330内部具有10位高精度的A/D转换器)

    一个电路分析(转) 即将要分析的电路如下,这个电路本人觉得设计的很经典.这个电路主要完成的任务就是监测流经Q1和采样电阻R6中的电流.单片机C8051F330对电流的各种情况做出动作和反应.分析的主要 ...

最新文章

  1. CentOS7:Thrift的安装
  2. CentOS 7.8下安装PyRosetta4
  3. 转:js-sdk探索之微信网页分享
  4. 源码编译安装nginx1.4.7
  5. 重温Vue-router
  6. Codeforces Round #433 (Div. 2, based on Olympiad of Metropolises)
  7. js面向对象之创建对象1
  8. The Moving Points
  9. unix系统mysql卸载教程_Linux操作系统下MySQL的卸载、安装全过程
  10. eva每一集片尾曲是谁唱的_evaTV版的片尾曲是不是每集的都不一样啊?
  11. java 图片 文字_java实现 给图片加上文字
  12. mac安装appium时执行appium-doctor命令提示command not found: appium-doctor
  13. 微信自动投票的php代码
  14. Linux基本命令-权限、运维相关
  15. balsamiq mockups 注册
  16. JQuery 向下展开收起动画( slideDown(),slideUp() )
  17. 最新传智播客P2P金融项目网络借贷平台开发
  18. 东大《冶金反应工程学》在线平时作业1
  19. Kali利用0DAY漏洞CVE-2018-8174获取shell权限
  20. 基于spark mllib 随机森林分类 代码记录后续完善

热门文章

  1. 宾夕法尼亚的第一台计算机,宾夕法尼亚大学博士申请 - 世界上第一台计算机诞生与美国宾夕法尼亚大学,这台计算机是什么,只能算数字吗?(也就是几加几几乘几什...
  2. shell: sh 和ksh的不同
  3. 三星电子 CEO 敲定,三人联席架构继续,李尚勋将任董事会主席
  4. ios6应用运行在ios7系统上
  5. java如何导入jframe包_Java:将类导入Jframe
  6. 华为诺亚方舟实验室(智能工业视觉组)招聘实习生
  7. springCloud微服务常用设计模式(聚合方式)
  8. 2021年全球与中国金属切割机行业市场规模及发展前景分析
  9. Pandora数据工厂之概述
  10. 关于工业生产中的线圈(定子)瑕疵品分析