第八章 A-D转换
A-D转换(模-数转换)用于实现模拟量到数字量的转换。A-D转换器件在形式上有两种:串行和并行。并行转换结果可直接获得,串行则需要软件处理后获得,但串行芯片结构简单。本章将介绍串行A-D转换芯片的应用。
一、A-D转换原理
AD转换是将时间连续和幅值连续的模拟量转换为时间离散、幅值也离散的数字量。使输出的数字量与输入的模拟量成正比。
A/D转换器的主要技术指标
分辨率: 又称量化间隔,定义为满刻度电压与2^n之比,n 为 A/D 转换的位数
量化误差:有相对误差和绝对误差,绝对误差等于分辨率的一半,即绝对误差 = 分辨率/2
量程:即所转换的电压范围
转换时间和转换率:完成一次A/D转换所需要的时间称为转换时间,转换时间的倒数称为转换率
A/D转换器类别:计数式、双积分式、逐次逼近式、并行式
TLC549
TLC549是美国德州仪器公司生产的8位串行A/D转换器芯片,可与通用微处理器、控制器通过CLK、CS、DATA OUT三条口线进行串行接口。
REF+:基准电压高端, 通常接 VCC
REF -: 基准电压低端, 通常接地
AIN :模拟电压输入端
/CS:片选端, 低电平有效
SDO:转换后数据输出端, 在时钟信号作用下从高位到低位依次输出
SCLK:时钟端
二、程序设计和仿真
1.proteus仿真
可变电阻:POT-HG
2.程序
#include <reg52.h>//单片机头文件
#define uchar unsigned char//定义uchar为unsigned char
unsigned char code tab[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};//数码管码段表
unsigned char dat[]={0,0,0,0};//4位数字显示存放数组
unsigned char tmp,i;
//定义TLC549串行总线操作端口
sbit CLK=P1^7;//定义A-D转换的SCLK
sbit SDO=P1^5;//定义A-D转换的SDO
sbit CS=P1^6;//定义A-D转换的/CS
void delay()//延时程序
{
unsigned char i;
for(i=0;i<250;i++);
}
uchar TLC549ADC(void)//A-D转换子程序
{
uchar i,ADCdata;//定义循环变量
CS=0;//片选引脚为1
for(i=0;i<8;i++)//循环8次
{
CLK=1;//时钟引脚为1
ADCdata<<=1;//存取变量左移一位
ADCdata|=SDO;//按位赋值
CLK=0;//时钟引脚为0
}
CS=1;//片选引脚为0
return(ADCdata);//返回A-D转换值
}
void main()
{
int n,out;//循环变量,输出变量
double AD_DATA;//定义A-D转换数据变量
while(1)
{
AD_DATA=TLC549ADC();//读取当前电压值A-D转换数据
out=AD_DATA*5*1000/256;//转换成电压值,并扩大1000倍
dat[0]=out/1000;//千位
dat[1]=out%1000/100;//百位
dat[2]=out%100/10;//十位
dat[3]=out%10;//个位
tmp=0x01;//数码管片选初值
for(i=0;i<4;i++)//循环4次,显示4个数字
{
P2=tmp;//设置片选值
P0=tab[dat[i]];//输出数字
tmp=tmp<<1;//片选值左移一位
delay();//延时
}
for(n=0;n<600;n++);//延时
}
}
总结
本章简单介绍了串行A-D转换芯片TLC549的应用。