标题: 基于STM32的12位轨对轨DAC MCP4725驱动程序-项目在用的 [打印本页]

作者: 失心恋2015    时间: 2019-1-9 15:25
标题: 基于STM32的12位轨对轨DAC MCP4725驱动程序-项目在用的
此款DAC芯片是SOP6封装的12位的轨对轨片子,正好补偿小容量STM32没有DAC功能的缺陷,IIC接口,外围电路很简单。输出函数直接调用:MCP4725_WriteData_Voltage(u16 Vout) 这个函数。补充一下:最大输出为5V,用到了电平转换。例如:****
头文件/初始化文件忽略
****
int main(void)
{        
         delay_init();            //延时函数初始化         
         MCP4725_Init();   //MCP4725初始化         
         while(1)
        {
   MCP4725_WriteData_Voltage(4095);   //输出最大   一般要求在100-4000之间
        }
}

制作出来的实物图如下:


单片机源程序如下:
  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位数据
  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();//产生一个停止条件         
  25.         delay_ms(10);       
  26. }

  27. void MCP4725_WriteData_Digital(u16 data)   //12位数字量
  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();//产生一个停止条件         
  40.         delay_ms(10);       
  41. }
复制代码

所有资料51hei提供下载:
MCP4725驱动.7z (183.37 KB, 下载次数: 489)




作者: zhouhuyin    时间: 2019-3-17 13:25
大哥,工程不完整啊,搞不好啊,能不能帮帮我
作者: 失心恋2015    时间: 2019-3-20 10:16
zhouhuyin 发表于 2019-3-17 13:25
大哥,工程不完整啊,搞不好啊,能不能帮帮我

抱歉哦,由于这是公司的项目,产品在专利审查期,暂且不能外放。你可以把这个文件移植到正点原子的任意一个工程里面,调用那个函数就行了

作者: 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。 发表于 2019-8-4 11:34
楼主,我用了你的程序,MCP4725_WriteData_Voltage(2000),用万用表测得的电压是1.61V,但是我把2000改为 ...

你的A0是接的地,而楼主的A0接的是高,地址不对。
作者: 查询无结果    时间: 2020-1-16 23:35
楼主,3v3供电的测试没问题,用5v给MCP4725供电,用数字方式写4095时得到的电压只有2.7v
作者: 微纳连接原理    时间: 2020-5-6 15:46
太感谢了,已经做出来了
作者: 张小帅1126    时间: 2020-11-7 22:06
我的调通了,地址是0xC0,
说来也不容易啊,卖家给的地址是 0x60 或0x61,怎么试验都不行,
后来我自动累加地址试验串口输出观察地址和示波器上的电压
(最后需要注意的是 两个地方需要改地址)
作者: 嘿哈哈哈    时间: 2020-12-18 08:05
张小帅1126 发表于 2020-11-7 22:06
我的调通了,地址是0xC0,
说来也不容易啊,卖家给的地址是 0x60 或0x61,怎么试验都不行,
后来我自动累 ...

能分享一下您的程序吗
作者: mtk1625    时间: 2021-4-21 18:58
这个东西真是不错,也很便宜
作者: Kxuan163    时间: 2021-4-28 17:03
张小帅1126 发表于 2020-11-7 22:06
我的调通了,地址是0xC0,
说来也不容易啊,卖家给的地址是 0x60 或0x61,怎么试验都不行,
后来我自动累 ...

卖家给的地址 0x60 ,
0x60=0110 0000,
左移1位得1100 0000=0xCO
作者: zbsht550    时间: 2021-6-26 17:10
感谢分享。补充STM32的DAC,非常实用
作者: CHEN_rise    时间: 2021-7-14 15:30
有MSP的历程吗




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1