解决PCF8591 DAC输出电压过低、最大电压达不到Vref的问题


这种情况一开始以为是软件问题,但本身软件部分非常的简单

 

功能很单一,就是初始化并且产生锯齿波

 

#define PCFADDRESS 0x48
#include "Wire.h"
void InitPCF()
{
 Wire.begin();
}
void PCFOnce()
{
 for (int i=0; i<256; i+=15)
 {
 Wire.beginTransmission(PCFADDRESS); // wake up PCF8591
 Wire.write(0x40); // control byte - turn on DAC (binary 1000000)
 Wire.write(i); // value to send to DAC
 Wire.endTransmission(); // end tranmission
 delay(10);
 }
 
 for (int i=255; i>=0; i-=1)
 {
 Wire.beginTransmission(PCFADDRESS); // wake up PCF8591
 Wire.write(0x40); // control byte - turn on DAC (binary 1000000)
 Wire.write(i); // value to send to DAC
 Wire.endTransmission(); // end tranmission
 }
}

 

但我测量出电压就仅仅只有3.87V,很奇怪,虽然输入电压不足5V但是也不应该那么低

 

后来别人提醒下,可能和负载有关系,因为本身并不是功率芯片,电流非常小(比如C51那种IO),所以随便加一个负载,就会有压降

因此,检查了下线路,14脚是Vref输入,没问题,但是Analog Out就是低压。最后发现是板载的LED灯,是直接驱动的。1K电阻,4.6V/1000Om ,差不多4.6ma的电流对这个芯片来说可能还是太大了。

解决方法就是:将与AO口并联的LED灯部分线路切断,我的方法是把背面最上面的1K电阻去除,测量发现电压恢复到正常水平了。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PCF8591是一种单片集成电路,用于模拟输入转换和数字输出转换。它具有4个模拟输入通道,可以读取模拟电压值的大小。 PCF8591的模拟输入通道可以接收来自外部模拟电路的电压信号。这些电压信号可以是来自传感器、电压源或其他模拟电路的输出PCF8591通过内部参考电压源将这些信号转换为数字信号,以便在微控制器或其他数字电路中进行处理。 PCF8591的模拟输入通道的电压范围是0V到Vref(参考电压)之间。通常情况下,Vref可以通过外部电压输入引脚来设置。假设Vref为5V,那么模拟输入通道可以读取0V到5V之间的电压信号。 PCF8591的数字输出通道可以发送数字信号到外部电路。这些数字信号可以控制外部器件的状态或执行其他任务。例如,可以使用数字输出通道来控制LED的亮度或实现PWM(脉宽调制)功能。 为了读取模拟电压值的大小,我们可以通过初始化PCF8591的模拟输入通道,然后使用适当的接口和编程代码来读取来自模拟输入通道的数字值。然后,我们可以将该数字值转换为实际的电压值,通过使用PCF8591的参考电压和分辨率来计算。 总之,PCF8591可以读取模拟电压值的大小,通过将模拟输入信号转换为数字信号并提供给外部系统进行处理。通过适当的初始化和编程代码,我们可以读取和处理来自PCF8591的模拟电压值,并采取适当的措施。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值