图5LF398采样电路
通过实验发现,方案3不仅避免了前两种方案的缺陷,而且相比于前两个方案,其峰值保持效果有极大的提升,简化了硬件电路,在一定程度上减少了元件参数的影响,因此本系统采用了方案3。
三硬件设计
3.1单片机A/D转换电路和LCD接口电路
3.1.1ATMEGA16简介
ATMEGA16单片机是1997年由ATMEL公司研发出的增强型内置Flash的RISC(ReducedInstructionSetCPU)精简指令集高速8位单片机。
与其它单片机相比,AVR单片机具有如下优点:
●哈佛结构,具备1MIPS/MHz的高速运行处理能力;
●超功能精简指令集(RISC),具有32个通用工作寄存器,克服了如8051MCU采用单一ACC进行处理造成的瓶颈现象;
●快速的存取寄存器组、单周期指令系统,大大优化了目标代码的大小、执行效率,部分型号FLASH非常大,特别适用于使用高级语言进行开发;
●大部分AVR片上资源丰富:
带E2PROM,PWM,SPI,UART,TWI,ISP,AD,AnalogComparator,WDT等;
●
片内集成多种频率的RC振荡器、上电自动复位、看门狗、启动延时等功能,外围电路更加简单,系统更加稳定可靠;
3.1.2ATMEGA16的管脚分布及功能
如图6所示为ATMEGA16的管脚图。
VCC(10):
数字电路的电源。
GND(11、31):
地。
XTAL1(13):
反向振荡放大器与片内时钟电路输入端。
XTAL2(12):
反向振荡放大器输出端。
AVCC(30):
端口A与A/D转换器电源。
AREF(32):
A/D模拟基准电压输入引脚。
图6ATMEGA16L管脚图
RESET(9):
复位输入脚,持续时间超过最小门限时间的低电平将引起系统复位。
端口A(PA0-PA7):
端口A为8位双向I/O口,具有可编程的内部上拉电阻。
端口B(PB0-PB7):
端口B为8位双向I/O口,具有可编程的内部上拉电阻。
端口C(PC0-PC7):
端口C为8位双向I/O口,具有可编程的内部上拉电阻。
端口D(PD0-PD7):
端口D为8位双向I/O口,具有可编程的内部上拉电阻。
3.1.3LCD1602的接口电路
LCD1602引脚分布及功能与ATMEGA16L单片机的接口电路如图7所示。
图7A/D转换电路和LCD显示电路
第1脚:
VSS为地电源。
第2脚:
VDD接5V正电源。
第3脚:
V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。
第4脚:
RS为寄存器选择,高电平选择数据寄存器、低电平时选择指令寄存器。
第5脚:
RW为读写信号线,高电平时进行读操作,低电平时进行写操作。
当RS和RW共同为低电平时可以写入指令或者显示地址,当RS为低电平RW为高电平时可以读忙信号,当RS为高电平RW为低电平时可以写入数据。
第6脚:
E为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。
第7~14脚:
D0~D7为8位双向数据线。
第15~16脚:
背光电源。
3.2小信号放大电路
在一般的信号放大应用中通常只要经过差动放大电路即可满足要求,然而基本的差动放大电路精密度较差,而且差动放大电路上改变放大增益时,必须调整两个电阻,影响整个放大精确度的因素就更加复杂。
而仪表放大器AD620增益范围宽(增益为1-1000),电源供电范围宽(+2.3V-+18V),功耗低,精确度高,电路简单,只需外接一个电阻就可改变放大倍数[4],图8为AD620的管脚图,其中1、8脚需跨接一电阻来调整放大倍率,4、7脚需提供正负相等的工作电压,2、3脚接入输入信号即可从6脚得到放大后的信号,5脚为参考基准电压输入,如果接地则6脚的输出即为与地之间的相对电压,AD620的放大增益关系式如式
(1)和式
(2)所示,由此2式我们即可推出各种增益所需要的电阻Rg.
G=
+1
(1)
Rg=
(2)
图8AD620管脚图
基于上述有利条件,我们以AD620为核心,OP07(扩大增益范围)为辅构成系统的放大电路,电路如图9所示:
信号经过前级电压跟随器器后送入AD620进行第一级放大,AD620输出信号送至OP07进行第二级放大后输出。
图9信号放大电路
3.3电源电路
电源是整个系统的能量来源,它直接关系到系统能否运行。
在本系统中单片机、液晶显示电路需要5V的电源,因此电路中选用稳压芯片7805;峰值采样/保持芯片LF398,AD620,OP07等芯片需要+12V和-12V的双电源,因此电路中采用了稳压芯片7812和7912,其最大输出电流为1.5A,能够满足系统的要求,其电路如图10所示。
图10电源电路
四软件设计
4.1ATmega16单片机的模数转换器ADC介绍
AVR的模数转换器ADC具有下列特点:
●10位精度;
●0.5LSB积分非线形误差
●±2LSB的绝对精度;
●13µs~260µs的转换时间;
●在最大精度下可达到每秒15kSPS的采样速率;
●8路可选的单端输入通道;
●7路差分输入通道;
●2路差分输入通道带有可选的10×和200×增益;
●ADC转换结果的读取可设置为左端对齐(LEFTADJUSTMENT);
●ADC的电压输入范围0~Vcc;
●可选择的内部2.56V的ADC参考电压源;
●自由连续转换模式和单次转换模式;
●ADC自动转换触发模式选择;
●ADC转换完成中断;
●休眠模式下的噪声抑制器(NOISECANCELER);
由于单片机只能处理数字信号,所以外部的模拟信号量需要转变成数字量才能进一步的由单片机进行处理。
ATmega16内部集成有一个10位逐次比较(successiveapproximation)ADC电路。
因此使用AVR可以非常方便的处理输入的模拟信号量。
ATmega16的ADC与一个8通道的模拟多路选择器连接,能够对以PORTA作为ADC输入引脚的8路单端模拟输入电压进行采样,单端电压输入以0V(GND)为参考。
另外还支持16种差分电压输入组合,其中2种差分输入方式(ADC1,ADC0和ACD3,ADC2)带有可编程增益放大器,能在A/D转换前对差分输入电压进行0dB(1×),20dB(10×)或46dB(200×)的放大。
还有七种差分输入方式的模拟输入通道共用一个负极(ADC1),此时其它任意一个ADC引脚都可作为相应的正极。
若增益为1×或10×,则可获得8位的精度,如果增益为200×,那么转换精度为7位。
AVR的ADC功能单元由独立的专用模拟电源引脚AVcc供电。
AVcc和Vcc的电压差别不能大于±0.3V。
ADC转换的参考电源可采用芯片内部的2.56V参考电源,或采用AVcc,也可使用外部参考电源。
使用外部参考电源时,外部参考电源由引脚ARFE接入。
使用内部电压参考源时,可以通过在AREF引脚外部并接一个电容来提高ADC的抗噪性能。
ADC功能单元包括采样保持电路,以确保输入电压在ADC转换过程中保持恒定。
ADC通过逐次比较(successiveapproximation)方式,将输入端的模拟电压转换成10位的数字量。
最小值代表地,最大值为AREF引脚上的电压值减1个LSB。
可以通过ADMUX寄存器中REFSn位的设置,选择将芯片内部参考电源(2.56V)或AVcc连接到AREF,作为A/D转换的参考电压。
这时,内部电压参考源可以通过外接于AREF引脚的电容来稳定,以改进抗噪特性。
模拟输入通道和差分增益的选择是通过ADMUX寄存器中的MUX位设定的。
任何一个ADC的输入引脚,包括地(GND)以及内部的恒定能隙(fixedbandgap)电压参考源,都可以被选择用来作为ADC的单端输入信号。
而ADC的某些输入引脚则可选择作为差分增益放大器的正、负极输入端。
当选定了差分输入通道后,差分增益放大器将两输入通道上的电压差按选定增益系数放大,然后输入到ADC中。
若选定使用单端输入通道,则增益放大器无效。
通过设置ADCSRA寄存器中的ADC使能位ADEN来使能ADC。
在ADEN没有置“1”前,参考电压源和输入通道的选定将不起作用。
当ADEN位清“0”后,ADC将不消耗能量,因此建议在进入节电休眠模式前将ADC关掉。
ADC将10位的转换结果放在ADC数据寄存器中(ADCH和ADCL)。
默认情况下,转换结果为右端对齐(RIGHTADJUSTED)的。
但可以通过设置ADMUX寄存器中ADLAR位,调整为左端对齐(LEFTADJUSTED)。
如果转换结果是左端对齐,并且只需要8位的精度,那么只需读取ADCH寄存器的数据作为转换结果就达到要求了。
否则,必须先读取ADCL寄存器,然后再读取ADCH寄存器,以保证数据寄存器中的内容是同一次转换的结果。
因为一旦ADCL寄存器被读取,就阻断了ADC对ADC数据寄存器的操作。
这就意味着,一旦指令读取了ADCL,那么必须紧接着读取一次ADCH;如果在读取ADCL和读取ADCH的过程中正好有一次ADC转换完成,ADC的2个数据寄存器的内容是不会被更新的,该次转换的结果将丢失。
只有当ADCH寄存器被读取后,ADC才可以继续对ADCL和ADCH寄存器操作更新。
ADC有自己的中断,当转换完成时中断将被触发。
尽管在顺序读取ADCL和ADCH寄存器过程中,ADC对ADC数据寄存器的更新被禁止,转换的结果丢失,但仍会触发ADC中断。
4.2ATmega16单片机的模数转换器ADC相关的I/O寄存器
4.2.1ADC多路复用器选择寄存器—ADMUX:
如图11所示
1、位7,6—REFS[1:
0]:
ADC参考电源选择:
REFS1、REFS2用于选择ADC的参考电压源,见表1。
如果这些位在ADC转换过程中被改变,新的选择将在该次ADC转换完成后(ADCSRA中的ADIF被置位)才生效。
一旦选择内部参考源(AVcc、2.56V)为ADC的参考电压后,AREF引脚上不得施加外部的参考电源,只能与GND之间并接抗干扰电容。
2、位5—ADLAR:
ADC结果左对齐选择:
ADLAR位决定转换结果在ADC数据寄存器中的存放形式。
写“1”到ADLAR位,将使转换结果左对齐(LEFTADJUST);否则,转换结果为右对齐(RIGHTADJUST)。
无论ADC是否正在进行转换,改变ADLAR位都将会立即影响ADC数据寄存器。
图11寄存器ADMUX
3、位4.0—MUX4:
0:
模拟通道和增益选择:
这5个位用于对连接到ADC的输入通道和差分通道的增益进行选择设置,只有转换结束后(ADCSRA的ADIF是“1”),改变这些位才会有效。
表1ADC参考电源选择
REFS1
REFS0
ADC参考电源
0
0
外部引脚AREF,断开内部参考源连接
0
1
AVcc,AREF外部并接电容
1
0
保留
1
1
内部2.56V,AREF外部并接电容
4.2.2ADC控制和状态寄存器A—ADCSRA:
如图12所示。
图12状态寄存器ADCSRA
1、位7—ADEN:
ADC使能:
该位写入“1”时使能ADC,写入“0”关闭ADC。
如在ADC转换过程中将ADC关闭,该次转换随即停止。
2、位6—ADSC:
ADC转换开始:
在单次转换模式下,置该位为“1”,将启动一次转换。
在自由连续转换模式下,该位写入“1”将启动第一次转换。
先置位ADEN位使能ADC,再置位ADSC;或置位ADSC的同时使能ADC,都会使能ADC开始进行第一次转换。
3、位5—ADATE:
ADC自动转换触发允许:
当该位被置为“1”时,允许ADC工作在自动转换触发工作模式下。
在该模式下,在触发信号的上升沿时ADC将自动开始一次ADC转换过程。
ADC的自动转换触发信号源由SFIOR寄存器中的ADTS位选择确定。
4、位4—ADIF:
ADC中断标志位:
当ADC转换完成并且ADC数据寄存器被更新后该位被置位。
如果ADIE位(ADC转换结束中断允许)和SREG寄存器中的I位被置“1”,ADC中断服务程序将被执行。
ADIF在执行相应的中断处理向量时被硬件自动清零。
此外,ADIF位可以通过写入逻辑“1”来清零。
5、位3—ADIE:
ADC中断允许:
当该位和SREG寄存器中的I位同时被置位时,允许ADC转换完成中断。
6、位2,0—ADPS[2:
0]:
ADC预分频选择:
这些位决定了XTAL时钟与输入到ADC的ADC时钟之间的分频数,见表2。
表2ADC预分频选择
DPS[2:
0]
分频系数
000/001
2
010
4
011
8
100
16
101
32
110
64
111
128
4.2.3ADC数据寄存器—ADCL和ADCH:
如图13所示
1、当ADLAR=0时,ADC转换结果右对齐,ADC结果的保存方式如图(a)。
2、当ADLAR=1时,ADC转换结果左对齐,ADC结果的保存方式如图(b)。
当ADC转换完成后,可以读取ADC寄存器的ADC0-ADC9得到ADC的转换的结果。
如果是差分输入,转换值为二进制的补码形式。
一旦开始读取ADCL后,ADC数据寄存器就不能被ADC更新,直到ADCH寄存器被读取为止。
因此,如果结果是左对齐(ADLAR=1),且不需要大于8位的精度的话,仅仅读取ADCH寄存器就足够了。
否则,必须先读取ADCL寄存器,再读取ADCH寄存器。
ADMUX寄存器中的ADLAR位决定了从ADC数据寄存器中读取结果的格式。
如果ADLAR位为“1”,结果将是左对齐;如果ADLAR位为“0”(默认情况),结果将是右对齐。
(a)
(b)
图13数据寄存器ADCL和ADCH
4.3系统软件框图设计
软件设计是整个系统的灵魂,也是系统一个重要的调试部分。
如图14所示为整个系统的软件框图,主程序先对系统资源进行初始化,然后完成峰值的采样/保持控制、A/D转换控制和峰值LCD显示控制。
系统中的比较器电路,将被测信号与保持信号Vo进行比较,若Vi>Vo,比较器输出高电平,系统开启LF398进人采样状态,若Vi当MCU检测到峰值采样完成时,系统将LF398的第8个管脚拉低,使LF398处于峰值保持状态,同时进行A/D转换和峰值显示,一段时间后系统重新进入到峰值的采样状态,实现信号的实时峰值数据采集。
图14系统软件框图