概述
关于MCP4725
stm32f103c8t6是经常使用的微控制器,用来做各种电子控制系统实验或者简单的毕设、比赛作品等。stm32f103c8t6有片上的ADC单元,可以进行模拟量到数字量的转换,但是没有DAC单元,不能进行数字量到模拟量的转换。(在大型的stm32f103zet6上有DAC单元,但是一般最小系统板不会采用这块大芯片,一是昂贵,二是体积大)。
为了弥补这一不足,可以采用DAC芯片对最小系统板进行扩展,从而实现DAC功能。MCP4725可以满足数字量到模拟量的转换,最高5V输出(相较stm32f103zet6的最高3.3V输出增大的量程)。
现象
MCP4725的out输出引脚输出的电压总是为输入电压的一半,例如输入5V,输出2.5V,输入3.3V输出1.65V。
原因与解决方法
-
原因:MCP4725提供了一个A0引脚给用户选择IIC器件的地址,上面这个模块的默认地址A0为0,如果程序中用的地址是A0:1,那么就会导致这个错误。
-
解决方法:
①把焊盘上地址A0与VCC相连。
②或者更改程序,使之与硬件地址对应。
ADDR接VCC:0xC2
ADDR接GND:0xC0
正确的输出现象
硬件连接
MCP4725
- SCL - PA4
- SDA - PA5
- VCC - 5V
- GND - GND
- OUT - 测试端
- ADDR - VCC
板载硬件
- KEY - PA0
- LED - PC13
程序源码
这里提供MCP4725的驱动程序
MCP4725.c
#include "MCP4725.h"
#include "delay.h"
u16 MCP4725_DAC_Value=3000;
//初始化IIC接口
void MCP4725_Init(void)
{
IIC_Init();
MCP4725_WriteData_Voltage(MCP4725_DAC_Value);//初始3V
}
//使用快速模式写命令写DAC寄存器
//如果A0设为1
void MCP4725_WriteData_Voltage(u16 Vout) //电压单位mV
{
u8 temp;
u16 Dn;
if(Vout>=5000) Vout=4999;
Dn = ( 4096 * Vout) / VREF;
temp = (0x0F00 & Dn) >> 8; //12位数据
IIC_Start();
IIC_Send_Byte(0XC2); //器件寻址,器件代码:1100; 地址位A2,A1,A0为 0 , 0 , 1;-> 1100 0010
IIC_Wait_Ack();
IIC_Send_Byte(temp);
IIC_Wait_Ack();
IIC_Send_Byte(Dn); //将低8位送到DAC寄存器
IIC_Wait_Ack();
IIC_Stop();//产生一个停止条件
delay_ms(10);
}
//如果A0设为0
void MCP4725_WriteData_Digital(u16 data) //12位数字量
{
u8 data_H=0,data_L=0;
data_H = ( 0x0F00 & data) >> 8;
data_L = 0X00FF & data ;
IIC_Start();
IIC_Send_Byte(0XC0); //器件寻址,器件代码:1100; 地址位A2,A1,A0为 0 , 0 , 0;-> 1100 0010
IIC_Wait_Ack();
IIC_Send_Byte(data_H);
IIC_Wait_Ack();
IIC_Send_Byte(data_L);
IIC_Wait_Ack();
IIC_Stop();//产生一个停止条件
delay_ms(10);
}
MCP4725.h
#include "myiic.h"
#ifndef __MCP4725_H
#define __mcp4725_H
//VREF:参考电压5000mV
#define VREF 5000
extern u16 MCP4725_DAC_Value;
void MCP4725_Init(void);
void MCP4725_WriteData_Digital(u16 data);
void MCP4725_WriteData_Voltage(u16 Vout);
#endif
完整工程文件
亲测可用~最大误差0.01V,0 ~ 5000mV范围可调
https://download.csdn.net/download/Z_KIND/16615442
最后
以上就是明亮哑铃为你收集整理的E-03 MCP4725一直输出一半输入电压的解决方法 附stm32f103 mcp4725驱动示例的全部内容,希望文章能够帮你解决E-03 MCP4725一直输出一半输入电压的解决方法 附stm32f103 mcp4725驱动示例所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复