標(biāo)題: 基于STM32的12位軌對軌DAC MCP4725驅(qū)動程序-項目在用的 [打印本頁]

作者: 失心戀2015    時間: 2019-1-9 15:25
標(biāo)題: 基于STM32的12位軌對軌DAC MCP4725驅(qū)動程序-項目在用的
此款DAC芯片是SOP6封裝的12位的軌對軌片子,正好補(bǔ)償小容量STM32沒有DAC功能的缺陷,IIC接口,外圍電路很簡單。輸出函數(shù)直接調(diào)用:MCP4725_WriteData_Voltage(u16 Vout) 這個函數(shù)。補(bǔ)充一下:最大輸出為5V,用到了電平轉(zhuǎn)換。例如:****
頭文件/初始化文件忽略
****
int main(void)
{        
         delay_init();            //延時函數(shù)初始化         
         MCP4725_Init();   //MCP4725初始化         
         while(1)
        {
   MCP4725_WriteData_Voltage(4095);   //輸出最大   一般要求在100-4000之間
        }
}

制作出來的實物圖如下:


單片機(jī)源程序如下:
  1. #include "MCP4725.h"
  2. #include "delay.h"
  3. #include "usart.h"       

  4. //初始化IIC接口
  5. void MCP4725_Init(void)
  6. {
  7.         IIC_Init();
  8. }

  9. //使用快速模式寫命令寫DAC寄存器
  10. void MCP4725_WriteData_Voltage(u16 Vout)   //電壓單位mV
  11. {
  12.   u8 temp;
  13.         u16 Dn;
  14.         Dn = ( 4096 * Vout) / VREF_5V;
  15.         temp = (0x0F00 & Dn) >> 8;  //12位數(shù)據(jù)
  16.        
  17.         IIC_Start();
  18.         IIC_Send_Byte(0XC2);      //器件尋址,器件代嗎:1100; 地址位A2,A1,A0為 0 , 0 , 1;-> 1100 0010
  19.     IIC_Wait_Ack();         
  20.     IIC_Send_Byte(temp);        
  21.     IIC_Wait_Ack();         
  22.     IIC_Send_Byte(Dn);        //將低8位送到DAC寄存器
  23.         IIC_Wait_Ack();       
  24.     IIC_Stop();//產(chǎn)生一個停止條件         
  25.         delay_ms(10);       
  26. }

  27. void MCP4725_WriteData_Digital(u16 data)   //12位數(shù)字量
  28. {
  29.   u8 data_H=0,data_L=0;
  30.         data_H = ( 0x0F00 & data) >> 8;
  31.         data_L = 0X00FF & data ;
  32.         IIC_Start();
  33.         IIC_Send_Byte(0XC0);      //器件尋址,器件代嗎:1100; 地址位A2,A1,A0為 0 , 0 , 0;-> 1100 0000
  34.     IIC_Wait_Ack();         
  35.     IIC_Send_Byte(data_H);        
  36.     IIC_Wait_Ack();         
  37.     IIC_Send_Byte(data_L);
  38.         IIC_Wait_Ack();       
  39.     IIC_Stop();//產(chǎn)生一個停止條件         
  40.         delay_ms(10);       
  41. }
復(fù)制代碼

所有資料51hei提供下載:
MCP4725驅(qū)動.7z (183.37 KB, 下載次數(shù): 489)




作者: zhouhuyin    時間: 2019-3-17 13:25
大哥,工程不完整啊,搞不好啊,能不能幫幫我
作者: 失心戀2015    時間: 2019-3-20 10:16
zhouhuyin 發(fā)表于 2019-3-17 13:25
大哥,工程不完整啊,搞不好啊,能不能幫幫我

抱歉哦,由于這是公司的項目,產(chǎn)品在專利審查期,暫且不能外放。你可以把這個文件移植到正點原子的任意一個工程里面,調(diào)用那個函數(shù)就行了

作者: aaaaaa。    時間: 2019-8-4 10:11
VREF_5V是4760是什么意思?4760是5V電壓的DAC值嗎
作者: aaaaaa。    時間: 2019-8-4 11:34
樓主,我用了你的程序,MCP4725_WriteData_Voltage(2000),用萬用表測得的電壓是1.61V,但是我把2000改為3724,測得的電壓還是1.61V,不知道哪里出問題了,樓主能指點一下嗎
作者: 1527868212    時間: 2019-12-1 22:51
aaaaaa。 發(fā)表于 2019-8-4 11:34
樓主,我用了你的程序,MCP4725_WriteData_Voltage(2000),用萬用表測得的電壓是1.61V,但是我把2000改為 ...

你的A0是接的地,而樓主的A0接的是高,地址不對。
作者: 查詢無結(jié)果    時間: 2020-1-16 23:35
樓主,3v3供電的測試沒問題,用5v給MCP4725供電,用數(shù)字方式寫4095時得到的電壓只有2.7v
作者: 微納連接原理    時間: 2020-5-6 15:46
太感謝了,已經(jīng)做出來了
作者: 張小帥1126    時間: 2020-11-7 22:06
我的調(diào)通了,地址是0xC0,
說來也不容易啊,賣家給的地址是 0x60 或0x61,怎么試驗都不行,
后來我自動累加地址試驗串口輸出觀察地址和示波器上的電壓
(最后需要注意的是 兩個地方需要改地址)
作者: 嘿哈哈哈    時間: 2020-12-18 08:05
張小帥1126 發(fā)表于 2020-11-7 22:06
我的調(diào)通了,地址是0xC0,
說來也不容易啊,賣家給的地址是 0x60 或0x61,怎么試驗都不行,
后來我自動累 ...

能分享一下您的程序嗎
作者: mtk1625    時間: 2021-4-21 18:58
這個東西真是不錯,也很便宜
作者: Kxuan163    時間: 2021-4-28 17:03
張小帥1126 發(fā)表于 2020-11-7 22:06
我的調(diào)通了,地址是0xC0,
說來也不容易啊,賣家給的地址是 0x60 或0x61,怎么試驗都不行,
后來我自動累 ...

賣家給的地址 0x60 ,
0x60=0110 0000,
左移1位得1100 0000=0xCO
作者: zbsht550    時間: 2021-6-26 17:10
感謝分享。補(bǔ)充STM32的DAC,非常實用
作者: CHEN_rise    時間: 2021-7-14 15:30
有MSP的歷程嗎




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1