工业机器人设计(论文)
题 目:舞蹈机器人在步进电动机中的应用
姓 名: 付书敏
学 号: 20092005063
班 级: 09机电一体化3班
平顶山工业职业技术学院
| 年 月 日 |
本文从驱动系统的角度介绍了舞蹈机器人步进电机驱动电路和程序设计。电路采用74373锁存,74LS244和ULN2003作电压和电流驱动,单片机ATC55工作脉冲序列信号发生器。程序设计基于中断服务和总线分时复用方式,实时更新各个电机的速度和方向。
关键词:驱动,步进电机,舞蹈机器人,单片机,中断服务,速度累加计数器,归一化速度
第一章.工业机器人驱动系统
1.1工业机器人驱动系统的分类
工业机器人驱动系统,按动力源可分为液压驱动、气动驱动和电动驱动三种基本驱动类型。根据需要,可采用由这三种基本驱动类型的一种,或合成式驱动系统。
1.2、对驱动装置的要求
1.驱动装置的质量尽可能要轻。单位质量的输出功率要高,效率高。
2.反应速度要快。要求力质量比和力矩转动惯量比要大。
3.动作平滑,不产生冲击。
4.控制灵活,位移偏差和速度偏差小。
5.安全可靠
6.操做维修方便等
1.3驱动方式的发展
20世纪70年代后期,日本安川电动机公司研制开发了第一台全电动的工业机器人,而此前的工业机器人基本上采用液压驱动方式。于采用液压驱动的机器人相比,采用伺服电动机驱动的机器人在响应速度、精度、灵活性等方面都有很大的提高。因此,也逐步替代了采用液压驱动的机器人,成为工业机器人驱动方向的主流。在此过程中,谐波减速器、RV减速器等高性能减速机构的发展也功不可没。近年来,交流伺服驱动已经逐渐取代传统的直流伺服驱动方式。直流电动机等新型驱动方式在许多应用领域也有长足发展。
1.4电力驱动的分类
1.电力驱动的分类
(1)按照电机的工作原理不同分为步进电机、直流伺服电机、无刷电机等。
(2)按照控制水平的高低来看分为开环控制系统和闭环控制系统。
2.电力驱动的适用范围:
适合于中等负载,特别适合于动作复杂、运动轨迹严格的各类机器人。
1.5步进电机驱动装置的工作原理
1.5.1步进电机的结构:
1.定子:定子铁芯由硅钢片叠加而成。每个定子磁极上均有控制绕组,且有均匀分布的小齿
2.转子:由转子铁芯和转轴组成。转子铁心同样由硅钢片叠加而成。转子上没有绕组,其上也有均匀分布的小齿。通常定子磁极上的小齿和转子上的小齿其齿宽和槽宽都是一样的。但他们之间的相对位置按一定的规律排列。如当A相定子小齿和转子小齿对准时,B、C相的定子小齿就会和转子小齿的小齿错开。错齿是步进电动机能过步进的根本原因
1.5.2.步进电机的工作原理
步进电动机是将电脉冲信号变换为相应的角位移或直线位移的元件,它的角位移和线位移量与脉冲数成正比。转速或线速度与脉冲频率成正比。在负载能力的范围内,这些关系不因电源电压、负载大小、环境条件的波动而变化,误差不长期积累,步进电动机驱动系统可以在较宽的范围内,通过改变脉冲频率来调速,实现快速起动、正反转制动。作为一种开环数字控制系统,在小型机器人中得到较广泛的应用。但由于其存在过载能力差、调速范围相对较小、低速运动有脉动、不平衡等缺点,一般只应用于小型或简易型机器人中。步进电动机所用的驱动器,主要包括脉冲发生器、环形分配器和功率放大等几大部分,其原理框图如图1所示。
图1步进电动机驱动器原理框图
A、B、C相电流通常来自于机器人控制系统
步进电动机工作原理图(1)
三步进电动机结构图:
第二章.舞蹈机器人步进电机驱动电路和程序设计
2.1 步进电机简介
步进电机根据内部线圈个数不同分为二相制、三相制、四相制等。本文以四相制为例介绍其内部结构。图2为四相五线制步进电机内部结构示意图。
图2
2.2四相五线制步进电机的驱动电路
电路主要由单片机工作外围电路、信号锁存和放大电路组成。我们利用了单片机的I/O端口,通过74373锁存,由74LS244驱动,ULN2003对信号进行放大。8个电机共用4bit I/O端口作为数据总线,向电机传送步进脉冲。每个电机分配1bit的I/O端口用作74373锁存信号,锁存步进电机四相脉冲,经ULN2003放大到12V驱动电机运转。
电路原理图(部分)如图3所示。
图3
(1)Intel 8051系列单片机是一种8位的嵌入式控制器,可寻址K字节,共有32个可编程双向I/O口,分别称为P0~P3。该系列单片机上集成8K的ROM,128字节RAM可供使用。
(2)74LS244为三态控制芯片,目的是使单片机足以驱动ULN2003。ULN2003是常用的达林顿管阵列,工作电压是12V,可以提供足够的电流以驱动步进电机。关于这些芯片的详细介绍可参见它们各自的数据手册。
(3)74373是电平控制锁存器,它可使多个步进电机共用一组数据总线。我们用P1.0~P1.7作为8个电机的锁存信号输出端,见表1。
| 左肩1 | 右肩1 | 左肩2 | 右肩2 | 左肘 | 右肘 | 左脚 | 右脚 |
| P1.0 | P1.1 | P1.2 | P1.3 | P1.4 | P1.5 | P1.6 | P1.7 |
这是一种基于总线分时复用的方式,以动态扫描的方式来发送控制信号,这和高级操作系统里的多任务进程调度的思想一致。这种方法明显的好处是节省I/0口,使系统可以控制更多的步进电机。本电路设计为控制8个。
2.3 程序设计
传统的步进电机驱动程序利用简单的条件循环来发送脉冲序列,但当电机数目发生变化时,编程繁杂,冗余代码较多,难以做到信号占空比一致,进而产生“抖动”现象。下面提出一种基于中断服务方式,面向舞蹈动作,可实时改变各个电机速度和方向(每200ms可改变一次)的程序设计方法。
2.3.1 速度归一化和线性关系
我们将速度量化成一个-128~127内可变的数,正号代表正转,负号代表返转,称之归一化速度(-128~127为一个字节)。给每个电机分配一个速度累加计数器speeds_tickers[I](I=0,1,2…,7分别代表8个电机),初始值为0,每个中断触发周期内给该累加计数器加上从舞步信息数组dancedata中读取的速度值speeds[I],当计数器值大于或等于预设的阈值MAX_SPEED_TICKER=600时,则发送脉冲序列中的下一个(正转)或上一个(反转)给步进电机,这取决于速度的符号。同时,将该电机的累加计数器speedtickers[I]恢复为0。给出的速度值speed[I]越大,则累加达到或超过阈值MAX_SPEED_TICKER的时间就越短,那么向步进电机发送脉冲的频率就越高,速度也就越快。
归一化速度值设为num(-128~127),电机实际旋转速度设为V,那么V和num之间满足关系式:
当num是阈值600的约数时,
(1)
其中,是当num=120时的实际速度大小。
(2)当num不是阈值600的约数时,
(2)
其中,[x]代表不超过x的最大整数。
V0是一个速度常数,即当归一化速度值num=120的时候对应的电机实际速度。
(4)num和速度V近似线性关系,V∝num。正是因为有了这种函数关系,我们在舞蹈动作控制中,可以轻松实现速度在大范围内变化。
2.3.2 速度正负实现方式
(1)在程序中,数组steps[8]用于存放步进电机的脉冲序列。
Steps[8]={|0×77.0×33.0×BB.0×99.0×DD.0×CC.0×EE.0×66}:
//8步式步进电机脉冲序列
(2)设置指针cur_steps[8]指向8个电机当前处在脉冲序列step[8]中的位置。
易知:0<=step[I]<=7,其中,I分别代表8个电机。
(3)设置指针移动变量delta=0。delta=1,指针向后移动一步,电机正转;delta=-1,指针向前移动一步,电机反转;delta=0,指针不移动,电机不发生转动。
2.3.3 程序具体步骤
1.初始化计时器timepiece,然后空循环,进入等中断阶段。
2.中断触发后,程序进入服务程序。
(1)执行函数SetAllSpeeds,函数根据提供的速度值speed[I]依次判断是否给各个电机发送脉冲,实现电机以特定的速度和方向旋转。SetAllSpeeds具体算法流程见图4。
图4
(2)从定义的数组dancedata中读取新的速度信息,每200ms一次。
(3)将系统在调用中断处理函数时关闭的计时器重新打开Initnimer。
(4)中断处理函数结束返回。
注意:第一,(1)和(2)不可交换,这是为了保证步进电机每步延时的均匀性;第二,内部中断间隔时间1ms内,8051是否能够将中断服务程序中所有的代码执行完全?答案是肯定的。参考图5,我们对整个中断服务程序进行了统计,它所要执行的指令数在200~300之间变化,时钟间隔设置为1ms,选用12MHz晶振,执行这些指令需要耗时约500~600μs<1ms,因此,中断处理完全可以在一个计时器周期内执行完毕。
图5
2.4.舞蹈编排
在舞蹈编排中,我们面向的是动作,因此,必须关心三要素:快慢、方向和幅度。
Unsigned char code dancedata[4800]=
{0.0.0.0.0.0.0.0.//第一组
0.0.0.0.0.0.0.0.//第二组
0.0.0.0.0.0.0.0.//第三组
… …}|;
在程序中,舞步信息数组格式如下:
每组数据含有8个字节,分别代表8个电机的归一化速度num,这点在3.1节中已经做了详细分析。程序每200ms读一次数据,换句话说,每组数据的有效期只有200ms。我们分析表2一组数据代表的含义。
| 组数 | 左肩1 | 右肩1 | 左肩2 | 右肩2 | 左肘 | 右肘 | 左脚 | 右脚 |
| 1 2 3 … 25 | 0 0 0 … 0 | 0 0 0 … 0 | 0 0 0 … 0 | 0 0 0 … 0 | 0 0 0 … 0 | 0 0 0 … 0 | 60 60 60 … 60 | -60 -60 -60 … -60 |
(1)组数为25,这隐含了动作的时间信息。因为每组数据的有效期为200ms,所以,25组数据的执行时间为:200ms×25=5000ms
(2)左脚和右脚(轮式)的归一化速度相等,方向相反。根据公式(1)可以知道
V=0.5×V0
所以,机器人以0.5V0的速度原地转圈5000ms。
(3)其它关节的归一化速度num=0,说明其它关节均无动作。
2.5 可视化辅助程序简介
Code char pin[8]={1,2,4,8,16,32,,128};
Void lnit Timer(void)//初始化计数器
{
THO=OxFA;//设置触发周期:1000次
TLo=Ox24;
TMOD=TMOD{Ox01;//selet mode}
TRo=1;//start timer O
ET0=1;//enable timer 0 interrupt
EA=1;// giobal interrupt enable
}
Void setallspeeds(void)//设置个电机的速度.并让它运动起来
{
unsigned char i://电机序号
char delta;//旋转方向.1:正. -1:反 0:停
for(i=0;i<8;++)
}
Pl=pin[i];//发送锁存信号
Speed-tickers[i]+=speeds[i]://计数值增加.speeds[i]越高.增加的越多
If(speed-tickers[i]>=MAX-SPEEL-TICKER)
//如果计数器值超过预定最大值.就发送脉冲
我们发现一个简单的动作竟需要5组数据,5分钟的舞蹈需要组数据(需占用1.5K存储空间,ATC52足够)。如果人工填写这些数据,将十分困难。因此在实际的运用中,我们用C Builder编写了机器人模拟程序,采用图形界面,预一化速度和时间信息,写入datah,只要将其作为头文件,电机驱动程序将自动读取。
2.6电路和程序特点总结
(1)一块单片机控制多个步进电机,总线分时复用。
(2)程序基于中断服务,电机工作稳定可靠。
(3)提出归一化速度,实现了速度V大范围可变。
(4)数据更新每200ms一次,可以轻松控制各个电机实时加速、减速、爆发,从而使舞蹈更人性化、感情化。这也正是我们允许数据量大的原因。
(5)辅助程序实现编程可视化。
参考文献:
1.工业机器人的驱动方式—周兰下载本文