版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、江西理工大学应用科学学院嵌入式系统开发技术课程设计专 业: 电子信息工程 班 级: 电信121 学 号: 姓 名: 贺佳 设计题目:Linux温度传感器驱动程序 2015年11月24日姓 名贺佳班 级电信121学 号课设题目基于嵌入式Linux温湿度传感器驱动程序指导教师王苏敏评分项目满分分值得分设计文档(30分)文档格式封面2页面布局4目录格式3图表质量2页眉页脚2文档内容内容完整性6内容逻辑性5内容正确性6程序代码(30分)程序功能15编程规范7编程文档8答辩(20分)课题陈述7问题答辩10是否超时3考勤(20分)20总评成绩指导教师评语签名: 年 月 日教研室意见签名: 年 月 日基于嵌
2、入式Linux温湿度传感器驱动程序2.需求分析在工业控制和工业生产领域中, 传感器对于工业控制和生产环境的监控作用不言而喻。传统的传感器监控系统大都采用单片机控制, 其监控的准确度和实时性不太令人满意。本文寻找到一套切实可行的传感器设计方案,其利用温湿度传感器芯片,基于PXA310硬件平台和操作系统,能有效监控现场温湿度Linux变化。在周围环境发生变化, 不能满足工作要求时,可以获取监控数据并提出预警, 提高生产和工作环境检测的可靠性及实时性。温度设计传感器电路设计比较了一些传感器应用设计方案后 ,选用SHTl O 芯片为嵌入式温湿度传感器的 核心部件。它外围电路简 便,相比其他传感器芯片(
3、DSl 8820)有其独到优势1。 STHlO 每秒可进行 3 次温湿度测量 ,数据精度 14 bit 并且工作稳定。其测量采用 CMOSens 专利2 ,所以在 测量效率和精度上要好于 。 采用 单单、线控制方案( l-wire) ,大约每秒测量一次,9 位数 字式温度数据;只提供温度测量需求概述SHTlO 是一款高度集成的温湿度传感器芯片 ,提供全量程标定数字输出 。传感器包括一个电窑 性聚合 体湿度敏感元件和一个用能隙材料制成的温度 敏感元 件,他们与 个 14 位 AI D 转换器以及一个串行接 口电路设计在同一个芯片上面。其通过标定得到校 准 系数以程序形式储存在芯片 OTP 内存中
4、,并利用两 线制串行接口与 内部电压调整 ,使外国系统集成变得 快速而简单。其在生产环境检测要 求严格时,就显得精度和功能有些不足.SHTl O 芯片 电源 3.3V 。传感器上 电后,等待 门ms 来完成 “休眠” 状态。通信复位和启动传输命 令后,发送 组测量命令( 表示相对湿 度 RH, 门 表示温度 T) ,控制器要等待测 量结束。这个过程需要大约 ll/5 5 / 210ms ,分别对 应 8/12 /14bit 测量。SHTlO 通过下拉 DATA 至低 电平,表示测量结束。控制器触发 SCK 时钟前,必须等待这个 “数据备妥” 信号才能将测量数据正确读 入。 测量和通讯结束后 ,
5、SHTlO 自动转入休眠模式。数据 传送采用两线制串行接 口(与 12( 接口不兼容)。3.总体设计SHTl O 采用 LCC 封装,其DATA 和 SCK 号 脚分别连接到 PXA310 的 GP1078 和 GP.气 79。PXA3 lO通过模拟时序方式实现对外 国温湿度传感器的控制和 数据读写操作。由于 SHTl O 对于温湿度灵敏度很高 ,在系统集成时应尽量远离发热源(如 MCU、LCD 等), 否则测量结果会有所偏离 ;为 SHTlO 布线时,周围应 尽量铺地减少周围器件对其 的干扰。SHTlO 电路原理 图如图 1 所示。d三KSOP.豆雨雨4”tJV、iF G图 1 SHTl O
6、 电路原理图Linux温湿度传感器驱动程序 实现单片机控制的传感器设备中 ,单片机通常是单线 程运行。在进行温湿度测量时 ,单片机需要等待测试 结果返回,其方法阻碍了其他测试和操作的罔步执行。 在嵌入式 LimX 系统中,驱动程序将测试任务送入任 务队列,交出CPU 控制权,继而进行其他实时任务运 行,待内核空闲再进任务队列完成传感器的测量 , 以此提高系统执行的效率和实时性。Linux 温湿度传感器设备加载 温湿度传感器使用Linux 内核的 Miscdevice 数据结构在驱动程序初始化时将设备注册到内核 。 Miscdevice 是字符设备 ,其主设备号为 10,设备及 设备接口函数定义
7、如下所示。static struct file_operations shtl O_fops = owner:THIS_MODULE,/ 所 属 的 设 备 模块read: shtl O_ read, /数据读取操作static struct miscdevice my_shtl O =.minor=4, /设备号为4 .name=SHTl O /设备名称为SHTl O.fops=&shtl O_fops, /设备可用相关操作驱动程序加载设备时将调用 内核的注册函数。在Linux2.4 和 2.6 内核申,几乎所有 Linux 驱动程序都依靠如下函数加载模块.static int init s
8、htl O_init(void)misc_register(&my_shtl O); /注册设备SHTl Oreturn O; /返回成功操作0驱动程序初始化完成后 ,上层应用程序可以调用 shtl O_fops 中的 shtl O_read 函数进行温湿度的读 取操作。Linux 温湿度传感器设备操作进行数据读取前,首先要在驱动程序 甲开辟 4 个 字节的数据空间,用于存放温度和湿度测量值 。这里 定义全局变量数据缓冲区为 unsigned char bu例。读取 SHTl O 温湿度数据前 ,需要进行端 口初始化 和 SHTlO 复位操作,然后将任务送于任务队列 并阻塞 线程SJ ,当任务
9、完成返回后再唤醒线 程,将读到数据 传递给上层应用程序做进一步处理 。程序流程图和实 现函数如图 2 所示。 进入任务队列完成传 感器测量,唤醒线程 内核空间数据送往用户空间处理 图 2驱动程序流程图static int measure_ shtl O(u8 checksum,u8 mode)unsigned char error=O; 设备无应答 ,标识清 Oint i=O; 用来指示数据存放位置start_trans(); 模拟时序,启动传输switch(mode) 选择 测 量 方式case TEMP:error+ =write_ byte(MEASURE_ TEMP);i= l;bre
10、ak; 测量温度 ,指示存放位置caseHUMl:error+=wite_byte(MEASURE_ HUMI);break; 测量湿度while() 等待 SHTlO 应答 ,退出if(read_data0=0) break;if(i) 查看 i,存放数据bufO=read_byte(ACK); 将测量温度数据 存放于bufl =read_byte(ACK); / /bufO和 buf1,并应答elsebuf2=read_byte(ACK); 将测量湿度数据 存放于buf3=read_byte(ACK); / / buf2矛日 buf3并应答 最后读效验 ,无应答checksum= read
11、_byte(noACK);return error; 返回错误标识上 述函数中 start_trans; write_byte; read_data;read_byte 分别利用 PXA310 sl脚模拟时序 完成启动传输、写字节,读一位数据和读字节的操作。staticssize_tsht lO_read(structfile吁ile,char *buffer,size_t count,loff_t *ppos)porUnit(); 初始化 PXA310 端口reset_sht100; 复位 SHTl Otasklet_schedule(&shtl O_tasklet); 将任务送于任务队列w
12、ait_for_completion(&comp); 阻塞线程 ,等待完成copy_to_user(buffer, (char *)&buf,sizeof(buf); 将读到的数据返 回用户return O; 空间,退出内 核 tasklet_sched ule() 调 度 执 行 指 定 的tasklet ,在获得运行机会之前 只会调度一次 ,如果在 运 行 时被 调 度 ,则 完 成 后 会 被 再 次 运 行 6) 0 wait_for_completion ()这个函数进行个不可打断 的等待,如果有代码调用它 ,并且没有完成这个任务 , 结果会是一个不可杀死的进程 。copy_to_u
13、ser ()将内 核空间数据传向上层用户空间 ,并让上层测试程序做 进一步处理。 Linux 温湿度传感器设备阻塞操作 由于温湿度传感器测量需要一 定时间 ,为提高系统运行效率和实时性 ,在驱动程序中阻塞线程 ,交出 内核控制权 ,等待操作完成后唤醒线程 ,提高系统利 用率。complete()在函数申就是唤醒一个等待 的读取 线程。任务队列实现函数如下所示 。static int shtl O_dotasklet(void)unsigned int eror=O; 无应答 ,标识清 O unsigned char checksum=O; 效验清 O error+=measure_shtl O
14、(checksum,TEMP);error+=measure_shtl O(checksum, HUMI); complete(&comp); 完成测量,唤醒线程if(error! =0) 测量有误 ,提示 printk(”wrong in 1easureerror=%dn”,error);elseprintk(”data correct!n”); 测量无误输出提示return error; 返回错误标识Tasklet 可以使测量操作在系统负荷不重时被调用,或是被立即执行,但始终不会晚于下一个 CPU clock。 Tasklet 始终在中断期间运行 ,并且在调度他的同 CPU 上运行。对比单
15、片机系统,在单线程情况下,一般在 shtl O_read()中调用 2 次 measure_shtl 0()来等 待测量完成 ,测量效率依赖 2 次测量消耗的时间;但在Linux 驱动程序中,使用 Tasklet 方式操作,2 次测量过程不会对其他线程产生影响,在有其他实时事件需要 及时处理时(如网络,视频),可以更有效提高驱动运行效率,降低对其他实时处理产生的影响。温湿度传感器测试途径与效率验证 在测试程序中 ,考虑上述测量环境下温湿度之间的非线性,调用驱动程序 的 shtl O_read 函数将读到 的温湿度数据返回上层测试程序进行浮点数运算 ,将 计算值通过串 口输出,达到测试验证的 目
16、的。测试程 序的实现如下所示 。static void calc_sht l O(float*temp)float rh =*h u mi: float t=*tem p; float rh _l ine float rh_truet=t*d 2 +d l ; /温度转换公式rh _li ne=C3*rh*rh +C2*rh +Cl ; /相对湿度转 换公式rh_t rue =(t甲2 5)*(t l +t2*rh)+ rh_l ine /相对湿度温度补偿 if(rh_true 1OO)rh_tru e= l 00; /超出范围 if(rh_trueO. l )rh_true=0.1 ;pri
17、ntf (” Hu mid ityis: %.2 RH n,rh _true); pri ntf(”Tem peratu re is: %.2f C n”,t);i nt mai n(i nt argc, char *argv) /主函数i nt fd;float tem p, h u mi; /温湿度数据char buffer4; /数据缓冲fd = open(” /dev/ sht l O, O);/打开文件if (fd 0) /打开失败 ,退出perror(pen device / dev/ sht l O); exit( l );read(fd,buffer,sizeof(buffer
18、); /读取 温 湿 度值tem p=(float)(bufferO 8)1 bufferl ); h u mi =(float)(buffer2 %dn”,error);elseprintk(”data correct!n”); 测量无误输出提示return error; 返回错误标识static void calc_sht l O(float*temp)float rh =*h u mi: float t=*tem p; float rh _l ine float rh_truet=t*d 2 +d l ; /温度转换公式rh _li ne=C3*rh*rh +C2*rh +Cl ; /相对湿度转 换公式rh_t rue =(t甲2 5)*(t l +t2*rh)+ rh_l ine /相对湿度温度补偿 if(rh_true 1OO)rh_tru e= l 00; /超出范围 if(rh_trueO. l )rh_true=0.1 ;printf (” Hu mid ityis: %.2 RH n,rh _true); pri ntf(”Tem peratu re is: %.2f C n”,t);i nt mai n(i nt argc, char *argv) /主函数i nt fd;float tem p, h u mi; /温湿度数据ch
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2023年锡林郭勒盟辅警招聘考试题库带答案详解(完整版)
- 2024年宣城辅警协警招聘考试真题附答案详解(考试直接用)
- 2024年大庆辅警协警招聘考试真题含答案详解(完整版)
- 2024年定西辅警招聘考试真题带答案详解
- 2023年鹤岗辅警招聘考试真题及1套完整答案详解
- 2023年荆州辅警协警招聘考试真题及答案详解(易错题)
- 浙江省杭州市萧山三中2025年高二化学第一学期期末质量跟踪监视试题含解析
- 陕西省西安一中2025年高二化学第一学期期末质量检测模拟试题含解析
- 陕西省重点初中2025年数学高二上期末检测试题含解析
- 吉林省乾安七中2025-2026学年生物高一上期末联考试题含解析
- DBJ50-T-306-2024 建设工程档案编制验收标准
- 华为驻外员工管理办法
- 三基工作培训课件
- (2025年)福建省福州市【辅警协警】笔试模拟考试含答案
- 关节痛健康宣教
- 线上销售协议书范本模板
- 人教版九年物理实验目录及器材
- 黔南布依族苗族自治州矿产资源总体规划(2021-2025年)
- 幼儿园安全施工管理制度
- 集团公司资金归集管理制度
- 摄影专业职业生涯规划
评论
0/150
提交评论