版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、基于嵌入式linux的步进电机驱动程序设计随着技术的飞快进展,基于嵌入式系统的新一代工业控制器也日益增多。同以往的控制器不同,新的仪器大多以32位嵌入式处理器为核心,并且安装有嵌入式操作系统,从而大幅度提高了处理能力,便利了设计开发。在各种嵌入式操作系统中,嵌入式是免费的自由软件,其构建的系统成本较低,而且linux是单内核的操作系统,并可按要求举行随意剪裁,因此越来越多的讨论人员开头在用linux平台来开发自己的产品。嵌入式开发过程中,常常需要为特定设备开发驱动程序。这些驱动程序的编写和编译与pc上的linux驱动开发相比存在显然的差异,需要考虑的因素更多,实现过程更为复杂。本文以samsu
2、ng公司x cpu为例,探讨如何为用法嵌入式linux的工业控制器开发字符设备驱动程序来驱动步进。2linux驱动程序概述在linux中,几乎全部的内容都是文件,对设备驱动的拜访也是以文件操作的方式实现的。linux系统支持3种类型的硬件设备:字符设备、块设备和网络设备,这些设备的驱动程序是系统内核的重要组成部分。对用户程序而言,操作系统躲藏了设备的详细详情,把设备映射为一个设备文件,用户程序可以对设备文件举行open、close、read、write等操作。这些操作和驱动程序是通过struct file_operations这一数据结构关联起来的,编写设备驱动程序的主要工作就是编写子函数填充
3、file_operations的各个字段。3嵌入式linux驱动程序开发31 嵌入式linux设备驱动程序的结构嵌入式linux下的设备总体上可以分为两部分:其一,驱动与内核接口层,它实现驱动模块在linux内核的注册加载与卸除工作。主要任务就是在模块加载时向内核注册驱动,以及实现虚拟文件系统的设备操作接口。对于采纳中断的设备,此部分还包括中断处理函数的注册与注销。其二,硬件设备接口层,这部分主要描述驱动程序与设备的交互。它主要包括硬件探测和初始化以及设备的读写拜访和设备控制操作。硬件探测主要是在驱动注册加载时监测设备是否存在,设备初始化主要是检测到设备后对它举行初始化操作。设备的读写操作主要
4、完成从设备接受数据和将数据发送给设备的操作。硬件设备接口层还需要包括一些设备的控制操作,设定设备的工作参数。对于驱动程序与内核接口层,linux提供了标准的入口点函数init_module();在通过模块化的设计办法设计驱动程序时,用法insmod加载核心模块时会调用本函数,通知内核对驱动程序举行注册。模块的卸除工作与加载工作类似,通过rmmod卸载模块时,调用cleanup_module()取消驱动程序的注册。32 步进电机驱动程序需求分析步进电机是将电脉冲信号改变为角位移或线位移的开环控制元件。在非超负载的状况下,电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变幻的影响。
5、所以在驱动程序中间只需要考虑这两个方面的影响。本系统的步进电机的四相由硬件地址0x28000006的bit0bit3控制,bit0对应motor_a,bit1对应motor_b,bit2对应motor_c,bit3对应motor_d。本文所描述的驱动是针对整步模式下的步进电机,整步模式下的步距角18。在整步模式下的脉冲分配信号如表所示。所以在程序中需要通过编制脉冲分配表控制步进电机,并且通过修改脉冲分配表可以实现步进电机方向的控制。系统的步进电机仅仅是一个输出的通道,只能挨次的举行控制的操作,因此作为一个字符设备来举行驱动。对于字符设备的操作而言驱动程序需要提供相关的几个操作分离为open,r
6、ead,write,ioctl等相关的函数入口点。在驱动程序的实现过程中需要定义这些文件相关的操作,填充进入file_operations结构中。与一般文件相比,设备文件的操作要复杂得多,不行能容易的通过read、write等操作来实现。并且因为对于步进电机驱动程序没有相关的输入与输出,更关注的是对硬件的控制,因此在驱动程序对于write操作和read操作仅需返回0,而对于硬件的控制只需要在驱动程序中实现ioctl函数,并在其中添加相应的case即可。通过cmd区别操作,通过arg传递参数和结果。33 步进电机驱动程序设计由于步进电机用到了i/o端口,而在9中操作端口要用虚拟地址而非实际的物理
7、地址,所以要修改内核代码。修改文件内核源代码中间的smdk.c,在结构体static struct map_desc smdk_io_desc _initdata = vcs8900_base, pcs8900_base, 0x00100000, domain_io, 0, 1, 0, 0 , vcf_mem_base, pcf_mem_base, 0x01000000, domain_io, 0, 1, 0, 0 , vcf_io_base, pcf_io_base, 0x01000000, domain_io, 0, 1, 0, 0 ,last_desc;中添加一行数组元素 0xd3000
8、000, 0x28000000, 0x01000000, domain_io, 0, 1, 0, 0 ,则步进电机的物理地址0x28000006对应的虚拟地址为0xd3000006,在驱动程序中应对这个地址举行操作。定义全局变量num和status用来控制步进电机的速度和方向:static int num=1;static enumoff,clockwise,anticlockwise status=off;定义步进电机的整步模式正转脉冲表:unsigned char pulse_table =0x05, 0x09, 0x0a, 0x06,;定义时钟节拍函数time_tick()static
9、void time_tick(unsigned long data)static int i=0;switch(status)case off: break;case clockwise:if(+i=num)i=0;if( row = 4 ) row = 0;(*(char *)0xd3000006)=pulse_tablerow+;ttimer.expires=jiffies+1;add_timer(&ttimer);break;case anticlockwise:if(+i=num)i=0;if( row = -1 ) row = 3;(*(char *)0xd3000006)=puls
10、e_tablerow-;ttimer.expires=jiffies+1;add_timer(&ttimer);break;case default: break;在time_tick()函数中推断步进电机的状态,是停止、正转还是反转。若是正转,则按正向挨次发送脉冲,并添加定时器ttimer;若是反转,则按反向挨次发送脉冲,并添加定时器ttimer;若是停止则不再发送脉冲,也不再添加定时器。在stepper_module_init()函数中申请i/o端口,并初始化定时器ttimer:if(check_region(0x28000006, 1) /看该i/o端口是否已经被占用printk(the
11、 stepper port is used by another module.n);return -1;request_region(0x28000006, 1, device_name); /申请该i/o端口init_timer(&ttimer); /初始化定时器ttimerttimer.function=time_tick; /填写定时器处理函数为time_tick()编写ioctl函数用来接收应用程序对于步进电机的控制。int device_ioctl( struct inode *inode, struct file *file, unsigned int ioctl_num,uns
12、igned long ioctl_param)struct stepper * s;/* 按照实际程序中的不同需求更改ioctl函数的调用*/switch (ioctl_num)case ioctl_set_msg:s = (struct stepper*) ioctl_param;switch (s-cmdid)case 0: /*开头*/status=clockwise;ttimer.expires=jiffies+1; /开启定时器add_timer(&ttimer);break;case 1: status=off; break; /*停止*/case 2: /*反转*/if(status=clockwise) status=anticlockwise; if(status=anticlockwise) status=clockwise; break;case 3: if(num!=1)num-; break; /*加速*/case 4: num+; break; /*减速*/return 0;通过s指针得到stepper结构中的表示指令类型的参数,按照该参数推断指令类型,0是start起动,1是stop停止,2是reverse反向,3是up电机加速,4是down电机减速,通过转变全局变量num和status来控制电机。电机的起动
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年智能纺织服装供应链可视化管理
- 2026铁岭市中考英语查缺补漏专练含答案
- 同城宣传活动方案策划(3篇)
- 婚纱联名活动方案策划(3篇)
- 旅游聚餐活动方案策划(3篇)
- 活动公司策划方案范文(3篇)
- 电器元旦活动方案策划(3篇)
- 饭店实惠营销方案(3篇)
- 妊娠合并血栓前状态的抗凝治疗监测指标
- 国庆红酒营销方案(3篇)
- 深度强化学习在机器人控制中的应用-深度研究
- 人工智能导论-第2版-全套课件
- 《智慧物流与供应链》课件-项目八 智慧物流与供应链管理的运作模式
- 2024年部编版高考语文一轮复习必背重点:古代文化常识
- GB/T 4706.27-2024家用和类似用途电器的安全第27部分:风扇的特殊要求
- DL∕T 1965-2019 回转式翻车机系统运行维护导则
- 公司及部门年度经营责任书(模板)
- MH-T 5002-2020运输机场总体规划规范
- 甲磺酸奥希替尼片-临床用药解读
- 医务人员职业风险与防护课件
- 9《那个星期天》课件
评论
0/150
提交评论