ROBOT & AI

首页 | 新闻 | 产品 | 竞赛 | 学苑 | 读书 | 硬件 | 软件 | 智能 | 制作 | 项目 | 资源 | 论坛
 您的位置:首页 >> 竞赛 >> 舞蹈比赛 >> 正文
站内搜索:   

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

来源:   字体:[ ]  2007-03-12

关键词:舞蹈 电机 驱动 电路

这是一种基于总线分时复用的方式,以动态扫描的方式来发送控制信号,这和高级操作系统里的多任务进程调度的思想一致。这种方法明显的好处是节省I/O口,使系统可以控制更多的步进电机。本电路设计为控制8个。
3 程序设计
传统的步进电机驱动程序利用简单的条件循环来发送脉冲序列,但当电机数目发生变化时,编程繁杂,冗余代码较多,难以做到信号占空比一致,进而产生“抖动”现象。下面提出一种基于中断服务方式,面向舞蹈动作,可实时改变各个电机速度和方向(每200ms可改变一次)的程序设计方法。
31 速度归一化和线性关系
我们将速度量化成一个-128127内可变的数,正号代表正转,负号代表返转,称之归一化速度(-128127为一个字节)。给每个电机分配一个速度累加计数器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_TICKER的时间就越短,那么向步进电机发送脉冲的频率就越高,速度也就越快。
归一化速度值设为num-128127),电机实际旋转速度设为V,那么Vnum之间满足关系式:
1)当num是阈值600的约数时,
其中,[x]代表不超过x的最大整数。
3V0是一个速度常数,即当归一化速度值num=120的时候对应的电机实际速度。
4num和速度V近似线性关系,V∝num。正是因为有了这种函数关系,我们在舞蹈动作控制中,可以轻松实现速度在大范围内变化。
3.2 速度正负实现方式
(1)在程序中,数组steps[8]用于存放步进电机的脉冲序列。

(2)设置指针cur_step[8]指向8个电机当前处在脉冲序列step[8]中的位置。
易知:0<=step[i]<=7,其中,i分别代表8个电机。
3)设置指针移动变量delta=0delta=1,指针向后移动一步,电机正转;delta=-1,指针向前移动一步,电机反转;delta=0,指针不移动,电机不发生转动。
33 程序具体步骤
331初始化计时器InitTimer,然后空循环,进入等中断阶段。
332 中断触发后,程序进入服务程序。
1)执行函数SetAllSpeeds,函数根据提供的速度值speed[i]依次判断是否给各个电机发送脉冲,实现电机以特定的速度和方向旋转。SetAllSpeeds具体算法流程见图3
2)从定义的数组dancedata中读取新的速度信息,每200ms一次。
3)将系统在调用中断处理函数时关闭的计时器重新打开InitTimer
4)中断处理函数结束返回。
注意:第一,(1)和(2)不可交换,这是为了保证步进电机每步延时的均匀性;第二,内部中断间隔时间1ms内,8051是否能够将中断服务程序中所有的代码执行完全?答案是肯定的。参考图4,我们对整个中断服务程序进行了统计,它所要执行的指令数在200300之间变化,时钟间隔设置为1ms,选用12MHz晶振,执行这些指令需要耗时约500600μs<1ms,因此,中断处理完全可以在一个计时器周期内执行完毕。

4页 上一页  [1] [2] [3] [4] 下一页 

录入:master 点击:

[发表评论] [打印文章] [关闭窗口]  

原创文章属本站所有,转载请注明来源:Robotain.com  
相关文章

 网友评论(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

发表评论 昵称:

  

  • 请遵守《互联网电子公告服务管理规定》及中华人民共和国其他各项有关法律法规。
  • 严禁发表危害国家安全、损害国家利益、破坏民族团结、破坏国家宗教政策、破坏社会稳定、侮辱、诽谤、教唆、淫秽等内容的评论 。
最新推荐
热门文章
论坛精华
网站简介设为首页 加入收藏在线留言友情链接联系我们 - 广告服务 - 版权申明

Copyright © Robotain.com  all rights reserved  浙ICP备07003355号

版权所有 机器与智能网