从DAC0832内部工作原理探索DAC0832输出电压的方法

开发环境(蓝色粗体字为特别注意内容)
1,开发板:STC12C5A60S2,DAC0832。
2,开发环境:Keil uv5

3、参考文献:http://www.dzsc.com/dzbbs/20060112/200765185329109342.html

最近在通过51单片机利用DAC0832方波,发现信号无输出,DAC0832这款DA芯片虽然物美价廉,使用直通方式的话几乎不需要外接元件就能够输出电流,使用起来着实方便,但是这款芯片是电流输出,这一点着实坑人!!!一般应用中主要是电压输出为主,所以一般应用中会在IO1,IO2输出引脚接一个运放,来把电流输出转化为电压输出,但是这样问题就来了,由DAC0832的datasheet我们知道,按照直通方式的标准用法:

从DAC0832内部工作原理探索DAC0832输出电压的方法_第1张图片

实际使用方式如下:

从DAC0832内部工作原理探索DAC0832输出电压的方法_第2张图片

我们知道输出电压

Vout=-(Iout1*Rfb)
    =-Vref(DIGITAL_INPUT)10/256

Vref为参考电压,其中Rfb为DAC0832内部反馈电阻,10表示数字量的10进制表示,DIGITAL_INPUT表示D0到D7的输入数字量,一共8位可以表示0-255。

由此我们可以知道Vref取VCC的时候,运放应该是输出负电压的,其值为-Vref~0,这一点很关键,上面的电路图我没有仿真过,也没有动手实验过(因为需要用到正负电源,我手头没有正负电源),网上的大部分资料的基本原理也是基于以上电路的,因此电路应该是没问题的。

但是,当你运放的电源不是正负电源的话,就会发生非常奇怪的种种问题,以前调试了好几天最后不得不放弃,现在被迫向这个难题发起挑战,下面我们来一步一步分析一下。

单电源使用电路图如下:

从DAC0832内部工作原理探索DAC0832输出电压的方法_第3张图片

上面的电路图我们可以发现运放358的4脚接地,这一点很关键。说明该运放使用单电源供电,即输出总是大于0,不可能输出负电压的,于是乎就遇到了类似大多数网友所遇到的问题------DAC0832无输出的问题。此时如果我们用示波器观察Io1引脚的波形,我们可以看到运放如下波形(我利用单片机输出方波,VCC=5V)

从DAC0832内部工作原理探索DAC0832输出电压的方法_第4张图片

从示波器,我们可以看到输出几乎为0v,这也就印证了运放单电源供电方式无法输出负电压,于是我们测量IO1引脚,可以看到有信号输出:

从DAC0832内部工作原理探索DAC0832输出电压的方法_第5张图片

虽然有信号输出,但是方波显然不太对劲,幅度为1.5V左右。

单片机程序如下:

unsigned int Count = 0; //计数器
unsigned int Squ_Per = 256;
Square_wave(Squ_Per, &Count);
Count += 4;


#define DATA P2
void Square_wave(unsigned int Per, unsigned int *Count)
{
	//DATA=0x5f;
	if(*Count >= Per) *Count = 0;
	if(*Count < Per / 2)
	{
		DATA = 0x00;
	}
	else
	{
		DATA = 0xFF;
	}

}

如果,Io1接上一个LED,可以通过设置P2口的数值来改变LED的亮度,利用这种方式也可以检验DAC0832是否正常工作。电路如下:

从DAC0832内部工作原理探索DAC0832输出电压的方法_第6张图片

回到我们一开始的问题,本文的目的是从DAC0832的数模变换原理来探索出利用单电源使得芯片输出满足要求的电压信号的使用方式。因此我们不得不深入了解DAC0832的工作方式,这方面的资料,网上有很多,但是都是抄来抄去的,理解起来比较费劲,大家也可以作为参考资料看看。下面我们从datasheet里面分析。该datasheet我已经放到文章后面的下载连接里了,需要的朋友可以点击下载。

从DAC0832内部工作原理探索DAC0832输出电压的方法_第7张图片

由于该芯片是8位的,可以理解为控制着8个小开关,如上如图,为了更加直观,我们画成下面这样:

从DAC0832内部工作原理探索DAC0832输出电压的方法_第8张图片

当某一位数据为0的时候,该位对应的小开关打向左边(和Iout2连接),为1的时候则打向右边。从芯片内部的这个结构,我们很容易就能够理解DAC0832电流输出方式的工作原理,根据此原理,我们稍微调整一下思路,略施小计,做一下小小的改动,就能够让这玩意输出电压,而不是讨厌的电流,关键就在于Io1接上一个稳压二极管,设稳压二极管的击穿电压为Vdc,则DAC0832的输出电压为

Vdc*(DIGITAL_INPUT)/256

下图是我接上一个3.3v的稳压二极管,但是测试发现,Io1引脚的电压却是2.0v左右,测试该引脚波形如下:

从DAC0832内部工作原理探索DAC0832输出电压的方法_第9张图片

看来还真的得使用高精度稳压二极管。

输出波形如下:

从DAC0832内部工作原理探索DAC0832输出电压的方法_第10张图片

基本可以,但是很奇怪,有个细节需要注意一下,从示波器上看,波形不是0~2v而是200mv~1.8v!!!!!

查了半天,最后发现是D5引脚和单片机P2.7的连线断路!!!!!!!

把线路连接起来之后就正常了:)

从DAC0832内部工作原理探索DAC0832输出电压的方法_第11张图片

这下就完美了:)))))

电源不纯净,有点纹波:

从DAC0832内部工作原理探索DAC0832输出电压的方法_第12张图片

我示波器接地的时候也有20mv左右的幅度,电源不纯净的原因,所以低电平是正常的。

例如我们需要输出0~5V则我们可以接上一个5V的稳压二极管,直接就能够输出我们所需要的电压,这种使用方式甚至连运放都可以省掉。很是巧妙,芯片输出正电压以后,后面就好办了,该怎么处理就怎么处理,加个单电源同相放大器就行,这样就能够实现单电压工作,电路图,以及相关资料我已经打包,供需要的朋友下载。

DAC0832+LM358 +5v单电源使用方式相关资料

你可能感兴趣的:(从DAC0832内部工作原理探索DAC0832输出电压的方法)