根据上面提到的步进电机的脉冲分配信号,定义它半步模式正转脉冲为:
unsigned char pulse_table[]=
{0x11,0x33,0x22,0x66,0x44,Oxcc,0x88,0x99};
利用应用程序传递给stepper ioct1的参数arg来判断转动方向。编写ioctl函数用来接收应用程序对于步进电机的控制。以下是部分驱动程序代码:
设备卸载与前面提到的设备注册是相反的过程。当从系统中卸载一个模块时,主设备号要得到释放。这一操作可以调用以下函数进行模块清除:
int unregister_chrdev(unsigned int major,const char*name);
首先,编译步进电机模块,打开内核中drivers/char/Konfig文件,添加如下语句:
Config STEPPER_MODULE、tristate"stepper module"、depends on ARCH_S
在终端中运行命令make menuconfig,进入内核配置主菜单,在DeviceDriver→Character device菜单中看到刚才所添加的选项了,之后编译为模块方式。
其次,打开内核中drivers/char/Makefile文件,添加如下语句:
obj-$(CONFIG_STEPPER_MODELL)+=stepper_module.o
最后,回到内核源代码根目录位置,执行make modules,就可生成系统所需要的内核模块文件stepper module.ko了。至此,完成了步进电机模块驱动的编译。之后,便可使用insmod、rmmod命令分别对模块进行加载、卸载了。
4 结论
在嵌入式Linux系统下,设备驱动程序是内核和硬件之间的接口,本文采用字符设备的思想去实现步进电机驱动程序的开发,介绍了嵌入式Linux驱动程序的原理,归纳了驱动程序开发的一般流程,并结合步进电机的驱动阐述了驱动程序的编写。与原有通过操作PC机来控制步进电机相比,本文是在Linux操作系统支持MMU的情况下完成了对步进电机的控制。