您的位置 首页 观点

舞蹈机器人步进电机驱动电路和程序设计

在中国科大首届机器人舞蹈比赛中(中央10台节目转播),我们用一个单片机控制多个步进电机指挥跳舞机器人 的双肩、双肘和双脚伴着音乐做出各种协调舒缓充满感情的动作,荣获一等奖。电路采用74373锁存,74

在我国科大首届机器人舞蹈竞赛中(中心10台节目转播),咱们用一个单片机操控多个步进电机指挥跳舞机器人 的双肩、双肘和双脚伴着音乐做出各种和谐舒缓充溢爱情的动作,荣获一等奖。电路选用74373锁存,74LS244和ULN2003作电压和电流驱动,单 片机(Atc52)作脉冲序列信号发生器。程序规划依据中止服务和总线分时使用办法,实时更新各个电机的速度、方向。整个舞蹈由运动数据所决议的一截截动 作无缝衔接而成。

1 步进电机简介

步进电机依据内部线圈个数不同分为二相制、三相制、四相制等。本文以四相制为例介绍其内部结构。图1为四相五线制步进电机内部结构示意图。

2 四相五线制步进电机的驱动电路

电路主要由单片机作业外围电路、信号锁存和扩大电路组成。咱们使用了单片机的I/O端口,经过74373锁 存,由74LS244驱动,ULN2003对信号进行扩大。8个电机共用4bit I/O端口作为数据总线,向电机传送步进脉冲。每个电机分配1bit的I/O端口用作74373锁存信号,锁存步进电机四相脉冲,经ULN2003扩大到 12V驱动电机作业。

1.jpg

电路原理图(部分)如图2所示。

(1)Intel 8051系列单片机是一种8位的嵌入式操控器,可寻址64K字节,共有32个可编程双向I/O口,别离称为P0~P3。该系列单片机上集成8K的ROM,128字节RAM可供使用。

(2)74LS244为三态操控芯片,意图是使单片机足以驱动ULN2003。ULN2003是常用的达林顿管阵列,作业电压是12V,能够供给满意的电流以驱动步进电机。关于这些芯片的详细介绍可拜见它们各自的数据手册。

(3)74373是电平操控锁存器,它可使多个步进电机共用一组数据总线。咱们用P1.0~P1.7作为8个电机的锁存信号输出端,见表1。

2.jpg

这是一种依据总线分时复用的办法,以动态扫描的办法来发送操控信号,这和高档操作体系里的多任务进程调度的思维共同。这种办法显着的优点是节约I/O口,使体系能够操控更多的步进电机。本电路规划为操控8个。

3 程序规划

传统的步进电机驱动程序使用简略的条件循环来发送脉冲序列,但当电机数目发生改变时,编程冗杂,冗余代码较 多,难以做到信号占空比共同,从而发生“颤动”现象。下面提出一种依据中止服务办法,面向舞蹈动作,可实时改动各个电机速度和方向(每200ms可改动一 次)的程序规划办法。

3.1 速度归一化和线性联系

咱们将速度量化成一个-128~127内可变的数,正号代表正转,负号代表返转,称之归一化速度 (-128~127为一个字节)。给每个电机分配一个速度累加计数器speed_tickers[i](I=0,1,2…,7别离代表8个电机),初始值 为0,每个中止触发周期内给该累加计数器加上从舞步信息数组dancedata中读取的速度值speeds[i],当计数器值大于或等于预设的阈值 MAX_SPEED_TICKER=600时,则发送脉冲序列中的下一个(正转)或上一个(回转)给步进电机,这取决于速度的符号(参阅3.2节)。同 时,将该电机的累加计数器speed_tickers[i]康复为0。给出的速度值speed[i]越大,则累加到达或超越阈值 MAX_SPEED_T%&&&&&%KER的时刻就越短,那么向步进电机发送脉冲的频率就越高,速度也就越快。

归一化速度值设为num(-128~127),电机实践旋转速度设为V,那么V和num之间满意联系式:

(1)当num是阈值600的约数时,

其间,[x]代表不超越x的最大整数。

(3)V0是一个速度常数,即当归一化速度值num=120的时分对应的电机实践速度。

(4)num和速度V近似线性联系,V∝num。正是由于有了这种函数联系,咱们在舞蹈动作操控中,能够轻松完成速度在大范围内改变。

3.2 速度正负完成办法

(1)在程序中,数组steps[8]用于寄存步进电机的脉冲序列。


(2)设置指针cur_step[8]指向8个电机当时处在脉冲序列step[8]中的方位。
易知:0=step[i]=7,其间,i别离代表8个电机。

(3)设置指针移动变量delta=0。delta=1,指针向后移动一步,电机正转;delta=-1,指针向前移动一步,电机回转;delta=0,指针不移动,电机不发生滚动。

3.3 程序详细步骤

3.3.1初始化计时器InitTimer,然后空循环,进入等中止阶段。

3.3.2 中止触发后,程序进入服务程序。

(1)履行函数SetAllSpeeds,函数依据供给的速度值speed[i]顺次判别是否给各个电机发送脉冲,完成电机以特定的速度和方向旋转。SetAllSpeeds详细算法流程见图3。

(2)从界说的数组dancedata中读取新的速度信息,每200ms一次。

(3)将体系在调用中止处理函数时封闭的计时器从头翻开InitTimer。

(4)中止处理函数结束回来。

留意:榜首,(1)和(2)不行交流,这是为了确保步进电机每步延时的均匀性;第二,内部中止距离时刻 1ms内,8051是否能够将中止服务程序中所有的代码履行彻底?答案是必定的。参阅图4,咱们对整个中止服务程序进行了计算,它所要履行的指令数在 200~300之间改变,时钟距离设置为1ms,选用12MHz晶振,履行这些指令需求耗时约500~600μs1ms,因而,中止处理彻底能够在一个计时器周期内履行结束。

3.jpg

3.4 舞蹈编列

在舞蹈编列中,咱们面向的是动作,因而,有必要关怀三要素:快慢、方向和起伏。在程序中,舞步信息数组格局如下:

4.jpg

每组数据含有8个字节,别离代表8个电机的归一化速度num,这点在3.1节中现已做了详细剖析。程序每200ms读一次数据,换句话说,每组数据的有效期只需200ms。咱们剖析表2一组数据代表的意义。

5.jpg

(1)组数为25,这隐含了动作的时刻信息。由于每组数据的有效期为200ms,所以,25组数据的履行时刻为:200ms×25=5000ms

(2)左脚和右脚(轮式)的归一化速度持平,方向相反。依据公式(1)能够知道

V=0.5×V0

所以,机器人以0.5V0的速度原地转圈5000ms。

(3)其它关节的归一化速度num=0,阐明其它关节均无动作。

3.5 可视化辅佐程序简介

咱们发现一个简略的动作竞需求5组数据,5分钟的舞蹈需求

组数据(需占用1.5K存储空间,AT89C52满意)。假如人工填写这些数据,将好不容易。因而在实践的运用中,咱们用C+Builder编写了机器人模拟程序,选用图形界面,预一化速度和时刻信息,写入data.h,只需将其作为头文件,电机驱动程序将主动读取。

4 电路和程序特色总结

(1)一块单片机操控多个步进电机,总线分时复用。

(2)程序依据中止服务,电机作业安稳牢靠。

(3)提出归一化速度,完成了速度V大范围可变。

(4)数据更新每200ms一次,能够轻松操控各个电机实时加快、减速、迸发,从而使舞蹈更人性化、爱情化。这也正是咱们答应数据量大的原因。

(5)辅佐程序完成编程可视化。

文末是我国科大首届机器人舞蹈竞赛中用到的程序实例。





1.jpg


参阅文献

1 顾天柱,陈巳康.C51穿插编译体系.上海:复旦大学出版社,1990,8

2 胡汉才.单片机原理及体系规划.北京:清华大学出版社,2002

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/news/guandian/292654.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部