1.数模转换器
又称D/A转换器,简称DAC,英文 Digital to Analog Converter,在MP3这种数字的音频信号需要转换器驱动扬声器;显卡输出的也是数字型号,也需要转换器转换给显示屏;工业吸合电磁铁。转换器有分分辨率的,那么什么是分辨率呢?
比如我们用八位DA生成0—5V的模拟电压,二进制八位就有2^8=256等分,显然位数越多,分辨率越高,5V / 256=19.5mV,所以19.5mV就是八位数模转换器的分辨率(可以理解成精度)。单片机中常用的是DAC0832。
接下来我们看内部原理,最右边I0的电阻是2R,与左边电阻2R并联,等效为R,再与I1的R串联,等效为2R,再与左边的电阻2R并联,等效为2R…(循环往复)。再看到I分为两份电流,这两份电流流过的等效电阻都是2R。
直通工作方式
当DAC0832芯片的片选信号、写信号、及传送控制信号的引脚全部接地,允许输入锁存信号ILE引脚接+5V时,DAC0832芯片就处于直通工作方式,数字量一旦输入,就直接进入DAC寄存器,进行D/A转换。
如上图是我用的单片机中的DAC0832的引脚图,其中D0-D7为输入端的八位引脚,输出端out2接地,out1连接的是一个电流转换成电压的运放然后接发光二极管。其中CSDA一杠的意思是低电平有效,芯片低电平才工作。现在写一个简单的程序,使得发光二极管最亮。
#include <reg52.h>
sbit csda=P3^2;//定义引脚
sbit wr=P3^6;
void main()
{
//低电平有效
csda=0;//片选:选中DA
wr=0;
//全送1
P0=0xff;
while(1);
}
2. 模数转换器
话不多说,下面是AD转换原理:逐步逼近法(个人觉得可以理解成二分法)
当输入一个模拟电压Vin,启动信号发送V/2,即最高位,与Vin比较大小,若V/2>Vin,最高位清零;若V/2<Vin,最高位保留1,返回D/A转换器,继续低一位,再次与Vin比较,循环往复…
就好像数学中的二分法,或者夹逼定理,当我们的满量程是5V,八位寄存器,第一次送10000000,即2.5V,若模拟电压是3.2V,2.5<3.2,那么我们知道这个数值在2.5V-5V之间,就将第一位保留,第二次送11000000…直到逼近这个值。
接下来查阅芯片手册,写出一个关动态二极管的程序
#include <reg52.h>
sbit wr=P3^6;
sbit rd=P3^7;
#define uchar unsigned char
#define uint unsigned int
void start();
void init();
void delay(uint z)//延迟子程序
{
uint t1,y;
for(t1=z;t1>0;t1--)
for(y=110;y>0;y--);
}
void main()
{
init();
while(1)
{
start();
delay(100);//转动AD旋钮修改这个时间
rd=0;
delay(10);
rd=1;
delay(10);
}
}
void init()
{
P0=0x7f;
void start()
{
wr=1;
wr=0;
wr=1;
}