一、实验目的
了解直流电机和步进电机的工作原理
学会Linux下用软件的方法实现步进电机的脉冲分配,用软件的方法代替硬件的脉冲分配器
二、实验内容
学习步进电机的工作原理,了解实现电机转动对于系统的软件和硬件要求。学习ARM知识,要掌握I/O的控制方法。Linux下编程实现ARM的四路I/O通道实现环形脉冲分配用于控制步进电机的转动。
三、预备知识
C语言的基础知识、程序调试的基础知识和方法,Linux的基本操作。Linux关于module的必要知识。
四、实验设备及工具
硬件:UP-NETARM2410-S嵌入式实验平台、PC机Pentium 500以上,硬盘10G以上
软件:PC机操作系统REDHAT LINUX 9.0+MINICOM+ARM-LINUX开发环境
五、实验原理1、步进电机概述
步进电机是一种能够将电脉冲信号转换成角位移或线位移的机电元件,它实际上是一种单相或多相同步电动机。单相步进电动机有单路电脉冲驱动,输出功率一般很小,其用途为微小功率驱动。多相步进电动机有多相方波脉冲驱动,用途很广。使用多相步进电动机时,单路电脉冲信号可先通过脉冲分配器转换为多相脉冲信号,在经功率放大后分别送入步进电动机各相绕组。每输入一个脉冲到脉冲分配器,电动机各相的通电状态就发生变化,转子会转过一定的角度(称为步距角)。正常情况下,步进电机转过的总角度和输入的脉冲数成正比;连续输入一定频率的脉冲时,电动机的转速与输入脉冲的频率保持严格的对应关系,不受
电压波动和负载变化的影响。由于步进电动机能直接接收数字量的输入,所以特别适合于微机控制。
2、步进电机的种类
目前常用的步进电机有三类:
1、反应式步进电动机(VR)。它的结构简单,生产成本低,步距角可以做的相当小,但动态性能相对较差。
2、永磁式步进电动机(PM)。它的出力大,动态性能好;但步距角一般比较大。
3、混合步进电动机(HB)。它综合了反应式和永磁式两者的优点,步距角小,出力大,动态性能好,是性能较好的一类步进电动机。
3、步进电机的工作原理
现以反应式三相步进电机为例说明其工作原理。定子铁心上有六个形状相同的大齿,相邻两个大齿之间的夹角为60度。每个大齿上都套有一个线圈,径向相对的两个线圈串联起来成为一相绕组。各个大齿的内表面上又有若干个均匀分布的小齿。转子是一个圆柱形铁心,外表面上圆周方向均匀的布满了小齿。转子小齿的齿距是和定子相同的。设计时应使转子齿数能被二整除。但某一相绕组通电,而转子可自由旋转时,该相两个大齿下的各个小齿将吸引相近的转子小齿,使电动机转动到转子小齿与该相定子小齿对齐的位置,而其它两相的各个大齿下的小齿必定和转子的小齿分别错开正负1/3的齿距,形成“齿错位”,从而形成电磁引力使电动机连续的转动下去。
和反应式步进电动机不同,永磁式步进电动机的绕组电流要求正,反向流动,故驱动电路一般要做成双极性驱动。混合式步进电动机的绕组电流也要求正,反向流动,故驱动电路通常也要做成双极性。
4、开发板中步进电机控制的实现
本开发板中使用的步进电机为四相步进电机。转子小齿数为64。
系统中采用四路I/O进行并行控制,ARM控制器直接发出多相脉冲信号,在通过功率放大后,进入步进电机的各相绕组。这样就不再需要脉冲分配器。脉冲分配器的功能可以由纯软件的方法实现。
图2.10.1 四相步进电机在开发板中的接法
四相步距电机的控制方法有四相单四拍,四相单、双八拍和四相双四拍三种控制方式。步距角的计算公式为:θb=
其中:m为相数,控制方法是四相单四拍和四相双四拍时C为1,控制方法是四相单、双八拍时C为2,Zk为转子小齿数。
本系统中采用的是四相单、双八拍控制方法,所以步距角为
360°/512。但步进电机经过一个1/8的减速器引出,实际的步距角应为360°/512/8。
开发平台中使用EXI/O的高四位控制四相步进电机的四个相。按照四相单、双八拍控制方法,电机正转时的控制顺序为
A→AB→B→BC→C→CD→D→DA。EXI/O的高四位的值参见表2.10.1。
表2.10.1 电机正转时,EXI/O的高四位的值
十六进制1H3H2H6H4HCH8H
二进制0001001100100110010011001000
通电状态AABBBCCCDD
9H1001DA
反转时,只要将控制信号按相反的顺序给出即可。可以通过宏
SETEXIOBITMASK(bit,mask)(EXIO.h)来设置扩展I/O口,其中mask参数为0xf0。
六、程序分析
步进电机模块和DA模块是使用Bank1地址空间扩展出来的IO口。共同使用驱动s3c2410-exio.o。
在驱动程序中,与步进电机相关的主要在函数s3c2410_exio_ioctl:
/*********step motor run *****************/
case STEPMOTOR_IOCTRL_PHASE: return do_stepmotor_run((char)arg);
在do_stepmotor_run实现对步进电机的相位设置:
((char)arg)
bitops_mask_bit(phase, 0xf0, &bak);
writew(bak, s3c2410_exio_base); //enable jtag output bak = readw(s3c2410_exio_base);
DPRINTK_STEP(\"s3c2410_exio_base content is %x\\n\bak);
相位的变换顺序在应用程序中提供,通过ioctl接口传给驱动模块:
Stepmotor_main.c程序中设定的相位的变换顺序:
/********* A, AB, B, BC, C CD, D, DA ***/
char
{0x10,0x30,0x20,0x60,0x40,0xc0,0x80,0x90};
stepdata[]=
七、实验步骤1、编译步进电机模块
cd /arm2410s/kernel-2410smake menuconfig
进入Main Menu / Character devices菜单,选择DC MOTOR为模块加载:
编译内核模块:
make depmake
make modules
步进电机模块的编译结果为:
/arm2410s/kernel-2410s/drivers/char/s3c2410-exio.o
2、编译应用程序
cd /arm2410s/exp/basic/11_stepmotormake
生成stepmotor
3、运行程序
在超级终端中,通过加载NFS运行编译结果:
mount –t nfs 192.168.0.xxx:/arm2410s /host
insmod /host/kernel-2410s/drivers/char/s3c2410-exio.ocd /host/exp/basic/11_stepmotor /./stepmotor
程序运行结果:步进电机开始转动
......
do_stepmotor_run(240): s3c2410_exio_base content is 20do_stepmotor_run(244): s3c2410_exio_base content is 60do_stepmotor_run(249): s3c2410_exio_base content is 60......
八、实验要求
1.尝试使用实验箱上的电位器旋钮控制步进电机转动相应的角度。2.思考四相步进电机各相先后导通的所有可能,确定步距角的变化,自己动手编出程序,在试验平台上验证。
因篇幅问题不能全部显示,请点此查看更多更全内容