基于嵌入式inux的步进电机驱动程序设计.docVIP

基于嵌入式inux的步进电机驱动程序设计.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
摘要:介绍了Linux驱动程序的实现机制,在分析步进电机和驱动程序接口的基础上,给出了一个在嵌入式Linux平台上编写步进电机驱动的实例。本平台基于Samsung公司的S3C2410X CPU,采用Linux2.4内核作为它的操作系统。介绍了如何通过对驱动程序的操作实现对步进电机的控制。在JXARM2410实验平台上的实验结果表明驱动运行正常。   1.引言   随着嵌入式技术的飞速发展,基于嵌入式系统的新一代工业控制器也日益增多。同以往的控制器不同,新的仪器大多以32位嵌入式处理器为核心,并且安装有嵌入式操作系统,从而大幅度提高了处理能力,方便了设计开发。在各种嵌入式操作系统中,嵌入式Linux是免费的自由软件,其构建的系统成本较低,而且Linux是单内核的操作系统,并可按要求进行任意剪裁,因此越来越多的研究人员开始在用Linux平台来开发自己的产品[1]。   嵌入式开发过程中,经常需要为特定设备开发驱动程序。这些驱动程序的编写和编译与PC上的Linux驱动开发相比存在明显的差异,需要考虑的因素更多,实现过程更为复杂。本文以Samsung公司S3C2410X CPU为例,探讨如何为使用嵌入式Linux的工业控制器开发字符设备驱动程序来驱动步进电动机。   2.Linux驱动程序概述   在Linux中,几乎所有的内容都是文件,对设备驱动的访问也是以文件操作的方式实现的。Linux系统支持3种类型的硬件设备:字符设备、块设备和网络设备,这些设备的驱动程序是系统内核的重要组成部分。对用户程序而言,操作系统隐藏了设备的具体细节,把设备映射为一个设备文件,用户程序可以对设备文件进行open、close、read、write等操作。这些操作和驱动程序是通过struct file_operations这一数据结构关联起来的,编写设备驱动程序的主要工作就是编写子函数填充file_operations的各个字段[2]。   3.嵌入式Linux步进电机驱动程序开发   3.1 嵌入式Linux设备驱动程序的结构   嵌入式Linux下的设备总体上可以分为两部分:   其一,驱动与内核接口层,它实现驱动模块在Linux内核的注册加载与卸除工作。主要任务就是在模块加载时向内核注册驱动,以及实现虚拟文件系统的设备操作接口。对于采用中断的设备,此部分还包括中断处理函数的注册与注销。   其二,硬件设备接口层,这部分主要描述驱动程序与设备的交互。它主要包括硬件探测和初始化以及设备的读写访问和设备控制操作。硬件探测主要是在驱动注册加载时监测设备是否存在,设备初始化主要是检测到设备后对它进行初始化操作。设备的读写操作主要完成从设备接受数据和将数据发送给设备的操作。硬件设备接口层还需要包括一些设备的控制操作,设定设备的工作参数。   对于驱动程序与内核接口层,Linux提供了标准的入口点函数init_module();在通过模块化的设计方法设计驱动程序时,使用insmod加载核心模块时会调用本函数,通知内核对驱动程序进行注册。模块的卸除工作与加载工作类似,通过rmmod卸载模块时,调用cleanup_module()取消驱动程序的注册。   3.2 步进电机驱动程序需求分析   步进电机是将电脉冲信号转变为角位移或线位移的开环控制元件。在非超负载的情况下,电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响。所以在驱动程序中间只需要考虑这两个方面的影响。   本系统的步进电机的四相由硬件地址0bit0~bit3控制,bit0对应MOTOR_A,bit1对应MOTOR_B,bit2对应MOTOR_C,bit3对应MOTOR_D。本文所描述的驱动是针对整步模式下的步进电机,整步模式下的步距角18°。在整步模式下的脉冲分配信号如表所示。   所以在程序中需要通过编制脉冲分配表控制步进电机,并且通过修改脉冲分配表可以实现步进电机方向的控制。   系统的步进电机仅仅是一个输出的通道,只能顺序的进行控制的操作,因此作为一个字符设备来进行驱动。对于字符设备的操作而言驱动程序需要提供相关的几个操作分别为open,read,write,ioctl等相关的函数入口点。在驱动程序的实现过程中需要定义这些文件相关的操作,填充进入file_operations结构中。   与普通文件相比,设备文件的操作要复杂得多,不可能简单的通过read、write等操作来实现。并且由于对于步进电机驱动程序没有相关的输入与输出,更关注的是对硬件的控制,因此在驱动程序对于write操作和read操作仅需返回0,而对于硬件的控制只需要在驱动程序中实现ioctl函数,并在其中添加相应的case即可。通过cmd区分操作,通过arg传递参数和结果[3]。   3

文档评论(0)

135****6041 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档