找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 4062|回復(fù): 3
打印 上一主題 下一主題
收起左側(cè)

STM32F407配置AD5624R芯片源程序與中文資料

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:564486 發(fā)表于 2020-11-27 09:47 | 只看該作者 |只看大圖 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
  關(guān)于此dac芯片的一些配置,添加到工程里稍微改改頭文件就可以拿來用,里面配置的比較粗糙,有待細(xì)化。

AD5624R/AD5644R/AD5664R均屬于nanoDAC®系列,分別是低功耗、四通道、12/14/16位緩沖電壓輸出DAC,采用2.7 V至5.5 V單電源供電,通過設(shè)計(jì)保證單調(diào)性。

AD5624R/AD5644R/AD5664R均內(nèi)置一個(gè)片內(nèi)基準(zhǔn)電壓源。AD56x4R-3內(nèi)置一個(gè)1.25 V、5 ppm/°C基準(zhǔn)電壓源,滿量程輸出范圍可達(dá)到2.5 V;AD56x4R-5內(nèi)置一個(gè)2.5 V、 5 ppm/°C基準(zhǔn)電壓源,滿量程輸出范圍可達(dá)到5 V。上電時(shí),片內(nèi)基準(zhǔn)電壓源關(guān)閉,因而可以用外部基準(zhǔn)電壓源。所有器件均可以采用2.7 V至5.5 V單電源供電。內(nèi)部基準(zhǔn)電壓源通過軟件寫操作來使能。

上述器件內(nèi)置一個(gè)上電復(fù)位電路,確保DAC上電后輸出0 V并保持該電平,直到執(zhí)行一次有效的寫操作為止。此外還具有各通道獨(dú)立關(guān)斷特性,在關(guān)斷模式下,器件在5 V時(shí)的功耗降至480 nA,并提供軟件可選的輸出負(fù)載。在正常工作模式下,該器件具有低功耗特性,非常適合便攜式電池供電設(shè)備。
AD5624R/AD5644R/AD5664R采用多功能三線式串行接口,能夠以最高50 MHz的時(shí)鐘速率工作,并與標(biāo)準(zhǔn)SPI、QSPI™、MICROWIRE™、DSP接口標(biāo)準(zhǔn)兼容。它內(nèi)置片內(nèi)精密輸出放大器,能夠?qū)崿F(xiàn)軌到軌輸出擺幅。

AD5624中文資料

產(chǎn)品聚焦
1.  四通道、12/14/16位DAC。
2. 1.25 V/2.5 V、5 ppm/ºC片內(nèi)基準(zhǔn)電壓源。
3.  提供3 mm × 3 mm、10引腳MSOP和10引腳LFCSP_WD 兩種封裝。
4.  低功耗:3 V時(shí)典型功耗為1.32 mW,5 V時(shí)為2.2 mW。

單片機(jī)源程序如下:
  1. #include "AD5624.h"

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

  7. /* 短暫延時(shí) */
  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時(shí)鐘

  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);                                //設(shè)置為21M時(shí)鐘,高速模式
  27.         AD5664_InternalRefSetUp(INSETREFVOL_SETUP,DAC_C);        //開啟內(nèi)部基準(zhǔn)電壓源
  28.         AD5664_PowerDown(MODE_NORMAL,DAC_C);                                //上電
  29. }

  30. // Vout = (5*D)/65535
  31. /*
  32. *@name:         AD5268_SetVal
  33. *@function:設(shè)置輸出電壓
  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. //復(fù)位
  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寄存器設(shè)置
  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. //內(nèi)部基準(zhǔn)電壓源設(shè)置(開啟/關(guān)閉)√
  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. …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼

所有資料51hei提供下載:
AD5624R.zip (907.18 KB, 下載次數(shù): 80)

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:896590 發(fā)表于 2021-3-26 13:50 | 只看該作者
非常感謝分享,學(xué)習(xí)了。好資料,51黑有你更精彩!!!
回復(fù)

使用道具 舉報(bào)

板凳
ID:360598 發(fā)表于 2021-9-3 14:00 | 只看該作者
AD5624和AD5624R區(qū)別在內(nèi)置電壓源,該程序是否可應(yīng)用于
AD5624,謝謝
回復(fù)

使用道具 舉報(bào)

地板
ID:441828 發(fā)表于 2023-1-7 21:13 | 只看該作者
非常感謝分享,學(xué)習(xí)了。好資料,51黑有你更精彩!!!
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表