嵌入式应用设计课程设计报告-linux数据采集课设报告

上传人:aa****6 文档编号:29991548 上传时间:2018-01-26 格式:DOC 页数:15 大小:226KB
返回 下载 相关 举报
嵌入式应用设计课程设计报告-linux数据采集课设报告_第1页
第1页 / 共15页
嵌入式应用设计课程设计报告-linux数据采集课设报告_第2页
第2页 / 共15页
嵌入式应用设计课程设计报告-linux数据采集课设报告_第3页
第3页 / 共15页
嵌入式应用设计课程设计报告-linux数据采集课设报告_第4页
第4页 / 共15页
嵌入式应用设计课程设计报告-linux数据采集课设报告_第5页
第5页 / 共15页
点击查看更多>>
资源描述

《嵌入式应用设计课程设计报告-linux数据采集课设报告》由会员分享,可在线阅读,更多相关《嵌入式应用设计课程设计报告-linux数据采集课设报告(15页珍藏版)》请在金锄头文库上搜索。

1、北 华 航 天 工 业 学 院课程设计报告(论文)设计课题:Linux 系统下系统的数据采集专业班级: 学生姓名: 指导教师: 王达伟 设计时间: 2011 年 12 月 北华航天工业学院电子工程系 嵌入式应用设计 课程设计任务书姓 名: 专 业:电子信息工程班级:指导教师:王达伟职 称:讲师课程设计题目:Linux 系统下系统的数据采集设计要求:(1)根据技术指标确定硬件实现方案,画出系统的电路原理图(2)确定软件流程图,并编写程序(3)在超级终端显示测量电压值(4)提交设计报告技术指标:(1)输入电压范围 0-2.5V(2)电压分辨率 2.4mv所需仪器设备:计算机 嵌入式系统实验箱 虚拟

2、机 vmware 和 Red Hat9成果验收形式:上机验收参考文献:1 孟庆春,牛欣源著. linux 教程.电子工业出版社.2 张玲,周旭著. linux 操作系统原理与应用.西安电子科技大学出版社.3 魏永明,耿岳等译. linux 设备驱动程序.中国电力出版社.时间安排第 17 周到 18 周完成设计题目2指导教师:王达伟 教研室主任:王俊红2011 年 12 月 28 日 内 容 摘 要嵌入式系统是嵌入式计算机系统的总称。Linux是嵌入式操作系统中的一种应用比较广泛的操作系统。嵌入式Linux 是一种适用于嵌入式系统的源码开放的占先式实时多任务操作系统,是目前操作系统领域中的一个热

3、点,其重点与难点是驱动程序的开发。开发嵌人式Linux 下的设备驱动程序,可以更好地利用新硬件特性,提高系统访问硬件的效率,改善整个应用系统的性能。驱动程序修改非常方便,使应用系统非常灵活。Linux的驱动开发中模块方式调试效率很高,它使用insmod 工具将编译的模块直接插入内核,如果出现故障,可以使用rmmod从内核中卸载模块,不需要重新启动内核,这使驱动调试效率大大提高。A/D转换器是模拟信号源和CPU之间联系的接口,它的任务是将连续变化的模拟信号转换为数字信号,以便计算机和数字系统进行处理、存储、控制和显示。本设计是在Linux环境下对S3C2410 芯片的8通道10 位A/D的操作与

4、控制实现数据的转换采集。通过调整三个按钮。采集出的数据会随之变化。索引关键词:嵌入式 Linux 驱动程序 A/D 转换 数据采集 目 录一 概 述 1二 实验原理 1二 方案设计 3三 实验步骤 3 四 程序源代码 6五 结论及体会9 六 参考文献 1011、概述 本课程设计通过编写驱动程序以及测试程序并进行编译,在 Linux 系统下实现模拟数据转换成数字数据并采集。Linux 中的驱动设计是嵌入式 Linux 开发中十分重要的部分,驱动程序的作用是应用程序与硬件之间的一个中间软件层,为应用程序展现硬件的所有功能。Linux 的驱动开发调试有两种方法,一种是直接编译到内核,再运行新的内核来

5、测试;二是编译为模块的形式,单独加载运行调试。模块方式调试效率很高,它使用 insmod 工具将编译的模块直接插入内核,如果出现故障,使用 rmmod 从内核中卸载模块。不需要重新启动内核,这使驱动调试效率太大提高。A/D 转换器是模拟信号源和 CPU 之间联系的接口,它的任务是将连续变化的模拟信号转换为数字信号,以便计算机和数字系统进行处理、存储、控制和显示。在工业控制盒数据采集及许多其他领域中,A/D 转换是不可缺少的。2、实验原理3.1 A/D 转换器 A/D 转换器是模拟信号源和 CPU 之间联系的接口,它的任务是将连续变化的模拟信号转换为数字信号,以便计算机和数字系统进行处理、存储、

6、控制和显示。在工业控制和数据采集及许多其他领域中,A/D 转换是不可缺少的。 A/D 转换器有以下类型:逐位比较型、积分型、计数型、并行比较型、电压频率型,主要应根据使用场合的具体要求,按照转换速度、精度、价格、功能以及接口条件等因素来决定选择何种类型。常用的有以下两种: 1、双积分型的 A/D 转换器 双积分式也称二重积分式,其实质是测量和比较两个积分的时间,一个是对模拟输入电压积分的时间 T0,此时间往往是固定的;另一个是以充电后的电压为初值,对参考电源 Vref 反向积分,积分电容被放电至零所需的时间 T1。模拟输入电压 Vi 与参考电压 VRef 之比,等于上述两个时间之比。由于 VR

7、ef、T0 固定,而放电时间 T1 可以测出,因而可计算出模拟输入电压的大小(VRef 与 Vi 符号相反 )。由于 T0、VRef 为已知的固定常数,因此反积分时间 T1 与输入模拟电压 Vi 在 T0 时间内的平均值成正比。输入电压 Vi 愈高,VA 愈大,T1 就愈长。在 T1 开始时刻,控制逻辑同时打开计数器的控制门2开始计数,直到积分器恢复到零电平时, 计数停止。 则计数器所计出的数字即正比于输入电压 Vi 在 T0 时间内的平均值,于是完成了一次 A/D 转换。由于双积分型 A/D 转换是测量输入电压 Vi 在 T0 时间内的平均值,所以对常态干扰(串摸干扰)有很强的抑制作用,尤其

8、对正负波形对称的干扰信号,抑制效果更好。双积分型的 A/D 转换器电路简单,抗干扰能力强,精度高,这是突出的优点。但转换速度比较慢,常用的 A/D 转换芯片的转换时间为毫秒级。例如 12 位的积分型 A/D 芯片 ADCETl2BC,其转换时间为 lms。因此适用于模拟信号变化缓慢,采样速率要求较低,而对精度要求较高,或现场干扰较严重的场合。例如在数字电压表中常被采用。2、逐次逼近型的 A/D 转换器 逐次逼近型(也称逐位比较式)的 A/D 转换器,应用比积分型更为广泛,其原理框图如图 1 所示,主要由逐次逼近寄存器 SAR、D/A 转换器、比较器以及时序和控制逻辑等部分组成。它的实质是逐次把

9、设定的 SAR 寄存器中的数字量经 D/A 转换后得到电压 Vc 与待转换模拟电压 V。进行比较。比较时,先从SAR 的最高位开始,逐次确定各位的数码应是“1”还是“0” ,其工作过程如下:转换前,先将 SAR 寄存器各位清零。转换开始时,控制逻辑电路先设定SAR 寄存器的最高位为“1” ,其余位为“0” ,此试探值经 D/A 转换成电压 Vc,然后将 Vc 与模拟输入电压 Vx 比较。如果 VxVc,说明 SAR 最高位的“1”应予保留;如果 Vx#include #include #include /* printk() */#include #include #include #incl

10、ude #include #include #undef DEBUG#ifdef DEBUG#define DPRINTK(x.) printk(_FUNCTION_(%d): ,_LINE_);printk(#x);#else#define DPRINTK(x.) (void)(0)#endif#define START_ADC_AIN(x) ADCCON = PRESCALE_EN | PRSCVL(255) | ADC_INPUT(x) ; ADCCON |= ADC_START; #define DEVICE_NAME sinosys /*设备的目录名为 sinosys*/#defin

11、e adc_MAJOR 254 /*主设备号为 254*/#define adc_MINOR 0 /*从设备号为 0*/#define CHANNEL _IOW(p, 0xa2,int) /*定义 ioctl 号*/#define MAX_CHANNEL 2 /*最大的通道数*/ static struct semaphore adc_lock; /*锁*/static wait_queue_head_t adc_wait; /*等待队列*/static unsigned int adc_ain; /*当前通道*/7static void adcdone_int_handler(int irq

12、, void *dev_id, struct pt_regs *reg)DPRINTK(adcdone_initn);wake_up( /*唤醒等待队列*/*adc 的原始读函数*/int s3c2410_adc_read(int ain)int ret = 0;if (down_interruptible(&adc_lock) /*加锁*/return -ERESTARTSYS;START_ADC_AIN(ain); /*启动 ADC 转换过程*/sleep_on_timeout( /*把程序加到等待队列中 */*超时值为 HZ/100(10ms)*/ret = ADCDAT0 ; /*苏醒

13、到代表 ADC 转换结束,以读取 ADC 的值*/up( /*解锁*/adc_wait = NULL;DPRINTK(AIN%d = 0x%04x, %dn, ain, ret, ADCCON return (ret /*返回 ADC 中的转换值*/static ssize_t adc_read(struct file *filp, char *buffer, size_t count, loff_t *ppos)int retval ;retval = s3c2410_adc_read( adc_ain ); /*调用 ADC 原始读函数*/DPRINTK(The value of chan

14、nel %d : %xn, adc_ain, retval);retval = put_user(retval, (int *)buffer); /*把数据传回用户空间*/if (!retval)retval = sizeof(unsigned long);return retval;/*IO 口控制函数*/static ssize_t adc_ioctl(struct inode *inode, struct file *file,unsigned int cmd, unsigned long arg)switch(cmd)case CHANNEL:DPRINTK(Change to ADC channel %dn,(int)arg);if (int)arg #include #include #include #include #define CHANNEL _IOW(p, 0xa2,int)int main()int fd;int result;int i,j;fd=open(/dev/sinosys/adc,O_RDWR);

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 其它办公文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号