在检测技术与应用、DCS的I/O板卡以及信号传输等许多工业生产过程中都需要将数据传输到计算机,这一过程必须先进行A/D转换。目前A/D转换芯片种类非常多,有的价格高且设计复杂,有的转换精度低满足不了要求。为此,挑选了高精度16位A/D转换芯片AD7705,该芯片转换精度高、价格低,满足多种应用。本文设计了以单片机ATmega16为控制核心,以AD7705为前端采集芯片,以CPLD芯片EPM3064为逻辑开关阵列的32通道模拟量采集系统。给出了相应的硬件电路、驱动程序以及应用软件,指出了AD7705在实际应用中应当注意的一些问题。
1.A/D转换芯片AD7705
AD7705具有两个模拟输入通道,利用Σ-Δ转换技术实现了16位无丢失代码性能。模拟调制器具有增益可编程功能,片内设有数字滤波器、处理调制器的输出信号,通过片内控制器可调节滤波器的截止点和输出更新速率。是用于智能系统、微控制器系统和DSP系统的理想产品,其串行接口可配置为3线方式。增益值、信号极性以及更新速率的选择都可通过串行接口由软件来设置。该器件还包括自校准和系统校准功能,以消除器件本身或系统的增益和偏移误差。
ATmega16ATmega16是Atmel公司生产的8位嵌入式单片机,它是基于增强的AVRRISC结构的低功耗8位CMOS微控制器。特点为:16K字节的系统内可编程Flash(具有同时读写的能力,即RWW),512字节EEPROM,1K字SRAM,32个通用I/O口线,32个通用工作寄存器,用于边界扫描的JTAG接口,支持片内调试与编程,3个具有比较模式的灵活的定时器/计数器(T/C),片内/外中断,1个可编程串行USART,1个SPI串行端口等,硬件资源非常丰富。
3.采集系统的设计
采集系统的硬件构成在功能上主要包括线性电源电路、AD7705外围电路、ATmega16外围电路和通道选择电路。
3.1线性电源电路
本电路(图1)电压为+5V和+3.3V。使用电源芯片78L05、Z33等,D1、D2为5V稳压管,D8、D9为3.3V稳压管。C14、C17用于滤除高频杂波,C15、C16用于保证输出电压平坦,外部供电为+12V。
图1 线性电源电路
3.2AD7705外围电路
AD7705的外围电路如图2所示。时钟频率设计为2.4576MHz,晶振Y1两端需各接一20pF电容到地以保证时钟频率的精准。电源电压VDD为+5V。AN1+与AN1-,AN2+与AN2-分别接模拟输入信号。芯片REF192为AD公司生产的精密基准电压源,为AD7705提供2.5V基准电压,其输出引脚6到地之间需并接0.1μF和10μF的电容以保证其输出电压平坦。
图2 AD7705外围电路原理图
AD7705与单片机Atmega16接口电路为片选端CS—PD4、复位端RESET—PD5、逻辑输出端DRRY—PB3、串行数据输入端DIN—PB5、串行数据输出端DOUT—PB6和串行时钟SCLK—PB7。
3.3ATmega16外围电路
ATmega16(图3)的供电电压VCC为+5V,时钟频率8MHz。PB5为串行外设接口SPI的主机输出端,PB6为主机输入端,PB7为SPI时钟。PB3、PD4、PD5用作普通的数字接口。AVCC为模拟电源,需经LC网络接至数字电源VCC,L1为10μH,C11为100nF,LC网络用于抑制噪声、提高抗干扰能力。该电路控制AD7705以完成数据的采集,主要是利用其SPI接口对AD7705进行各种初始配置,控制A/D转换并读取转换结果。
图3 ATmega16外围电路原理图
3.4通道选择电路
该电路在ATmega16的程序控制下工作,AT-mega16的控制信号通过PA4~PA0以完成32个通道模拟的模拟量采集。以高度集成CPLD芯片EPM3064为解码电路,制作一个5/32解码器,用VHDL语言编写而成,其供电电压3.3V,输入信号PA4~PA0和PD7,输出信号为TD0~TD31。EPM3064是基于EEPROM的CMOS工艺CPLD,其有64个宏单元,100管脚TQFP封装有66个用户I/O管脚,可满足许多应用需要。
PD7作为5/32解码器的使能信号,用于选择采集通道0~31。DS2Y-S为信号继电器,其引脚8、9接AD7705模拟信号1的AN1+与AN1-,引脚4、13接通道0的模拟输入信号AI0+与AI0-。其导通断开通过PNP三极管Q1驱动,控制信号为TD0,二极管D1起续流作用,保护电路正常工作同时具有抑制尖峰干扰作用。通道1~31的选择电路类似,同理设计模拟信号输入AI1~AI31的选择电路。PD7作为使能信号,低电平有效,总共需要32片信号继电器,本质上通道选择电路(图4)是由CPLD芯片EPM3064和信号继电器构建的逻辑阵列开关。
图4 通道选择电路
4.软件设计
软件设计包括3个子模块:SPI初始化模块、AD7705驱动模块、定时器模块。工作过程:首先通过ATmega16的SPI接口驱动AD7705,完成AD7705通道设置、时钟设置、更新速率以及校准模式等,然后启动ATmega16的定时器,在定时器中断函数中查询AD7705的状态,如转换完成则读取转换结果,否则继续等待直到转换完成,如此不断读出所需的转换结果。程序流程如图5所示。
图5 程序流程框图
4.1SPI初始化模块
对ATmega16的SPI接口进行配置:
void spi_init(void)
{
DDRB|=(1《
DDRB&=~(1《
PORTB|=(1《
SPCR=(1《
}
4.2AD7705驱动模块
该模块程序完成对AD7705的配置任务,需要注意的是读写寄存器之前必须先选择要操作的寄存器。
向AD7705写入1字节函数,入口参数data为需写入的字节数据:
voidwr_7705(unsignedchardata)
{
SPDR=data;//启动数据传输
while(!(SPSR&(1《《SPIF)))//等待传输
结束;
}
读出AD7705数据函数,返回值为读出的2字节数据:
unsignedintrd_7705(void)
{
unsignedinttemp;//定义临时变量
wr_7705(0x38);//选择读数据寄存器,1通道
SPDR=1;//启动数据传输
while(!(SPSR&(1《《SPIF)))//等待传输结
束
{
;
}
temp=SPDR《《8;//读取高字节
SPDR=1;//启动数据传输
while(!(SPSR&(1《《SPIF)))//等待传输结束
{
;
}
temp|=SPDR;//读取低字节
return(temp);
}
AD7705初始化函数:
voidinit_7705(void)
{
wr_7705(0x20);//选择时钟寄存器,下一操作是写
wr_7705(0x00);//20Hz的更新速率
wr_7705(0x10);//选择设置寄存器,下一操作是写
wr_7705(0x44);//自校准模式,增益为1,单极性
}
4.3定时器模块
利用定时器1按一定的时间间隔读取AD7705的转换结果。读取数据之前必须确定数据寄存器的状态,有两种不同的方式:第1种是查询DRDY引脚,如果处于低电平,表示已经转换完成,可以读取;第2种是查询通信寄存器中的DRDY位,如果是0表示可以读取数据:
定时器1初始化函数:
定时器1溢出中断函数:
结语
本文总结了基于AD7705的32通道模拟量采集系统设计,经过试验证明,该采集系统不仅减少仪表设计调试时间,而且结合测量仪器可以构建灵活的测量系统,节约仪器购置成本,提高工作效率。
责任编辑人:CC
-
模拟量
+关注
关注
5文章
491浏览量
25541 -
AD7705
+关注
关注
2文章
39浏览量
20520
发布评论请先 登录
相关推荐
评论