基于DSP和LTC1859数据采集系统设计
作者:RFID世界网 收编
来源:电子网
日期:2010-03-29 10:46:53
摘要:现在很多测控制系统为了提高抗干扰的能力,传感器输出信号多为 3线制的差分信号,如航空舵机的控制系统 ,通常采用的方法是把差分信号通过复杂电路处理再进行数据采集 ,这样不仅增加了硬件成本,还降低系统精度。
1 引言
现在很多测控制系统为了提高抗干扰的能力,传感器输出信号多为 3线制的差分信号,如航空舵机的控制系统 ,通常采用的方法是把差分信号通过复杂电路处理再进行数据采集 ,这样不仅增加了硬件成本,还降低系统精度。本系统设计的基于 DSP和 LTC1859的 16位高精度数据采集系统 ,不仅可以实现多路的单信号输入 ,还可以实现多路差分信号的输入 ,对输入的信号的范围可以通过软件满足不同的要求,真正实现差分输入抑制共模噪声。
LTC1859是凌力尔特公司最新推出的一款高性能的 8通道、 16位、100ksps的 AD转换器,每个通道可通过软件实现 0~5V,0~10V,0~±5V,0~±10V的不同范围的输入电压,同时还可以实现单输入和差分信号输入的选择,可承受至 ±25V的故障保护。LTC1859的多路复用器可以配置为接受 4个差分输入、 8个单端输入、或差分与单端输入的组合。该器件提供了卓越的 DC性能,具有在整个温度范围内的 15位无漏失码和±3 LSBMAX INL。LTC1859具有较好的失调、满标度增益和通道至通道匹配。适用于多通道高分辨率应用,如仪表、数据采集系统和工业过程控制。它与 CPU之间采用的 SPI总线通信。LTC1859用单 5V电源工作,同时仅消耗 40mW功率。LTC1859还具有温度系数为 ±10ppm/oC的 2.5V内部基准,如果需要较高的准确度,还可以从外部驱动。对于那些对功耗敏感的应用, LTC1859提供了两种断电模式,在基准仍保持运行状态时功耗降至 27.5mW(打盹模式),或基准完全断电时功耗降至 40uW(休眠模式)。LTC1857和 LTC1858分别是引脚兼容的 12位和 14位器件。本系统的 CPU为 TI公司的 TMS320C2407A,主频可达 40MHZ,它有标准的 SPI总线,丰富的外设,非常适合与 LTC1859构成高精度的数据采集系统和控制系统的。
2 硬件系统设计
本系统设计了由 2块 LTC1859构成 8通道的差分信号输入,也可以实现 16通道的单路信号输入,或者它们之间的组合,详细电路如图 1。本电路具有通用性,在实际应用中性能稳定,效果很好。下面针对 LTC1859芯片引脚对对电路进行详细分析。
CH0~CH7是8路模拟输入通道,在本系统中构成了4路差分输入信号,每路差分输入信号接3000P的滤波电容去干扰。 MUXOUT+、MUXOUT-为模拟复用器的正负输出,把它们连在ADC+、ADC-上进行正常操作。 Vref为2.5V的基准电压输出。 ODD为数字输出缓冲器的电源,这样使SPI总线上的数字信号的电压等于 ODD的接入电压,本系统采用的 DSP2407,它对输入的数字信号要求为3.3V,所以这里接的 3.3V电压,就不需要另加电平转换电路。 BUSY为输出转换器的状态,当正在转换中为低,转换结束变高,连在 DSP的I/O口上, SDO为SPI总线的串行数据输出,接在 DSP的SPISOMI引脚上,SDI为SPI总线的串行数据输如,接在DSP的SPISIMO引脚上 ,SCK为SPI总线的时钟,接在DSP的SPICLK上。RD为引脚SDO数字输出的能使信号,当 RD为低能使输出,当 RD为高SDO为高阻抗,该引脚接在 DSP的I/O口上,由于 LTC1859没有片选信号,为了让多片 LTC1859在总线上不发生冲突,把要工作的 LTC1859的RD置为低,把要没工作的LTC1859的RD置为高。CONVST为启动转换引脚。其它引脚分别接电源、数字地、模拟地,就不再详细介绍。
3 软件设计
由于采用标准 SPI总线通信,软件的关键是 DSP和 LTC1859之间的时序匹配,首先介绍 LTC1859软件配置。
3.1 LTC1859不管是在发送系统中还是接收系统中,都是在 SCK的下降沿传输,上升沿被捕获,这就要求 DSP在进行 SPI初始化时采用上升沿无延时模式。8位的控制字通过 SDI输入,用于配置 LTC1859以进行下一个转换,同时前一个转换输出在 SDO上输出,在数据交换的末端在 CONVST上施加一个上升沿启动被请求的转换。转换完成后,转换结果将在将在下一个数据传送周期提供。LTC1859的 8位命令控制字在首 8个 SCK的上升沿按时间顺序记录到 SDI输入中,SDI随后的输入的位被忽略。控制字的 8位定义如表 1
其中复用器通道选择如表 2
其中输入范围选择如表 3
3.2 下面详细介绍软件编写,考虑到 SPI总线的时钟很快,采用查询方式,其软件流程如图 2,这里只介绍 LTC1859(1)的流程及源代码,其它原理都一样。
程序源代码及其详细注释:
void SPIAD_Init()
{ MCRB=MCRB | 0x001C; // SPISIMO,SPISOMI,SPICLK特殊功能方式 SPICCR=0x000F; // 16bit数据, 上升沿无延时模式 SPICTL=0x0006; //禁止中 断 SPIBRR=0x0004; // 8M波特率 ,40M/5=8M SPICCR=SPICCR | 0x80;
}
void ADLTC()
{ PADATDIR=PADATDIR|0x1010; //将 A4即 LTC2RD置高 PADATDIR=PADATDIR&0xFFFD; //将 A1即 LTC1RD置低 PADATDIR=PADATDIR&0xFFFE; //将 A0 即 LTC1CON(CONVST)置低 PADATDIR=PADATDIR|0x0101; //将A0即LTC1CON(CONVST)拉高启动转换 asm(" NOP "); while((PADATDIR&0x0004)!=0x0000); //等待 A2即 LTC1BUSY(BUSY)变低 PADATDIR=PADATDIR&0xFFFE; //A2即 LTC1BUSY(BUSY)变低后再将 A0即 LTC1CON(CONVST)拉低 while((PADATDIR&0x0004)!=0x0004); //等待 A2即 LTC1BUSY(BUSY)变高 SPITXBUF=(0x0004<<8); // 输入通道 1控制字,当 LTC1BUSY变高说明转换完成 ,则可写入下次转换的命令字 while ((SPISTS&0x0040)!=0x0040); //等待总线传输
SPIRXBUF=SPIRXBUF; PADATDIR=PADATDIR|0x0101; asm(" NOP "); while((PADATDIR&0x0004)!=0x0000);PADATDIR=PADATDIR&0xFFFE;
while((PADATDIR&0x0004)!=0x0004); SPITXBUF=(0x0014<<8);
while((SPISTS&0x0040)!=0x0040);
/*虚读寄存器以清除中断标志*/ //将A0即LTC1CON(CONVST)拉高启动转换
//等待 A2即 LTC1BUSY(BUSY)变低 //A2即 LTC1BUSY(BUSY)变低后再将 A0即 LTC1CON(CONVST)拉低 //等待 A2即 LTC1BUSY(BUSY)变高 //输入通道 2控制字, 当 LTC1BUSY变高说明转换完成,则可写入下次转换的命令字 //等待总线传输
ADINRESULT[4]=(0x0FFF&SPIRXBUF); /*保存转换结果 */ SPIRXBUF= SPIRXBUF; /*虚读寄存器以清除中断标志*/ PADATDIR=PADATDIR|0X0101; //将 A0即 LTC1CON(CONVST)拉高启动转换 asm(" NOP "); while((PADATDIR&0x0004)!=0x0000); //等待 A2即 LTC1BUSY(BUSY)变低 PADATDIR=PADATDIR&0xFFFE; //A2即 LTC1BUSY(BUSY)变低后再将
A0即 LTC1CON(CONVST)拉低 while((PADATDIR&0x0004)!=0x0004); //等待 A2即 LTC1BUSY(BUSY)变高 SPITXBUF=(0x0024<<8); //输入通道3控制字当LTC1BUSY变高说明转换完成,
则可写入下次转换的命令字
while((SPISTS&0x0040)!=0x0040); //等待总线传输
ADINRESULT[5]=SPIRXBUF; /*保存转换结果 */
SPIRXBUF=SPIRXBUF; /*虚读寄存器以清除中断标志*/
……………………………………………通道 3、4的转换程序原理一样 }
4 结 论
本文作者创新点是成功实现了基于 DSP和 LTC1859的 16位高精度数据采集系统,给出了全新实用的硬件和软件设计,特别适合差分信号和电压范围变化较大的系统该设计,对与 LTC1859与其它的 CPU的设计也有很大的参考价值。该系统性价比高,具有一般通用性能,有一定的应用推广价值。
现在很多测控制系统为了提高抗干扰的能力,传感器输出信号多为 3线制的差分信号,如航空舵机的控制系统 ,通常采用的方法是把差分信号通过复杂电路处理再进行数据采集 ,这样不仅增加了硬件成本,还降低系统精度。本系统设计的基于 DSP和 LTC1859的 16位高精度数据采集系统 ,不仅可以实现多路的单信号输入 ,还可以实现多路差分信号的输入 ,对输入的信号的范围可以通过软件满足不同的要求,真正实现差分输入抑制共模噪声。
LTC1859是凌力尔特公司最新推出的一款高性能的 8通道、 16位、100ksps的 AD转换器,每个通道可通过软件实现 0~5V,0~10V,0~±5V,0~±10V的不同范围的输入电压,同时还可以实现单输入和差分信号输入的选择,可承受至 ±25V的故障保护。LTC1859的多路复用器可以配置为接受 4个差分输入、 8个单端输入、或差分与单端输入的组合。该器件提供了卓越的 DC性能,具有在整个温度范围内的 15位无漏失码和±3 LSBMAX INL。LTC1859具有较好的失调、满标度增益和通道至通道匹配。适用于多通道高分辨率应用,如仪表、数据采集系统和工业过程控制。它与 CPU之间采用的 SPI总线通信。LTC1859用单 5V电源工作,同时仅消耗 40mW功率。LTC1859还具有温度系数为 ±10ppm/oC的 2.5V内部基准,如果需要较高的准确度,还可以从外部驱动。对于那些对功耗敏感的应用, LTC1859提供了两种断电模式,在基准仍保持运行状态时功耗降至 27.5mW(打盹模式),或基准完全断电时功耗降至 40uW(休眠模式)。LTC1857和 LTC1858分别是引脚兼容的 12位和 14位器件。本系统的 CPU为 TI公司的 TMS320C2407A,主频可达 40MHZ,它有标准的 SPI总线,丰富的外设,非常适合与 LTC1859构成高精度的数据采集系统和控制系统的。
2 硬件系统设计
本系统设计了由 2块 LTC1859构成 8通道的差分信号输入,也可以实现 16通道的单路信号输入,或者它们之间的组合,详细电路如图 1。本电路具有通用性,在实际应用中性能稳定,效果很好。下面针对 LTC1859芯片引脚对对电路进行详细分析。
CH0~CH7是8路模拟输入通道,在本系统中构成了4路差分输入信号,每路差分输入信号接3000P的滤波电容去干扰。 MUXOUT+、MUXOUT-为模拟复用器的正负输出,把它们连在ADC+、ADC-上进行正常操作。 Vref为2.5V的基准电压输出。 ODD为数字输出缓冲器的电源,这样使SPI总线上的数字信号的电压等于 ODD的接入电压,本系统采用的 DSP2407,它对输入的数字信号要求为3.3V,所以这里接的 3.3V电压,就不需要另加电平转换电路。 BUSY为输出转换器的状态,当正在转换中为低,转换结束变高,连在 DSP的I/O口上, SDO为SPI总线的串行数据输出,接在 DSP的SPISOMI引脚上,SDI为SPI总线的串行数据输如,接在DSP的SPISIMO引脚上 ,SCK为SPI总线的时钟,接在DSP的SPICLK上。RD为引脚SDO数字输出的能使信号,当 RD为低能使输出,当 RD为高SDO为高阻抗,该引脚接在 DSP的I/O口上,由于 LTC1859没有片选信号,为了让多片 LTC1859在总线上不发生冲突,把要工作的 LTC1859的RD置为低,把要没工作的LTC1859的RD置为高。CONVST为启动转换引脚。其它引脚分别接电源、数字地、模拟地,就不再详细介绍。
图 1 硬件系统图 Fig1 Hardware system configuration
3 软件设计
由于采用标准 SPI总线通信,软件的关键是 DSP和 LTC1859之间的时序匹配,首先介绍 LTC1859软件配置。
3.1 LTC1859不管是在发送系统中还是接收系统中,都是在 SCK的下降沿传输,上升沿被捕获,这就要求 DSP在进行 SPI初始化时采用上升沿无延时模式。8位的控制字通过 SDI输入,用于配置 LTC1859以进行下一个转换,同时前一个转换输出在 SDO上输出,在数据交换的末端在 CONVST上施加一个上升沿启动被请求的转换。转换完成后,转换结果将在将在下一个数据传送周期提供。LTC1859的 8位命令控制字在首 8个 SCK的上升沿按时间顺序记录到 SDI输入中,SDI随后的输入的位被忽略。控制字的 8位定义如表 1
其中复用器通道选择如表 2
其中输入范围选择如表 3
3.2 下面详细介绍软件编写,考虑到 SPI总线的时钟很快,采用查询方式,其软件流程如图 2,这里只介绍 LTC1859(1)的流程及源代码,其它原理都一样。
图 2流程图 Fig2 Flow chart
程序源代码及其详细注释:
void SPIAD_Init()
{ MCRB=MCRB | 0x001C; // SPISIMO,SPISOMI,SPICLK特殊功能方式 SPICCR=0x000F; // 16bit数据, 上升沿无延时模式 SPICTL=0x0006; //禁止中 断 SPIBRR=0x0004; // 8M波特率 ,40M/5=8M SPICCR=SPICCR | 0x80;
}
void ADLTC()
{ PADATDIR=PADATDIR|0x1010; //将 A4即 LTC2RD置高 PADATDIR=PADATDIR&0xFFFD; //将 A1即 LTC1RD置低 PADATDIR=PADATDIR&0xFFFE; //将 A0 即 LTC1CON(CONVST)置低 PADATDIR=PADATDIR|0x0101; //将A0即LTC1CON(CONVST)拉高启动转换 asm(" NOP "); while((PADATDIR&0x0004)!=0x0000); //等待 A2即 LTC1BUSY(BUSY)变低 PADATDIR=PADATDIR&0xFFFE; //A2即 LTC1BUSY(BUSY)变低后再将 A0即 LTC1CON(CONVST)拉低 while((PADATDIR&0x0004)!=0x0004); //等待 A2即 LTC1BUSY(BUSY)变高 SPITXBUF=(0x0004<<8); // 输入通道 1控制字,当 LTC1BUSY变高说明转换完成 ,则可写入下次转换的命令字 while ((SPISTS&0x0040)!=0x0040); //等待总线传输
SPIRXBUF=SPIRXBUF; PADATDIR=PADATDIR|0x0101; asm(" NOP "); while((PADATDIR&0x0004)!=0x0000);PADATDIR=PADATDIR&0xFFFE;
while((PADATDIR&0x0004)!=0x0004); SPITXBUF=(0x0014<<8);
while((SPISTS&0x0040)!=0x0040);
/*虚读寄存器以清除中断标志*/ //将A0即LTC1CON(CONVST)拉高启动转换
//等待 A2即 LTC1BUSY(BUSY)变低 //A2即 LTC1BUSY(BUSY)变低后再将 A0即 LTC1CON(CONVST)拉低 //等待 A2即 LTC1BUSY(BUSY)变高 //输入通道 2控制字, 当 LTC1BUSY变高说明转换完成,则可写入下次转换的命令字 //等待总线传输
ADINRESULT[4]=(0x0FFF&SPIRXBUF); /*保存转换结果 */ SPIRXBUF= SPIRXBUF; /*虚读寄存器以清除中断标志*/ PADATDIR=PADATDIR|0X0101; //将 A0即 LTC1CON(CONVST)拉高启动转换 asm(" NOP "); while((PADATDIR&0x0004)!=0x0000); //等待 A2即 LTC1BUSY(BUSY)变低 PADATDIR=PADATDIR&0xFFFE; //A2即 LTC1BUSY(BUSY)变低后再将
A0即 LTC1CON(CONVST)拉低 while((PADATDIR&0x0004)!=0x0004); //等待 A2即 LTC1BUSY(BUSY)变高 SPITXBUF=(0x0024<<8); //输入通道3控制字当LTC1BUSY变高说明转换完成,
则可写入下次转换的命令字
while((SPISTS&0x0040)!=0x0040); //等待总线传输
ADINRESULT[5]=SPIRXBUF; /*保存转换结果 */
SPIRXBUF=SPIRXBUF; /*虚读寄存器以清除中断标志*/
……………………………………………通道 3、4的转换程序原理一样 }
4 结 论
本文作者创新点是成功实现了基于 DSP和 LTC1859的 16位高精度数据采集系统,给出了全新实用的硬件和软件设计,特别适合差分信号和电压范围变化较大的系统该设计,对与 LTC1859与其它的 CPU的设计也有很大的参考价值。该系统性价比高,具有一般通用性能,有一定的应用推广价值。