微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > AVR单片机在多回路数据采集器中的应用

AVR单片机在多回路数据采集器中的应用

时间:01-09 来源:互联网 点击:

闪速存储器可以编程,4K字节的SRAM和4K字节的EEPROM来存储变量,一般情况下,不需要扩展外部的ROM和RAM。

系统的硬件制板主要分为一块CPU主控板和八块I/O接口板。CPU主控板主要包括八路电流信号的采集模块、参数设置模块、电源模块、通讯接口模块及JTAG接口模块等。将八路开关量的输入和输出单元分别制成八块I/O接口板,每块I/O接口板包括两个有源开关量信号和两个继电器触点输出信号。I/O接口板采用与CPU主控板可脱卸方式连接,主要优点在于实际使用时可灵活选配,方便实用,节省了硬件成本,且仪器出故障时便于维修更换。

由于电力系统中要测量的常常是大电流,被测的电流需经过一级变压器后才能接入CPU主板,成为主板中电流互感器的模拟输入信号。模拟信号经过CD4051多路开关,并由LF124四运算放大器将模拟电流小信号放大。每路的最大输入电流允许为6A。放大后的模拟信号利用微处理器提供的内部ADC进行模数转换处理,并将10位转换结果放在ADC数据寄存器ADCH和ADCL中。在连续采样模式下,ADC连续取样,并不断更新ADC数据寄存器。本系统的关键技术在于八路模拟信号共用同一个放大电路,既可解决一致性问题,又可节约硬件成本。同时八路模拟输入信号全部用模拟多路开关进行隔离,避免信号之间的相互干扰。为了确保采集的速度,需ATmega128微处理器对八路模拟信号进行连续高速巡回检测,并在模拟多路开关切换时进行软件消抖。由于系统被测交流电流变化缓慢,在组成对模拟信号的自动巡回检测模块时,没有加入采样/保持器电路。对八路模拟信号还采用数字滤波和分段线性补偿等软件技术,增强抗干扰性,使信号采样保持在最佳线性状态,以保证测量的精确度。

所有输入、输出开关量信号都采用光电隔离器实现系统与现场信号的隔离,提高系统的

抗干扰能力。I/O接口板中报警和状态信号灯工作时电源供电都为DC24V,LED显示对报警和状态信号有无进行实时的状态报告。I/O接口板提供的2个继电器触点输出信号,有信号输出时,继电器触点将闭合。其中继电器采用OMRON G6B-114AP,体积小,触点允许接通的最大信号为:5A,250V(交流)或 5A ,30V(直流)。

一般微处理器本身不具备串行通信接口功能,因此,可以通过外接串行接口电路加以扩展。在采集器的通讯接口电路设计中,系统的通讯接口电路部分需要配备有RS485接口,接口芯片采用Sipex的工业级带高静电保护的芯片SP485EEN,使通信更可靠。该系统具备远程操作能力,可以实现远程输入/输出。

4.2 数据采集和AD处理的软件实现

数据采集是该多回路数据采集器软件编程部分的主要模块,在循环执行数据采集程序的同时,还间隔地调用了时钟定时中断子程序,数字滤波子程序和分段线性补偿子程序等。系统上电执行初始化程序,复位个端口。通过操作按键确定了采集系统时间段的初始时间之后,系统开始对0~7通道间隔1s时间采集一次电流值,调用数字滤波子程序进行滤波得到精确的数值。再通过数据转换和处理后送微处理器的数据存储器,等待PC机的读取。

数据采集处理的实现采用AVR单片机C编辑器——ICCAVR编程,以下是系统查询读AD子程序和AD处理的部分程序。

1.查询读AD子程序

#define ADC_VREF_TYPE 0x00 // Read the AD conversion result

unsigned int read_adc(unsigned char adc_input)

{ ADMUX=adc_input|ADC_VREF_TYPE; // Start the AD conversion

ADCSRA|=0x40; // Wait for the AD conversion to complete

while ((ADCSRA 0x10)==0);

ADCSRA|=0x10;

return ADCW; }

2.AD处理程序

while (ad_end) // ad_end是位标志,=1表明AD转换完毕

{ if (temp>2) //采集3组AD值

{ PORTG |=0x08; // PORTG.3=1 ; 关闭多路开关

ad_ii=ad_i;

ad_ii++;

if(ad_ii>7)ad_ii=0;

PORTF =0xF1;

PORTF |=adtondao[ad_ii]; //切换AD通道

PORTG =0XF7; /*PORTG.3=0; 打开多路开关*/

data_cl(); //本组(第三组)AD计算子程序 ad_end=0;

data[2]=adresult.adzhi;

data_cl2(); //3组AD数字滤波程序

temp=0;

ad_i=ad_ii; }

else

{ data_cl(); //计算一组AD值

ad_end=0;

data[temp-1]=adresult.adzhi; //存AD值 } }

5 结束语

ATmega128微处理器本身带有多路10位精度的逐次比较式A/D转换器,在该多回路数据采集器系统中可以显著地降低成本。由于ATmega128的A/D转换器转换速度比较高,可以采取一些数字滤波算法来得到较为精确和稳定的转换结果。利用C语言编程,使该多回路数据采集器系统的硬件设计变得简单,AD采集处理编程也容易,大大缩短了开发周期。采集器样机经

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top