一、概述
1.1步进电机简介
步进电机(Stepper Motor)是一种将电信号转换为机械运动的电动机,是一种专用于精密控制的电机。一般步进电机运行稳定,并且精度较高,因此常用于精密仪器、自动化设备、机器人等需要高精度的设备中。
步进电机主要通过磁铁驱动的方式进行运转,其转动运动为角度控制,以步进的方式转动。在电机内部包括旋转部件磁铁,静止部件包括线圈和复位传感器。电流驱动导致磁铁缓慢吸引线圈。当磁场达到一定强度时,导致磁铁向电磁线圈对应位置移动,当线圈电流消失时,磁铁停在了前一步骤中确定的位置上。因此,添加电流时可通过控制线圈电流的快速变化以控制电机的旋转角度和方向。
步进电机的优势主要体现在其精度、稳定性、可靠性和成本上。步进电机通常按步距分为1.8度,0.9度,0.72度,0.36度等。因此,步进电机旋转的步距能够精确到亚分辨率,使其在要求精细控制的领域中得到应用,例如电子制造、自动化和航空等。
步进电机的应用范围非常广泛。在印刷机械、木工机床、机器人和计算机外围设备等设备上广泛使用。 在办公自动化设备,数字复印机,数码照相机,激光打印机,医疗器械,自动售货机等国内广泛应用。而在外部硬盘驱动器,CD-ROM、DVD-ROM驱动器,扫描仪等数码设备中用作载架用途。
总的来说,步进电机的运转控制方便精确,同时静音、低振动、低热量和低能耗等等都是步进电机的优势。随着步进电机的进一步发展, 传感器技术的不断提高和设计改进,步进电机的技术水平也将随之提高。同时,随着工业自动化的发展趋势,步进电机在日常生活中的应用将会越来越广泛。
1.2 设计要求
如下图所示物料搬运机电装置,位置1---位置8,各位置之间间隔为5mm,步进电机结合机械传动机构的脉冲当量为2.5微米/脉冲,物料本身的厚度为2mm。从初始位置到第一个物料的初始高度为150mm,x轴方向的距离为100mm,y轴方向的距离为80mm。
装置采用步进驱动器+步进电机进行驱动,将位置1—位置4的物料,搬运到位置8(叠起来)。控制精度要求属于中等无特殊要求。
二、硬件设计方案
本设计采用STC89C52单片机为系统控制器单元,利用LED灯指示物体搬运状态,通过驱动器ULN2003驱动步进电机执行相应动作。整个硬件部分主要由单片机最小系统、步进电机驱动器、步进电机、键盘模块、LED指示模块构成。硬件框图如下图2-1所示。
三、软件设计
3.1步进电机控制方法
51单片机通过IO口控制ULN2003驱动器来驱动步进电机实现相应动作。通过改变步进电机的通电顺序,可以改变它的运动方向。步进电机正转时的通电顺序为A-AB-B-BC-C-CD-D-DA,反转时的通电顺序为A-AB-B-BC-C-CD-D-DA。此外,通过改变步进电机的通电脉冲的频率,可以达到调速的目的。
3.2 必要数据计算
步进电机结合机械传动机构的脉冲当量为 2.5 微米/脉冲,这意味着每接收到一个脉冲,步进电机将运动2.5微米的距离则。已知每个物件之间间隔 5mm=5000μm,则每个物件之间需要 5000/2.5=2000个脉冲。已知物料本身的厚度为 2mm,从初始位置到第一个物料的初始高度为150mm,x 轴方向的距离为 100mm,y 轴方向的距离为 80mm。则从初始位置到物件一x 轴需要 100000/2.5=40000 个脉冲,y 轴需要 80000/2.5=32000 个脉冲,z 轴需要(150000-2000)/2.5*5=57200个脉冲。物件 2mm 高度需 2000/2.5=800个脉冲。
3.3 编程思路
按下启动按钮,机械臂会依次将 1、2、3、4 位置的物件搬运到 8 号,例如搬运 1 号时,机械臂移动到 1 号上方,到位后下行,到位后打开电磁铁,吸附物件,上行,然后移动到8号位置上方,断开电磁铁,释放物件回到初始状态,之后的物件以同样方式搬运。
步进驱动器的的脉冲信号通过for 循环来实现。机械臂是否到位由for 循环当前值判断,若循环值加到预设值或减到 0 则表示到位,则将当前步动作结束,进行下步动作。
3.3 系统软件流程图
本设计主要采用Keil软件编写与调试程序,程序语言采取易读性和移植性更高的C语言编写。系统运行流程图如下图所示。
要实现以上功能要求,系统的软件程序框图如下图4-1所示。首先进行系统初始化,系统初始化包括外部中断初始化配置、以及LED指示灯状态初始化。然后判断启动按键是否按下,若按下则进入主程序循环,否则等待启动按键按下。主程序循环系统中主要是X、Y、Z三轴步进电机顺序执行搬运每一个物料时对应的动作。利用for循环实现步进电机给定脉冲转动,通过改变步进电机的通电顺序,改变它的运动方向。步进电机正转时的通电顺序为A-AB-B-BC-C-CD-D-DA,反转时的通电顺序为A-AB-B-BC-C-CD-D-DA。此外,通过改变步进电机的通电脉冲的频率,可以达到调速的目的。每一次把物料搬到位置八后,都需要执行复位动作,回到初始位置,再进行下一个物料的搬运。四个物料搬运完,程序执行到这里就完成一次,以下列出整体软件设计的流程图,如下图所示:
四、仿真结果
按下启动按钮,开始搬运1号物料,此时白灯亮起,如下图所示
1号物料搬运完后,开始搬运2号物料,此时绿灯亮起,如下图所示。
2号物料搬运完后,开始搬运3号物料,此时蓝灯灯亮起,如下图所示。
3号物料搬运完后,开始搬运4号物料,此时黄灯灯亮起,如下图5-5所示。
五、部分程序说明
void axis_for(long axis_f) //沿X轴正方向前进给定脉冲
{
unsigned char i=0;
for(i=0;i<axis_f;i++)
{
P0=stepper[i%8];
delay_var(var);
}
}
void axis_neg(long axis_n) //沿x轴负方向前进给定脉冲
{
unsigned char i=0;
for(i=axis_n;i>0;i--)
{
P0=stepper[i%8];
delay_var(var);
}
}
上述两个子函数为X轴步进电机运行程序,输入脉冲数为长整型,对应X轴步进驱动器所需要的脉冲, for 循环对应给定脉冲的生成,例如 x 轴对应脉冲输出,需要改变通电数组索引值,每生成一个脉冲数组索引值需要加1,数组索引值加到8后,表示步进电机完成一圈转动,索引值从零继续开始,依次循环往复,Y、Z轴步进电机运行程序与X轴类似。
void HandMaterials(void)
{
//搬运第一个物料
led_w = 1;led_b = 0;led_g = 0;led_y = 0; //白灯亮
MotorAccOrDec(40000,32000,57200); //从初始位置前往第一个物料位置取物料
MotorAccOrDec(2000,6000,0); //从第一个物料位置前往第八个物料位置卸物料
MotorAccOrDec(-42000,-38000,-57200); //从第八个物料位置回到初始位置
//搬运第二个物料
led_w = 0;led_b = 0;led_g = 1;led_y = 0;//蓝灯亮
MotorAccOrDec(42000,32000,57200); //从初始位置前往第二个物料位置取物料
MotorAccOrDec(0,6000,-800); //从第二个物料位置前往第八个物料位置卸物料
MotorAccOrDec(-42000,-38000,-56400); //从第八个物料位置回到初始位置
//搬运第三个物料
led_w = 0;led_b = 1;led_g = 0;led_y = 0;//绿灯亮
MotorAccOrDec(40000,34000,57200); //从初始位置前往第三个物料位置
MotorAccOrDec(2000,4000,-1600); //从第二个物料位置前往第八个物料位置卸物料
MotorAccOrDec(-42000,-38000,-55600); //从第八个物料位置回到初始位置
//搬运第四个物料
led_w = 0;led_b = 0;led_g = 0;led_y = 1;//黄灯亮
MotorAccOrDec(42000,34000,57200); //从初始位置前往第四个物料位置
MotorAccOrDec(0,4000,-2400); //从第四个物料位置前往第八个物料位置卸物料
MotorAccOrDec(-42000,-38000,-54800); //从第八个物料位置回到初始位置
}
上述子函数为物料1~4搬运程序,搬运一个物料到8号位置,需要3步。以搬运1号物料物料为例,第一步,通过控制X、Y、Z轴步进电机,控制机械臂从初始位置前往1号物料位置取物料;第二步,在1号物料位置处,继续控制X、Y、Z轴步进电机从1号物料位置前往8号物料位置卸物料;第三步,从8号物料位置处控制X、Y、Z轴步进电机回到初始位置,以便继续搬运下一个物料。
需要注意一点的是,从初始位置前往物料位置取物料,从物料位置前往8号物料位置卸物料,再到从8号物料位置回到初始位置,X、Y、Z轴步进电机执行的脉冲数有所不同,仍以搬运第一个物料为例,MotorAccOrDec(40000,32000,57200)表示,X轴步进电机转动40000个脉冲,Y轴步进电机转动32000个脉冲,X轴步进电机转动572000个脉冲,到达1号物料位置,而从原始位置到达2号物料位置X轴步进电机转动42000个脉冲,Y轴步进电机转动32000个脉冲,X轴步进电机转动572000个脉冲,其它情况与此类似。
后记
本设计是以实物为参照做的Protues仿真,物料搬运脉冲数据较大,在仿真中耗时很长,若要完整得到仿真结果,请自行修改对应脉冲数。