当前位置:首页 > 嵌入式 > 嵌入式软件
[导读]基于嵌入式ARM Linux步进电机驱动程序的设计

摘要:本平台基于Samsung公司的友善之譬QQ2440V3开发板,它采用Samsung S3C2440为微处理器,Samsung S3C2440的内核为ARM920T,且采用Linux2.6.13内核作为它的操作系统。设计了硬件系统,并实现驱动程序对步进电机的控制,在QQ2440V3开发板上的实验结果表明驱动运行正常、稳定。这是实现激光雕刻的核心,为以后实现传能激光雕刻夯实了基础。
关键词:ARM;Linux;步进电机;驱动

0 引言
    随着激光雕刻机的不断发展和改进,嵌入式Linux的激光雕刻机比CNC(Computer numerical control)激光雕刻的优势不断显现,它大幅度提高了处理能力,方便了设计开发,节约了成本,是未来经济型激光雕刻机发展的趋势。而嵌入式ARM(Advanced RISC Machines)Linux步进电机驱动是实现激光雕刻的核心。
    嵌入式开发过程中,经常需要为特定设备开发驱动程序。这些驱动程序的编写和编译与PC上的Linux驱动开发相比存在明显的差异,需要考虑的因素较多,实现过程较为复杂。本文以Samsung公司的友善之譬S3C2440开发板为例,探讨如何使用嵌入式Linux开发字符设备驱动程序来驱动步进电动机。

1 硬件系统设计方案
    控制系统由处理器、步进电机驱动器、步进电机3部分组成,如图1所示。


    处理器用友善之譬QQ2440V3开发板,内核为ARM920T。步进电机驱动器采用北京和利时电机技术有限公司(原四通电机)的SH-20403。驱动器共有四路输入信号:公共、脉冲信号输入、方向信号输入和脱机信号输入。驱动器的输入信号既可以采用共阳极也可以采用共阴极接线方式,使用共阳极模式时,应将输入信号的电源正极连接到公共端,将输入信号连接到对应的信号端子,信号低电平有效,此时对应的内部光耦导通,控制信号输入驱动器中;对应共阴极模式时,将输入信号的电源负极连接到公共端,信号高电平有效,我们采用的是共阳极接法。
控制步进电机驱动器的时序如图2所示。

[!--empirenews.page--]

2 步进电机驱动系统设计
    Linux内核结构体系可分为:应用程序、库函数、操作系统(内核)、驱动程序。在Linux操作系统中,驱动程序是操作系统内核与硬件设备的直接接口,驱动程序屏蔽了硬件的细节,驱动程序是内核的一部分,它具有以下功能:
    对设备初始化和释放:比如向内核注册这个程序,这样应用程序传入文件名时,内核才能找到相应的驱动程序。
    对设备进行管理,包括实时参数设置以及提供对设备的操作接口。
    读取应用程序传送给设备文件的数据并回送给应用程序请求的数据。
    检测是处理设备出现的错误。
    如图3所示,应用程序通过Linux系统的调用实现与内核通信。由于Linux中将设备当做文件处理,所以对设备进行操作的调用和对文件操作的操作类似,主要包括open()、read()、write()、ioctl()、close()等接口函数。应用程序发出系统调用命令后,会从用户态转到内核态,通过内核将openO等的系统调用转换成对物理设备的操作。在Linux中通过分层实现对物理设备的调用,这样使得内核的结构清晰,提高了模块化的独立性。


2.1 嵌入式Linux设备驱动程序的框架
    Linux系统设备分成三种基本类型:字符设备、块设备、网络设备。每个模块通常实现其中某一种:字符模块、块模块或网络模块。
    嵌入式设备驱动整体可分以下两部分:
    (1)硬件设备接口层。这部分主要描述驱动程序与设备的交互。
    (2)驱动与内核接口层,它实现驱动模块在Linux内核的注册加载与卸除工作。
    对于驱动程序与内核接口层,Linux提供了标准的入口点函数init_functionO;在通过模块化的设计方法设计驱动程序时,使用insmod加载核心模块时会调用本函数,通知内核对驱动程序进行注册。模块的卸除工作与加载工作类似,通过rmmod卸载模块时,调用cleanup_funct-ion0取消驱动程序的注册。
2.2 GPIO的步进电机驱动开发
    GPIO(General Purpose Input Output)的步进电机驱动可以归类为Linux设备驱动的字符设备驱动,以下是开发它的一些具体步骤。
2.2.1 开发步骤
    (1)模块化驱动程序
    写字符设备的驱动程序时,也要遵守模块化编程的一般规范。设备模块在用户空间的初始化和终止:
    Init_mnodule()向内核注册模块提供数据结构、局部和全局变量。
    Cleanup_module()取消所有init_module在内核中的注册。
    (2)设备模块在内核空间的内存申请和释放
    kmalloc()函数分配一段内存,这样就实现了Chrdevs向量表中指向设备驱动程序名称的指针。使用kfree释放内存。
    (3)字符设备主设备号和次设备号的分配
    主设备号标志设备对应的驱动程序,内核利用主设备号将设备与相应的驱动程序对应起来。主设备号的取值范围是O~255,如果不善加规划,则容易造成主设备号的冲突。
    次设备号由驱动程序使用,内核的其他部分并不使用它,仅将它传递给驱动程序。
    (4)设备模块在内核空间的注册与注销
    字符设备的注册有两种方法,一种是常用注册方法,通过系统函数registel_chrdev()将设备加入到系统设备列表中;另一种是devfs技术,通过系统函数devfs-regisrer()实现设备的注册。注销与注册相反,分别调用unregister_chrdev()函数和devfs_unregister()函数。
    (5)设备模块在内核空间提供系统调用的函数设备驱动程序在注册成功以后,用户可以通过访问设备特殊文件(一般情况在/dev目录下)实现系统调用。
    GPIO驱动程序只需要一个file operations数据结构体就可以了。
2.2.2 驱动开发
    要写实际的驱动,就必需了解相关的硬件资源。比如:用到的寄存器、物理地址、中断等。在这里,它用到如下硬件资源,如表2所示。

[!--empirenews.page--]
    要用操作所用到的IO口,就要设置他们所用到的寄存器,我们需要调用一些现成的函数或者宏,比如:
    /*每个port有16个引脚,而每个引脚由两位来配置,所以你看到32×N。 32表示一个port的配置寄存器,而N代表是第几个端口。而这里的offset表示的是第几个引脚。*/

    S3C2440开发板中GPIO的许多引脚是和地址线、数据线、串口线等引脚复用的。所以我们必须对GPIO进行重新定义和配置。一般来说,写驱动可以在内核中找相近的驱动程序,以它为模板进行开发,有时也要从零开始,这次作者在内核Linux-2.6.13-qq2440\kernel2.6.13\drivers\char中的qq2440 led.c进行修改。
   

    最后定义了file_operations和各种API函数,配置了init和exit函数以及module_exit和module_init。
    驱动开发完后,要进行测试。把编写好的驱动程序在PC机上进行交叉编译。然后用命令#insmod stepper.ko加载模块到内核中,通过命令#rmmod stepper.ko可以卸载模块。用mknod/dev/stepper 1000 0建立与驱动程序相应的设备节点。编写相应的应用程序。在应用程序中打开步进电机的设备文件,通过调用ioctl(fd,1&dir,O),运行应用程序,查看步进电机的转向。

3 结论
    本文在S3C2440开发板下实现了步进电机的控制。给出了简单的驱动程序,实验结果表明驱动运行正常、稳定。但对于实现传能激光雕刻的图形及灰度雕刻,还有待于进一步的完善。
 

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

Linux电脑输入poweroff退出操作系统后电源会自动切断,而嵌入式Linux如果没做特殊处理 输入poweroff关闭系统后电源依旧保持着。敲击键盘也不会有响应。原因是CPU和主板之间有着行业标准,比如ACPI(A...

关键字: Linux 电源 硬件IO

北京2022年10月19日 /美通社/ -- 随着云计算、大数据的普及发展,过去的"云"是服务于大企业的计算模型,而十多年过去了,越来越多的应用及业务走上"云端",对计算核心数需求...

关键字: ARM 大数据 云游戏 CPU

无线连接已成为许多产品的必备功能,但往往会增加系统设计的成本和复杂性,因为它通常必须作为更大应用的附加功能。Microchip Technology Inc.(美国微芯科技公司)今日推出首款基于Arm Cortex®-M...

关键字: Microchip ARM PIC

经过几十年发展,嵌入式技术已经用在了我们生活中的方方面面,但是嵌入式始终都带有小众,专业性强的属性,让很多非嵌入式领域的同学望而却步。近十几年的发展,物联网覆盖了越来越多领域,包括了家居,商业,工业,农业等领域,不仅吸引...

关键字: 嵌入式 物联网 技术

随着IT技术飞速发展,互联网已经进入了“物联网”时代。物联网中需要的大量设备不在依赖人与人之间的交互产生联系,更多通过协议、通信、程序设计等方式连接到一处。即 “物联网”的目的则是让所有的物品都具有计算机的智能但并不以通...

关键字: 嵌入式 物联网 计算机

物联网正在扩大规模并加速发展,进而驱动着全新的经济。而Arm生态系统正是这一巨大机遇背后的推动力。

关键字: ARM 物联网

ARM公司是一家知识产权(IP)供应商,它与一般的半导体公司最大的不同就是不制造芯片且不向终端用户出售芯片,而是通过转让设计方案,由合作伙伴生产出各具特色的芯片。

关键字: ARM

最近看到APP上,给我推送了很多类似的回答,借此机会,也想着重新审视一下自己的学习历程,以及结合自身和大牛,分享一些学习经验,希望对大家有所启发和帮助。

关键字: APP 嵌入式 C语言

2018年10月26日,深圳星河丽思卡尔顿酒店,ARM中国CEO吴雄昂在ARM年度技术论坛上对记者如是说,彼时的吴坚定,温雅,意气风发。时隔两年,ARM中国CEO吴雄昂再次回到媒体视线,这一次,ARM中国与来自投资方和剑...

关键字: ARM 芯片 集成电路

喜欢折腾主机的小伙伴一定都知道X86和ARM架构的区别,前者在PC领域已经统治了几十年;后者则主要应用于移动领域,尤其是近几年,ARM的产品在终端应用特别是手持终端应用飞速发展。

关键字: 国产 ARM 主机

嵌入式软件

15715 篇文章

关注

发布文章

编辑精选

技术子站

关闭