嵌入式linux直流电机驱动程序的设计Word格式文档下载.docx
- 文档编号:13443195
- 上传时间:2022-10-10
- 格式:DOCX
- 页数:12
- 大小:23.02KB
嵌入式linux直流电机驱动程序的设计Word格式文档下载.docx
《嵌入式linux直流电机驱动程序的设计Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《嵌入式linux直流电机驱动程序的设计Word格式文档下载.docx(12页珍藏版)》请在冰豆网上搜索。
13-12-28至14-01-10
课程设计(论文)任务及评语
电子与信息工程学院教研室:
计算机科学与技术
学号
100401018
学生姓名
郑杭
专业班级
计算机101
课程设计(论文)题目
课程设计(论文)任务
直流电机是指能将直流电能转换成机械能(直流电动机)或将机械能转换成直流电能的旋转电机。
主要设计内容:
硬件电路设计:
1.直流电机原理及控制技术
2.总体设计方框图
3.设计原理分析
软件设计:
1.系统软件功能说明
2.程序设计
要求:
1、根据题目和所用的接口电路芯片设计出完整的接口电路,并用计算机绘制出电路原理图以及程序流程图。
2、认真独立完成所规定的设计内容(4000字左右),严禁相互抄袭;
3、撰写、打印设计说明书一份。
指导教师评语及成绩
总成绩:
指导教师签字:
年月日
目录
第1章嵌入式linux1
第2章设备驱动程序简介3
2.1设备驱动程序的概念3
2.2设备驱动程序的基本结构3
第3章搭建交叉编译环境5
3.1安装Redhat9.0Linux操作系统5
3.2安装交叉编译器5
3.3配置NFS网络文件系统5
3.4链接挂载5
第4章直流电机驱动程序的编写6
4.1驱动程序的编写6
4.2直流电机用户应用程序9
4.3驱动程序的编译文件Makefile10
4.4用户程序的Makefile文件11
第5章运行程序12
5.1建立设备进入点12
5.2加载驱动程序12
5.3运行用户应用程序12
第6章课程设计总结13
参考文献14
第1章嵌入式linux
Linux操作系统核心最早是由芬兰的LinusTorvalds于1991年9月在芬兰赫辛基大学上学时发布的(Linux0。
01版,第一个正式向外公布的Linux内核版本),后来经众多世界项尖的软件工程师不断修改和完善,Linux得以在全球普及开来,在服务器域及个人桌面领域得到越来越多的应用。
Linux是在GNU公共许可权限下免费获的,是一款符合POSIX标准的多用户、多任务、支持多线程和多CPU的类Unix操作系统。
Linux以其高效性和活跃性著称。
Linux模块化的设计结构,使得它既能够在格昂贵的工作站上运行又能够在廉价的PC机上实现全部的Unix特性。
Linux当前有很多发行版本,流行的有:
RedHatLinux、DebianLinux、ReflagsLinux、Ubuntu等。
由于集成电路技术的飞速发展,嵌入式系统的开发从单片机时代进入到了一个“系统’’开发的阶段,嵌入式操作系统也逐渐走上了历史舞台。
从国内和国外来看,嵌入式操作系统主要有WindowsCE、VxWorks、pSOS、PalmOS等。
Linux是一个成熟、稳定的操作系统,由于其在嵌入式开发方面具有其它操作系统无可比拟的优势,经过这几年的发展,已迅速跻身主流嵌入式开发平台。
Linux作为嵌入式操作系统的优势在于:
1.Linux是开放源代码的免费软件。
只要遵守GPL的规定,就可以免费获得Linux内核和其它自由软件的源代码,采用Linux操作系统构建嵌入式系统,可以大大降低开发成本和周期。
2.Linux具有完善的文档和广泛的技术支持。
Linux是互联网充分发展的产物,在网上能够找到许多关于Linux的文档以及强大的技术支持。
3.Linux内核功能强大,性能高效、稳定。
Linux的内核非常稳定,它的高效和稳定性已经在各个领域,尤其是在网络服务器领域得到了事实的验证。
4.Linux能够支持多种体系结构,是支持微处理器种类最多的操作系统。
目前,Linux已经被移植到数十种硬件平台上,几乎所有主流的硬件平台,如X86、ARM、PPC、MIPS、ALPHA、SPARC等,Linux都支持。
5.Linux拥有强大的网络功能。
随着嵌入式系统的发展,嵌入式系统与Intemet结合得越来越紧密。
与其它操作系统相比,Linux在网络方面有较大的优势,基本上所有的网络协议和网络接口都可以在Linux上找到。
6.Linux大小和功能可定制。
Linux继承了Unix的优秀设计思想,内核与用户界面完全独立,各部分的可定制性很强,可以按照需求进行定制和配置,这对于硬件资源有限的嵌入式系统是一个理想的选择。
第2章设备驱动程序简介
2.1设备驱动程序的概念
设备驱动程序是有内核中的相关例程和数据组成的I/O设备软件接口,每当内核意识到要对某个设备今次那个特殊的操作是,它就调用相应的驱动例程,当驱动例程完成后,就返回至用户进程。
设备驱动程序是操作系统内核、硬件之间的接口。
设备驱动程序为应用程序忽略了硬件的细节,这样在应用程序看来,硬件设备只是一个设备文件,应用程序可以象操作普通文件一样对硬件设备进行操作。
设备驱动程序是内核的一部分,它文成以下功能:
(1)对设备初始化和释放。
(2)把数据从内核传送到硬件和从硬件读取数据。
(3)读取应用程序传送给设备文件的数据和回送应用程序请求的数据。
(4)检测和处理设备出现的错误。
每个设备驱动程序都有以下几个特性:
(1)具有一整套的和硬件设备通讯的例程,并且提供给操作系统一套标准的软件接口。
(2)有一个可以被操作系统动态调用和移除的自包含组件。
(3)可以控制和管理用户程序和物理设备之间的数据流。
2.2设备驱动程序的基本结构
对用户程序而言,设备驱动程序隐藏了设备的具体细节,对各种不同设备提供了一致的接口。
一般设备驱动程序可以分为三个主要组成部分:
(1)自动配置和初始化子程序:
自动配置和初始化子程序常在相应的driver中实现,负责检测所要驱动的硬件设备是否存在和是否能正常工作。
如果该设备正常,则对这个设备及其相关的设备驱动程序需要的状态进行初始化。
这部分驱动程序仅在初始化的时候调用一次。
(2)服务于I/O请求的子程序:
它又称为驱动程序的上半部分,调用这部分是由于系统调用的结果。
这部分程序在执行的时候,系统仍认为是和进行调用的进程属于同一个进程,只是由用户态变成了核心态,具有进行此系统调用的用户程序的运行环境。
因此可以在其中调用sleepO等与进程运行环境有关的函数。
(3)中断服务子程序:
在Lintm系统中,并不是直接从中断向量表中调用设备驱动程序的中断服务子程序,而是由系统来接收硬件中断,再由系统调用中断服务子程序。
中断可以产生在任何一个进程运行的时候,因此,在中断服务程序被调用的时候,不能依赖于任何进程的状态,也就不能调用任何与进程运行环境有关的函数。
因为设备驱动程序一般支持同一类型的若干设备,所以一般在系统调用中断服务子程序的时候,都带有一个或多个参数,以唯一标识请求服务的从设备。
第3章搭建交叉编译环境
3.1安装Redhat9.0Linux操作系统
在PC机上安装虚拟机,并在虚拟机上安装Redhat9.0Linux操作系统。
3.2安装交叉编译器
似乎启动虚拟机并以root用户名登录,在主机的根目录/下,创建linuette目录,如:
mkdir/linuette。
在mnt/cdrom目录下找到光盘,将光盘中RPMS文件夹拷贝到/linuette目录下,打开系统工具下地终端,此时,系统将弹出终端框,在里面改变目/linuette/RPMS下,输入如下命令:
#rpm–Uvh*.rpm
3.3配置NFS网络文件系统
根据在Linux主机终端上执行setup,选中Firewallconfiguration,回车,进入系统服务选项菜单,选择NOFIREWALL关闭防火墙。
之后选中Systemsetvices回车,选中[*]nfs.保存退出。
利用编辑器打开/etc/exports文件,修改为:
/(rw)保存退出。
改变目录到/etc/rc.d/init.d/下,执行如下命令:
./nfsstart
3.4链接挂载
用交叉网线主机和实验系统链接起来,打开minicom,配置波特率为115200,无奇偶校验位。
给系统上电,利用ifconfigeth0192.168.0.12改变系统IP地址。
在主机终端上配主机Linux系统IP地址为192.168.0.11.利用ping命令看主机与实验系统是否链接上。
利用chmod–R777/home/nfs改变/home/nfs文件夹属性,在minicom上输入命令mount192.168.0.11/home/nfs/mnt/yaffs回车,挂载主机上的/home/nfs到实验系统的/mnt/yaffs目录下。
至此,Linux实验环境搭建成功。
第4章直流电机驱动程序的编写
4.1驱动程序的编写
首先是设备初始化,定义直流电机驱动程序的初始化函数ZLDJinit(),在函数中实现向系统注册设备号、设备名称和初始化寄存器。
向系统注册设备,这里定义电机的主设备号宏符号名为ZLDJ-MAJOR,设备名称为zldj-drv,设备的结构体为&
ZLDJ-ops,则设备的注册函数为:
Devfs-register-chrdev(ZLDJ-MAJOR,”zldj-dev”,ZLDJ-ops);
设备初始化函数:
Staticint—intZLDJ-init(void)
{
Intret=-ENODEV;
ret=Devfs-register-chrdev(ZLDJ-MAJOR,”ZLDJ-drv”,&
ZLDJ-ops);
showversion();
printk(ZLDJ-Moduleregistersuccess!
!
[--kernel--]\n”);
if(ret<
0)//当返回值小于0时,设备注册失败
{
Printk(”CouldnotregisterZLDJ-driver”);
}
return0;
}
驱动程序的file-operation数据结构,由于直流电机驱动程序只能控制电机旋转和停止,因此只需要接口函数ioctl()就够了。
staticstructfile-operationsZLDJ-ops={
Ioctl:
ZLDJ-ioctl,
}
控制直流电机转动和停止的借口函数,控制直流电机转动和停止的借口函数ioctl()后,主要是设备寄存器GPRS与寄存器GPCR的值。
GPSR为置位寄存器,当取值为1时,电机开始转动。
GPSR2|=(0x1<
<
20;
//电机正转
18;
//电机反转
GRCR为复位寄存器,当取值为1时,电机停止转动。
GPCR2|=(0x1<
//电机正转停止
//电机反转停止
为了能让电机旋转一段时间后,自动停止转动,要使用函数udelay()设置一段时间延迟。
由于函数udelay()是微妙级,且该值不能取得太大,否则会产生溢出,因此设置一个循环来加大延迟的时间。
for(i=0;
i<
300;
i++)
udelay(8000);
//延时
直流电机驱动源程序:
#include<
linux/config.h>
linux/kernel.h>
linux/
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌入式 linux 直流电机 驱动程序 设计