0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看威廉希尔官方网站 视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于S3C2440A微处理器和Linux操作系统实现对步进电机的控制

电子设计 来源:郭婷 作者:电子设计 2019-09-10 08:02 次阅读

随着嵌入式威廉希尔官方网站 的不断成熟,基于嵌入式系统编写特制电路下的设备驱动程序也越来越受到人们的青睐。在各种嵌入式操作系统中,嵌入式Linux是免费的源代码开放软件,可根据需要任意进行剪裁。在嵌入式Linux开发过程中需要为指定设备编写和编译驱动程序,这与以往在PC机上的Linux驱动开发明显不同,本文设计了基于S3C2440嵌入式Linux下激光雕刻系统的步进电机驱动程序。

1 硬件系统的设计

步进电机开环控制系统主要由中央控制器、步进电机驱动器传感器以及步进电机四大部分组成。本系统采用基于ARM920t内核的S3C2440A微处理器作为控制系统的中央控制器,该芯片主频400MHz,最高可达到533MHz,内含多种设备接口,存储器使用64MB的Nand Flash和64MB的SDRAM。图l所示为控制系统框图。

基于S3C2440A微处理器和Linux操作系统实现对步进电机的控制

2 系统的工作原理

本系统主要控制两个两相混合式步进电机,分别代表X轴和Y轴带动传能光纤进行激光雕刻。系统采用8路I/O口进行脉冲输出,每4路接一个步进电机驱动器,通过功率放大后,进入步进电机的各项绕组。电机有半步、整步两种工作模式,整步模式的步距角为1.8°,半步模式的步距角为0.9°,整步一周共200步。如:半步模式的两步进电机正转脉冲为{0x11,0x33,0x22,0x66,0x44,Oxcc,0x88,0x99};整步模式为{0x11,0x22,0x44,0x88,0x11,0x22,0x44,0x88},一个步进电机运作时,只对脉冲时序的高或低4位操作,另外4位为0。而改变脉冲的顺序,即可改变转动方向。在整个控制系统中,数据处理在Linux应用程序中完成,步进量传递给Linux驱动程序后,由驱动程序完成脉冲输出。通过软件来完成脉冲分配,可根据应用系统的需要,随时改变对步进电机的控制。

3 嵌入式Linux步进电机驱动程序的设计

Linux操作系统将所有的设备(而不仅是存储器里的文件)都看成文件,以操作文件的方式访问设备。应用程序不能直接操作硬件,而是使用统一的接口函数调用硬件驱动程序。设备驱动程序是操作系统内核和硬件之间的接口。Linux设备驱动与内核接口可分为三大方面:a.与系统启动代码的接口对设备进行初始化;b.与内核接口通过数据结构file.operrations来完成;c.与设备的接口对设备进行读写操作。

步进电机是将电脉冲信号转变为角位移或线位移的开环控制元件。而脉冲信号的频率和脉冲数是控制电机的两个重要方面。本系统步进电机4路脉冲输出由硬件地址0x28000006的bit0~bit3控制,bit0对应MOTOR A+,bit1对应MOTOR B+,bit2对应MOTOR_A-,bit3对应MOTOR_B-。这里针对整步模式下的步进电机进行脉冲分配信号,半步模式的步进电机正转导电状态时的控制顺序为A+_A+B+_B+_B+A-_A-_一A-B-_B-,整步模式的步进电机正转导电状态时的控制顺序为A+_B+_A-_B-。

因此在程序中需要通过编制脉冲分配信号来控制步进电机,并通过修改脉冲分配信号来实现对步进电机方向的控制。图2是用软件形成环形脉冲的流程图。

系统中的步进电机只响应应用程序传送给驱动的步进量和部分参数,只能顺序地进行控制操作,因此它可作为字符设备来进行驱动。在驱动程序中,需要提供几个操作函数的入口点,分别为open、read、write、ioet1等。而ioct1函数尤为重要,系统通过调用这个函数可以控制步进电机的转动。

在初始化函数中,会将驱动程序的file operations结构连同其主设备号一起向内核进行注册。对于字符设备使用以下函数进行注册:int register_chrdev(unsigned int major,const char*name,struct file_operations*fops);其中,unsigned int major为定义的主设备号,const char*name为定义的设备名称,这里把设备名宏定义为stepper。file_operations*fops为定义的指针变量。申请控制步进电机的端口用以下函数进行调用:request_region(0x28000006, 1, const char*name);因为步进电机用到了I/O端口,而在S3C2440中操作端口要用虚拟地址而非实际的物理地址,因此要修改内核代码。修改文件内核源代码中间的smdk.c,该文件在linux/arch/arm/mach-s3c2440中,在结构体static struct map_descsmdk_io_desc[]中添加一行数组元素{0xd3000000,0x28000000,Ox01000000,DOMAIN_IO,0,1,0,0},则步进电机的物理地址0x28000006对应的虚拟地址为0xd3000006,在驱动程序中应对这个地址进行操作。

根据上面提到的步进电机的脉冲分配信号,定义它半步模式正转脉冲为:

unsigned char pulse_table[]=

{0x11,0x33,0x22,0x66,0x44,Oxcc,0x88,0x99};

利用应用程序传递给stepper ioct1的参数arg来判断转动方向。编写ioctl函数用来接收应用程序对于步进电机的控制。以下是部分驱动程序代码:

基于S3C2440A微处理器和Linux操作系统实现对步进电机的控制

设备卸载与前面提到的设备注册是相反的过程。当从系统中卸载一个模块时,主设备号要得到释放。这一操作可以调用以下函数进行模块清除:

int unregister_chrdev(unsigned int major,const char*name);

首先,编译步进电机模块,打开内核中drivers/char/Konfig文件,添加如下语句:

Config STEPPER_MODULE、tristate“stepper module”、depends on ARCH_S3C2440、help、stepper driver module。

在终端中运行命令make menuconfig,进入内核配置主菜单,在DeviceDriver→Character device菜单中看到刚才所添加的选项了,之后编译为模块方式。

其次,打开内核中drivers/char/Makefile文件,添加如下语句:

obj-$(CONFIG_STEPPER_MODELL)+=stepper_module.o

最后,回到内核源代码根目录位置,执行make modules,就可生成系统所需要的内核模块文件stepper module.ko了。至此,完成了步进电机模块驱动的编译。之后,便可使用insmod、rmmod命令分别对模块进行加载、卸载了。

4 结论

在嵌入式Linux系统下,设备驱动程序是内核和硬件之间的接口,本文采用字符设备的思想去实现步进电机驱动程序的开发,介绍了嵌入式Linux驱动程序的原理,归纳了驱动程序开发的一般流程,并结合步进电机的驱动阐述了驱动程序的编写。与原有通过操作PC机来控制步进电机相比,本文是在Linux操作系统支持MMU的情况下完成了对步进电机的控制。


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Linux
    +关注

    关注

    87

    文章

    11303

    浏览量

    209436
  • 微处理器
    +关注

    关注

    11

    文章

    2262

    浏览量

    82438
  • 步进电机
    +关注

    关注

    150

    文章

    3110

    浏览量

    147467
收藏 人收藏

    评论

    相关推荐

    千兆网络接口在S3C2440A系统中的应用方案

    。这里简要介绍一下S3C2440A与AX88180器件,这两个器件是通信控制的主体。图1 系统结构框图S3C2440A是基于ARM920T 核的16/32 位RISC
    发表于 04-17 07:00

    基于微处理器S3C2440A的手持终端电源管理系统设计

    管理面临越来越大的压力。如何设计出性能稳定、功耗低的电源管理系统已经成为嵌入式手持终端设备开发的难点之一。本文重点介绍基于微处理器S3C2440A的手持终端电源管理系统
    发表于 07-24 06:22

    s3c2440中文资料,s3c2440中文数据手册

    S3C2440A 32-位 CMOS 微型控制器 用户手册 修订版本 1 第一章产品概述 三星公司推出的16/32位RISC微处理器S3C2440A, 为手持设备和一般类型应用提供了
    发表于 09-07 10:49 14次下载
    <b class='flag-5'>s3c2440</b>中文资料,<b class='flag-5'>s3c2440</b>中文数据手册

    基于S3C2440A的彩色液晶显示系统设计

    以三星公司嵌入式微处理器S3C2440A 和夏普公司3.5 英寸LCD 屏LQ035Q7DH01为基础,设计了显示硬件电路,给出了如何开发其Linux 帧缓冲设备驱动程序。
    发表于 09-24 10:51 45次下载

    S3C2440A中文手册,S3C2440A使用手册

    S3C2440A中文手册,S3C2440A使用手册 第一章产品概述S3C2440A采用ARM920T内核,集成如下片上功能:● 1.2V内核,1.8V/2.5V/3.3V储存,3.
    发表于 03-08 14:35 461次下载

    S3C2440A中文资料,datasheet

    S3C2440A中文资料,datasheet S3C2440A的存储控制器提供访问外部存储所需的存储
    发表于 03-08 14:41 58次下载

    基于S3C2440A的银行评价的设计

    提出了一种以S3C2440A为核心处理器的银行评价的设计方案,并结合XILINX公司的XL95144XL型CPLD,辅助S3C2440A实现
    发表于 01-15 16:59 38次下载

    基于S3C2440A处理器的Windows CE系统快速启动方案

    如何快速启动Windows CE系统是一个很重要的内容。本文将基于三星公司的S3C2440A处理器和Windows CE系统,分析Windows CE的启动原理和影响其启动速度的原因,
    发表于 04-11 11:38 1812次阅读
    基于<b class='flag-5'>S3C2440A</b><b class='flag-5'>处理器</b>的Windows CE<b class='flag-5'>系统</b>快速启动方案

    基于S3C2440A的无线实时图像传输系统设计

    摘 要: 提出了一种基于S3C2440A 的无线实时图像传输的设计方案,该方案利用S3C2440A 进行核心控制,通过USB2.0 控制器CY7C6
    发表于 10-10 11:03 3526次阅读
    基于<b class='flag-5'>S3C2440A</b>的无线实时图像传输<b class='flag-5'>系统</b>设计

    基于ARM处理器S3C2440A的便携式视频展示台的设计

    文中基于对微处理器S3C2440A的显示控制模块和高性能视频D/A芯片ADV7120的研究,提出了一种便携式视频展示台的设计方案。本方案采用130万像素的OV9650摄像头采集实物、文
    发表于 08-07 18:55 171次下载
    基于ARM<b class='flag-5'>处理器</b><b class='flag-5'>S3C2440A</b>的便携式视频展示台的设计

    基于Linux操作系统S3C2410微处理器实现GPS实时导航系统的设计

    这里提出一种实用的设计方案,通过对系统的各方面配置,实现GPS实时导航功能。系统主控器件采用韩国Samsung公司生产的ARM核32位RISC微处理器
    发表于 03-09 10:47 1082次阅读
    基于<b class='flag-5'>Linux</b><b class='flag-5'>操作系统</b>和<b class='flag-5'>S3C</b>2410<b class='flag-5'>微处理器</b><b class='flag-5'>实现</b>GPS实时导航<b class='flag-5'>系统</b>的设计

    32位RISC微处理器S3C2440A的用户手册免费下载

    本用户手册介绍三星的S3C2440A 16/32位RISC微处理器。三星的S3C2440A旨在为手持设备和一般应用提供低功耗、高性能的小型微控制器解决方案。为了降低
    发表于 06-09 08:00 2次下载
    32位RISC<b class='flag-5'>微处理器</b><b class='flag-5'>S3C2440A</b>的用户手册免费下载

    基于S3C2440A和WinCE 4.2操作系统实现数字寻北仪的应用方案

    硬件和软件两部分,即嵌入式微处理器和嵌入式操作系统。本文设计的寻北仪采用S3C2440A微处理器和WinCE 4.2操作系统
    的头像 发表于 03-19 15:52 3292次阅读
    基于<b class='flag-5'>S3C2440A</b>和WinCE 4.2<b class='flag-5'>操作系统</b><b class='flag-5'>实现</b>数字寻北仪的应用方案

    基于S3C2440A嵌入式微处理器实现高速接入网络的设计

    嵌入式系统广泛应用在工业测控、智能仪表、智能家庭等很多领域。随着嵌入式系统应用范围的不断扩展及网络应用的日益普及,使得越来越多的嵌入式系统需要网络功能。三星公司S3C2440A是国内应
    的头像 发表于 05-25 11:07 2638次阅读
    基于<b class='flag-5'>S3C2440A</b>嵌入式<b class='flag-5'>微处理器</b><b class='flag-5'>实现</b>高速接入网络的设计

    基于S3C2440嵌入式Linux步进电机驱动程序分享

    电机开环控制系统主要由中央控制器步进电机驱动、传感
    发表于 03-24 11:26 0次下载
    基于<b class='flag-5'>S3C2440</b>嵌入式<b class='flag-5'>Linux</b><b class='flag-5'>步进</b><b class='flag-5'>电机</b>驱动程序分享