摘要:本文介绍了以AVR单片机、AT45DB642D存储芯片和日历芯片为核心的多通道
多功能采集器的设计方法,并给出了该采集器的硬件设计和软件设计。
关键词:采集;存储;AVR单片机
引言
随着各行各业的发展和生产需要,业界上的采集器已经满足不了某些行业的生产需要,他们不仅需要采集数据还需将数据发生变化的时间记录下来,断电数据不掉失,特别是当电脑读取采集器的数据时还需能继续采集数据,保证不掉失一个数据,并且还要求擦除采集器旧的数据时还能继续采集数据和保存数据,保证不擦除新的数据,因为某些场合需要时时刻刻不间断的采集数据,并要求任何时刻都能读取数据。 他们迫切地需要一种新的多功能的,并且能够多通道采集数据的采集器。
硬件设计
整个采集器的硬件主要由AVR单片机、存储器、日历芯片、电源电路、采集及隔离电路、按键及显示电路、RS485接口电路、后备电池电路和掉电采样电路组成,其整体结构如图1所示。
图1 硬件整体结构图
AVR单片机
AVR单片机是整个采集器的核心,所用芯片是ATMEL公司的ATmega162。ATmega162是高性能低功耗的8位微控制器,其最高处理速度可达16MIPS,16K字节片内FLASH存储,1K字节片内SRAM,一个可用于主从的SPI串行接口,两个可编程的串行UART接口。
存储器
存储器采用ATMEL公司的AT45DB642D芯片,其存储容量为64Mbit,即8M字节,其内部有两个1056字节 SRAM(即缓存buffer1和buffer2),并支持串行SPI和并口存储,支持SPI串行时钟最大66MHz,编程、和擦除不少于100000次。
日历芯片
日历芯片采用飞利浦公司的PCF8563,其支持总线,最大的通信速率可达400kbit/S,大工作电压范围为1.0V~5.5V,低工作电流,典型值为0.25(VDD=3.0V,Tamb=25)。
电源电路
电源电路采用开关电源供电,其输入电压范围比较宽,可在100VAC~275VAC之间正常工作,输出直流电压为5V。
采集及隔离电路
采集及隔离电路主要由一些滤波、限流和光偶隔离电路组成,整个采集器有多达4路的采集通道,其采集的电压范围可在5V~24V之间。
按键及显示电路
为了减少使用AVR单片机的IO口和减少连接线,按键及显示电路采用串转并和串转串芯片,其芯片具有较大的驱动能力,能够直接驱动6个数码管,主电路板与按键显示板的连接总共只需6 根线,其中2根电源线、1根串行数据线,1根串行时钟线,1根显示输出使能信号线,1 根采集按键的信号线。其采集按键信号比较特殊,只用1 根信号线就可采集4 个按键,其功能要配合软件来实现。
RS485接口电路
为了实现点对多点和长距离的通信,采集器采用RS485通信协议,使用MAX485芯片实现平衡差分信号传输,其抗干扰能力强,传输距离可1.2km,传输速度可达56.7kbit/S,并且可连接多达32个采集器。
后备电池电路和掉电采样电路
当电源电路的输入端停止供电时,掉电采样电路采样到掉电,AVR单片机即刻检测到,与此同时后备电池电路采用电容的放电延时(见图2),使三极管、饱和导通,后备电池BT1通过三极管供电给AVR单片机和存储器,AVR单片机即刻将存在RAM和存在存储器buffer的数据存到存储器FLASH里,当电容放完电,三极管、不导通,后备电池耗电极小,只对日历芯片供电。在正常供电的情况下,电源电路的5V电压保持给电容充电,三极管的基电极接一个嵌位二极管,使三极管不会饱和导通,后备电池通过二极管和电阻充电。
图2 后备电池电路
软件设计
软件设计包括系统初始化,主程序,UART接收中断子程序和定时器中断子程序。其中,主程序还包括采集数据子程序,SPI读写存储器子程序,UART接收发送子程序,读写日历芯片子程序、按键显示子程序和掉电检测子程序。软件设计的流程图如图3所示。
图3 软件流程图
如图3所示,当采集数据子程序采集到数据,即刻将采集到数据和采集时间存到AVR单片机内存中,并置一个需要存储的标示;假如没有采集到数据,AVR单片机不会将时间存到内存中,也不会置一个需要存储的标示;当CPU执行到
SPI读写存储器子程序,其根据存储的标示判断是否需要存储数据,并根据读取存储器数据标示判断是否需要读取数据到AVR单片机内存中;接着CPU执行到UART接收发送子程序,其根据上传数据标示判断是否需要上传数据给电脑,并根据电脑的命令选择需要发送的数据和读取存储器的内容,将读取存储器数据标示置位,上传数据标示和接收电脑的命令是通过UART接收中断子程序接收数据得到的。
采集数据子程序
采集数据程序比较简单,只需用程序去检测对应采集电路的AVR单片机IO口,当IO的电平从高到低变化时,程序将该通道的变量加1,同时将时间记录下来,并设置需要存储的标示供CPU执行到SPI读写存储器子程序时存储数据。
SPI读写存储器子程序
AT45DB642D是ATMEL公司的存储芯片,采用SPI同步串口总线对其进行读写,下面给出读写AT45DB642D部分程序。
写数据到buffer1
void wr_buffer1()
{ unsigned i;
tx_wait();
rsdr_wip(); //读状态寄存器
tx_wait();
if((rx_xdata1 & 0x80)==0x80)
{ xmit_value(0x84); //发送写使能
xmit_value(0xd1); //发送读使能
tx_wait();
xmit_value(pa_ba1[2]); // write any
tx_wait();
xmit_value(pa_ba1[1]); //write addr
tx_wait();
xmit_value(pa_ba1[0]); //write addr
for(i=0;i<1056;i++) //1056 写1页
{ tx_wait();
xmit_value(wr_da1);
}
wr_642_flag=0;
}
}
读状态寄存器数据
void rsdr_wip()
{ tx_wait();
xmit_value(0xd7); //写读状态寄存器地址
tx_wait();
xmit_value(0xd7);
while(1)
{ if(((*SPISTS) & 0x40) == 0x40) //查看是否收到数据
{ break; }
}
delay3(200);
rx_xdata1 = *SPIRXBUF;
}
将buffer1数据写到flash
void buf1_to_flash_erase()
{ tx_wait();
rsdr_wip(); //读状态寄存器
if((rx_xdata1 & 0x80)==0x80)
{ xmit_value(0x83); //buffer1 to page flash program with erase
tx_wait();
xmit_value(pa_ba1[2]); //write page addr
tx_wait();
xmit_value(pa_ba1[1]); //write page addr
tx_wait();
xmit_value(pa_ba1[0]); //write any
}
}
将flash数据读到buffer1
void flash_to_buf1_rd()
{ tx_wait();
rsdr_wip(); //读状态寄存器
if((rx_xdata1 & 0x80)==0x80)
{ xmit_value(0x53); //read page flash to buffer1
tx_wait();
xmit_value(pa_ba1[2]); //write addr
tx_wait();
xmit_value(pa_ba1[1]); //write addr
tx_wait();
xmit_value(pa_ba1[0]); //write addr xx
}
}
除了以上的程序,SPI读写存储器子程序还有很多,其中还有一些实现特殊功能的程序,特别是本采集器最大的特点——采集器在采集数据和存储数据时允许对存储器进行“擦除”,这一功能保证数据在擦除过程中不会丢失。具体的实现方法是——将上一次读取到存储器的页和地址保存到flash,上一次读取时间到现在采集器一直在采集数据和存储数据(也可以不采集),假如现在需要“擦除存储器”,只需将上一次读取到存储器的页和地址设置成下次读取存储器页和地址,即继续从上一次读取到存储器页和地址(地址需加1)开始读,不读以前读过的地址;当存储数据到最后一页最后一个地址,程序将设置从第1页第0个地址开始存储,程序中每次从buffer到flash都经过页擦除再存储,所以以前的存储数据都被覆盖掉。这样的功能就像“擦除”存储器,而不耽误采集数据和存储数据,真正的整片擦除存储器有一个命令,在本采集器也用到。
UART接收发送子程序和UART接收中断子程序
一般情况下UART接收发送子程序除了执行一些判断是否发送数据以外,大部分程序不会被执行。当电脑从串口通过RS-232和RS-485发送命令或数据过来时,AVR单片机立即接收数据,当接收到一个字节AVR单片机产生接收中断,通过程序将数据保存到内存中;当全部收到指定的字节数和命令时,AVR单片机将执行相应的运算或处理。
读写日历芯片子程序
使用AVR单片机IO口模拟总线读写日历芯片关键是要搞清总线的时序、读写日历芯片命令和步骤。
按键显示子程序
采集器上电后6个数码管分别显示时、分、秒,可以根据4个按键来选择显示不同的菜单和数据,比如选择显示一些采集数据、时间(包括年月日时分秒),还可以通过按键来调整时间并将时间写入日历芯片。
结语
基于AVR单片机和AT45DB642D存储芯片的新型多功能多通道采集器的设计,不仅成本低、体积小,而且存储容量大,可靠性好,功能多,只需两根电线就可以与电脑通信、传送数据、修改时间等,特别是采集器在与电脑通信或上传数据时还可以采集数据并存储数据,而且采集器采集和存储数据时允许擦除存储器,保证不会擦除还没读过或擦除时采集的数据,确保数据一个都不丢失,具有较高的性价比。目前,该采集器已应用于机床厂、瓷砖厂等加工制造业的计件采集和记录。
参考文献:
1. 沈文,AVR单片机C语言开发入门指导,清华大学出版社.
2. ATMEGA162数据手册,http://www.atmel.com/dyn/general
3. AT45DB642D数据手册,http://www.atmel.com/dyn/general
4. PCF8563P数据手册,http://www.21icsearch.com/searchpdf
凡本网注明"稿件来源:“电子产品世界或者EEPW”的所有文字、图片和音视频稿
件,版权均属电子产品世界所有,任何媒体、网站或个人在转载、链接、转贴或以其他
方式复制发表时必须注明"稿件来源:“电子产品世界”并署作者名称。 |