TLC2543(12位A/D转换器)实现将输入的模拟电压显示到数码管上

发布时间:2023年12月23日

代码:

#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int

// 数码管0-9
unsigned char seg[] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F};
sbit SDO = P1^0;
sbit SDI = P1^1;
sbit CS = P1^2;
sbit CLK = P1^3;
sbit EOC = P1^4;

sbit  wei1=P2^0;
sbit  wei2=P2^1;
sbit  wei3=P2^2;
sbit  wei4=P2^3;

void delay(uint N)
{
	uint i;
	for (i = 0; i < N; i++);
}

uint getdata(uchar channel)   
{	 
	uchar i; // for loop
	uint dat = 0; // 输出的数据,一共十六位,前四位为0
	CS = 0;						
	
	//
    for(i = 0; i < 12; i++){
			dat <<= 1;
			if(SDO == 1) dat |= 0x01;
		
		
			// 高位溢出,溢出数据CY给输入SDI
			channel <<= 1; SDI = CY; 
		
			// CLK一次脉冲,传输数据
			CLK = 1; delay(3);
			CLK = 0; delay(3);
	}
	CS = 1;		
	return dat;
}

void display(void){
	uint value;
	
	/* 输入命令字,获取数据: 将AIN2输入的5V模拟量转换为4095(2^12 - 1)的离散量 */
	value = getdata(0x20) * 1.221; // 5000 / 4095

	wei1 = 0;
	P0 = seg[value/1000] + 0x80; // 输出小数点
	delay(500);
	wei1 = 1;
	
    wei2 = 0;
	P0 = seg[value%1000/100];
	delay(500);
	wei2 = 1;
	
    wei3 = 0;
	P0=seg[value%100/10];
	delay(500);
	wei3=1;
	
    wei4=0;
	P0=seg[value%10];
	delay(500);
	wei4=1;
}

void main(){	
	while(1){
		while(!EOC); // 转换结束端,EOC为1时,输出完成
		display();
	}
}

仿真:

介绍:

在单片机测控系统中,非电量如温度、压力、流量、速度等,经传感器先转换成连续变化的模拟电信号(电压或电流),然后再将模拟电信号转换成数字量后才能在单片机中进行处理。实现模拟量转换成数字量的器件称为ADC(A/D转换器)。

? ? ? ? 单片机处理完毕的数字量,有时根据控制要求需要转换为模拟信号输出。数字量转换成模拟量的器件称为DAC(D/A转换器)。本章从应用的角度,介绍典型的ADC、DAC芯片与AT89S51单片机的硬件接口设计以及接口驱动程序设计。

单片机扩展AD转换
? ? ? ? 单片机只能输出数字量,但是对于某些控制场合,常常需要输出模拟量,例如直流电动机的转速控制。下面介绍单片机如何扩展DAC。

? ? ? ? 目前集成化的DAC芯片种类繁多,设计者只需要合理选用芯片,了解它们的性能、引脚外特性以及与单片机的接口设计方法即可。由于现在部分单片机的芯片中集成了DAC,位数一般在10位左右,且转换速度也很快,所以单片的DAC开始向高的位数和高转换速度上转变。而低端的并行8位DAC,开始面临被淘汰的危险,但是在实验室或涉及某些工业控制方面的应用,低端8位DAC以其优异的性价比还是具有较大的应用空间。

1.D/A转换器简介

? ? ? ? 购买和使用D/A转换器时,要注意有关D/A转换器选择的几个问题。

(1)D/A转换器的输出形式

? ? ? ? D/A转换器有两种输出形式:电压输出和电流输出。电流输出的D/A转换器在输出端加一个运算放大器构成的I-V转换电路,即可转换为电压输出。

(2)D/A转换器与单片机的接口形式

? ? ? ? 单片机与D/A转换器的连接,早期多采用8位的并行传输的接口,现在除了并行接口外,带有串行口的D/A转换器品种也不断增多,目前较为流行多采用SPI串行接口。在选择单片D/A转换器时,要根据系统结构考虑单片机与D/A转换器的接口形式。
2.主要技术指标

? ? ? ? D/A转换器的指标很多,设计者最关心的几个指标如下。

(1)分辨率

? ? ? ? 分辨率指单片机输入给D/A转换器的单位数字量的变化,所引起的模拟量输出的变化,通常定义为输出满刻度值与2n之比(n为D/A转换器的二进制位数),习惯上用输入数字量的位数表示。显然,二进制位数越多,分辨率越高,即D/A转换器输出对输入数字量变化的敏感程度越高。例如,8位的D/A转换器,若满量程输出为10V,根据分辨率定义,则分辨率为10V/2n,分辨率为10V/256 = 39.1mV,即输入的二进制数最低位数字量的变化可引起输出的模拟电压变化39.1mV,该值占满量程的0.391%,常用符号1LSB表示。

同理:

10位D/A转换 ?1 LSB = 9.77mV = 0.1%满量程

12位D/A转换 ?1 LSB = 2.44mV = 0.024%满量程

16位D/A转换 ?1 LSB = 0.076mV = 0.00076%满量程

使用时,应根据对D/A转换器分辨率的需要选定D/A转换器的位数。

(2)建立时间

? ? ? ? 建立时间是描述D/A转换器转换速度的参数,表明转换时间长短。其值为从输入数字量到输出达到终值误差± (1/2)LSB(最低有效位)时所需的时间。电流输出的转换时间较短,而电压输出的转换器,由于要加上完成I-V转换的时间,因此建立时间要长一些。快速D/A转换器的建立时间可控制在1us以下。
(3)转换精度

? ? ? ? 理想情况下,转换精度与分辨率基本一致,位数越多精度越高。但由于电源电压、基准电压、电阻、制造工艺等各种因素存在误差。严格地讲,转换精度与分辨率并不完全一致。两个相同位数的不同的DAC,只要位数相同,分辨率则相同,但转换精度会有所不同。例如,某种型号的8位DAC精度为±0.19%,而另一种型号的8位DAC精度为±0.05%

AT89S51扩展12位串行ADC-TLC2543的设计

????????串行A/D转换器与单片机连接具有占用I/O口线少优点,使用逐渐增多,随着价格降低,大有取代并行A/D转换器趋势。下面首先介绍串行A/D转换器TLC2543基本特性及工作原理。

  1. TLC2543的特性及工作原理

    ????????美国TI的12位串行SPI接口的A/D转换器,转换时间为10μs。片内有1个14路模拟开关,用来选择11路模拟输入以及3路内部测试电压中的1路进行采样。为了保证测量结果的准确性,该器件具有3路内置自测试方式,可分别测试“REF+”高基准电压值,“REF-”低基准电压值和“REF+/2”值,该器件的模拟量输入范围为REF+~REF-,一般模拟量的变化范围为0~+5V,所以此时REF+脚接+5V,REF-脚接地。由于TLC2543与单片机接口简单,且价格适中,分辨率较高,因此在智能仪器仪表中有着较为广泛应用。

  • AIN0~AIN10:11路模拟量输入端。
  • CS :片选端。
  • DATAINPUT:串行数据输入端。由4位的串行地址输入来选择模拟量输入通道。
  • DATA OUT:A/D转换结果的三态串行输出端。 为高时处于高阻抗状态, 为低时处于转换结果输出状态。
  • EOC:转换结束端。
  • I/O CLOCK:I/O时钟端。
  • REF+:正基准电压端。基准电压的正端(通常为Vcc)被加到REF+,最大的输入电压范围为加在本引脚与REF-引脚的电压差。
  • REF-:负基准电压端。基准电压低端(通常为地)加此端。
  • Vcc:电源。
  • GND:地。
  1. TLC2543工作过程

    工作过程分为两个周期:I/O周期和实际转换周期。

(1)I/O周期

????????I/O周期由外部提供的I/O CLOCK定义,延续8、12或16个时钟周期,取决于选定的输出数据长度。器件进入I/O周期后同时进行两种操作。

????????①在I/OCLOCK的前8个脉冲的上升沿,以MSB前导方式从DATAINPUT端输入8位数据到输入寄存器。其中前4位为模拟通道地址,控制14通道模拟多路器从11个模拟输入和3个内部自测电压中,选通1路到采样保持器,该电路从第4个I/OCLOCK。脉冲下降沿开始,对所选的信号进行采样,直到最后一个I/O CLOCK脉冲下降沿。

I/O脉冲时钟个数与输出数据长度(位数)有关,输出数据的长度由输入数据的D3、D2可选择为8位、12位或16位。当工作于12位或16位时,在前8个脉冲之后,DATAINPUT无效。

????????②在DATA OUT端串行输出8位、12位或16位数据。当 保持为低时,第1个数据出现在EOC的上升沿,若转换由 控制,则第1个输出数据发生在 的下降沿。这个数据是前1次转换的结果,在第1个输出数据位之后的每个后续位均由后续的I/OCLOCK脉冲下降沿输出。

(2)转换周期

????????在I/O周期最后一I/OCLOCK脉冲下降沿后,EOC变低,采样值保持不变,转换周期开始,片内转换器对采样值进行逐次逼近式A/D转换,其工作由与I/OCLOCK同步的内部时钟控制。

????????转换结束后EOC变高,转换结果锁存在输出数据寄存器中,待下一I/O周期输出。I/O周期和转换周期交替进行,从而可减少外部的数字噪声对转换精度影响。

  1. TLC2543命令字

    ????????每次转换都必须向TLC2543写入命令字,以便确定被转换信号来自哪个通道,转换结果用多少位输出,输出的顺序是高位在前还是低位在前,输出结果是有符号数还是无符号数。命令字写入顺序是高位在前。命令字格式如下:

(1) 通道地址选择位

????????选择输入通道。0000~1010分别是11路模拟量AIN0~AIN10的地址;地址1011、1100和1101所选择的自测试电压分别是((VREF+)-(VREF-))/2、VREF-、VREF+。1110是掉电地址,选掉电后,TLC2543处于休眠状态,此时电流小于20μA。
(2)数据长度(D3~D2)位用来选择转换的结果用多少位输出。D3D2为x0:12位输出;D3D2为01:8位输出;D3D2为11:16位输出。

(3)数据的顺序位(D1)用来选择数据输出的顺序。D1=0,高位在前;D1=1,低位在前。

(4)数据的极性位(D0)用来选择数据的极性。D0=0,数据是无符号数;D0=1,数据是有符号数。

文章来源:https://blog.csdn.net/hdz_wiz_csdn/article/details/135172543
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。