找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2989|回复: 3
收起左侧

STM32F407配置AD5624R芯片源程序与中文资料

[复制链接]
ID:564486 发表于 2020-11-27 09:47 | 显示全部楼层 |阅读模式
  关于此dac芯片的一些配置,添加到工程里稍微改改头文件就可以拿来用,里面配置的比较粗糙,有待细化。

AD5624R/AD5644R/AD5664R均属于nanoDAC®系列,分别是低功耗、四通道、12/14/16位缓冲电压输出DAC,采用2.7 V至5.5 V单电源供电,通过设计保证单调性。

AD5624R/AD5644R/AD5664R均内置一个片内基准电压源。AD56x4R-3内置一个1.25 V、5 ppm/°C基准电压源,满量程输出范围可达到2.5 V;AD56x4R-5内置一个2.5 V、 5 ppm/°C基准电压源,满量程输出范围可达到5 V。上电时,片内基准电压源关闭,因而可以用外部基准电压源。所有器件均可以采用2.7 V至5.5 V单电源供电。内部基准电压源通过软件写操作来使能。

上述器件内置一个上电复位电路,确保DAC上电后输出0 V并保持该电平,直到执行一次有效的写操作为止。此外还具有各通道独立关断特性,在关断模式下,器件在5 V时的功耗降至480 nA,并提供软件可选的输出负载。在正常工作模式下,该器件具有低功耗特性,非常适合便携式电池供电设备。
AD5624R/AD5644R/AD5664R采用多功能三线式串行接口,能够以最高50 MHz的时钟速率工作,并与标准SPI、QSPI™、MICROWIRE™、DSP接口标准兼容。它内置片内精密输出放大器,能够实现轨到轨输出摆幅。

AD5624中文资料
51hei.png
产品聚焦
1.  四通道、12/14/16位DAC。
2. 1.25 V/2.5 V、5 ppm/ºC片内基准电压源。
3.  提供3 mm × 3 mm、10引脚MSOP和10引脚LFCSP_WD 两种封装。
4.  低功耗:3 V时典型功耗为1.32 mW,5 V时为2.2 mW。

单片机源程序如下:
  1. #include "AD5624.h"

  2. /*
  3. *@name:         AD5624_Init
  4. *@function:dac芯片初始化
  5. *@parameter: 无
  6. */

  7. /* 短暂延时 */
  8. void AD5624R_delay(){
  9.          u8 i=20;
  10.          while(i>0){
  11.                  i--;
  12.          }
  13. }

  14. void AD5624_Init(void){
  15.         GPIO_InitTypeDef  GPIO_InitStructure;

  16.         RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE);//使能GPIOB时钟

  17.         //GPIOC7 片选
  18.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;//PB14
  19.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;//输出
  20.         GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽输出
  21.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHz
  22.         GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉
  23.         GPIO_Init(GPIOC, &GPIO_InitStructure);//初始化

  24.         AD5624_CS = 1;
  25.         SPI1_Init();                                                                                   //初始化SPI
  26.         SPI1_SetSpeed(SPI_BaudRatePrescaler_4);                                //设置为21M时钟,高速模式
  27.         AD5664_InternalRefSetUp(INSETREFVOL_SETUP,DAC_C);        //开启内部基准电压源
  28.         AD5664_PowerDown(MODE_NORMAL,DAC_C);                                //上电
  29. }

  30. // Vout = (5*D)/65535
  31. /*
  32. *@name:         AD5268_SetVal
  33. *@function:设置输出电压
  34. *@parameter:
  35. *                        @cmd:命令
  36. *                        @addr:输出地址
  37. *                        @data:电压值(最大值为4095)
  38. */
  39. void AD5268_SetVal(u8 cmd,u8 addr,u16 data){
  40.         u8 size1=0,size2=0,size3=0;
  41.         AD5624_CS = 0;
  42.         size1 = (cmd<<3)|addr;
  43.         size2 = (data>>8)&0xff;
  44.         size3 =  (data&0xff)<<4;
  45.         //拉低片选
  46.         SPI1_ReadWriteByte(size1);
  47.         SPI1_ReadWriteByte(size2);
  48.         SPI1_ReadWriteByte(size3);
  49.         AD5624R_delay();
  50.         AD5624_CS = 1;
  51.         AD5624R_delay();
  52.        
  53. }

  54. //写入寄存器
  55. void AD5624R_WriteToInputReg(u16 DACValue,u16 addr){
  56.         u8 size1=0,size2=0,size3=0;
  57.         size1 = ((DAC_WRITE_REG)<<3)|addr;
  58.         size2 = (DACValue>>8)&0xff;
  59.         size3 =  (DACValue&0xff)<<4;
  60.         AD5624_CS = 0;
  61.         SPI1_ReadWriteByte(size1);
  62.         SPI1_ReadWriteByte(size2);
  63.         SPI1_ReadWriteByte(size3);
  64.         AD5624R_delay();
  65.         AD5624_CS = 1;
  66.         AD5624R_delay();
  67. }

  68. //更新dac
  69. void AD5624R_UpdataDac(u8 addr){
  70.         u8 size1=0,size2=0,size3=0;
  71.         size1 = ((DAC_WRITE_UPDATAALL_REG)<<3)|addr;
  72.         AD5624_CS = 0;
  73.         SPI1_ReadWriteByte(size1);
  74.         SPI1_ReadWriteByte(size2);
  75.         SPI1_ReadWriteByte(size3);
  76.         AD5624R_delay();
  77.         AD5624_CS = 1;
  78.         AD5624R_delay();
  79. }

  80. //写入寄存器并更新所有adc
  81. void AD5664_WriteToInputRegAndUpdateDACs(u16 DACValue,u16 addr){
  82.         u8 size1=0,size2=0,size3=0;
  83.         size1 = ((DAC_WRITE_UPDATAALL_REG)<<3)|(addr);
  84.         size2 = (DACValue>>8)&0xff;
  85.         size3 =  (DACValue&0xff)<<4;
  86.         AD5624_CS = 0;
  87.         SPI1_ReadWriteByte(size1);
  88.         SPI1_ReadWriteByte(size2);
  89.         SPI1_ReadWriteByte(size3);
  90.         AD5624R_delay();
  91.         AD5624_CS = 1;
  92.         AD5624R_delay();
  93. }

  94. //写入寄存器并更新指定adc
  95. void AD5664_WriteToInputRegDAC(u16 DACValue,u16 addr){
  96.         u8 size1=0,size2=0,size3=0;
  97.         size1 = ((DAC_WRITE_UPDATA_REG)<<3)|addr;
  98.         size2 = (DACValue>>8)&0xff;
  99.         size3 =  (DACValue&0xff)<<4;
  100.         AD5624_CS = 0;
  101.         SPI1_ReadWriteByte(size1);
  102.         SPI1_ReadWriteByte(size2);
  103.         SPI1_ReadWriteByte(size3);
  104.         AD5624R_delay();
  105.         AD5624_CS = 1;
  106.         AD5624R_delay();

  107. }

  108. //上电/掉电√
  109. void AD5664_PowerDown(u8 mode,u16 addr){
  110.         u8 size1=0,size2=0,size3=0;
  111.         size1 = ((DAC_POWER)<<3)|addr;
  112.         size3 = (mode<<4)|addr;
  113.        
  114.         AD5624_CS = 0;
  115.         SPI1_ReadWriteByte(size1);
  116.         SPI1_ReadWriteByte(size2);
  117.         SPI1_ReadWriteByte(size3);
  118.         AD5624R_delay();
  119.         AD5624_CS = 1;
  120.         AD5624R_delay();

  121. }

  122. //复位
  123. void AD5664_Reset(u16 addr,u8 mode){
  124.         u8 size1=0,size2=0,size3=0;
  125.         size1 = ((DAC_RESET)<<3)|addr;
  126.         size3 |= mode;
  127.         AD5624_CS = 0;
  128.         SPI1_ReadWriteByte(size1);
  129.         SPI1_ReadWriteByte(size2);
  130.         SPI1_ReadWriteByte(size3);
  131.         AD5624R_delay();
  132.         AD5624_CS = 1;
  133.         AD5624R_delay();

  134. }

  135. //DAC寄存器设置
  136. void AD5664_LDACRegSetUp(u16 addr){
  137.         u8 size1=0,size2=0,size3=0;
  138.         size1 = ((DAC_SET_REG)<<3)|addr;
  139.         size3 = addr;
  140.         AD5624_CS = 0;
  141.         SPI1_ReadWriteByte(size1);
  142.         SPI1_ReadWriteByte(size2);
  143.         SPI1_ReadWriteByte(size3);
  144.         AD5624R_delay();
  145.         AD5624_CS = 1;
  146.         AD5624R_delay();

  147. }

  148. //内部基准电压源设置(开启/关闭)√
  149. void AD5664_InternalRefSetUp(u8 mode,u16 addr){
  150.         u8 size1=0,size2=0,size3=0;
  151.         size1 = ((DAC_INSIDE_REFVOL)<<3)|addr;
  152.         size3 |= mode;
  153.         AD5624_CS = 0;
  154.         SPI1_ReadWriteByte(size1);
  155.         SPI1_ReadWriteByte(size2);
  156. ……………………

  157. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
AD5624R.zip (907.18 KB, 下载次数: 78)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:896590 发表于 2021-3-26 13:50 | 显示全部楼层
非常感谢分享,学习了。好资料,51黑有你更精彩!!!
回复

使用道具 举报

ID:360598 发表于 2021-9-3 14:00 | 显示全部楼层
AD5624和AD5624R区别在内置电压源,该程序是否可应用于
AD5624,谢谢
回复

使用道具 举报

ID:441828 发表于 2023-1-7 21:13 | 显示全部楼层
非常感谢分享,学习了。好资料,51黑有你更精彩!!!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表