APP下载

WinCE下步进电机驱动程序的设计与应用

2016-09-09兰文涛

电子设计工程 2016年16期
关键词:驱动程序低电平寄存器

袁 博,兰文涛

(1.西安铁路职业技术学院 陕西 西安 710014;2.华为科技有限公司西安研究所 陕西 西安 710000)

WinCE下步进电机驱动程序的设计与应用

袁 博1,兰文涛2

(1.西安铁路职业技术学院 陕西 西安 710014;2.华为科技有限公司西安研究所 陕西 西安 710000)

为了实现S3C2440开发板中的GPIO流接口驱动开发,完成了在WinCE下驱动程序所包含的函数以及如何在应用程序中调用驱动程序的开发过程,并解决了控制步进电机运动的工作问题,对在WinCE下开发流驱动以及控制步进电机的运动具有一定的启示作用。

WinCE;GPIO驱动;步进电机

随着计算机和通信技术的迅速发展,嵌入式系统在各行业得到了广泛应用。WinCE系统是微软公司推出的一种开放的、可裁剪的、32位实时嵌入式操作系统,被广泛应用于工业控制、移动通信、汽车电子、个人消费品等各个领域。WinCE作为嵌入式系统,有其自身的特殊性,为了提高运行效率,所有驱动皆为动态链接库(DLL),驱动实现可以通过标准流接口函数。对于大多数GPIO外围设备来说,适用于采用流接口驱动程序模型来开发驱动程序。文中在 WinCE下开发了GPIO驱动程序,然后将其烧写进内核映像重新加载,为控制步进电机开发所用。

1 流接口驱动

WinCE驱动从结构上讲分为本地驱动和流接口驱动。本地驱动专为顶层内置硬件而设计,如键盘、触屏等。这类驱动程序总是在WinCE平台启动时被自动加载。与本地驱动程序相对应的是流接口驱动,它是一般类型的设备驱动程序,在实现形式上表现为一个动态链接库DLL,由一个叫做设备管理(Device Manager)程序的特殊应用程序加载、管理和卸载。流接口驱动程序是一种可以定制接口的驱动模型,它的接口是一组固定的流接口函数(见表1),具有很高的通用性,WinCE所有的驱动程序都可以通过这种方式来实现。

由于流接口驱动程序经过编译后,最终生成的驱动程序文件为dll文件,所以流接口函数也称作流接口驱动程序的dll接口,这些函数与硬件打交道。在应用层上,开发者通过使用文件系统 API函数:CreatFile、DeviceIoContronl、ReadFile、WriteFile与驱动程序打交道,进行对驱动程序的调用以及功能开发。

表1 流接口驱动函数

2 GPIO驱动程序实现

2.1WinCE下GPIO工作原理

在WinCE中,程序访问的地址都是虚拟地址,因此要访问硬件物理地址,必须将硬件物理地址空间映射到虚拟空间。GPIO口是一个比较重要的概念,用户可通过GPIO口和硬件设备进行数据交互,控制硬件设备 (如步进电机等)工作,读取硬件设备的工作状态数据等。在ARM9平台上,WinCE系统将GPIO的实地址(S3C2440A的GPIO的基地址为 0x56000000)映射到虚拟地址空间(GPIO对应为0xB1600000),这样,通过对这段虚拟地址空间的操作,就能够完成对GPIO或者其他片内资源的控制、输入输出工作。

S3C2440A一共有8组GPIO口,117个引脚。这些GPIO口大部分是复用的,可以作为输入、输出以及特殊功能口,通过配置寄存器 (GPxCON)来配置为不同的功能。步进电机GPIO口的控制首先需要设置GPxCON寄存器为输出功能,然后再通过设置GPxDAT寄存器的值为0或1来实现控制GPIO口的高低电平,发送脉冲信号。

2.2GPIO驱动实现过程

WinCE下GPIO驱动程序开发,不管是什么设备,它们的实现框架都是相同的,实际上就是完成一个典型的流接口驱动程序设计,只要把相关的流接口函数实现即可。文中驱动程序的所有文件名用GPIO来命名,实现过程如下:

1)新建GPIO_Driver cpp文件,添加一些头文件和完善接口函数的内容,主要有:GPI_Init()函数主要是定义一个寄存器结构变量,并给这个变量分配空间并映射到寄存器的空间上。VirtualAlloc()函数的功能是申请一块虚拟内存空间,该空间 的 大 小为 sizeof(S3C2440_IOPORT_REG) 字 节 。VirtualCopy()函数的功能是将VirtualAlloc()函数申请到的虚拟空间映射到 GPIO寄存器的物理地址(PVOID)(S3C2440_BASE_REG_PA_IOPORT>>8)。经映射后,通过全局结构体变量指针v_pIOPregs就可以访问GPIO寄存器了。GPI_Open()和GPI_Close()函数主要是为应用程序调用GPIO驱动时提供打开或者关闭的句柄,GPI_IoControl()函数用于设置寄存器。因为GPIO都设置为输出口,故GPI_Read()函数未用到。GPI_Deinit()函数为驱动卸载函数。

2)创建.def文件,指出需要导出的函数。内容如下:

3)新建注册表文件gpi.reg,内容如下:

4)新建Makefile文件,内容如下:

该文件指出了驱动程序的编译和链接方法,但实际上该文件并不做什么事情,具体的方法由Sources文件进行设置。

5)新建Sources文件,内容大致如下:

Sources文件,编译和链接文件,用于设置连接器和编译器,指出驱动程序的编译和链接方法。

6)生成GPI.dll动态链接库,这就是流接口驱动程序的源代码经过PB的编译生成的DLL,该文件就是WinCE设备管理器能够识别并管理的流接口驱动程序文件。

7)将驱动文件编译进内核

①修改dirs文件,添加以下内容:

②修改dirs文件,添加以下内容:

加入这一行,指明在生成 WinCE内核映像时自动将GPIO.dll加入到内核映像。

③修改platform.reg文件,添加以下内容:

到此,GPIO口驱动程序所需的文件就修改完毕了,重新编译内核将生成的映像文件烧写到开发板,完毕后自动启动WinCE,到这里驱动程序就全部烧写完成了。

3 控制步进电机程序的实现

步进电机是将电脉冲信号转变为角位移或线位移的开环控制元步进电机件。当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度。即要使步进电机运动,只需对应引脚输出高电低电平即可。

利用VS2005开发一个可运行在S3C2440开发板WinCE下的应用程序,该应用程序通过调用GPIO驱动来控制步进电机运动。由于GPIO驱动为流驱动程序,用CreatFile()函数以文件方式打开驱动,内容为:

然后使用该句柄调用DeviceIoControl()函数,内容为:

利用Sleep()函数进行高低电平延时发送步进电机所需的脉冲信号。

应用程序编制完后,示波器与S3C2440控制器相应端口连接好后,在VS2005下运行程序,软件ActiveSync通过USB与其通信,将在GPIO应用层编制的步进电机运动程序部署到开发板后,给GPB5和GPA10两个端口发送高低电平,分别延时100 ms和50 ms输出脉冲波形如图1所示。

图1 示波器输出波形

4 结束语

本文主要介绍了在WinCE嵌入式系统下一种实现GPIO驱动程序的方法,利用VS2005开发工具实现了S3C2440控制器的GPIO控制步进电机运动,对在WinCE下开发其它驱动程序以及控制步进电机的运动具有一定的启示作用。

[1]王鸿钰,朱恩.步进电机控制技术入门[M].上海:同济大学出版社,1990.

[2]姜波.Windows Embedded CE程序设计实践[M].北京:机械工业出版社2009.

[3]何宗键.Windows CE嵌入式系统[M].北京:北京航空航天大学出版社,2006.

[4]杨泽辉,徐燕玲,刘碧君等.基于嵌入式WinCE的GPIO驱动开发[J].太原科技大学学报,2010,31(6):446-448.

[5]胡秀风,丁承君,张明路,等.Windows CE下GPIO驱动程序的设计与应用[J].微计算机信息,2009,25(6-2):281-283.

[6]周立功等.ARM&WinCE实验与实践——基于S3C2410[M].北京:北京航空航天大学出版社,2007.

The design and application of stepper motor drive for WinCE

YUAN Bo1,LAN Wen-tao2
(1.Xi'an Railway Vocational&Technical Institute,Xi'an 710014,China;2.Huawei Technologies Co.,LTD.Xi'an Research Institute,Xi'an 710000,China)

In order to satisfy the stream interface driver development of S3C2440 board,WinCE driver contains function and how to call the driver in the application program is accomplished in this paper,the stepper motor motion has also insolved,the process can be enlighten to development stream driver and control stepped motor motion.

WinCE;GPIO drive;stepper motor

TN409

A

1674-6236(2016)16-0174-03

2015-08-22稿件编号:201508112

袁 博(1984—),女,陕西宜川人,硕士研究生,助教。研究方向:供用电技术及其自动化控制。

猜你喜欢

驱动程序低电平寄存器
STM32和51单片机寄存器映射原理异同分析
Lite寄存器模型的设计与实现
阻止Windows Update更新驱动程序
2017款凯迪拉克2.8L/3.0L/3.2L/3.6L车型低电平参考电压总线电路图
计算机硬件设备驱动程序分析
移位寄存器及算术运算应用
数字电子技术的应用
浅谈物理电路与数字电路
15-MeV电子直线加速器的低电平系统
Lx5280模拟器移植设计及实施