0 卖盘信息
BOM询价
您现在的位置: 首页 > 技术方案 >工业控制 > 基于S3C2440微处理器嵌入式Linux的步进电机驱动程序设计方案

基于S3C2440微处理器嵌入式Linux的步进电机驱动程序设计方案

来源: elecfans
2021-11-03
类别:工业控制
eye 26
文章创建人 拍明

原标题:基于S3C2440嵌入式Linux的步进电机驱动程序设计方案

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

  1 硬件系统的设计

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

  

1.png


  2 系统的工作原理

  本系统主要控制两个两相混合式步进电机,分别代表X轴和Y轴带动传能光纤进行激光雕刻。系统采用8路I/O口进行脉冲输出,每4路接一个步进电机驱动器,通过功率放大后,进入步进电机的各项绕组。电机有半步、整步两种工作模式,整步模式的步距角为1.8°,半步模式的步距角为0.9°,整步一周共200步。如:半步模式的两步进电机正转脉冲为{0x11,0x33,0x22,0x66,0x44,Oxcc,0x88,0x99};整步模式为{0x11,0x22,0x44,0x88,0x11,0x22,0x44,0x88},一个步进电机运作时,只对脉冲时序的高或低4位操作,另外4位为0。而改变脉冲的顺序,即可改变转动方向。在整个控制系统中,数据处理在Linux应用程序中完成,步进量传递给Linux驱动程序后,由驱动程序完成脉冲输出。通过软件来完成脉冲分配,可根据应用系统的需要,随时改变对步进电机的控制。

  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,在驱动程序中应对这个地址进行操作。


责任编辑:David

【免责声明】

1、本文内容、数据、图表等来源于网络引用或其他公开资料,版权归属原作者、原发表出处。若版权所有方对本文的引用持有异议,请联系拍明芯城(marketing@iczoom.com),本方将及时处理。

2、本文的引用仅供读者交流学习使用,不涉及商业目的。

3、本文内容仅代表作者观点,拍明芯城不对内容的准确性、可靠性或完整性提供明示或暗示的保证。读者阅读本文后做出的决定或行为,是基于自主意愿和独立判断做出的,请读者明确相关结果。

4、如需转载本方拥有版权的文章,请联系拍明芯城(marketing@iczoom.com)注明“转载原因”。未经允许私自转载拍明芯城将保留追究其法律责任的权利。

拍明芯城拥有对此声明的最终解释权。

相关资讯

方案推荐
基于MC33771主控芯片的新能源锂电池管理系统解决方案

基于MC33771主控芯片的新能源锂电池管理系统解决方案

AMIC110 32位Sitara ARM MCU开发方案

AMIC110 32位Sitara ARM MCU开发方案

基于AMIC110多协议可编程工业通信处理器的32位Sitara ARM MCU开发方案

基于AMIC110多协议可编程工业通信处理器的32位Sitara ARM MCU开发方案

基于展讯SC9820超低成本LTE芯片平台的儿童智能手表解决方案

基于展讯SC9820超低成本LTE芯片平台的儿童智能手表解决方案

基于TI公司的AM437x双照相机参考设计

基于TI公司的AM437x双照相机参考设计

基于MTK6580芯片的W2智能手表解决方案

基于MTK6580芯片的W2智能手表解决方案