(控制理论与控制工程专业论文)嵌入式轴承检测系统arm端软件实现.pdf_第1页
(控制理论与控制工程专业论文)嵌入式轴承检测系统arm端软件实现.pdf_第2页
(控制理论与控制工程专业论文)嵌入式轴承检测系统arm端软件实现.pdf_第3页
(控制理论与控制工程专业论文)嵌入式轴承检测系统arm端软件实现.pdf_第4页
(控制理论与控制工程专业论文)嵌入式轴承检测系统arm端软件实现.pdf_第5页
已阅读5页,还剩68页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

浙江大学硕土学位论文 摘要 本文的主要研究内容是嵌入式轴承检测系统a r m 端的软件设计与实现。论 文介绍了轴承检测系统的背景,以及目前国内外的发展状况;说明了本文所采 取的基于删和d s p 双核的嵌入式轴承检测方案的优势。 论文的重点内容是基于l i n u 】【操作系统的应用软件设计。论文从分析整个 软件的功能框架入手。根据这个框架,a r m 端的软件需要涉及到三个层次,即 驱动开发、应用程序编程以及图形用户界面设计。驱动程序部分,本文首先介 绍了该如何实现字符型设备驱动,详细阐述了a t 2 4 c 2 5 6 的i i c 器件驱动的实现 过程。应用程序采用的是多进程中嵌套多线程的机制。各个进程之间交互的合 理性和及时性等是软件性能好坏的关键因素。文章对其中的通信机制包括消息 队列和共享内存的实现做了详细的介绍。文章还详细介绍了如何实现目标机与 服务器之间的s o c k e t 编程,完成联网功能。图形用户界面编程也是非常重要 的一部分,本章详细地介绍了整个设计过程,从开发环境的建立、编程及到根 文件系统的制作完成。 最后,文章对嵌入式轴承检测系统的改进与升级做了展望。 关键字:轴承检测,嵌入式,a r m ,l i n u x 、s o c k e t ,g u i 浙江大学硕士学位论文 第1 章嵌入式轴承检测系统介绍 第一章嵌入式轴承检测系统介绍 【摘要】本章主要介绍了轴承检测系统的背景以及轴承检测系统国内外发展的现状。 最后,对为什么我们的轴承检测系统要采用嵌入式系统做出了解释。 1 1 轴承检测系统背景 现在的工业产品很多都是由许许多多的零部件组成,结构越来越复杂,功 能也越来越完善,各部分紧密的耦合,协同工作,一个零件的失效或者故障都 可能引起整个系统的崩溃,造成重大的事故。研究并应用设备状态监测、故障 诊断、状态预测技术不仅可以早期发现故障,避免恶性事故的发生,还可以从 根本上解决目前设备定期维修中维修不足和维修过剩的问题。 旋转机械是设备状态监测与故障诊断工作的重点,而旋转机械的故障有相 当大比例与滚动轴承有关。滚动轴承是机器的易损件之一,据不完全统计,旋 转机械的故障约有3 0 是因滚动轴承引起的,由此可见滚动轴承故障诊断工作 的重要性。 最初的轴承故障诊断是利用听棒,靠听觉来判断。训练有素的人员凭经验 能诊断出刚刚发生的疲劳剥落,有时甚至能辨别出损伤的位置,但毕竟影响因 素较多,可靠性较差。 继听棒、电子听诊器之后,在滚动轴承的状态监测与故障诊断工作中引入 了各种测振仪,用振动位移、速度和加速度的均方根值或峰值来判断轴承是否 有故障,减少了监测人员对经验的依赖性,提高了监测诊断的准确性,但仍很 难在故障初期及时做出诊断。 随着对滚动轴承的运动学、动力学的深入研究,对轴承振动信号中的频率 成分和轴承零件的几何尺寸和缺陷类型的关系有了比较清楚的了解,加之快速 傅里叶变换技术的发展,开创了用频域分析方法来检测和诊断轴承故障的新领 域。其中最具代表性的有对钢球共振频率的研究,对轴承自由共振频率的研究, 对滚动轴承振动和缺陷、尺寸不均匀及磨损之间关系的研究。1 9 6 9 年,h l b a l d e r s t o n 根据滚动轴承的运动分析得出了滚动轴承的滚动体在内外滚道上的 通过频率和滚动体及保持架的旋转频率的计算公式,这些研究奠定了这方面的 浙江大学硕士学位论文第l 章嵌入式轴承检测系统介绍 理论基础。目前已有多种信号分析仪可用来对滚动轴承进行故障诊断,美国恩 泰克公司根据滚动轴承振动时域波形的冲击情况推出的“波尖能量”法及相应 仪器,对滚动轴承的故障诊断非常有效。还有多种信号分析处理技术用于滚动 轴承的状态监测与故障诊断,如频率细化技术、倒频谱、包络线分析等。在信 号预处理上也采用了各种滤波技术,如相干滤波、自适应滤波等,提高了诊断 灵敏度。 除了利用振动信号对轴承运行状态进行诊断监测外,还发展了其他一些技 术,如光纤维监测技术、油污染分析法( 光谱测定法、磁性磁屑探测法和铁谱 分析法等) 、声发射法、电阻法等【1 。 1 2 轴承检测系统的发展现状 目前,滚动轴承的性能质量主要还是通过振动测量来评定的。理论和实践 证明,滚动轴承的振动烈度对轴承零件的加工质量十分敏感。在一般的轴承振 动测量仪上,通过测量轴承的振动烈度来综合评价轴承的产品质量,效果挺好。 目前国内有一套滚动轴承振动测量标准:滚动轴承振动( 速度) 测量方法 ( j b t5 3 1 3 9 1 ) ,滚动轴承振动( 加速度) 测量方法( j b t5 3 1 4 9 1 ) , 滚动轴承深沟球轴承振动( 加速度) 技术条件( j b t7 0 4 7 9 3 ) ,深 沟球轴承振动( 加速度) 技术条件( j b 厂r 5 0 0 9 9 4 ) 。 1 2 1 国内技术现状 振动的度量在数学上可以用速度、加速度来表示,相对来说可以设计出速 度型和加速度型振动测量仪,我国轴承工业界在8 0 年代初期研制开发了加速度 型和速度型两大类轴承振动测试仪。速度型传感器由于其频响达到1 5 k h z ,基 本覆盖了轴承的振动频谱范围,所以应用比较普遍。加速度计型传感器就其本 身来说频响可以大于1 5 k ,但是出于使用中经常要加入弹簧和传振杆来构成传 感系统,其频响往往低于6 k h z ,不能覆盖轴承的全部振动频率,但是这种传 感器简单,不易损坏,在实际中使用也比较多【4 】。 目前国内儿种普遍使用的轴承振动测试仪主要存在以下的一些不足: 浙江大学硕上学位论文第】章嵌入式轴承检测系统介绍 1 几乎都是单机版,工人劳动强度大。一个操作工在天8 小时工作条件下要 对6 0 0 0 个轴承进行测试, :人要完成上料、看仪表、听异音、看波形等一 系列工作,而且基本上要求在1 0 秒内完成,劳动强度非常大,容易误判。 2 对轴承故障的判断方法是通过操作工用耳机听异音的方式进行判别,方式相 对落后,而且厂家也不能对采购商提供具体每个轴承的数据。 需要特别指出的是,由于工人劳动强度很大,加上综合素质参差不齐,而且 工人是通过听异音的方式判别轴承质量好坏,这些因素累加起来,对轴承质量 好坏的判别不能提供很高的保证。 1 2 2 国外技术现状 1 9 6 6 年,全球主要滚动轴承生产商之一,瑞典s k f 公司在多年对轴承故障 机理研究的基础上发明了用冲击脉冲仪( s h o c k p u l s e m e t e r ) 检测轴承损伤,它 将滚动轴承的故障诊断水平提高了一个档次。而后,几十家公司相继安装了大 批传感器用于长期监溯轴承的运转情况,在航空飞机上也安装了类似的检测仪 器。 1 9 7 6 年,日本新日铁株式会社研制了m c v 系列机器检测仪( m a c h i n e c h e c k e r ) ,可分别在低频、中频和高频段检测轴承的异常信号。同时推出的还 有油膜检查仪,利用超声波或高频电流对轴承的润滑状态进行监测,探测油膜 是否破裂,发生金属间直接接触。1 9 7 6 1 9 8 3 年,日本精j 1 公司( n s k ) 研制出 了n b 系列轴承监测仪,利用1 1 5 k h z 范围内的轴承振动信号测量其r m s 值 和峰值来检测轴承故障。由于滤除了低频干扰,灵敏度有所提高,其中有些型 号的仪器仪表还具有报警、自动停机功能。 国外现在已经开始尝试使用全自动的测振仪,但是在最后的 = :序中还是要 有手工的参与,比如对一些检测参数设得非常严格,通过自动检测可以将优等 品中的一大半挑出来,再用手工对不合格轴承进行筛选,这样可以提高一定的 效率。不过,圈外也仍然停留在p c 机单机版的层次。 浙江大学硕士学位论文 第l 章嵌入式轴承检测系统介绍 1 2 3 我们的轴承检测系统采用的算法与技术 2 0 0 5 年5 月上海举办了世界轴承检测博览会,我们专程前去参观和学习。 在总结分析了国内外目前的轴承检测系统的特点的基础上,提出了我们这套富 有竞争力的方案。我们的系统的优势主要体现在以下几个方面: 1 、成本优势。 在轴承展上,其它公司推出的轴承检测系统一套是2 5 万台。据初步估计, 我们自主开发的轴承检测系统的市场价至少可以低5 万元每台,非常有竞争力。 2 、界面操作简单,使用方便。 我们的轴承检测系统设计的界面非常简洁明了,操作方便,友好。在本论 文第五章将详细介绍g u i 的设计与实现。 3 、效率高、效果好。 我们所采用的算法,经过测试,效果是非常理想的。 4 、专用性,扩展灵活性大,维护方便等。 我们的轴承检测系统采用基于a r m 和d s p 的双核嵌入式平台。其中的 a r m 芯片为s 3 c 2 4 1 0 ,d s p 芯片为t m s 3 2 0 6 7 1 3 。核心算法为共振解调法。 a r m 作为控制器,负责向d s p 发出计算指令、接受并可视化显示d s p 的 检测结果数据,在液晶屏上以波形和参数的形式显示检测结果便于观测与诊断。 a r m 还通过i 0 扩展,模拟p l c 的功能,控制机械的开关动作。 d s p 作为下位机,充分发挥了其处理速度快,计算能力强的优势,专门负 责轴承检测算法处理。它根据a r m 端指令,处理从信号聚集模块获得的数据。 并把处理结果送a r m 端显示。 下面简要介绍共振解调算法的基本思想。 在轴承内圈在随轴旋转的过程中,与滚子直接接触,并通过滚子与外圈接 触。在正常工作情况下,振动信号应该是平稳的。当轴承内圈或滚子发生故障 时,如磨损、裂痕等,则在旋转过程中当接触到故障部位时,势必会给系统( 轴 承和测振装置) 带来一个激振力,由于时问很短,可近似认为是脉冲力,又由 于旋转的缘故,所以这个脉冲力是周期性的。我们对共振信号进行滤波,滤波 中心频率应该选择为固有频率,这样就得到个调制的信号。对该信号进行包 络检波,得到的低频包络信号就是故障相关信号,这时对包络信号进行功率谱 4 浙江大学硕士学位论文第l 章嵌入式轴承检测系统介绍 p a l mo s 是种3 2 位的嵌入式操作系统,用于掌上电脑。它运行在一个抢 占式的多任务内核之上,同一时刻用户界面仅仅允许一个应用程序被打开,与 同步h o t s y n c 结合可以使掌上电脑与p c 上的信息实现同步,把台式机的功能 扩展到手掌上。与其他嵌入式操作系统相比,p a l m 具有更大的灵活性和移动性, 是一款非常流行的掌上电脑操作系统。 6 ) q n x 这是一款实时操作系统,广泛应用于自动化、控制、机器人科学、电信、 数据通信、航空航天、计算机网络系统、医疗仪器设备、交通运输、安全防卫 系统、p o s 机、零售机等任务关键型应用领域。q n x 的体系结构决定了它具有 非常好的伸缩性,用户可以把应用程序代码和q n x 内核直接编译在一起,使 之为简单的嵌入式应用生成一个单一的多线程映像。它也是世界上第一个遵循 p o s i x l 0 0 3 1 标准从零设计的微内核,因此具有非常好的可移植性。 由上文的介绍可知,嵌入式操作系统种类很多,有些是免费开源的,而有 些功能和技术支持齐全,但使用价格十分昂贵;有些是通用型的操作系统,而 有些适用于特定的应用场合。在如此多的嵌入式操作系统中,我们在选择采用 具体哪一种嵌入式操作系统时,在综合参考了以下几条原则后,我们决定采用 l i n u x 操作系统。 系统初期丌发成本 开发周期 市场进入时间以及技术支持 可移植性 可利用资源 系统定制能力 1 4 论文结构安排 本文第一章首先介绍了嵌入式轴承检测系统的背景以及嵌入式系统的基本 知识。第二章主要介绍了系统软件框架,同时,对系统所使用的硬件资源也做 了简单的描述。文章的主体部分是第三、第四、第五和第六章。在第三章中, 详细的阐述了如何编写字符型i i c 设备驱动程序。第四章则给出了应用程序主 浙江大学硕士学位论文 第l 章嵌入式轴承检测系统介绍 体框架的设计与实现,以及所采用的主要机制。第五章详细介绍了g u i 的环境 的建立以及编程实现。第六章介绍了网络s o c k e t 编程是如何实现的。文章的 星后一章,是对本文的总结以及一些展望。 浙江大学硕士学位论文第2 章系统框架介绍 2 3 2 系统软件开发模式 嵌入式软件开发与p c 平台上的软件,f 发模式有很大的不同。嵌入式系统由 于本身的特点,软硬件资源没有p c 平台那么丰富,嵌入式设备上没有功能完 善的继承开发环境和开发工具。所以,我们不得不采用“目标机( 1 h 昭e t ) - 宿 主机( h o s t ) ”的开发模式,如图2 3 所示。在开发过程中,至少需要两台设备 1 1 4 】:目标机和宿主机。进行调试和功能模拟的计算机平台,称为宿主机。而待 开发的硬件平台则称为目标机或目标板。 r s 2 3 2 蚓23 宿主机目标机开发模式 嵌入式系统在考虑软件的功能时,主要工作是软件的规划设计和操作系统 的裁剪。在软件编码和操作系统裁剪完成后,还需要在与嵌入式设备有相同的 c p u 体系结构的平台上( 或虚拟设备平台上) 完成远程调试和功能模拟。只有 通过调试,才能将操作系统和应用软件移植到嵌入式平台上,完成嵌入式应用 发布。 在宿主机上完成软件编辑,并完成调试后,交叉编译生成针对目标平台的 代码,通过网络、u s b 或者r s 2 3 2 串口将代码传输并装载到目标板上。 上面提到的交叉编译方式,是指为了使裁剪后的嵌入式系统以及相应的应 用软件能够在目标板上运行,在进行移植前,必须在宿主机上建立与目标机c p u 体系结构相匹配的编译环境。 上面已经提到过,嵌入式系统由于其本身的特点,软硬件资源比较匮乏。 所以我们不得不借助宿主机,进行远程调试,如图2 4 所示。远程调试是一种 允许调试器以某种方式控制目标机上被调试进程的运行方式,并具有查看和修 0 黝l 浙江大学硕士学位论文第2 章系统框架介绍 改目标机上内存单元、寄存器以及被调试进程巾变量值等各种调试功能的调试 方式。调试器是一个单独运行着的进程。在嵌入式系统中,调试器运行在宿主 机的通用操作系统上,被调试的进程运行在目标机的嵌入式操作系统上,调试 器和被调试进程通过串口或者网络进行通信,调试器可以控制、访问被调试进 程,读取被调试进程的当前状态,并能够改变被调试进程的运行转态。 嵌入式系统的交叉调试可分为硬件调试和软件调试两种。硬件调试需要使 用仿真调试器的使用仿真器协助调试过程,硬件调试器是通过仿真硬件的执行 过程,让开发者在调试时可以随时了解到系统的当前执行情况。目前嵌入式系 统开发中常用到的硬件调试器是r o m m o l l i t o r 、r o me m u l a t o r 、i n c i r c 血 e m u la _ t o r 和i n c i r c u i td e b u g g e r 。而软件调试则使用软件调试器完成调试过程。 通常要在不同的层次上进行,有时需要对嵌入式操作系统的内核进行调试,又 有时则只需调试嵌入式应用程序就可以了【1 7 】。 宿主机系统目标机系统 调试目标 l t 通信通道 调试器 调试服务器 图2 4 远程调试模式 2 3 3 嵌入式轴承检测系统的软件开发环境 我们选定的目标机是基于s 3 c 2 4 1 0a r m 9 处理器的开发板,在开发板上移 植了内核版本为2 4 1 8 的l i n u x 操作系统,另外还包括内嵌q t o p i a 链接库的根 文件系统。 浙在大学硕士学位论文 第2 章系统框架介绍 在宿主机的选择上满足两个基本条件:一是操作系统的类型和内核版本要 尽量与目标机保持一致,这样可以避免出现在宿乇机上开发并调试通过的应用 程序移植到目标板上后因内核版本不同而出现不兼容的情况;二是宿主机上的 各种开发与调试功能软件要齐全,因为目标机上的应用软件的开发与调试都是 在宿主机上进行的。 在实际开发中,由于目标机使用的是l i n u x 系统,所以宿主机也采用l i i l u x 系统,但是文件传输与烧写工具、代码编辑工具以及串口调试工具都是运行在 、矾n d o w s 系统上的,这使得宿主机上的开发过程变得比较复杂,在l i n l l ) 【上编 辑完代码,编译完成后,得切换到w i n d o w s 环境进行烧写和调试。 针对这个问题,通常的解决方案是: 方案之一是,用两台计算机作为开发平台,分别运行l i 硼x 和w i n d o w s 操 作系统,然后通过网络将两个开发平台联系在一起。这种方案的优势是平台独 立性好,两个平台互不干涉,可以同时进行编译、烧写调试,特别是在编译根 文件系统和各种较大的工具链接库时,独立的l 抽u x 平台下的编译速度较快。 方案之二,是在近几年计算机软硬件技术迅速发展之后出现的,即只有 台运行l i n u x w i n d o w s 操作系统的计算机,然后再上面使用对应操作系统版本 的w m w a r e 或者v i m l a lp c 等第三方虚拟机软件,然后再虚拟机平台上可以再 安装一个虚拟的w i n d o w “l i n u x 操作系统甚至更多。 采用第二种方案,节省了开发硬件资源和网络资源,但是与第一种方案相 比,由于在一台计算机上同时运行多个操作系统,如果计算机硬件资源特别是 主频和内存资源有限的话,运行速度会受到很大的影响。特别是在l i n u x 虚拟 机下编译可执行文件或者链接库时,整个主机的处理速度都会慢下来,影响主 机w i n d o w s 平台上的操作。但足随着计算机硬件的发展,目前的主流计算机配 置,能够流畅的运行虚拟机系统。 由于实验室的计算机比较宽裕,所以我们采用的第一种方案,在其上安装 了r e d h a tl i n u x 7 3 ,其内核版本与目标机上的内核版本一致。 2 4 本章小结 本文首先介绍了轴承检测系统的功能。然后对系统所采用的a r m 端硬件资 浙江大学硕士学位论文 第3 章l i n u x 下设备驱动程序开发 的硬件是否存在和是否能正常工作。如果浚设备正常,则对这个设备及其相关 的设备驱动程序需要的软件状态进行初始化。这部分驱动程序仅在初始化的时 候被调用一次。 服务于i ,o 请求的子程序,即驱动程序的上半部分。调用这部分是系统调 用的结果。在执行这部分程序时,系统仍然认为和进行调用的进程属于同一个 进程,只是从用户态切换到了核心态,并具有进行此系统调用的用户程序的运 行环境,因此,可以在其中调用s l e e p ( ) 等与进程运行相关的函数。 在系统内部,i o 设备的存取通过一组固定的入口点来进行,这组入口点是 由每个设备的设备驱动程序提供的。字符型设备一般提供如下的几个入口点【1 8 】: ( 1 ) o p e n 入口点。打开设各准备i o 操作。对字符特别设备进行打开 操作,都会调用设备的o p e n 入口点。o p e n 子程序必须对进行的操作做好必 要的准备工作,例如清除缓存区等。如果设备是独占的,即同一时刻只能有一 个程序访问此设备,则o p e n 子程序必须设置一些标志以表示设备处于忙状态。 ( 2 ) c l o s e 入口点。关闭一个设备。当最后一次使用设备终结后,调用 c l o s e 子程序。独占设备必须标志设备可再次使用。 ( 3 ) r e a d 入 】点。从设备上读数据。对于有缓冲区的i o 操作,一般 是从缓冲区里读数据。对字符特别设备文件进行读操作将调用r e a d 子程序。 ( 4 ) w r i t e 入口点。向设备写数据。对于有缓冲区的i o 操作,般是 把数据写入缓冲区里。对字符特别设备文件进行写操作将调用、柑t e 子程序。 ( 5 ) i o c t l 入门点。执行读、写之外的操作。 3 1 。2 设备类型分类 l i n u x 内核必须能够用标准的方式和设备作用。每一类设备,字符设备、块 设备和网络设备的驱动程序都提供了通用的接口,供内核在需要请求设备服务 时使用。这些通用的接口意味着内核可以完全相同、不作区别地看待不同的设 备和设备的驱动程序。 每次启动 称事丁靔算型磊簦雕蓄裂8 哥使; 浙江大学硕士学位论文 第3 章l i n u x 下设备驱动程序开发 s t m c tf i l e 是设备驱动程序所使用的第二个重要数据结构,主要由与文件系 统对应的设备驱动程序使用。当然,其它设备驱动程序也能使用,提供有关被 打开的文件的信息。它的内容如下: s t r u c t f i l e m o d e jl m o d e ; l o 行- t _ p o s ;当前的读写位置 l l n s i g n e di n t _ n a g s ;文件标志 s t n l c tf i l e _ _ o p e r a t i o n s + f _ o p s ; v o i d + p r i v a t c _ d a 诅; s t r u c td e n t r y + f _ d e n t r y ; ) f i l e 结构代表一个打开的文件,驱动程序不用去填写f i l e 结构,而只是访问 这个数据结构。 3 、i n o d e 数据结构 文件系统处理的文件所需要的信息在i n o d e 数据结构中,它提供了关于特别 设备文件的信息。它的数据结构比较复杂,在此不详细展开。 3 2 2 设备驱动的模块化编程 l i n u x 以模块的形式加载设备类型,通常来说一个模块对应实现一个设备 驱动,因此是呵以分类的。建议使用一个设备驱动对应一类设备的模块方式, 这样便于多个设各的协调:f :作,利于应用程序的开发与扩展。 设备驱动在准备好后,可以编译到内核中,在系统启动的时候和内核一起 启动,这种方法在嵌入式l i n u x 系统中经常被采用。但更为普遍的方式是动态 加载设备驱动,这样开发人员不必频繁启动机器就能完成设备驱动的开发。 设备驱动在加载时首先调用入口函数i n i tm o d u l e ( ) ,完成设备驱动的初始 化工作,比如置位寄存器,对结构体赋值等一系列工作。其中最重要的工作就 是向内核注册该设备,对于字符设备调用r e g i s t e rc h r d e v ( ) ,对于块设备调用 浙江大学硕+ 学位论文第3 章l i n u x 下设备驱动程序开发 r e 卫i s t e rb l k d e v ( ) 。注册完成后,设备获得了系统分配的主设备号、自定义的次 设备号,并建立起与文件系统的关联。设备驱动在卸载时需要回收相应的资源, 令设备的响应寄存器值复位并从系统中注销该设备。注销字符设备调用 u 1 1 r e g i s t e r _ c h r d e v ( ) ,注销块设备调用u n r e g i s t e r b l k d e v ( ) 。系统调用部分则是对 设备的操作过程,比如o p e n ,r e a d ,、v r i t e ,i o c t l 等。 图3 2 为将一个设备驱动模块动态挂接、卸载和系统调用的过程。 图3 2 设备驱动在内核中的挂接、卸载和系统调用过程 设备驱动运行在内核空间,应用程序则运行在用户空间。内核空间和用户 空间引用不同的内存映射,也就是程序代码使用不同的地址空问。 l j n u x 操作系统系统通过系统调用和硬件中断完成从用户空间到内核空间 的控制转移。设备驱动程序的功能就是扩展内核的功能,主要完成两部分任务: 一个是系统调用,另外一个是处理中断。 浙江大学硕士学位论文弟3 章l i n u x 下设备驱动程序开发 3 3i i c 驱动设计及实现 3 3 1i i c 器件a t 2 4 c 2 5 6 我们采用的i i c 器件是a t 2 4 c 2 5 6 ,为a t m e l 公司推出的2 5 6 k b i t 串行电可 擦的可编程只读存储器,8 引脚双排直插式封装,具有结构紧凑、存储容量大 等特点,可以在2 线总线上并接4 片该i c ,特别适用于具有高容量数据储存要 求的数据采集系统。这块器件的主要特性参数为1 2 3 l : l 、芯片有3 种工作电压; 5 o v ( v c c - 4 5 v 5 5 v ) 2 7 v ( v c c = 2 7 v 5 5 v ) 1 8 v ( v c c = 1 8 v 3 6 v ) 2 、内部可以组成3 2 k 8 存储单元 3 、2 线串行接口 4 、斯密特触发,滤波输入抑制噪声 5 、双向数据传送协议 6 、硬件写保护引脚和软件数据保护功能 7 、具有6 4 字节页写模式。 它与s 3 c 2 4 0 1 的硬件接口电路如图3 3 所示。要注意的是,别忘记接s d a 和s c l 上的1 0 k 上拉电阻。 图3 3a t 2 4 c 2 5 6 的接口电路 根据电路的硬件连接图,1 1 2 的读地址是0 x 1 0 1 0 0 0 0 1 ( a 1 ) ,写地址为 浙江人学硕士学位论文 第3 章l i n u x 下设备驱动程序开发 0 x 1 叭0 0 0 0 0 ( a o ) 。前5 个b i t 表示器件地址,接着的两位由器件的a 1 a 0 决定, 因为我们的硬件接地,所以为0 0 ,最后一位决定于是读还是写,读为1 ,写为 0 。 图3 4 表示了i i c b u s 传输数据的时序图。以字节读写模式为例说明时序。 首先,由发起数据传输的一方在在s c l 为高的情况下,s d a 线上产生一个从高 电平到低电平的起始信号。接着,发送的i i c 器件的地址,串行发送8 b i t 的顺 序是由高位开始。接收方接收完整数据后,发送一个低电平的应答位。然后发 送数据。一个b y t e 发送完后,接收方再回发一个应答位。发送方接收到应答信 号后,在s c l 为高的情况下,在s d a 线上产生一个从低到高的停止信号,此 次字节数据传输结束。 图3 4i i c b u s 数据传输时序图 3 3 2s 3 c 2 4 l o 的i i c _ b u s 接口 s 3 c 2 4 1 0 支持多主i i c _ b u s 串行接口。控制i i c - b u s 操作的几个主要寄存器 为:i i c - b u s 控制寄存器i i c c o n i i c - b u s 控制状态寄存器i i c s 丑玎,i l c - b u s 发送接收数据移位寄存器i i c d s ,l i c _ b u s 地址寄存器i i c a d d 。 在i i c 数据发送接收操作之前,必须先执行如下的工作: 1 、需要的话,把自己的从器件地址写入i i c a d d 寄存器中 2 、设置i i c c o n 寄存器 3 、使能中断,并且确定s c l 时钟周期 4 、设置i i c s r 寄存器,使能串口输出 浙江大学硕士学位论文 第3 章l l n u x 下设各驱动程序开发 主发送模式的流程图如图3 5 所示。首先设置寄存器i i c s l 盯,使之工作在 主发送模式,即把寄存器的【7 :6 】位置为1 1 。然后把从i i c 器件地址写入到i i c d s 寄存器中。接着设置i i c s t a t ,使之产生开始信号,即把寄存器的第【5 位置为 l 。等待i i c d s 寄存器中的数据发送完。查询等待知道收到a c k 应答信号。最 后设置i i c s n 盯寄存器使之产生停止信号。此次操作完毕。 图3 5 主发送模式操作流程图 浙江大学硕士学位论文 第3 章l i n u x 下设各驱动程序开发 主接收模式的流程图如图3 6 所示。首先设置主接收工作模式。然后把 从器件地址写入到寄存器i i c d s 中。接着设置i i c s n 盯寄存器,使之产生 开始信号。等到i i c d s 寄存器中的数据发送完毕。设置a c k 周期,阻塞中 断。如果接收操作还未结束的话,从i i c d s 从读取数据。接着清除阻塞位, 继续接收操作。当需要结束操作时,则设置i i c s r i 寄存器,使之产生结 束信号。 图36 主接收模式操作流程图 渐江大学硕士学位论文 第3 章l i n u x 下设备驱动程序开发 3 3 3i i c 驱动的核心源码实现 i i c 驱动的捌e - o p e r a t i o n 结构如下。i i c r e a d 实现从i i c 器件读取数据的接口, i i c - w r i t e 实现向i i c 器件写数据的接口。i i t j o c t l 实现控制i i c 器件的接口,程序 中实现了设置i i c 器件地址的控制。i i c - o p e n 则是打开需要操作的i i c 设备。 i i c _ r e l e a s e 则在不再需要使用这个设备时,释放资源。 s t a t i cs 缸1 】c tf i l e o p e r a t i o n si i c f b p s = o w n e r :t h i 蔓m o d u l e , r e a d :i i c _ r e a d , w t e :j i c w r i 把, i o c t l :i i 9 j o c t l , o p e n :i i c o p e n , r e l e a s e :i i c r e l e a s e , ) ; i i c _ 0 p e n 函数的代码如卜 ,主要完成初始化i i c 器件的工作,为方便管理程 序采用查询方式而非中断方式。 i n ti i c o p e n ( s t m c ti n o d e + i n o d e ,s t r u c tf i l e + f i l e l i i cm i n o r = m i n o r ( i n o d e 一 ir d e v l : f i l e 一 p r i v a t ed a t a = & i i cm i n o f : g p e u p fo x c 0 0 0 ;门u l l u dd i s a b l e g p e c o n & = o x a f f 雌 g p e c o n 户0 x a o 0 0 0 0 0 0 ; g p e l5 :i i c s d a ,g p e l 4 :i i c s c l l l c c o n = ( 1 “7 ) l ( o 6 ) l ( 1 8 1 c o l l i l t - 8 : e 】s e 塑兰塑主兰丝苎 茎! 兰! ! ! 竖! 堂墨翌垫堡壁茎垄 c o u n t 2 - _ c o u n t ; f o r ( i _ o ;i = 2 5 6 1 r o ma d d r e s s = o : j j c _ b u m 虹0 】= a d d r e s s ; m o d e = s e t r d a d d r : i i c p t = 0 : i i c d a t a c o u n t = 1 : i i c d s = e 2 p r o m a d d r e s s : c s t a t= o x m : w h i l e ( i i c d a t a c o u n t ! = 一 i i c p o l l ( m o d e ) ; m o d e= r d d a l 、a : i i c p t = 0 : i i c d a t a c o u n t = c o u n t : i i c d s = e 2 p r o m a d d r e s s : i i c s l :a t 一0 x b o : i i c c o n = o x a f w h i l e ( i i c d a t a c o u m ! = 1 、 i i c p 0 1 l ( m o d e ) ; f o r ( i - o ;i c o u n t ;i + + ) f t e m p + = i i c _ b u 行b r 1 + i 】 ( i + i + i + i + i + i + i + i ) ; p u l u s e r ( t e m p ,( u n s i g n e d1 0 n g + ) b u f ) ; ) 这几个函数全部实现后,只要向内核注册注册以后,应用程序便可以调用 这个驱动所提供的功能。我们的程序中,采用i i c _ i n i “) 实现。在不再使用该设 备时,释放资源。 s t a t l ci m m i i c _ i 血( v o i d ) i mr e t = 0 : r e t = r e g i s t e u h r d e v ( i i c m a j o r ,d e v i c e _ n a m e ,& i i c f o p s ) ; i f ( r e t 0 ) p r i n t k ( d e v i c e n a m e c a n tr c g i s t e rm a j o rn 哪b e r 恼”) ; r e n l n lr e t : ) r e t 啪0 : ) 驱动程序编译成功后,例如i i c - o 。通过i n 锄o di i c o 便加载到内核中。n m n o d 浙江大学硕士学位论文第3 章l i n u x 下设备驱动程序开发 j i c o 则用来卸载驱动模块。 这里也简单介绍一下驱动的编译方法。 $ ( c c ) $ ( f l a g ) 一ci i c d e v i c e c oi i c o 其中c c = a 玎n l i n u x g c c o f l a g = - - 一k e r n e l 一- d m o d u l e i 凰r ,l o c a l 胁1 i l 2 4 1 8 一n i l k 7 i n c l u d e 这是内核源码所在的路径。 应用程序建立节点,如m l 【n o d ( ”d e v 厄2 p r o m ”,- i f c h r ,o x e 9 0 0 ) ,便可调 用驱动所提供的函数接口了。 3 4 本章小结 本章首先介绍了设备驱动程序与文件系统的关系和设备驱动程序的三种类 型。并对字符设备、块设备和网络设备这三种类型的驱动程序分别所了简要的 说明。本章的第二节介绍了设备驱动程序中的几个关键的数据结构,以及如何 编写模块化的驱动程序。本章最主要的内容是,i i c 驱动程序的实现。最后一节 介绍了i i c 器件a ,r 2 4 c 2 5 6 的特点,系统采用的c p u 的i i c b u s 接口,并详细 的给出了部分核心源码。 浙江大学硕士学位论文 第4 章应用程序框架设计与实现 第四章应用程序框架设计与实现 【摘要l 本章首先介绍了应用程序采用多进程嵌套多线程机制的原因:然后介绍了多 进程和多线程的概念和特点;最后,详细的介绍了消息通信机制的两个关键技术消息 队列与共享内存的实现。 4 1 多进程与多线程编程 因为a r m 端上的各个任务是需要并行工作的,所以设计的应用程序框架是 基于多进程的。子进程中由于也需要并行处理一些事情,所以在多进程的基础 上又嵌套了多线程。轴承检测系统的几个主要并行任务如图4 1 所示。 图4 一l 应用程序中并行的主要任务 主程序的主要工作是建立程序运行的环境。五个子进程就是在主程序中创 建的,因此主程序也即是父进程。父进程为各个子进程分别创建了了消息队列。 子进程只须在自己的程序中,打开这个队列即可使用父进程为其创建的消息队 列。父进程同时创建了4 个共享内存。父进程同时创建了几个锁定文件,用于 控制对共享内存的并行访问和对s d 卡的合法访问。最后运行自己创建的几个 子进程。 g u i 任务负责响应用户的操作,并显示用户想要查看的信息。h p i 任务负 浙江火学硕上 粪差了_ 妻摹曩i 邑饕霎差薹鍪;蠢妻蚕纂蚕蠢笔羹;麴j 薯囊豢妻薹奏;塞奏囊零 式争钔彭览篓睡撕萝曼鞴碜;躲煎备若鼍兰;融型蠢描梯摊醴醴骑雏薯薹型 蟊篇蕈枣。| 蓣型坤耐瓠割型弱阳冀曼。耋至薹蕊霎霪蠹霎蠹彗霎偿国周趸;漤 砰秀灞砸灞潮噬靖均狮p 孙b 塑殖j 螟件砹备来说拍的髓拍列鞠匪鸲;崔嚼= 是不同的i 薹卡 等。对于操 作系统来说,挂接的设备越多,所需要的设备驱动程序也越多。操作系统本身 并没有对种类繁多的硬件设备提供持久不变的“设备驱动”,也就是说操作系统 在没有设备驱动程序支持下无法正常支配硬件。所以,需要我们开发对应硬件 相关的驱动程序。正是操作系统留下了扩展设备驱动的接口,才有了现在支持 各种应用场合的硬件设备的蓬勃发展。驱动程序开发是整个嵌入式系统设计过 程中必不可少的一部分。 设备驱动程序控制了操作系统和硬件设备之间的交互,图3 1 简单描述了操 作系统和设备驱动之间的关系 。 图3 1 操作系统与设各驱动的关系 3 1 1 设备驱动与文件系统的关系 设备驱动程序的任务包括自动远渲煤统跏蓟映绦颍涸鸺觳馑枰g x 浙江人学硕士学位论文 第4 章应用程序框架设计与实现 免出现僵进程,父进程使用w a i t 函数等待新进程终止。 例如,控制上面创建的b e a r i n g 子进程,程序中是这样实现的: w a i t p i d ( c h i l d 【o 】,o ,0 ) ; 这里简单介绍一下僵进程。一个僵进程是在父进程有机会用w a i t 或w a i t p i d 收集它的退出状态之前就终止的子进程。父进程通过使用w a i t 函数之一检索内 核的进程表来收集f c o l l e c t ) 子进程的退出状态。一个进程之所以称为僵进程是因 为它虽然死掉了,但依然在进程表中保留了一条。内核在父进程收回子进程的 退出状态之前一直保留着它。有一两个僵进程不算什么问题,但是如果很多的 话,那么会填满进程表,会影响性能而且必要时会导致系统重新自举。 4 2 1 消息通信机制一消息队列 消息队列是l i n u ) ( 用于进程问通信( i 1 1 t e r p r o c e s sc o i l l n l l l n i c a t i o n ,i p c ) 的方 法之。消息队列是一个消息的链接列表,消息都保存在内核中,进程通过一 种和共享内存区使用的标识符同种类的标识符标识消息。关于队列操作的函数 是在 中声明的。而 和 中包含消息队列操作函 数用到的类型和常量说明。创建一个新的队列或打开一个队列,使用m s g g e t 函 数,在队列末尾创建一个新消息,使用m s g s n d 函数,而从队列中取出一个消息, 则使用m s g r c v 函数。 在轴承检测系统应用程序的主程序中,按如下设计方法为5 个子进程分别 建立消息队列。 首先,在头文件中,为每个子进程分别定一个唯一标识该子进程对列的k e y 值: 群d e n n ek e y q o1 2 3 撑d 幽n ek e y q l1 2 4 # d e f i n ek e y q 21 2 5 撑d e f i n ek e y q 31 2 6 撑d e f i n ek e y q 41 2 7 并定义每个消息队列的大小: # d e f i n eb u f s z q5 1 2 然后,在主程序中调用m s g g e t 函数: c r e a t e6q u e u ef o r6t a s k s k e y q 【o = k e y 二q 0 ; 浙江大学硕士学位论文第4 章应用程序框架设计与实现 k e y _ q 1 卜k e y q l ; k e y _ q 2 = k e y q 2 ; k e l q 3 卜k e y q 3 ; k e y q f 4 p k e y - q 4 i k e y _ q 【5 】:k e y q 5 ; f o “i = 0 ;i 6 ;i + + ) i f ( ( q i d j a s k i = m s g g e t ( k e y _ q 嘲,i p c _ c r e a t 【0 6 6 6 ) ) 0 ) e r r _ q u i t ( ”m s g g e t :c r e a t e ”) ; 假设我们是这样分配消息队列的,q i d t a s k 【0 、q i d j a s k 【1 、q i d t a s k 【2 】、 q i d - c a s k 【3 】、q i d t a s k 【4 】分别为g u i 子进程、e 2 p r o m 子进程、s d 卡子进程、 h p i 子进程、s o c k e t 子进程的消息队列。为了在程序中更加明确,可以在头 文件中如下定义: 拌d e 6 n eq u e q to 撑d e f i n eq u e i i cl 社d e n n eq u e s d2 社d e n n eq u e j p i3 群d e f i n eq u e - s o c k e t4 程序中需要调用到g u i 的任务时,便可以使用q i d j a s k q u e q t 】来表示, 这只是一个编程的小技巧,方便程序员读写与检查程序。 在各子任务中,以g u i 任务为例,需要用到主程序为其创建的消息队列时, 只需要打开即可使用。在g u i 任务的m a i n c p p 中,打开消息队列的函数调用方 式如下: f o r ( i = o ;i 5 ;i + + ) i f ( ( q i d t a s k 【i 卜m s g g e t ( k e y q i 】,i p c c r e a r 叫0 6 6 6 ) ) 0 ) e r r _ q u i “”m s g g e t :c r e a t e

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论