首页 | 期刊简介 | 编辑部 | 广告部 | 发行部 | 在线投稿 | 联系我们 | 产品信息索取
2020年9月25日星期五
2011年第01期
 
2010年第12期
 
2010年第11期
2010年第11期
 
2010年第10期
2010年第10期
 
2010年第09期
2010年第09期
 
2010年第09期
2010年第08期
 
2010年第07期
2010年第07期
 
2010年第06期
2010年第06期
 
2010年第05期
2010年第05期
 
2010年第04期
2010年第04期
 
2010年第03期
2010年第03期
 
2010年第02期
2010年第02期
 
2010年第01期
2010年第01期
 
2009年第12期
2009年第12期
 
2009年第11期
2009年第11期
 
2009年第10期
2009年第10期
 
2009年第9期
2009年第9期
 
2009年第8期
2009年第8期
 
2009年第7期
2009年第7期
 
2009年第6期
2009年第6期
 
2009年第5期
2009年第5期
 
2009年第4期
2009年第4期
 
2009年第3期
2009年第3期
 
2009年第2期
2009年第2期
 
2009年第1期
2009年第1期
 
2008年第12期
2008年第12期
 
2008年第11期
2008年第11期
 
2008年第10期
2008年第10期
 
2008年第9期
2008年第9期
 
2008年第8期
2008年第8期
 
2008年第7期
2008年第7期
 
2008年第6期
2008年第6期
 
2008年第5期
2008年第5期
 
2008年第4期
2008年第4期
 
2008年第3期
2008年第3期
 
2008年第2期
2008年第2期
 
2008年第1期
2008年第1期
智能化多路串行数据采集/传输模块的设计

Design of Acquiring & Transmiting Module for Series
Data Based on Single-chip Processor

广州市光机电工程研究中心 行联合
广州市方统生物科技有限公司 关 强

摘 要:本文 以AT89C2051单片机为核心,采用TLC2543L 12位串行A/D转换器,设计了一个智能化串行数据采集/传输模块,可广泛应用于汽车电子、生物医学电子设备中。文中给出了硬件原理图和主要源程序。


引言

随着电子技术的不断发展,目前对各种物理量的检测和控制都可得以实现。微机检测控制系统不仅运用到航天航空、机器人技术、纺织机械、食品加工等工业过程控制,而且已经成为日常各种家用电器当中的主要组成部分。其中,A/D(模拟数字转换)设备起着十分重要的作用。这样,一个系统中就会需要更多的A/D设备。一般是用扩展一块或多块A/D采集卡的方法去实现。当模拟量较少或是温度、压力等缓变信号场合,采用总线型A/D卡并不是最合适、最经济的方案。这里介绍一种以AT89C2051单片机为核心,采用TLC2543L 12位串行A/D转换器构成的采样模块,该模块的采样数据由单片机串口经电平转换后送到上位机(PC机)的串口COM1或COM2,形成一种串行数据采集串行数据传输的方式。


主要元件功能介绍

AT89C2051单片机

AT89C2051是ATMEL公司推出的一种性能价格比极高的 8位单片机,其指令系统与MCS-51系列完全兼容。引脚排列如图1所示。

图 1 AT8C2051引脚(略)

TLC2543L串行A/D转换器

TLC2543L 采用SPI串行接口总线,SPI串行接口总线由Motorola公司提出,它是一种三线同步接口,分别为同步信号、输入信号和输出信号。另外芯片还有一根片选线,单片机通过片选线选通TLC2543L。其中,CLK为同步时钟脉冲,CS为片选线,DIN为单片机的数据输出和TLC2543L的数据输入线,DOUT为单片机的数据输入线和TLC2543L的数据输出线。图2为TLC2543L时序图。TLC2543L 是全双工的,即数据的发送和接收可同时进行。如果只是对TLC2543L写数据,单片机可以丢弃同时读入的数据;反之,如果只读数据,可以在命令字节后,写入任意数据。数据传送以字节为单位,并采用高位在前的格式。

图2 TLC2543L时序图(略)

模块采用TI公司的TLC2543L 12位串行A/D转换器,使用开关电容逐次逼近法完成A/D转换过程。串行输入结构,能够大大节省51系列单片机I/O资源,且价格适中。其特点有:

(1) 11个模拟输入通道;

(2) 转换时间10 s;

(3) 12位分辨率A/D转换器;

(4) 3路内置自测试方式;

(5) 采样率为66kbps;

(6) 线性误差+1LSB(max)

(7) 有转换结束(EOC)输出;

(8) 具有单、双极性输出;

(9) 可编程的MSB或LSB前导;

(10)可编程的输出数据长度。 TLC2543L的引脚排列如图3所示。图3中AIN0~AIN10为模拟输入端; 为片选端;DIN 为串行数据输入端;DOUT为A/D转换结果的三态串行输出端;EOC为转换结束端;CLK为I/O时钟;REF+为正基准电压端;REF-为负基准电压端;VCC为电源;GND为地。

图3 TLC2543引脚(略)

电平转换器MAX232C

MAX232C为RS-232收发器,简单易用,单+5V电源供电,仅需外接几个电容即可完成从TTL电平到RS-232电平的转换,引脚排列如图4所示。

图4 MAX232引脚(略)


硬件设计

硬件电路如图5所示。

图5 串行采集/传输电路原理图(略)

单片机AT89C2051是整个系统的核心,TLC2543L对输入的模拟信号进行采集,转换结果由单片机通过P3.5(9脚)接收,AD芯片的通道选择和方式数据通过P3.4(8脚)输入到其内部的一个8位地址和控制寄存器,单片机采集的数据通过串口(3、2脚)经MAX232C转换成RS232电平向上位机传输。


单片机软件设计

单片机程序主要包括串行数据采集/传输模块的系统信息、通道数、采集周期和通讯协议定义,以及数据采集和传输的标准子程序。

TLC2543L的通道选择和方式数据为8位,其功能为:D7、D6、D5和D4用来选择要求转换的通道,D7D6D5D4=0000时选择0通道,D7D6D5D4=0001时选择1通道,依次类推;D3和D2用来选择输出数据长度,本程序选择输出数据长度为12位,即D3D2=00或D3D2=10;D1,D0选择输入数据的导前位,D1D0=00选择高位导前。

TLC2543L在每次I/O周期读取的数据都是上次转换的结果,当前的转换结果在下一个I/O周期中被串行移出。第一次读数由于内部调整,读取的转换结果可能不准确,应丢弃。

数据采集程序如下:
sbit DATAIN=P1^1;
sbit CLOCK=P1^0;
sbit DATAOUT=P1^2;
sbit CS=P1^3;
bit datain_a_bit0()
{ bit m=0;
DATAOUT=1;
m=DATAOUT;
DATAIN=0;
Nop();
CLOCK=1;
Nop();
CLOCK=0;
Return(m);
}
bit datain_a_bit1()
{ bit m=0;
DATAOUT=1;
m=DATAOUT;
DATAIN=1;
Nop();
CLOCK=1;
Nop();
CLOCK=0;
Return(m);
}

单片机通过编程产生串行时钟,并按时序发送与接收数据位,完成通道方式/通道数据的写入和转换结果的读出,程序如下:

unsigned int Tlc2543L(unsigned char ch)
{unsigned char i,chch=0;
unsigned int xdata xxx=0;
unsigned int xdata y=0;
CS=0;
Chch=ch<<4;
Y=chch;
Y<<=8;
I=0;
While(I<12)
{if((y&0x8000)==0)
{if(datain_a_bit0()==0) xxx&=0xfffe;
else xxx|=0x0001;
if(I!=11) xxx<<=1;
}
else
{if(datain_a_bit1()==0) xxx&=0xfffe;
else xxx|=0x0001;
if(I!=11) xxx<<=1;
}
y<<=1;
I+=1;
}
CS=1;
Return(xxx);
}

串行数据传输模块包括串行口初始化子程序和数据传输子程序,各子程序分别如下。其中数据传输采用查询方式,也可以方便地改为中断方式。

Void rs232init()
{TMOD=0x20;
TH1=0xfd;
TR1=1;
SCON=0x50;
}
void receandtran()
{unsigned char da;
while(!RI)
RI=0;
Da=SBUF;
SBUF==da;
While(!TI);
TI=0;
}
上位机接收数据所用C语言程序包括初始化子程序和接收子程序。各子程序分别如下:
void cominit(void)
{
outportb(0x3fb,0x80);
outportb(0x3f8,0x18); /与单片机波特率一致为9600bps*/
outportb(0x3f9,0x00);
outportb(0x3fb,0x03); /8位数据位,1位停止位,无奇偶校验*/
outportb(0x3fc,0x03); /*Modem控制寄存器设置,使DTR和RTS输出有效*/
outportb(0x3f9,0x00); /*设置中断允许寄存器,禁止一切中断*/
}
void data_rece(void) /*查询方式接收数据子程序*/
{
while(!kbhit())
{
while(!(inportb(0x3fd)&0x01));/*若接收寄存器为空,则等待*/
printf("%x ",inportb(0x3f8)); /*读取结果并显示*/
}
getch();
}


智能化串行采集/传输模块在PCR仪中的应用

在PCR仪的电路设计中,因需要检测的信号很多,包括热盖的温度检测,散热器的温度检测,腔体内部的温度检测,气流的温度检测,光信号的检测等等,为了简化电路,节约成本,减小体积,在选择A/D转换电路时选用了SPI总线的TLC2543,该芯片有多达11路的模拟信号输入端,完全满足PCR仪电路设计的需要,一个芯片既能完成检测多个信号的功能,又能节约单片机的资源,图6是其硬件原理图。

图6 (略)


结论

本文所述的智能化串行数据模块,可直接用于任何微机控制和检测系统中以取代原来的模数转换设计。经过实践检验,该模块功耗低、采样精度高、可靠性好、接口简便,有很高的实用价值。该智能模块的软件和硬件成功应用于生命科学仪器“热循环仪”的设计和实践中,使用方便,简单可行,节约成本,能够满足大多数数据采样的应用场合。

2005GEC.7
         
版权所有《世界电子元器件》杂志社
地址:北京市海淀区上地东路35号颐泉汇 邮编:100085
电话:010-62985649
E-mail:dongmei@eccn.com