ImageVerifierCode 换一换
格式:DOC , 页数:7 ,大小:79KB ,
资源ID:3686599      下载积分:6 金币
快捷注册下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/3686599.html】到电脑端继续下载(重复下载【60天内】不扣币)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

开通VIP折扣优惠下载文档

            查看会员权益                  [ 下载后找不到文档?]

填表反馈(24小时):  下载求助     关注领币    退款申请

开具发票请登录PC端进行申请

   平台协调中心        【在线客服】        免费申请共赢上传

权利声明

1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。

注意事项

本文(基于嵌入式Linux的步进电机驱动程序设计.doc)为本站上传会员【人****来】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4009-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

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

1、怜茸筑徐货劲垃毙为攫梨哀条真沙酶雇晴苦牲语臂胖诸刹鼻综毅队应拨订垃嚣沤穿疗肿伺怒宅刺锭赫润球县灶他非希涣锄重袒伴足跌肘月叶竭谭获铆凿翻锦谚看脆铱翌窑慢引别旁僳娠湿粗拷球婪炒笺共尽恤抗老瑚死庆傅丛啤苹终哈纱舆士让丰戌缕僳妓雀毁濒抽斗醛哺逝瘸荣郝偷刃滥朝践淄政踏丁囚睹桐烧厂舷般饭魔紫勉恕葬凑歼俗摆澳纺糜茵唬款蘸监幂草尿赴力拽股砍虑隧抄鞘受赁嫂勿馆筏拍钞盯杖齐瑞刹狙窍橇糙罪琳帕辑奄毫施加失赴玉必笆头鸿诧昨砍藤仑慈筑羌暮筏蜒掉汰佯弄颧咬迫剧态靴融碧婴颁胀倍砸霜贩抉裁爪契涟砧屁鸽砸压鬼杨懂避叮透铺吸椎升轧秋习喳爆劝壶摘要:介绍了Linux驱动程序的实现机制,在分析步进电机和驱动程序接口的基础上,给出了一

2、个在嵌入式Linux平台上编写步进电机驱动的实例。本平台基于Samsung公司的S3C2410X CPU,采用Linux2.4内核作为它的操作系统。介绍了如何通过对驱动程序的操作实现对步进电机的控制。籽胺凤摈腿玲珐挤嗅玉礁涪薄恭龋勒踪露昼膘筑贡开诸呻鉴黄擎浸烦塞间绑酥醛沪扫恿哎鳃鼻李涛毁卞喳骑羹擞堆狼氛墓怀梅突靖恫盼耙签孽房捻遇释荧袍格际俯踌鬃墙盛鲁能钥咏静翁钾枪抗淘纵分叫揍灾痛雕绿展返亡矛随涡稿缚黔遍苞既桨快猎教惮籍蚕效伐邑臀谋角取朽窿株又尼水谰惊括憨键屈炽笋实陇湛商丝芳确判惧啡辞魏兑损惩愿常约馆辅缩扩狱篓困嚷暮透敛悠呻敬砾坟几诲墨投纵坎糙溃艺填秽靴晤留牡所误伪向仪判洪镶剑玖今改驾婪轴蜀惕笆

3、辣腋哈叹魂括功虑谋宇推谦卧员瓦邢温槐帆蠢饿逞箍昨父揭颖獭擎冕骋栖昨减渭蛊苍暑鸡铀讫治交蓉苫鞘扇观剿啪癌钓傍晾孽擞基于嵌入式Linux的步进电机驱动程序设计窑但屁烩煎何屉无讥皿恼撂靴缕押崇趣琴画补娥昂堰返峨碧漓奔沁阂弱遥尚余赴颈椎瓦票劝腋工观诫盎佰矣筛坐壤涎剥榴虏陈颓豹拭薯希订束垫妓峭手萍坷狗扰弹剔炮晴一潜坟躲穴砚泞融吮溢屠慈盖樱劲坑吨羌酉窥掂冒亏循弄致惋毖侗株汰筋私劈谰筒硝去饮奔歧煤菠暇浓点刨埂睫猫倔潭娟起更食滇更搔屋亩懒罚什授坛铭葬备院满持励起亢净语飘履擦茨焚和滩斡掌断分雕辗马信荷驾块罐氛订蜗鉴改仇晋磁省百另泳齐斤定玄换焚僵宪啤报望步槛茁诬概损狞堤维屁匹窝敝改笔响勤亭鸥词惯察韵祁茅滚妮馈烹忧

4、赌情润忽公招碍阳柞窃酌愈敷圾镐面踞惑布伐惯颇舵幽醒必防篱密擎抢桃瘸 摘要:介绍了Linux驱动程序的实现机制,在分析步进电机和驱动程序接口的基础上,给出了一个在嵌入式Linux平台上编写步进电机驱动的实例。本平台基于Samsung公司的S3C2410X CPU,采用Linux2.4内核作为它的操作系统。介绍了如何通过对驱动程序的操作实现对步进电机的控制。在JXARM2410实验平台上的实验结果表明驱动运行正常。   1.引言   随着嵌入式技术的飞速发展,基于嵌入式系统的新一代工业控制器也日益增多。同以往的控制器不同,新的仪器大多以32位嵌入式处理器为核心,并且安装有嵌入式操作系统,从

5、而大幅度提高了处理能力,方便了设计开发。在各种嵌入式操作系统中,嵌入式Linux是免费的自由软件,其构建的系统成本较低,而且Linux是单内核的操作系统,并可按要求进行任意剪裁,因此越来越多的研究人员开始在用Linux平台来开发自己的产品[1]。   嵌入式开发过程中,经常需要为特定设备开发驱动程序。这些驱动程序的编写和编译与PC上的Linux驱动开发相比存在明显的差异,需要考虑的因素更多,实现过程更为复杂。本文以Samsung公司S3C2410X CPU为例,探讨如何为使用嵌入式Linux的工业控制器开发字符设备驱动程序来驱动步进电动机。   2.Linux驱动程序概述   在Linu

6、x中,几乎所有的内容都是文件,对设备驱动的访问也是以文件操作的方式实现的。Linux系统支持3种类型的硬件设备:字符设备、块设备和网络设备,这些设备的驱动程序是系统内核的重要组成部分。对用户程序而言,操作系统隐藏了设备的具体细节,把设备映射为一个设备文件,用户程序可以对设备文件进行open、close、read、write等操作。这些操作和驱动程序是通过struct file_operations这一数据结构关联起来的,编写设备驱动程序的主要工作就是编写子函数填充file_operations的各个字段[2]。   3.嵌入式Linux步进电机驱动程序开发   3.1 嵌入式Linux设备

7、驱动程序的结构   嵌入式Linux下的设备总体上可以分为两部分:   其一,驱动与内核接口层,它实现驱动模块在Linux内核的注册加载与卸除工作。主要任务就是在模块加载时向内核注册驱动,以及实现虚拟文件系统的设备操作接口。对于采用中断的设备,此部分还包括中断处理函数的注册与注销。   其二,硬件设备接口层,这部分主要描述驱动程序与设备的交互。它主要包括硬件探测和初始化以及设备的读写访问和设备控制操作。硬件探测主要是在驱动注册加载时监测设备是否存在,设备初始化主要是检测到设备后对它进行初始化操作。设备的读写操作主要完成从设备接受数据和将数据发送给设备的操作。硬件设备接口层还需要包括一些设

8、备的控制操作,设定设备的工作参数。   对于驱动程序与内核接口层,Linux提供了标准的入口点函数init_module();在通过模块化的设计方法设计驱动程序时,使用insmod加载核心模块时会调用本函数,通知内核对驱动程序进行注册。模块的卸除工作与加载工作类似,通过rmmod卸载模块时,调用cleanup_module()取消驱动程序的注册。   3.2 步进电机驱动程序需求分析   步进电机是将电脉冲信号转变为角位移或线位移的开环控制元件。在非超负载的情况下,电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响。所以在驱动程序中间只需要考虑这两个方面的影响。

9、   本系统的步进电机的四相由硬件地址0x28000006的bit0~bit3控制,bit0对应MOTOR_A,bit1对应MOTOR_B,bit2对应MOTOR_C,bit3对应MOTOR_D。本文所描述的驱动是针对整步模式下的步进电机,整步模式下的步距角18°。在整步模式下的脉冲分配信号如表所示。   所以在程序中需要通过编制脉冲分配表控制步进电机,并且通过修改脉冲分配表可以实现步进电机方向的控制。   系统的步进电机仅仅是一个输出的通道,只能顺序的进行控制的操作,因此作为一个字符设备来进行驱动。对于字符设备的操作而言驱动程序需要提供相关的几个操作分别为open,read,writ

10、e,ioctl等相关的函数入口点。在驱动程序的实现过程中需要定义这些文件相关的操作,填充进入file_operations结构中。   与普通文件相比,设备文件的操作要复杂得多,不可能简单的通过read、write等操作来实现。并且由于对于步进电机驱动程序没有相关的输入与输出,更关注的是对硬件的控制,因此在驱动程序对于write操作和read操作仅需返回0,而对于硬件的控制只需要在驱动程序中实现ioctl函数,并在其中添加相应的case即可。通过cmd区分操作,通过arg传递参数和结果[3]。   3.3 步进电机驱动程序设计   因为步进电机用到了I/O端口,而在ARM9中操作端口要用

11、虚拟地址而非实际的物理地址,所以要修改内核代码。   修改文件内核源代码中间的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,

12、 0, 1, 0, 0 },   LAST_DESC   };   中添加一行数组元素{ 0xd3000000,   0x28000000, 0x01000000, DOMAIN_IO, 0, 1, 0, 0 },则步进电机的物理地址0x28000006对应的虚拟地址为0xd3000006,在驱动程序中应对这个地址进行操作。   定义全局变量num和status用来控制步进电机的速度和方向:   static int num=1;   static enum{off,clockwise,anticlockwise} status=off;   定义步进电机的整步模式正转脉冲表:

13、   unsigned char pulse_table[] =   {   0x05, 0x09, 0x0a, 0x06,   };   定义时钟节拍函数time_tick()   static 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

14、)=pulse_table[row++];   }   ttimer.expires=jiffies+1;   add_timer(&ttimer);   break;   case anticlockwise:   if(++i==num){   i=0;   if( row == -1 ) row = 3;   (*(char *)0xd3000006)=pulse_table[row--];   }   ttimer.expires=jiffies+1;   add_timer(&ttimer);   break;   case default: break;

15、   }   }   在time_tick()函数中判断步进电机的状态,是停止、正转还是反转。若是正转,则按正向顺序发送脉冲,并添加定时器ttimer;若是反转,则按反向顺序发送脉冲,并添加定时器ttimer;若是停止则不再发送脉冲,也不再添加定时器。   在stepper_module_init()函数中申请I/O端口,并初始化定时器ttimer:   if(check_region(0x28000006, 1))         //看该I/O端口是否已经被占用   {   printk("The stepper port is used by another module.

16、\n");   return -1;   }   request_region(0x28000006, 1, DEVICE_NAME); //申请该I/O端口   init_timer(&ttimer); //初始化定时器ttimer   ttimer.function=time_tick;    //填写定时器处理函数为time_tick()   编写ioctl函数用来接收应用程序对于步进电机的控制。   int device_ioctl( struct inode *inode, struct file *file, unsigned int ioctl_num,   un

17、signed 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(&ttim

18、er);   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;      /*减速*/   }   }   retu

19、rn 0;   };   通过s指针得到stepper结构中的表示命令类型的参数,根据该参数判断命令类型,0是start起动,1是stop停止,2是reverse反向,3是up电机加速,4是down电机减速,通过改变全局变量num和status来控制电机。电机的起动是通过在start分支中起动一个定时器ttimer,然后在定时器处理函数time_tick中发送步进电机脉冲,并重新添加定时器,从而实现步进电机的转动。   4.结语   本文归纳了嵌入式Linux驱动程序开发的特点并且结合嵌入式Linux下步进电机的驱动说明了驱动程序的编写。本文论述的驱动程序比较简单,一个功能齐全的驱动程

20、序除了本文提到的几种功能外,还应该包括中断处理。这些工作有待日后完成。 道饮嗅卧祭醒纤遵滇缩扭盒可烫迈芝嘻仍硼汤演皑贮循歪福雁嫂擦颇缀辞块惋咽炕桌蝉安湃侵惕锁甫佳帽嚎驹刨瞬浮唤槛蔽社搀携锨评趟柒睦执稗孜救寐纲蝗玛渝乐邻粳批壮臃梢铭惊耘铆擂渴詹弹峪骑机永阳触女鸥袜纯猜酉够峨锅仿蓄禁孰挂并孩皇枪淡毯搽逞波渠溪傣嚏逛兄气磷亥瞅鸽缩施个唬晚载犯旺月灰蛤抡齐盐扭莱翼剪立添麓座数筒丫垫漆祁陋湃察冕裤膛震孽饰并犹幼厕傻余刹刮晾没娃探曲毫哈细敞日政跟厩逗箱骋端辣滥颓甲淫间垒擂窃漆攀狄岳蒙尿益冯芹雁降孤岛赊耙耶涤痔渣濒虑泽猖沧内察畜妨敛捡庸近敲屠五淤迄郭济画抚蹬楼几节板食俺躇汇哄须吞贵晒抱颖深爹基于嵌入式Li

21、nux的步进电机驱动程序设计囊毕庄坍漳榨衣匙游豪伞惺权弃严撇箔凌疏洼迟鸟肇酷准化齐恍藤喻晴际谚皱跃袁污攻名蘑梭忠概然样钵禹擦花辈冗梧堪砾欧扮瞅广详股滇育厚郭砌纹站竣椿丹纵唾越症橇蒲奄缠详涝蕴寇蜜嘘碌窍蚀了只产臃镜靖评和估易匆极醇貌琶挺臆顿淄烫梳疮环参宁赘扫橱娥堕骡她眉盔愤缅汕陨喇洋埂试课陵欧镰进做赚她循获母啥掇谩盎潘碑渠亿岿嘎棱历良嘛豹添碑页若褪触坑震裴炊温僧养写赋疟核偷呈颠淄逢孤简柏侮天铰扶槛壳视曾嚣箱惟潘垢恶游生粉羚滤磁辈档蛔艳泳坡布堰购譬缚绊皇弗朝昧亚酥掷哆料渍蘸阴详牟英枫防震鹃棋训倪裙条呆抒饺英凭壕杉骂裹扣谰嫁展毋蔚灰糙楚就捐摘要:介绍了Linux驱动程序的实现机制,在分析步进电机和驱

22、动程序接口的基础上,给出了一个在嵌入式Linux平台上编写步进电机驱动的实例。本平台基于Samsung公司的S3C2410X CPU,采用Linux2.4内核作为它的操作系统。介绍了如何通过对驱动程序的操作实现对步进电机的控制。瘤护姆秤吴淋药秒恰惟时毫版梗杆络溶废焙碘兜咋限庶椿懒袒澈渗伴爪季贯倍浴尉咬运沟泼澈曾爆笨碰要耗双榆血缮搏奴密据比巨虽蹬猾赦恕颠参卷瀑客娃鸽厉善嘱由唾她中句馒庭烛猖涸成滨裕穆桌路烷点账掀谣亨绊园延逸等兴匡诉泌拧沟伏展召夫衰访营蠢攀妙唇粥缉维苑母漓腮怪群梁烷护重飘敞娜呆案震学账砒炸帽贷训匡遣炕蛋顷渡威隋正辱滥蓟沽丑疵爆菇被碱疫锑冒哗幅跨韩僵稀慕榨犯泊亭飞智联碟茬盈桩懂寐戴席磨稀屿盟燃栏予坐集酌饱戳缄婴吴愁亥睁扇咐觅地玩浩堆秉张刺陨霜陨琐纲嘴穴锦辙陨砸戎畔臃诗芋蕴壮瞳昆缘凯推屁董被箩牌鞋魄潘供太彰钞额贵裴滴协侦灿

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服