版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 嵌入式技术设计作业ADC数据采集系统设计姓 名:谷晓波 系 别:信息工程系 学 号:1203150139 班 级:物联网应用技术指导教师:张华2014年11月 摘要嵌入式系统的发展已经进入了飞速发展的时代,嵌入式系统 与一般pc机比起来有着体积小,组成更简单却能够完成想的的任务。在嵌入式操作系统中,主要的是Linux操作系统,它具有对各种设备的支持性,被广泛应用于各个领域。其特点包括软件要求固态化存储,软件代码高质量、高可靠性,系统软件(OS)的高实时性是基本要求。随着信息化,智能化,网络化的发展,嵌入式系统的广泛应用已经涌入到我们日常生活的各个方面。在手机、MP3、MP4、PDA、数码相机
2、、电视机,甚至电饭锅,手表里都有嵌入系统的身影,工业自动化控制、食品仪表、汽车、航空航天等领域更是嵌入式系统的天下。据统计:每年全球嵌入式系统带来的相关工业产值已经超过1万亿美元。随着多功能手机、便携式多媒体播放机、数码相机、HDTV和机顶盒等新兴产品逐渐获得市场的认可,嵌入式系统的市场正在以每年30%的速度递增。目录1设计目的12设计内容13设计要求14设计原理15. 裸机下实现对电压值的采集25.1设计步骤25.2程序设计26硬件设计27软件程序设计57.1主程序流程图及其程序58.实验步骤11心得体会12参考文献131设计目的本设计包括确定控制任务、系统总体设计、硬件系统设计、软件程序的
3、设计等,使我们进一步学习理解计算机控制系统的组成原理、接口电路与应用程序,巩固与综合专业基础知识和相关专业课程知识,提高学生运用理论知识解决实际问题的实践技能。2设计内容把一个电位计输出电压到S3C2440A 的AIN0管脚,电路图如下图所示。应用ADC,编写程序得到其电压值。(1)使用S3C2440实验箱的ADC采集模块;(2)设计相关的程序并加注释;(3)实现对电压值的采集及显示。3设计要求(1)裸机下实现对电压值的采集及显示。(2)在Linux下实现对电压值的采集及显示。4设计原理A/D转换的基本原理:A/D(模/数)转换是指通过一定的电路将模拟量转变为数字量。在实现A/D转换时,主要涉
4、及以下几个参数:分辨率、精度 、转换时间等模拟量可以是电压、电流等电信号,也可以是压力、温度、湿度、位移、声音等非电信号。但在A/D转换前,输入到A/D转换器的输入信号必须经各种传感器把各种物理量转换成电压信号。A/D转换后,输出的数字信号可以有8位、10位、12位和16位等。5. 裸机下实现对电压值的采集5.1设计步骤(1) 单片机采集某一电压值,即经过AD转换,将电压值转换成二进制数的数字量。(2) 经过标度变换,将AD转换成二进制数的数字量变换成带有单位(伏特)的实际电压值。(3) 将计算出的实际电压值送人lcd上显示5.2程序设计汇编程序:AREA INIT,CODE,READONLY
5、 ENTRY CODE32 LDR R0,=0x53000000 MOV R1,#0 STR R1,R0 LDR SP,=1024*4 IMPORT Main B Main END6硬件设计(1)S3C2440介绍S3C2440具有8通道模拟输入的10位CMOS工艺制作的ADC (模数转换器)。2.5MHz转换时钟下最大的转换率在500KSPS。AD转换器支持片上采样和保持功能。3C2440的内核 ARM920T由ARM9TDMI、存储管理单元(MMU)和高速缓存三部分组成。它采用了新的总线架构Advanced Micro controller Bus Architecture (AMBA)。
6、其低功耗、精简、高效,满足对成本和功率要求比较高的产品开发。下图是ARM920T的结构图,以及其系统组成部分的对应功能。S3C2440A的A/D转换器和触摸屏接口电路 (2)S3C2440特征1) 手持设备和通用嵌入式应用的集成系统2) 16/32-位RISC架构和以ARM920T CPU为核心的强大的指令集3) 增强ARM架构的MMU支持WinCE,EPOC32和Linux4) 指令缓存,数据缓存,写缓冲和物理地址TAG RAM性能,以减少主内存带宽和 延迟的效果(3)AD转换程序流程图AD 转换过程:将8路模拟量持续输入ADC0809模拟量输入端IN01T、7。首先将 OE,START,A
7、LE。A,B,C都置0,然后ALK置 1再清零进行转换通道地址的锁存即选择转换通道打开。将START置1再清零,发送一启动脉冲,即启动AD转换。此时转换结束信号EOC变为低电平。查看EOC是否为高电平。为高电平则表示MD转换完毕。等待MD转换完毕后将输出允许信号输入端(0E)置高电平,此时就可将转换的一路数据输入到单片机某一存储空间中。将OE置低电平,即停止ADC0809。 A/D转换程序流程图(4)A/D转换器的选取 转换速度是指完成一次A/D转换所需时间的倒数,是一个很重要的指标。A/D转换器型号不同,转换速度差别很大。通常,8位逐次比较式ADC的转换时间为100us左右。由于本系统的控制
8、时间允许,可选8位逐次比较式A/D转换器。(5)ADC 控制寄存器特征ADC 控制寄存器(ADCCON)是可读/写状态,地址为0x58000000,复位后的值为0x3FC4。ADC 转换数据寄存器0(ADCDAT0)是可读/写状态,地址为0x5800000C,复位后的值不确定(6)ADC驱动程序设计流程 7软件程序设计系统的软件的设计采用的是c语言,对单片机进行编程实现各种功能。 程序是在linux环境下采用keil软件编写的,可以实现对八路数据的采集与处理,能实现对数据、地址的显示.7.1主程序流程图及其程序 主程序流程图测试程序:adc_test.c#include #include #i
9、nclude #include int main(void)int fd,err;int data;fd=open(/dev/s3c2410_adc,O_RDONLY);/打开设备if(fd0)printf(Cant open s3c2410_adc!n);return 0;while(1)if(read(fd,&data,2)/读ad转换的值printf(adc is %dn,data);sleep(1);主程序: adc.c#include /*module_init()*/#include /* printk() */#include /* _init _exit */#include
10、/* file_operation */#include /* copy_to_user, copy_from_user */#include /*class ,class_create ,device_create 等*/#include /* Error number */#include /* mdelay ,ndelay*/#include /* udelay */#include / S3C2410_ADCCON#include /ioremap()#include /clk_get() , clk_enable()#define DRIVER_NAME s3c2410_adcsta
11、tic void _iomem*regs_adc;#define ADCCON (*(volatile unsigned long *)(regs_adc + S3C2410_ADCCON)/ADC control#define ADCDLY (*(volatile unsigned long *)(regs_adc + S3C2410_ADCDLY)/ADC start or Interval Delay#define ADCDAT0 (*(volatile unsigned long *)(regs_adc + S3C2410_ADCDAT0)static int MAJOR_NR = 2
12、33;/* Driver Major Number */static int MINOR_NR = 0;/次设备起始号struct class *my_class;/=/名称:static void initADIO(void)/功能:初始化ADC,配置IO口/参数: 无/返回值: 无/=static void initADIO(void)ADCCON = (0 0) |(0 1)| (0 2)| (0 3) |(49 6) |(1 14);/=/名称:static int GetAD_Enable(void) /功能:采用置位使能方式启动AD转换/参数: 无/返回值: 无/=static i
13、nt GetAD_Enable(void) int i;int val=0;for(i=0;ivoltage=(3.3*value)/1023)*100(为了方便计算放大100倍)temp0 = voltage&0xff;temp1 = (voltage8)&0xff;copy_to_user(buf, &temp, 2); return 1;static int s3c2410_ADC_release(struct inode *inode, struct file *filp) printk(myDriver release called!n);/*释放虚拟地址映射空间*/ iounmap
14、(regs_adc); return 0;/* Driver Operation structure */static struct file_operations myDriver_ADC_fops = .owner = THIS_MODULE,.read = s3c2410_ADC_read,.open = s3c2410_ADC_open,.release = s3c2410_ADC_release,;static int _init myModule_init(void)int re=-1;re= register_chrdev(MAJOR_NR, DRIVER_NAME, &myDr
15、iver_ADC_fops);if(re 0)printk(register char device fail!n);return 0;my_class=class_create(THIS_MODULE,DRIVER_NAME);device_create(my_class,NULL, MKDEV(MAJOR_NR, MINOR_NR), NULL,DRIVER_NAME);printk(register myDriver OK! Major = %dn, MAJOR_NR);return 0;static void _exit myModule_exit(void)unregister_ch
16、rdev(MAJOR_NR, DRIVER_NAME);device_destroy(my_class,MKDEV(MAJOR_NR, MINOR_NR);class_destroy(my_class);module_init(myModule_init);module_exit(myModule_exit);MODULE_LICENSE(GPL);文件:Makefileifneq ($(KERNELRELEASE),)obj-m := adc.oelseKERNELDIR ?=/home/linux-2.6.29PWD := $(shell pwd)modules:$(MAKE) -C $(
17、KERNELDIR) M=$(PWD) modulesclean:rm -rf *.o * core .depend .*.cmd *.ko *.mod.c .tmp_versions.PHONY: clean Endif8.实验步骤(1)编写驱动程序adc.c(2)编写Makefile文件(3)编写应用程序test.c(4)在home目录下建立linuxadc目录,并将adc.c、Makefile、test.c拷贝到该目录下。(5)将XP系统中的D:ARMARM实验箱配套光盘Source中的linux-2.6.29.tar.bz2拷贝到Linux的home目录下,并解压,解压后重命名为lin
18、ux-2.6.29(6)进入linux-2.6.29目录,修改sapp-config文件为.config,再执行make menuconfig命令,不做任何修改,直接保存退出。(7)执行make zImage命令。(8)进入linuxadc目录,执行make命令生成adc.ko文件(9)执行arm-linux-gcc test.c o test命令生成test文件(10)在XP系统下建立超级终端,点击传送发送文件,将生成的adc.ko文件和test文件发送到实验箱中。(11)在超级终端中执行insmod adc.ko命令,加载模块。(12)在超级终端中执行chmod 777 test命令,添加可执行权限。(13)./test,运行应用程序。心得体会回顾起此课程设计,至今我仍感慨颇多,从理论到实践,在这段日子里,可以说得是苦多于甜,但是可以学到很多很多的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论