嵌入式linux直流电机驱动程序的设计._第1页
嵌入式linux直流电机驱动程序的设计._第2页
嵌入式linux直流电机驱动程序的设计._第3页
嵌入式linux直流电机驱动程序的设计._第4页
嵌入式linux直流电机驱动程序的设计._第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、辽宁工业大学 课程设计说明书(论文)辽宁工业大学单片机及接口技术 课程设计(论文)题目:直流电机驱动程序的设计院(系): 电子与信息工程学院专业班级:计算机101学 号: 100401018学生姓名:郑杭指导教师:瞿涛教师职称:讲师起止时间:13-12-28 至 14-01-10课程设计(论文)任务及评语院(系):电子与信息工程学院教研室:计算机科学与技术号 学杭 K 关课程设计 (论文) 题目流 直课程设计论文 >任务讪用» 紂 伽 抄 M,互 或 相 ) 禁 机 禺 严 动 电 , 电 口 > 流WM 直 的 左 O 整 字、元00 匕匕 * O ws Il 畑 容

2、换 芯 几 钳 路 计份 厶冃 一 一 O 为7 流 以W加观伽 直 M 刖流爪卄 将。 制 利序肿妇 wtMM图 測 利朗完印 胆转:細W怖 育 M以打 M血W则何卄叽 M十 iiIfflMa r/ 4 Tr- IT 4<一 一 - IV 巳土、 流能十#路也设原+:刘妇 根m认撰 ff电近电Lr>itt近胡ffi:1>路2>3> 流要件直总设件态和求 电 直主e1.23 软1.2 要 出指导教师评语及成绩日月年指绩成总目录第1章嵌入式linux 1第2章设备驱动程序简介32.1设备驱动程序的概念32. 2设备驱动程序的基本结构 3第3章搭建交叉编译环境53.1

3、 安装 Redhat 9.0Linux 操作系统53.2安装交叉编译器53.3配置NFS网络文件系统53.4链接挂载5第4章 直流电机驱动程序的编写 64.1驱动程序的编写64.2直流电机用户应用程序 94.3驱动程序的编译文件 Makefile 104.4用户程序的 Makefile 文件11第5章运行程序125.1建立设备进入点 125.2加载驱动程序125.3运行用户应用程序 12第6章课程设计总结13参考文献14辽宁工业大学 课程设计说明书(论文)第1章嵌入式linuxLinux操作系统核心最早是由芬兰的 Linus Torvalds于1991年9月在芬兰赫辛基大 学上学时发布的(Li

4、nux 0。01版,第一个正式向外公布的Linux内核版本),后来经众多 世界项尖的软件工程师不断修改和完善,Linux得以在全球普及开来,在服务器域及个人 桌面领域得到越来越多的应用。Linux是在GNU公共许可权限下免费获的,是一款符合 POSIX标准的多用户、多任务、支持多线程和多CPU的类Unix操作系统。Linux以其高效 性和活跃性著称。Linux模块化的设计结构,使得它既能够在格昂贵的工作站上运行又能 够在廉价的PC机上实现全部的Unix特性。Linux当前有很多发行版本,流行的有:RedHat Linux、Debian Linux、ReflagsLinux、Ubuntu等。由于

5、集成电路技术的飞速发展,嵌入 式系统的开发从单片机时代进入到了一个“系统开发的阶段,嵌入式操作系统也逐渐 走上了历史舞台。从国内和国外来看,嵌入式操作系统主要有 WindowsCE VxWorks pSOS Palm OS等。Linux是一个成熟、稳定的操作系统,由于其在嵌入式开发方面具有其它操 作系统无可比拟的优势,经过这几年的发展,已迅速跻身主流嵌入式开发平台。Linux作为嵌入式操作系统的优势在于:1. Li nux 是开放源代码的免费软件。只要遵守 GPL的规定,就可以免费获得Linux 内核和其它自由软件的源代码,采用Linux操作系统构建嵌入式系统,可以大大降低开发 成本和周期。2

6、丄inux具有完善的文档和广泛的技术支持。Linux是互联网充分发展的产物,在网 上能够找到许多关于Linux的文档以及强大的技术支持。3丄inux内核功能强大,性能高效、稳定。Linux的内核非常稳定,它的高效和稳定 性已经在各个领域,尤其是在网络服务器领域得到了事实的验证。4.Linux能够支持多种体系结构,是支持微处理器种类最多的操作系统。目前,Linux 已经被移植到数十种硬件平台上,几乎所有主流的硬件平台,如 X86 ARM PPC MIPS ALPHA SPAR(等, Linux 都支持。5丄inux拥有强大的网络功能。随着嵌入式系统的发展,嵌入式系统与Intemet结合得越来越紧

7、密。与其它操作系统相比,Linux在网络方面有较大的优势,基本上所有的网 络协议和网络接口都可以在 Linux上找到。6.Linux大小和功能可定制。Linux继承了 Unix的优秀设计思想,内核与用户界面完 全独立,各部分的可定制性很强,可以按照需求进行定制和配置, 这对于硬件资源有限的 嵌入式系统是一个理想的选择。2辽宁工业大学 课程设计说明书(论文)第2章设备驱动程序简介2.1设备驱动程序的概念设备驱动程序是有内核中的相关例程和数据组成的1/O设备软件接口,每当内核意识到要对某个设备今次那个特殊的操作是,它就调用相应的驱动例程,当驱动例程完成后,就返回至用户进程。设备驱动程序是操作系统内

8、核、硬件之间的接口。设备驱动程序为应用程序忽略 了硬件的细节,这样在应用程序看来,硬件设备只是一个设备文 件,应用程序可以象 操作普通文件一样对硬件设备进行操作。设备驱动程序是内核的一 部分,它文成以下功能:(1) 对设备初始化和释放。(2) 把数据从内核传送到硬件和从硬件读取数据。(3) 读取应用程序传送给设备文件的数据和回送应用程序请求的数据。(4) 检测和处理设备出现的错误。每个设备驱动程序都有以下几个特性:(1) 具有一整套的和硬件设备通讯的例程,并且提供给操作系统一套标准的 软件接口。(2) 有一个可以被操作系统动态调用和移除的自包含组件。(3) 可以控制和管理用户程序和物理设备之间

9、的数据流。2. 2设备驱动程序的基本结构对用户程序而言,设备驱动程序隐藏了设备的具体细节, 对各种不同设备提供了一致 的接口。一般设备驱动程序可以分为三个主要组成部分:(1)自动配置和初始化子程序:自动配置和初始化子程序常在相应的 driver中实现,负 责检测所要驱动的硬件设备是否存在和是否能正常工作。如果该设备正常,则对这个设备及其相关的设备驱动程序需要的状态进行初始化。这部分驱动程序仅在初始化的时候调用 一次。服务于I/ O请求的子程序:它又称为驱动程序的上半部分, 调用这部分是由于系统调用的结果。这部分程序在执行的时候,系统仍认为是和进 行调用的进程属于同一个进程,只是由用户态变成了核

10、心态,具有进行此系统调用的用户 程序的运行环境。因此可以在其中调用 sleepO等与进程运行环境有关的函数。(3)中断服务子程序:在Lintm系统中,并不是直接从中断向量表中调用设备驱动程序的中断服务子程序,而是由系统来接收硬件中断,再由系统调用中断服务子程 序。中断可以产生在任何一个进程运行的时候,因此,在中断服务程序被调用的时候, 不能依赖于任何进程的状态,也就不能调用任何与进程运行环境有关的函数。因为设备驱动程序一般支持同一类型的若干设备,所以一般在系统调用中断服务子程序的时候, 都带有 一个或多个参数,以唯一标识请求服务的从设备。4辽宁工业大学 课程设计说明书(论文)第3章搭建交叉编译

11、环境3.1安装Redhat 9.0Linux操作系统在PC机上安装虚拟机,并在虚拟机上安装Redhat 9.0Linux操作系统。3.2安装交叉编译器似乎 启动虚拟机并以root用户名登录,在主机的根目录/下,创建linuette目录, 如:mkdir /linuette 。在mnt/cdrom目录下找到光盘,将光盘中 RPM?文件夹拷贝到 /linu ette目录下,打开系统工具下地终端,此时,系统将弹出终端框,在里面改变目/linuette/RPMS 下,输入如下命令:#rpm - Uvh *.rpm3.3配置NFS网络文件系统根据在Linux主机终端上执行setup,选中Firewall

12、 configuration,回车,进入系统服务选项菜单,选择 NOFIREWAL关闭防火墙。之后选中System setvices回车,选 中*nfs.保存退出。利用编辑器打开/etc/exports 文件,修改为:/(rw)保存退出。改 变目录到/etc/rc.d/init.d/下,执行如下命令:./nfs start 3.4链接挂载用交叉网线主机和实验系统链接起来,打开minicom,配置波特率为115200,无奇偶校验位。给系统上电,利用ifconfig eth0 192.168.0.12改变系统IP地址。在主机终端 上配主机Linux系统IP地址为192.168.0.11.利用pin

13、g命令看主机与实验系统是否链接 上。利用chmod - R 777 /home/nfs改变/home/nfs文件夹属性,在 minicom上输入命令 mount 192.168.0.11/home/nfs /mnt/yaffs回车,挂载主机上的 /home/nfs 到实验系统的/mnt/yaffs 目录下。至此,Linux实验环境搭建成功。5辽宁工业大学 课程设计说明书(论文)第4章 直流电机驱动程序的编写4.1驱动程序的编写首先是设备初始化,定义直流电机驱动程序的初始化函数 ZLDJinit (),在函数中实 现向系统注册设备号、设备名称和初始化寄存器。向系统注册设备,这里定义电机的主设 备

14、号宏符号名为ZLDJ-MAJOR设备名称为zldj-drv ,设备的结构体为&ZLDJ-ops,则设备 的注册函数为:Devfs-register-chrdev(ZLDJ-MAJOR, ” zldj-dev ”,ZLDJ-ops);设备初始化函数: Static int in tZLDJ-i ni t(void)In t ret=-ENODEV;ret= Devfs-register-chrdev(ZLDJ-MAJOR, ” ZLDJ-drv ” ,&ZLDJ-ops); showversio n();printk(ZLDJ-Module register success! -

15、kernel-n”);if(ret<0)/当返回值小于0时,设备注册失败Printk (” Could not register ZLDJ-driver ”);return 0;驱动程序的file-operation数据结构,由于直流电机驱动程序只能控制电机旋转和停止,因此只需要接口函数ioctl ()就够了。static struct file-operations ZLDJ-ops=Ioctl:ZLDJ-ioctl ,控制直流电机转动和停止的借口函数,控制直流电机转动和停止的借口函数ioctl()后,主要是设备寄存器 GPRS与寄存器GPCR勺值。GPSM置位寄存器,当取值为1时,电

16、机开始转动。GPSR2 |= (0x1«20;/ 电机正转GPSR2 |=(0x1<<18;/ 电机反转GRC为复位寄存器,当取值为1时,电机停止转动。GPCR2 |=(0x1<<20;/电机正转停止GPCR2 |=(0x1<<18;/电机反转停止udelay ()设置一段时否则会产生溢出,因此为了能让电机旋转一段时间后,自动停止转动,要使用函数 间延迟。由于函数udelay ()是微妙级,且该值不能取得太大, 设置一个循环来加大延迟的时间。for ( i=0 ; i<300;i+)udelay(8000);/ 延时直流电机驱动源程序:#i

17、ncludevli nux/con fig.h>#i ncludevli nu x/kernel.h>#in cludevli nu x/sched.h>#i ncludevli nu x/timer.h>#in cludevli nux/ini t.h>#in cludevli nu x/module.h>#in cludevli nu x/delay.h>#in cludevli nux/in terrupt.h>#i ncludevli nu x/devfs-fs-kernel.h>#in cludevli nu x/fs.h>

18、#in cludevli nu x/slab.h>#in cludevasm/io.h>#i ncludevli nu x/asm/irq.h>#i ncludevli nu x/hardware.h>#define ZLDJ-MAJOR 111#define VERS ” ZLDJ-dev”void showversi on(v oid)prin tk();9辽宁工业大学 课程设计说明书(论文)printk(“ sn”,VERS);prin tk(*nn);/* 接口函数 ioctl*/*file,u nsig nedintssize-tZLDJ-ioctl(stru

19、ct inode*ino de,struct filecmd, un sig ned long arg)int i;GPSR2 |=( 0x1«20;/电机正转for ( i=0 ; i<300;i+)udelay(8000);/延时GPCR2 |=( 0x1<<20;/电机正转停止for ( i=0 ; i<300;i+)udelay(8000);/延时GPSR2 |=( 0x1<<18;/电机反转for ( i=0 ; i<300;i+)udelay(8000);/延时GPCR2 |=( 0x1<<18;/电机反转停止udel

20、ay(arg);return 0;static struct file-operati ons ZLDJ-ops=ioctl ZLDJ-ioctl,;static int init set-ZLDJ-i nit(void)int ret=-ENODEV;ret=devfs-register-chrdev(ZLDJ-MAJOR, ” ZLDJ-drv ”,&ZLDJ-ops); showvers ion();printk(“ZLDJ-Module register success!-kernel-n”);if(retvO)/当返回值小于0时,设备注册失败printk (“ Could n

21、ot register ZLDJ-driver ”);return 0;static void exit clea nup-ZLDJ-ctl(void)#ifdef OURS-HELLO-DEBUGprintk(“ cleanup-Module-kernel-n”);#en difdecfs-unregister-chrdev(ZLDJ-MAJOR,” ZLDJ-drv ” )MODULE-LICENS“(GPL )module-i nit(set-ZLDJ-i nit);module-exit(clea nup-ZLDJ-ctl);4.2直流电机用户应用程序直流电机用户应用程序设计分析,直流

22、电机应用程序的功能是在用户空间调用设备驱动程序,其主要设计步骤如下。第一步,获取直流电机驱动程序的文件描述符。fd=open ("/dev/zldj_drv",O_RDWR );第二步,调用设备驱动程序中的函数ioctl (),向电机发出控制指令。ioctl(fd,0x1,1000);直流电机用户应用程序源程序:#i nclude<stdio.h>#in clude<sys/ioctl.h>#in clude<fc ntl.h>#in cludev un istd.h>int mai n() int fd,i nt ret;fd=o

23、pe n("/dev/zldj_drv",O_RDWR);if(fd<0) prin tf("nn Ope n device zldj error' n"); prin tf("n please in put Number (0-9):"); scan f("%x",&ret);ioctl(fd,0x1,1000);close(fd);printf("End of Test'n");return 0;4.3驱动程序的编译文件MakefileKERNELDIR=/Li

24、 nuxINCLUDEDIR=$(KERNELDIR)/i ncludeCROSS_COMPILE=arm-Li nux-CC =$(CROSS_COMPILE)gccCFLAGS+=-l.CFLAGS+=-Wall-O-D_KERNEL_-DMODULE-l $ (INCLUDEDIR)TARGET=zldj_drv.oall:$(TARGET)zldj_drv.o:zlidj_drv.c$(CC) -c $ (CFLAGS) $ A-o $ in stall:in stall-d $ (INSTALLDIR)in stall-c $ (TARGET).o $ (INSTALLDIR)cle

25、an :rm-f *.o * core .depe nd4.4用户程序的Makefile文件CC=arm-L inu x-gccSTD= _GUN_SOURCEWARN= -WallTARGTS=testZLDJ.c.o:$(CC) -c $ (CFLAGS)-D $ (STD) $ (WARN) $ < all: $(STARGTS)TestZLDJ:testZLDJ.o$(CC)testZLDJ.o -o testZLDJclea n:rm-f *.o core a.out $ (TARGTS)clobber:clea nrm-f $ (TARGTS)13辽宁工业大学 课程设计说明书(论文)第5章运行程序5.1建立设备进入点由于直流电机驱动程序中已经定义其主设备号为111,此设备号没有定义,故取默认值为0.直流电机的设备进入点为zldj_drv。创建直流电机驱动程序的设备进入点如下: rootLi nux dcmo_drv# mk nod/dev/zldj_drv c 111 05.2加载驱动程序使用命令ins

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论