引言
随着电子技术的不断发展,目前对各种物理量的检测和控制都可得以实现。微机检测控制系统不仅运用到航天航空、机器人技术、纺织机械、食品加工等工业过程控制,而且已经成为日常各种家用电器当中的主要组成部分。其中,A/D(模拟数字转换)设备起着十分重要的作用。这样,一个系统中就会需要更多的A/D设备。一般是用扩展一块或多块A/D采集卡的方法去实现。当模拟量较少或是温度、压力等缓变信号场合,采用总线型A/D卡并不是最合适、最经济的方案。这里介绍一种以AT89C2051单片机为核心,采用TLC2543L 12位串行A/D转换器构成的采样模块,该模块的采样数据由单片机串口经电平转换后送到上位机(PC机)的串口COM1或COM2,形成一种串行数据采集串行数据传输的方式。 主要元件功能介绍
AT89C2051单片机 AT89C2051是ATMEL公司推出的一种性能价格比极高的 8位单片机,其指令系统与MCS-51系列完全兼容。引脚排列如图1所示。 TLC2543L串行A/D转换器 TLC2543L 采用SPI串行接口总线,SPI串行接口总线由Motorola公司提出,它是一种三线同步接口,分别为同步信号、输入信号和输出信号。另外芯片还有一根片选线,单片机通过片选线选通TLC2543L。其中,CLK为同步时钟脉冲,CS为片选线,DIN为单片机的数据输出和TLC2543L的数据输入线,DOUT为单片机的数据输入线和TLC2543L的数据输出线。图2为TLC2543L时序图。TLC2543L 是全双工的,即数据的发送和接收可同时进行。如果只是对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为地。
电平转换器MAX232C MAX232C为RS-232收发器,简单易用,单+5V电源供电,仅需外接几个电容即可完成从TTL电平到RS-232电平的转换,引脚排列如图4所示。 硬件设计 硬件电路如图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是其硬件原理图。 结论 本文所述的智能化串行数据模块,可直接用于任何微机控制和检测系统中以取代原来的模数转换设计。经过实践检验,该模块功耗低、采样精度高、可靠性好、接口简便,有很高的实用价值。该智能模块的软件和硬件成功应用于生命科学仪器“热循环仪”的设计和实践中,使用方便,简单可行,节约成本,能够满足大多数数据采样的应用场合。 |