基于ARM_Linux的高速同步数据采集系统设计

合集下载

基于ARM的高速高精度数据采集系统设计(1)

基于ARM的高速高精度数据采集系统设计(1)

基于A R M的高速高精度数据采集系统设计摘要近年来,随着计算机技术、电子技术等技术的发展,如何对数据进行采集和处理显得越发重要,数据采集的速度和精度是数据采集系统发展的两个主要方向。

单片机、ARM、DSP 等各种微处理器的广泛应用,为数据采集系统提供了一个有效的平台。

对信号进行高速和高精度的采集以及对采集数据处理的研究和设计是本课题的主要任务。

本文基于ARM7S3C44B0X处理器的高速、高精度、多通道数据采集系统,利用ARM7S3C44B0X丰富的功能接口和较高的工作频率,实现对信号的采集和数据处理的功能。

本文介绍了数据采集系统的国内外研究现状和发展趋势,对本系统的主要芯片进行了选型尤其是模数转换芯片AD7663的接口电路。

将系统化分成各个功能单元并对各个功能模块进行分析。

并提供了原理图和总体电路图,并编写了程序代码,最后提出了关于高速高精度数据采集系统设计的观点。

该系统具有成本低、功耗低、识别性能强及智能程度高等优点,具有较为广阔的应用前景。

关键词:ARM,S3C44B0X,数据采集系统,AD7663The Design of High speed and High precision Data AcquisitionSystem Based on ARMABSTRACTIn recent years, with computer technology, electronic technology and technology development, how to collect and process the data becomes more important. The speed and accuracy of data collection are the two main directions of the data acquisition system. MCU, ARM, DSP and other microprocessors are widely used provides an effective platform for data acquisition system. High speed and high precision signal acquisition as well as the research and design of collected data is the main task of this project.Based on the ARM7S3C44B0X this paper introduces the design and implement of a high speed,high accuracy,multiple channel data acquisition system. Using rich function interface and higher operating frequency of S3C44B0X achieves signal acquisition and data processing functions. This article describes the research status and development trend of the data acquisition system, selects the main chips of the system and the AD7663 analog digital converter. According to the modular idea, the system is divided several functional units and analyzes each functional module and provides a schematic diagram and general diagram .Some point of view to the design of the high accuracy data acquisition system was put forward at the end of this article.The system has low cost, low power consumption, recognition performance is strong and intelligent degree in higher advantages, which has relatively broad application prospects.KEY WORDS: ARM,S3C44B0X,Data Acquisition System,AD7663目录前言 0第1章绪论 (1)1.1 课题的背景及研究意义 (1)1.2 国内外研究现状和发展趋势 (1)1.3 论文的主要内容 (3)第2章数据采集系统的总体设计 (5)2.1 数据采集的相关原理 (5)2.1.1 数据采集系统基本构成 (5)2.1.2 数据采样原理 (5)2.2 多路数据采集系统的总体方案 (6)2.2.1 数据采集系统设计目标 (6)2.2.2 系统的整体设计 (7)第3章数据采集模块的硬件设计与实现 (10)3.1 多路开关及信号调理模块设计 (10)3.1.1 信号调理模块 (10)3.1.2 多路开关的选择 (10)3.2 模数转换模块 (11)3.2.1 信号驱动放大器信息 (11)3.2.2 基准电压源ADR421 (12)3.2.3 模数转换芯片的选择 (12)3.2.4 模数转换芯片AD7663介绍 (13)3.3 存储模块设计 (14)3.3.1 存储模块电路设计 (14)3.3.2 硬件和存储器设置 (16)3.4 键盘模块设计 (17)3.4.1 键盘线路模块设计 (17)3.4.2 寄存器的设置 (18)3.5 显示模块的设计 (18)3.5.1 LCD接口电路的设计 (18)3.5.2 LCD控制寄存器的设置 (20)3.6 时钟电路的设计 (21)3.7 ARM处理器的选择 (21)3.7.1 S3C44B0X的结构介绍 (22)3.7.2 S3C44B0X芯片介绍 (22)3.7.3 S3C44B0X芯片引脚介绍 (23)第四章数据采集系统的软件设计 (28)4.1 主程序流程 (28)4.2 数据转换程序 (30)4.3 键盘程序扫描程序 (32)结论 (35)谢辞 (36)参考文献 (36)附录 (38)外文资料翻译 (44)前言随着数字化时代的来临,数字信号的处理技术已经渗透到人们生活的方方面面,化工、医学、工业及科研等各个领域中,都必须对相应的信号进行检测与处理。

基于ARM处理器的数据采集系统设计.

基于ARM处理器的数据采集系统设计.

基于ARM处理器的数据采集系统设计
在现代工业测控领域,人们对数据采集的要求越来越高;不仅要求高速、高精度还要求采集设备便携化、网络化和智能化,此外还需要友好的人机界面。

传统的8/16位单片机因资源极度受限,难以满足上述要求;而PCI或ISA数据采集卡,则存在着安装麻烦、价格昂贵且电磁兼容性差等缺点。

32位嵌入式微处理器的出现很好地解决了上述矛盾,本文的研究正是基于ARM的嵌入式数据采集系统的设计。

本文以齿轮箱或机械转轴的振动信号为采集对象设计了基于ARM处理器和嵌入式Linux的数据采集系统。

该系统硬件平台以S3C2410主控板和自行研制的振动信号调理板为核心,在此基础上扩展了UART、RS485、USB、TCP/IP以及单总线通信接口,适应多种条件下的数据传输。

同时系统提供了LCD显示和触摸屏输入模块,具备良好的人机交互功能。

软件方面,搭建Linux交叉开发环境,实现了基于Linux操作系统的Bootloader的移植。

最后,根据课题需要,完成了A/D采样和单总线驱动程序的设计。

本嵌入式数据采集系统存储容量大,硬件接口丰富,软件资源配置灵活,设计方案具有很好的通用性和可扩展性。

...
【关键词相关文档搜索】:控制理论与控制工程;
【作者相关信息搜索】:武汉科技大学;控制理论与控制工程;周凤星;陈波;。

基于ARM的数据采集系统与设计.

基于ARM的数据采集系统与设计.

基于ARM的数据采集系统与设计近些年来,随着以计算机技术、通信技术为主的信息技术的快速发展和Internet的广泛应用,嵌入式系统也受到了越来越多的重视,日益广泛的应用与工业控制、移动通讯、家用电器以及消费电子设备中。

而数据采样在现代工业中发挥着非常重要的作用,工业设备的监测和控制都离不开数据的采集。

但传统的基于单片机系统的数据采样模块因为无法或很难完成操作系统的嵌入、文件的管理、各种接口的连接、与Internet的互联、大容量存储器的扩展等功能,所以在许多领域的应用受到限制。

针对这些问题,设计开发了基于Linux操作系统的嵌入式数据采集模块。

本文在综合分析了现有数据采集系统存在问题的基础上,新设计的嵌入式数据采集系统采用板卡式结构提高了系统的可扩展性和灵活性;采用嵌入式Linux内核作为系统的运行、调度的核心,提高了系统的软件可移植性和稳定性;采用基于ARM9核的32位嵌入式微处理器,作为控制、处理和通信的核心,提高了整个硬件系统的处理能力、控制灵活性以及抗干扰能力,并降低了功耗。

系统有强大的网络通信能力,为接入Internet提供了可能。

基于ARM的嵌入式数据采集与处理系统结构清晰、通用性好、可扩展性强,可为各种嵌入式应用提供一套完整的硬、软件解决方案,在工业测量与控制领域具有较为广阔的应用前景。

【相似文献】[1]. 姜换新.ARM嵌入式系统C语言编程[J].计算机应用与软件, 2003,(10)[2]. 胡和智,刘军芳.嵌入式Linux文件系统的构造[J].科技信息, 2006,(04)[3]. 陈竞,刘玉,熊祖彪.PC与ARM嵌入式系统间串口通信功能的实现[J].微计算机信息, 2005,(13)[4]. 李灵佳,董华瑾.嵌入式Linux系统的移植研究[J].辽宁师专学报(自然科学版), 2006,(02)[5]. 刘玥,李韶远.ARM嵌入式系统GUI开发研究[J].微计算机信息, 2007,(14)[6]. 周德新,张向利.Linux与嵌入式操作系统[J].桂林电子工业学院学报, 2000,(04)[7]. 高玉龙,朱秀珍,张兴周.基于ARM的家庭智能化系统设计与实现[J].应用科技, 2003,(09)[8]. 万永波,张根宝,田泽,杨峰.基于ARM的嵌入式系统Bootloader启动流程分析[J].微计算机信息, 2005,(22)[9]. 闵华松,李爱平.ARM平台的Microwindows图形编程[J].电子设计应用, 2005,(11)[10]. 罗永道,罗徽,廖宁放.基于uC/OS的嵌入式系统通信接口设计[J].微计算机信息, 2006,(20)【关键词相关文档搜索】:控制理论与控制工程; 嵌入式系统; ARM; 数据采集; Linux操作系统【作者相关信息搜索】:武汉科技大学;控制理论与控制工程;程耕国;张瀛;。

基于ARM的数据采集系统的设计

基于ARM的数据采集系统的设计

基于ARM的数据采集系统的设计数据采集系统是一种用于收集、处理和存储数据的技术解决方案。

在当今信息化社会中,数据采集系统的设计和应用变得越来越重要。

本文将介绍基于ARM架构的数据采集系统的设计原理和关键技术。

第一部分:引言数据采集系统在工业自动化、物联网和传感器网络等领域广泛应用。

它可以收集各种环境参数、物理量等数据,为决策和分析提供基础。

本文将以ARM架构为基础,设计一种高效可靠的数据采集系统。

第二部分:ARM架构概述ARM架构是一种低功耗、高性能的处理器架构,广泛应用于嵌入式系统和移动设备。

其特点是低功耗、高效能和可扩展性,非常适合用于数据采集系统的设计。

第三部分:数据采集系统设计原理3.1 系统架构设计基于ARM架构的数据采集系统的设计需要考虑到硬件和软件的结合。

硬件方面,需要选择适合的传感器和通信模块,并设计合理的电路板布局。

软件方面,需要开发适合ARM架构的驱动程序和数据处理算法。

3.2 传感器接口设计数据采集系统需要与各种传感器进行连接,获取各种环境参数和物理量的数据。

通过ARM的通用IO口和模拟输入功能,可以与各种传感器接口匹配,实现数据的准确采集。

3.3 数据存储与处理设计采集到的数据需要进行存储和处理,以便后续的分析和应用。

基于ARM架构的数据采集系统可以利用内置的存储器和外部存储器进行数据的存储,并通过ARM的高性能处理器进行数据的实时处理和分析。

第四部分:关键技术介绍4.1 低功耗设计技术ARM架构的数据采集系统需要考虑低功耗设计,以提高系统的工作时间和稳定性。

通过适当的电源管理和功耗优化技术,可以降低系统的功耗,延长系统的使用寿命。

4.2 实时性要求技术某些数据采集应用对实时性要求较高,需要将采集到的数据及时传输和处理。

在基于ARM架构的数据采集系统中,可以通过优化系统的中断响应和任务调度来实现实时性的要求。

第五部分:实例分析以某工业自动化场景中的数据采集系统设计为例,介绍基于ARM 架构的具体实现。

基于ARM+Linux的高速数据采集系统

基于ARM+Linux的高速数据采集系统

p oe sr c m i 2 MB D A a d2 6 F A H fr y t ei , e i dd c si f h bet e r c s , o bn 1 8 S R M n 5 MB L S s m d s n d t l i u s no eo jc v s o e os e g ae s o t i
Absr c :Ast oni u usde lp e to l cr n ci f r ai n s tm s m b d d c to yse si ta t hec tn o veo m n fee to i n o m to yse ,e e de onr ls tm n i d sr n g iul eha e nwi l e ,hi o bnain fac e c lpa ti h c a e in o eARM n u tya d a rc t sb e deyus d t sc m i to o h mia ln nt ea t l sg ft ur u d h m ir r c s o t m b dd d Li u cop o e s rwih e e e n x,h g —pe d d t c uiiin s tm ,i r e o a hivet e e f nci n , i h s e a aa q sto yse n o d rt c e h s u to s A RM n t s u son p pe nd Li ux o r tng s tm s a e n t e s e to ¥ i hedic s i a ra n pea i yse ,b s d o h elci n 3C241 0 ARM 9 T- s d 20 ba e
Ba e n t RM +Li uxH i h—pe d D a aAc s d o heA n g s e t quiii n S t m sto yse

基于嵌入式Linux系统的ARM高速数据采集设计

基于嵌入式Linux系统的ARM高速数据采集设计

基于嵌入式Linux系统的ARM高速数据采集设计王小团(船舶重工集团公司723所,扬州225001)摘要:以S3C2410和现场可编程门阵列(FPGA)为核心结合直接内存存取(DMA)技术设计了高速数据采集系统,重点研究了嵌入式Linux操作系统下DMA设备驱动程序的设计方法。

关键词:直接内存存取;嵌入式Linux;高速数据采集中图分类号:TP368.2 文献标识码:A 文章编号:CN32-1413(2011)06-0116-05Design of High-speed Data Acquistion Based on ARM in Embedded Linux SystemWANG Xiao-tuan(The 723Institue of CSIC,Yangzhou 225001,China)Abstract:Combining with direct memory access(DMA),this paper designs the data acquisition sys-tem with high speed taking S3C2410and field programmable gate array(FPGA)technology as thecore,focusing on studying the method of DMA equipment driver program under the embeddedLinux operating system.Key words:direct memory access;embedded Linux;high-speed data acquistion收稿日期:2011-08-110 引 言三星S 3C2 4 1 0是使用ARM 9 2 0T核、采用0.18μm工艺CMOS标准宏单元和存储编译器开发而成的。

作为一种16/32位高性能、低成本、低功耗的嵌入式微处理器,能够实现MMU和独立的16kB指令和16kB数据结构的缓存。

基于ARM的数据采集系统的设计--优秀毕设申请材料

基于ARM的数据采集系统的设计--优秀毕设申请材料

基于ARM的数据采集系统的设计班级:通信071 姓名:指导教师:摘要随着嵌入式技术的迅速发展,嵌入式终端在家居和工业等领域发挥着越来越重要的作用。

本设计提出了一种以嵌入式为基础的温度采集系统的设计方案,使得基于嵌入式系统做温度采集终端有较好的人机交互界面和系统高稳定性等特点。

本文介绍了整个硬件开发环境,bootloader的启动流程,Linux系统的架构,Linux内核的架构和根文件系统等相关知识。

同时,本设计在软件方面主要编写了DS18B20的底层驱动程序,进行了Linux内核的配置编译,设计了QT顶层应用程序;在硬件方面主要设计了DS18B20的硬件电路,搭建了嵌入式交叉开发环境。

通过综合调试最终实现了基于ARM9的嵌入式温度采集系统的设计。

嵌入式数据采集系统具备了发展潜力大,功耗低,稳定性高,可视化界面好,便于携带和功能可扩展的特性。

关键词:嵌入式系统;Linux内核;温度采集AbstractWith the rapid development of embedded technology, the embedded terminal is playing an increasingly important role in the home and industry.The paper proposes a temperature collection system which is based on embedded system, and using the embedded terminal to do data collection will have characteristics of better man-machine interface and high stability.This article describes the environment of hardware development, the boot process of bootloader, the architecture of Linux system, Linux kernel-related architecture, root file system architecture and other related knowledge. At the same time, this design mainly completed the programming of DS18B20's bottom-level driver, the configuration and compilation of the Linux kernel and the design of QT top-level application program in software. In the respect of hardware, the work includes of designing of the DS18B20's circuit and building the cross-tool development environment. Through synthesized debugging this project the design of the temperature collection system finally is realized, which is based on ARM9 embedded system.The data collection terminal based on embedded system has the high potential for development, low power consumption, high stability, good visual interface, easy to carry and functions which can be expanded, and so on.Key Words: Embedded System; Linux Kernel; Temperature Collection System一、选题背景和意义目前我国温室大棚技术已经在全国范围内被广泛应用,这一技术的诞生解决了北方人冬天没蔬菜的难题。

基于ARM的数据采集系统的设计

基于ARM的数据采集系统的设计

基于mini2440做温度采集的源代码这部分代码是我做毕设的源代码,我的论文也传到了文库,但还没有文成提交,论文题目:基于ARM的数据采集系统的设计Ds18b20驱动程序,此处DS18B20被定义为一个混杂设备,源代码如下:#include <linux/module.h>#include <linux/kernel.h>#include <linux/fs.h>#include <linux/init.h>#include <linux/delay.h>#include <linux/platform_device.h>#include <linux/cdev.h>#include <linux/miscdevice.h>#include <linux/ioctl.h>#include <asm/uaccess.h>#include <mach/regs-gpio.h>#include <mach/hardware.h>#define DEVICE_NAME "ds18b20"#define DSDATA S3C2410_GPF0#define DATAOUTP S3C2410_GPF0_OUTP#define DATAINP S3C2410_GPF0_INP#define DS18B20_MAGIC 'k'#define DS18B20_RESET _IO(DS18B20_MAGIC, 0)static ssize_t ds18b20_read(struct file *filp, char __user *buff, size_t count, loff_t *offp){volatile int i, size=count;char ddat;if (size > 2)size = 1;for (i=0; i<8; i++){ddat >>= 1;s3c2410_gpio_cfgpin(DSDATA, DATAOUTP);s3c2410_gpio_setpin(DSDATA, 0);udelay(4); //4uss3c2410_gpio_setpin(DSDATA, 1);s3c2410_gpio_cfgpin(DSDATA, DATAINP);if ( s3c2410_gpio_getpin(DSDATA) ){ddat |= 0x80;}udelay(80); // >70uss3c2410_gpio_cfgpin(DSDATA, DATAOUTP);s3c2410_gpio_setpin(DSDATA, 1);udelay(3); // >1us}s3c2410_gpio_cfgpin(DSDATA, DATAINP);if(copy_to_user(buff, &ddat, size)){return -1;}return size;}static ssize_t ds18b20_write(struct file *filp, const char __user *buff, size_t count, loff_t *offp) {volatile int i, size=count;char ddat=0;if (size > 2)size = 1;if (copy_from_user(&ddat, buff, size)){printk("write data error\n");return -1;}s3c2410_gpio_cfgpin(DSDATA, DATAOUTP);for (i=0; i<8; i++){s3c2410_gpio_setpin(DSDATA, 0);udelay(5); //5usif (ddat & 0x01){s3c2410_gpio_setpin(DSDATA, 1);}udelay(80); // >70uss3c2410_gpio_setpin(DSDATA, 1);udelay(3); // >1usddat >>= 1;}s3c2410_gpio_cfgpin(DSDATA, DATAINP);return size;}static int ds18b20_ioctl( struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg){int res=0;switch(cmd){case DS18B20_RESET: // resets3c2410_gpio_cfgpin(DSDATA, DATAOUTP);s3c2410_gpio_setpin(DSDATA, 1);udelay(27);s3c2410_gpio_setpin(DSDATA, 0);udelay(500); // 500uss3c2410_gpio_setpin(DSDATA, 1);udelay(27);s3c2410_gpio_cfgpin(DSDATA, DATAINP);udelay(60);res = s3c2410_gpio_getpin(DSDATA);msleep(3);default:return -EINVAL;}return res;}static int ds18b20_open(struct inode *inode, struct file *file){s3c2410_gpio_cfgpin(DSDATA, S3C2410_GPF0_INP);return 0;}static int ds18b20_release(struct inode *inode, struct file *file){return 0;}static struct file_operations ds18b20_fops = {.owner = THIS_MODULE,.open = ds18b20_open,.release = ds18b20_release,.read = ds18b20_read,.write = ds18b20_write,.ioctl = ds18b20_ioctl,};static struct miscdevice misc = {.minor = MISC_DYNAMIC_MINOR,.name = DEVICE_NAME,.fops = &ds18b20_fops,};// register ds18b20static int __init dev_init(void){int ret;ret = misc_register(&misc);printk(DEVICE_NAME"\tinitialized\n");return ret;}// unregister ds18b20static void __exit dev_exit(void){misc_deregister(&misc);}module_init(dev_init);module_exit(dev_exit);MODULE_LICENSE("GPL");MODULE_AUTHOR("cole3");此段代码是对驱动程序的验证型程序,通过动态加载我们可以检测驱动程序能否正常工作:#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <sys/ioctl.h>#include <error.h>#include <time.h>#include <fcntl.h>#define DS18B20_MAGIC 'k'#define DS18B20_RESET _IO(DS18B20_MAGIC, 0)static int fd=0;static char a=0;static char b=0;/*****读取温度*****/static unsigned int ReadTemperature(void){unsigned int t=0;int ret;ioctl(fd, DS18B20_RESET, 0); //初始化a = 0xcc;write(fd, &a, 1); //跳过读序号列号的操作a = 0x44;write(fd, &a, 1); //启动温度转换sleep(1);ioctl(fd, DS18B20_RESET, 0); //初始化a = 0xcc;write(fd, &a, 1); //跳过读序号列号的操作a = 0xbe;write(fd, &a, 1); //读取温度寄存器read(fd, &a, 1); //读低8位read(fd, &b, 1); //读高8位t = b;t <<= 8;t = t | a;usleep(5000);return t;}int main(int argc, char **argv){int val;float fval;fd = open("/dev/ds18b20", O_RDWR);if (fd < 0){perror("open device ds18b20!");return -1;}printf("You may stop it with pushing Ctrl + C. \n");while(1){val = ReadTemperature();val <<= 16;val >>= 16; // 扩展符号位printf("Temperature is ");if (val < 0){printf("-");val = -val;}fval = val >> 4; // 整数fval += (val & 0x000F) * 0.0625; // 小数printf("%f \n",fval);sleep(1);}close(fd);return 0;}QT界面顶层应用程序:1.头文件://头文件部分#include <qapplication.h>#include <qvariant.h>#include<qsound.h>#include<qlabel.h>#include<qdatetime.h>#include<qstring.h>#include<qnamespace.h>#include<qfont.h>#include<qtimer.h>#include <qlcdnumber.h>//引用类部分class QVBoxLayout;class QHBoxLayout;class QGridLayout;class QLCDNumber;class QLabel;//类定义部分class mytemp : public QWidget{Q_OBJECTpublic:mytemp( QWidget* parent = 0, const char* name = 0);~mytemp();//构造函数QLabel* label1;QLabel* label2;QLCDNumber* LCDNumber;QLabel* label;QTime nowTime;QString time;QTimer* timer;unsigned int ReadTemperature(void);//该类的两个插槽public slots:virtual void ReTime();virtual void measure();};2.函数体://头文件#include "mytem.h"#include <qlabel.h>#include <qlcdnumber.h>#include <qlayout.h>#include <qvariant.h>#include <qwhatsthis.h>#include <qtimer.h>//内核头文件#include <stdio.h>#include <stdlib.h>#include <unistd.h>#include <sys/ioctl.h>#include <error.h>#include <time.h>#include <fcntl.h>#define DS18B20_MAGIC 'k'#define DS18B20_RESET _IO(DS18B20_MAGIC, 0)static int fd=0;static char a=0;static char b=0;mytemp::mytemp( QWidget* parent, const char* name ) : QWidget(parent,name){if ( !name )setName( "mytemp" );resize( 240, 320 );setMaximumSize( QSize( 240, 320 ) );setCaption( tr( "mytemperature" ) );label1 = new QLabel( this, "TextLabel1" );label1->setGeometry( QRect( 200, 60, 20, 31 ) );QFont label1_font( label1->font() );label1_font.setFamily( "helvetica" );label1_font.setPointSize( 32 );label1_font.setBold( TRUE );label1->setFont( label1_font );label1->setText( tr( "C" ) );label2 = new QLabel( this, "TextLabel2" );label2->setGeometry( QRect( 200, 40, 16, 21 ) );QFont label2_font( label2->font() );label2_font.setFamily( "helvetica" );label2_font.setPointSize( 14 );label2_font.setBold( TRUE );label2->setFont( label2_font );label2->setText( tr( "o" ) );LCDNumber = new QLCDNumber( this, "LCDNumber" );LCDNumber->setGeometry( QRect( 10, 40, 180, 61 ) );LCDNumber->setNumDigits( 4 );LCDNumber->setSegmentStyle( QLCDNumber::Filled );label = new QLabel( this, "label" );label->setGeometry( QRect( 22, 141, 191, 30 ) );label->resize(100,100);label->setFont(QFont("Times",20,QFont::Bold));QTimer *timer = new QTimer(this); // 定义QT定时器connect( timer, SIGNAL(timeout()), this, SLOT( measure()));connect(timer,SIGNAL(timeout()),this,SLOT(ReTime()));nowTime = QTime::currentTime();time = nowTime.toString();label->setText(time);timer -> start(1000);}mytemp::~mytemp(){}unsigned int mytemp::ReadTemperature(void){unsigned int t=0;::ioctl(fd, DS18B20_RESET, 0); //初始化a = 0xcc;::write(fd, &a, 1); //跳过读序号列号的操作a = 0x44;::write(fd, &a, 1); //启动温度转换sleep(1);::ioctl(fd, DS18B20_RESET, 0); //初始化a = 0xcc;::write(fd, &a, 1); //跳过读序号列号的操作a = 0xbe;::write(fd, &a, 1); //读取温度寄存器::read(fd, &a, 1); //读低8位::read(fd, &b, 1); //读高8位t = b;t <<= 8;t = t | a;usleep(5000);return t;}void mytemp::ReTime(){label->resize(100,100);label->setFont(QFont("Times",18,QFont::Bold));nowTime = QTime::currentTime();time = nowTime.toString();label->setText(time);}void mytemp::measure(){int val;fd = ::open("/dev/ds18b20", O_RDWR);if (fd < 0){perror("open device ds18b20!");exit(-1);}//printf("You may stop it with pushing Ctrl + C. \n"); val = ReadTemperature();val <<= 16;val >>= 16; // 扩展符号位val >>= 4; // 整数LCDNumber->display(val);ReTime();::close(fd);}3.主函数#include"mytem.h"int main(int argc,char **argv){QApplication app(argc,argv);mytemp clock;app.setMainWidget(&clock);clock.show();return app.exec();}4.桌面显示代码:[Translation]File=example-nctContext=Example[Desktop Entry]Comment=An Example ProgramExec=mytemIcon=mytemType=ApplicationName=DS18b20实时测温图片:成功图片:。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

邮局订阅号:82-946120元/年技术创新测控自动化《PLC 技术应用200例》您的论文得到两院院士关注基于ARM-Linux 的高速同步数据采集系统设计Implementation of High-speed and Synchronous Data Acquisition System Based on ARM-Linux(1中科院等离子体物理研究所;2合肥工业大学)李齐礼1季振山1肖炳甲1舒双宝2LI Qi-li JI Zhen-shan XIAO Bing-jia SHU Shuang-bao摘要:基于采用ARM11内核的S3C6410处理器,外扩高精度数据采集芯片AD7606,设计并实现了一种用于电能质量监测的高速同步数据采集系统。

详细分析了AD7606以及PWM 定时器的基本工作原理,采用并行接口模式作为ADC 与S3C6410的数据传输,移植了Linux 操作系统并实现了基于PWM 和GPIO 口的ADC 驱动。

实验测试结果表明,该系统在Linux 环境下对ADC 实现了精确定时,是可行的,能很好的满足电能质量监测中数据采集的需要。

关键词:电能质量;数据采集;AD7606;Linux;ARM 中图分类号:TP274文献标识码:AAbstract:A power quality data acquisition system based on high precision AD chip AD7606and ARM S3C6410embedded in real-time Linux kernel is designed and implemented.Working principle of AD7606and the parallel connection between AD and ARM are introduced detailedly.Driver software for AD 7606in Linux is designed and implemented.With PWM Timer triggerring AD sampling and data reading completed in Timer interrupt,the method of modularization is used for software design of this system.Feasibility and reliability of the system ware validated by experimental test,and the results showed that the data acquisition system can satisfy the demand of power quality analysis system.Keywords:power quality;data acquisition;AD7606;Linux;ARM文章编号:1008-0570(2012)10-0095-02引言以往的电能质量监测仪器多是基于DSP 来进行数据采集与处理的,这些系统主频较低,难以运行较成熟的操作系统,并发处理能力不足,给上层应用程序和人机界面开发带来了很大不便,同时造价高昂,性价比不高。

近年来ARM 微处理器的快速发展,使得便携式、低功耗、高性价比的应用成为可能,本系统的设计就是基于这样的大背景。

本文以提高电能质量测量精度,降低设备功耗与成本,改善监测系统稳定性和实时性,提高人机界面友好性为背景,采用基于ARM11核心的S3C6410为处理器,搭配Linux 操作系统,通过S3C6410的GPIO 口外扩AD7606采集芯片,设计并实现了一套高速数据采集系统。

本系统利用S3C6410的PWM 硬件定时器实现了对AD7606的精确定时,克服了Linux 软件定时器无法精确定时的困难。

本系统具有8通道(在实际电能质量监测中只用到6通道)同步采集能力,采样转换精度为16bit,最大采样率250KSPS 。

这种设计很好的满足了电能质量监测对数据采集精度高,效率高、简单可靠的要求。

1AD7606工作原理AD7606是16位、8通道同步采样模数数据采集系统(DAS)。

这些器件内置模拟输入箝位保护、二阶抗混叠滤波器、跟踪保持放大器、16位电荷再分配逐次逼近型ADC 、灵活的数字滤波器、2.5V 基准电压源、基准电压缓冲以及高速串行和并行接口。

AD7606采用5V 单电源供电,可以处理±10V 和±5V 真双极性输入信号,同时所有通道均能以高达200kSPS 的吞吐速率采样。

其转换处理是通过两个CONVST 信号来控制的,CONVST A 控制V1、V2、V3和V4通道,CONVST B 控制V5、V6、V7和V8通道,当2个管脚连在一起时可进行8通道同步采样。

同时AD7606具有高速的并行和串行接口,可以与微控制器或者DSP 进行连接。

可使用内部或外部基准,内部内含有一个2.5V 的基准电压源,可选择双极性模拟输入(即2倍基准或4倍基准)。

下面分析一下AD7606的并行工作方式。

图1为并行接口工作方式下的时序图。

AD7606在CONVST 信号的上升沿触发ADC 同步采样,同时相应的采样保持放大器(T/H)进入保持(Hold)阶段,其数模转换过程开始。

转换时钟由AD7606内部自行产生的,一次转换典型的大约为4us 。

当数模转换开始后BUSY 信号同步置高,BUSY 信号的下降沿表示数模转换的完成,同时使采样保持放大器重新进入跟踪阶段。

此时,AD7606内部的8个寄存器中已经保存了转换完成的数据,然后通过控制片选信号和读信号就可以依次读出8通道的数据了。

读取数据时候,CONVST 信号不必一直保持高电平。

图1并行接口工作方式下的时序图图2系统硬件框图2系统总体设计本系统充分考虑实际公用电网的特点,兼顾性能与成本,选李齐礼:硕士研究生95--技术创新《微计算机信息》2012年第28卷第10期120元/年邮局订阅号:82-946《现场总线技术应用200例》测控自动化用三星(SAMSUNG)半导体公司的S3C6410XH-66作为处理器和AD7606-6作为采集芯片,同时搭配128MB 的SDRAM 以及1GB 的Nand Flash,构成了系统主要硬件框架。

S3C6410是由三星公司推出的一款低功耗、高性价比的RSIC 处理器[8],它基于ARM11内核(ARM1176JZF-S),包含16KB 的指令数据Cache 和16KB 的指令数据TCM,ARM Core 电压为1.1V 的时候,可以运行到553MHz,在1.2V 的情况下,可以运行到667MHz 。

通过AXI,AHB 和APB 组成的64/32bit 内部总线和外部模块相连。

如图2所示,通过电压互感器和电流互感器把公用电网交流电转化为适合ADC 采集的-5V ~+5V 量程电压。

ADC 采用并行接口模式,利用ARM 的PWM 硬件定时器作为ADC 的采样开关来控制ADC 的采样频率,ADC 的16根数据线D0-D15与ARM 的GPIO 口相连,通过GPIO 口来实现数据的读取,ADC 的RD/CS 信号以及RESET 信号均由GPIO 来提供。

AD7606与S3C6410接口电路连接图如下所示:图3AD7606与S3C6410接口连接图AD7606的管脚通过一个10K 电阻接地,表示采用并行接口传输模式,RANGE 接地表示采用量程,REF SELECT 管脚通过一个10K 电阻接高电平,表示启用内部2.5V 基准电压。

V DRIVE 是IO 口工作电压,该管脚与S3C6410的3.3V 电平相连。

在实际应用中为了使集成片得到的供电电压比较平坦,减小电压振荡现象,同时为了去除信号线中的高频噪声,需要在电源端和地端加上去耦电容。

其中REFCAPA/B 两个个引脚为2个基准缓冲器的去耦管脚,为了得到比较精准的基准电压,因此两个管脚同接一个10uF 的去耦电容。

3基于Linux 的ADC 驱动设计由于Linux 系统具有开源、稳定、高效、易于开发图形界面和实现网络传输的优点,本系统基于Linux 操作系统平台,由于在Linux 上无法通过软件定时器实现对ADC 的精确定时,最终选用S3C6410的PWM 定时器对ADC 进行精确采样定时控制,解决了软件定时器的问题。

因此必须实现基于PWM 定时器和GPIO 口的ADC 驱动。

本系统是基于Linux2.6.36内核,驱动要实现PWM 定时器的初始化,频率设置,同时也要实现GPIO 口的初始化,GPIO 对ADC 的控制,以并行方式从GPIO 读取ADC 采集的数据。

本系统实现了基本的open,close,read,ioctl 接口,提供给上层应用程序使用,满足了电能质量程序的需要。

如图4所示,PWM 定时器工作过程[8]大致如下:(1)设定TCMPBn 、TCNTBn 两个寄存器,它们表示定时器n 的比较值,初始计数值;(2)启动定时器n,通过设置TCON,TCMPBn 、TCNTBn 的值被装入TCMPn 、TCNTn 中,在定时器n 的工作频率下,TCNTn 开始减1计数,其值可以通过TCNTOn 寄存器读取;(3)当TCNTn 的值等于TCMPn 的值时,定时器n 的输出管脚TOUTn 反转;TCNTn 继续减1计数;(4)当TCNTn 的值到达0时,其输出管脚TOUTn 再次反转,并触发定时器n 的中断(如果中断使能);(5)如果在TCON 寄存器中将定时器n 设为“自动加载”,则TCMPBn 和TCNTBn 寄存器的值被自动装入TCMPn 和TCNTn 中,开始下一个计数流程。

根据PWM 定时器的工作原理,ADC 驱动的大致过程如下:初始化PWM 和GPIO 相关寄存器,设置好PWM 的TCNTBn,TCMPBn,TCNTBn 的值决定PWM 输出的频率,TCMPBn 的值决定PWM 定时器n 的管脚状态反转时间,当PWM Start 时,PWM 定时器输出管脚状态为低电平,TCNTBn 开始减一倒计时,当TCNTBn =TCMPBn 的时候,PWM 定时器n 输出管脚状态反转,变为高电平(此刻触发ADC 开始采样),TCNTBn 继续减一倒计时,当TCNTBn =0时,产生定时器中断,此时ADC 已经转换完成,在中断处理程序中从GPIO 口的数据寄存器读取采样数据存放在Buffer 里(若缓冲区满则停止PWM 定时器,并把Buffer 中数据拷贝到用户空间),PWM 定时器一周期完毕,第二周期开始重复上述过程。

相关文档
最新文档