学海荡舟手机网

主页 > 实用文摘 > 教育文摘_12 > > 详细内容

ADμC812的数据采集子系统及其ISP技术_单片机论文

摘要:主要介绍ad公司推出的在系统可编程微转换器adμc812的adc采集子系统的组成、结构和控制特性;对片内flash存储器的在系统编程技术和程序调试方式;举例说明如何采用中断方式定时进行ad数据采集和数字滤波的过程。

    关键词:数据采集 flash存储器 isp 数字滤波

在单片机应用如火口荼的今天,一个真正的单片在系统可编程全智能数据采集系统终于出现了。它就是ad公司最新推出的嵌入式flash mcu微转换器adμc812。

adμc812在单个芯片内集成了8路12位adc采集系统、2路12位dac、80c52mcu内核、8kb的闪速/电可擦除程序存储器、640字节的闪速/电可擦除数据存储器、看门狗定时器、640字节的闪速/电可擦除数据存储器、看门狗定时器、电源监视器、i2c兼容的spi和标准的uart串行i/o模块及灵活的电源管理方案等等,真正实现了单片机应用系统的单片机。限于篇幅,本文只介绍其adc采集子系统及其在系统编程技术。

一、adμc812的adc采集子系统

1.硬件组成结构

adμc812的adc采集子系统部分由模拟多路转换器、温度传感器、采样保持电路(t/h)、12位逐次逼近比较的adc、+2.5v基准源和adc校正、控制逻辑组成,其组成如图1所示。

    adμc812的模拟输入端的电压有效输入范围与基准源有关。当采用内部基准源时,其有效输入范围为0~+2.5v;当采用外部基准源时,外部基准源应从vref端引入,其合适的范围为+2.3~+5v,相应的模拟输入端的电压范围为0v~vref。无论如何不应使其输入电平为负或超过绝对最大允许值avdd+0.3v。当信号输入为双极性时,必须加入电平位移网络,使其变为单极性信号输入,如图2所示。

adμc812可工作在-40~+85℃的工业级范围,有3v和5v两种供电工作方式,以便进一步降低功耗。adc模拟包含了5μs、8通道、12位、单电源a/d转换器。其中,a/d转换器由基于电容dac的常规则逐次逼近转换器组成,可保证的±1lsb的差分非线性和±1/2lsb和积分非线性。在上电时由工厂编程的校准系数自动下载到adc,以确保最佳的adc性能。该校准系数包括内部失调和增益校准两个方面,用户可根据需要重写工厂编程的校准系数,以便使用户目标系统中端点误差的影响最小。来自片内温度传感器的电压输出正比于热力学温度,它可通过多路转换器的第9个adc通道输入,这方便了温度测量的实现。

2.软件控制特性

可编程性是应用系统发展的必然趋势。为适应不同信号源的实际需求,adμc812片内adc模块内的所有部件都能方便地通过3个sfr寄存器来设置。

(1)adccon1——控制转换和采集时间

    (2)adccon2——控制adc通道选择和转换模式


    
    (3)adccon3——adc状态指示

二、adμc812的系统调试、编程技术

目前,由于adμc812只提供表贴封装形式,因而在用仿真器进行程序调试时将会带来一些问题。为方便调试,adμc812a片内除集成了各具特色的硬件模块外,还因化了方便实用的监控调试软件,使其只需少量的外围器件即可实现联机调试,从而大大方便了用户的使用,缩短了产品的研制周期。启用调试方式的电路连接如图3所示。

在上电复位的瞬间,使ea引脚接高电平,psen引脚接一下拉电阻,即可使adμc812进入监控调试支援方式。在此方式下,通过基于pc的quick start开发工具包,即可下载用户程序。通过运行于microsoft windows系统下的下的adμc.exe调试软件,可实时调试用户程序。

该调试软件支持单步、断点和连续运行等工作方式,可方便地观察mcu的运行结果,包括内部ram、sfr、程序flash eeprom和数据flash eeprom等单元的内容。从而提高了工作效率,缩短了产品的开发周期。图3中max232为rs232电平转换器,用于将ttl电平转换成rs232电平,以便直接连至pc的串行口,进行联机调试或下载程序。

    quick start还提供了工作于dos环境下的串行下载软件download.exe。运行该软件可直接将用户程序编程到adμc812芯片中的程序flash存储器中,免除了需用编程器和封装适配器的麻烦,真正实现了在系统可编程。quick start开发工具软件包可从www.analog.com/microconverter/quick-start.html下载得到。

三、定时adc编程举例

该例程主要说明如何利用adc的单次转换功能实现定时采样的目的。定时器t0用于1.25ms定时,8个通道完成一次数据采集需要10ms。为增加抗干扰的能力,软件中还加入了数字滤波功能。每个通道连续采样16次后再进行平均处理,然后将高8位结果送出,其汇编语言源程序清单如下:

$nomod51

$include() ;使用adμc812预定义符

timer_ms_const equ(65536-9216/8);当晶振频率为11.0592mhz时,10ms对应9216个周期

adc_tlag equ 20h.0;ad转换标志,=1时表示采样的8路ad值有效

adc_coun equ 30h;用于指示当前正在处理的adc通道

adc_result equ 38h;38h~3fh存入0~7通道的adc结果

adc_acc equ 40h;40~4fh存入0~7通道的累加值

org 0000h

start:

jmp begin

org start+0bh

jmp timer0_interrupt

org start+100h

begin;

mov sp,#60h

mov r0,#20h;清工作单元

mov r7,#40h

clr a

iram_init;

mov @r0,a

inc r0

djnz r7,iram_init

call timer0_init;初始化t0为1.25ms中断一次

call adc_init;初始化adc为单次转换

setb ea

controlloop:

jnb adc_flag,controlloop

…… ;将ad转换的结果取走

clr adc_flag;允许开始下一次转换

jmp controlloop

adc_init:

mov adccon1,#01101100b;上电adc

mov adccon2,adc_count;选择转换通道

ret

timer0_interrupt:

setb sconv;开始单次adc转换

mov tl0,#low(timer_ms_const);装入定时常数

mov th0,#high(timer_ms_const)

push psw

mov psw,#00001000b;使用page1

mov r2,a;暂存a累

timer0_int_adc:

jb adc_flag,timer0_int_adc_end;数据未取走则退出

mov a,adccon3;读adc状态

jb acc.7,timer0_int_adc

mov a,adc_count

anl a,#07h

rl a

add a,#adc_acc

mov r0,a

mov a,adcdatal;将adc转换结果加入累加单元

add a,@r0

mov @r0,a

inc r0

mov a,adcdatah

anl a,#0fh

addc a,@r0

mov #r0,a

inc adc_count

mov a,adc_count

anl a,#07h

mov adccon2,a;选择下一通道

mov a,adc_count

cjne a,#80h,timer0_int_adc_end

mov adc_count,#0

mov r0,#adc_acc;数字滤波后存入adc结果

mov r1,#adc_result

mov r7,#08

timer0_int_save_adc:

clr a

mov #r0,a

inc r0

xch a,#r0

mov @r1,a

inc r0

inc r1

djnz,r7,timer0_int_save_adc

setb adc_flag

timer0_int_adc_end:

mov a,r2

pop psw

reti

timer0_init;

mov th0,#high(timer_ms_const);装入定时常数

mov tl0,#low(timer_ms_const)

anl tmod,#11110000b

orl tmdd,#00000001b

setb et0;允许t0中断

setb tr0;t0开始运行

ret

end