基于S3C2440嵌入式Linux的步进电机驱动程序

基于S3C2440嵌入式Linux的步进电机驱动程序,第1张

嵌入式Linux开发过程中需要为指定设备编写和编译驱动程序,这与以往在PC机上的Linux驱动开发明显不同,本文设计了基于S3C2440嵌入式Linux下激光雕刻系统的步进电机驱动程序。

  1 硬件系统的设计

  步进电机开环控制系统主要由中央控制器、步进电机驱动器、传感器以及步进电机四大部分组成。本系统采用基于ARM920t内核的S3C244 0A微处理器作为控制系统的中央控制器,该芯片主频400MHz,最高可达到533MHz,内含多种设备接口存储器使用64MB的Nand Flash和64MB的SDRAM。图1所示为控制系统框图。

  

基于S3C2440嵌入式Linux的步进电机驱动程序,步进电机开环控制系统框图,第2张

 

  2 系统的工作原理

  3 嵌入式Linux步进电机驱动程序的设计

  Linux *** 作系统将所有的设备(而不仅是存储器里的文件)都看成文件,以 *** 作文件的方式访问设备。应用程序不能直接 *** 作硬件,而是使用统一的接口函数调用硬件驱动程序。设备驱动程序是 *** 作系统内核和硬件之间的接口。Linux设备驱动与内核接口可分为三大方面:a.与系统启动代码的接口对设备进行初始化;b.与内核接口通过数据结构file.operraTIons来完成;c.与设备的接口对设备进行读写 *** 作。

  步进电机是将电脉冲信号转变为角位移或线位移的开环控制元件。而脉冲信号的频率和脉冲数是控制电机的两个重要方面。本系统步进电机4路脉冲输出由硬件地址0x28000006的bit0~bit3控制,bit0对应MOTOR A+,bit1对应MOTOR B+,bit2对应MOTOR_A-,bit3对应MOTOR_B-。这里针对整步模式下的步进电机进行脉冲分配信号,半步模式的步进电机正转导电状态时的控制顺序为A+_A+B+_B+_B+A-_A-_一A-B-_B-,整步模式的步进电机正转导电状态时的控制顺序为A+_B+_A-_B-。

  因此在程序中需要通过编制脉冲分配信号来控制步进电机,并通过修改脉冲分配信号来实现对步进电机方向的控制。图2是用软件形成环形脉冲的流程图。

  系统中的步进电机只响应应用程序传送给驱动的步进量和部分参数,只能顺序地进行控制 *** 作,因此它可作为字符设备来进行驱动。在驱动程序中,需要提供几个 *** 作函数的入口点,分别为open、read、write、ioet1等。而ioct1函数尤为重要,系统通过调用这个函数可以控制步进电机的转动。

  在初始化函数中,会将驱动程序的file operaTIons结构连同其主设备号一起向内核进行注册。对于字符设备使用以下函数进行注册:int register_chrdev(unsigned int major,const char*name,struct file_operaTIons*fops);其中,unsigned int major为定义的主设备号,const char*name为定义的设备名称,这里把设备名宏定义为stepper。file_operaTIons*fops为定义的指针变量。申请控制步进电机的端口用以下函数进行调用:request_region(0x28000006, 1, const char*name);因为步进电机用到了I/O端口,而在S3C2440中 *** 作端口要用虚拟地址而非实际的物理地址,因此要修改内核代码。修改文件内核源代码中间的smdk.c,该文件在linux/arch/arm/mach-s3c2440中,在结构体static struct map_descsmdk_io_desc[]中添加一行数组元素{0xd3000000,0x28000000,Ox01000000,DOMAIN_IO,0,1,0,0},则步进电机的物理地址0x28000006对应的虚拟地址为0xd3000006,在驱动程序中应对这个地址进行 *** 作。

  

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/dianzi/2713651.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-08-17
下一篇 2022-08-17

发表评论

登录后才能评论

评论列表(0条)

保存