事情大概是这个样子的:本人现北京某高校数字媒体专业大四,之前分配毕设课题被坑,现在这个东西跟我学的完全不是一个方向自己过去从没接触过,刚刚实习结束得抓紧弄毕设。。。原本以为靠自己的编程功底看看书应该能行但是作为硬件白痴我现在还没成功把程序烧录进去。。。所以。。。求个大神帮忙做一下吧
我的毕业设计是要做舞蹈机器人控制系统的研究,通俗点讲就是单片机控制17个舵机(电机)同时反应。现有的办法有两个,一个叫“顺序脉冲法”,另一种叫“脉宽差法”。研究的内容就是把这两个方法分别在这个机器人上实现几个简单的动作,不需要特别复杂差不多就行。然后比较这两种方法。
简单解释一下这两种方法:以下两个东西是从别人的论文搬来的,本人大概能理解但代码实现实在是困难:
顺序脉冲法:舵机的控制周期是20ms,而每个正脉冲最大宽度也不过是2.5ms,所以完全可以输出第一个脉冲控制第一个舵机(比如用P1.0口控制第一个舵机),然后马上输出第二个脉冲控制第二个舵机(比如用p1.1控制第二个舵机)。这样,采用顺序输出脉冲的形式控制舵机,一个16位定时器最多可以控制20/2.5=8个舵机。因此,用51系列单片机的两个16位定时器最多可以同时控制16个舵机。用这种方法控制舵机,从微观上来讲,每个舵机其实是按顺序启动的。但是由于系统处理的速度非常快,所以从宏观上来看,所有被控舵机是同时动作的。在每个控制周期(20ms)内,让定时器T0(或者T1)工作9次。前8次每次根据不同的舵机脉宽要求进行定时,每次都对不同的舵机控制端口(I/O口)输出控制脉冲。也就是说8个舵机顺序启动,在脉冲输出i完毕后,又被顺序关断。而第9个定时用低电平来补足其余时间以完成20ms控制周期。这样,从单片机角度来看,在一个周期时间内单片机顺序控制8个I/O口输出脉冲;从各个舵机角度来看,它们都得到了周期为20ms的PPM脉冲,只不过脉冲的相位依次递推而已。流程图如下:
这种方法由于控制方式的原因只能控制16个舵机但是机器人本身有17个舵机。因此有一个舵机将全程无动作。
脉宽差法:暂时舞蹈机器人有17个舵机。这种方法的原理是:
(1)分组排序:将17个舵机控制数据每6个分为一组。对于每一组数据,按照从小到大的顺序排序。
(2)计算舵机控制数据的差值并保存:计算每组内相邻的两个数据的差值(数值大的数与数值小的数的差)并保存于差值数组中。该差值数组共有6个存储单元,第一个单元存放的是该组舵机控制数据的最小值,从第二个单元开始存放舵机控制数据的差值。
(3)数据转换:先把差值数组中的数据转换为定时时间(即控制脉冲宽度差值),再继续转换为定时初值并保存于脉宽差数组中。
(4)一组舵机的控制:控制某一组舵机时,先向该组内所有舵机送高电平(启动舵机),然后把脉宽差数组中的第一个数据赋值给定时寄存器。定时中断发生时,先关断脉宽差数组中第一个数据所对应的舵机,再向定时寄存器中填入脉宽差数组中的第二个数据。依次类推,就可以完成该组所有舵机的控制。
机器人目前用的是一款基于51单片机的SHR-8S人形机器人,其本身自带了大量使用脉宽差法实现舞蹈动作的代码。因此目前编程工作主要是顺序脉冲法的实现。编译环境目前是使用Keil C51。代码烧录到机器人的工作我自己能做。
现在求助内容是实现三组简单动作,使用两个不同方法的代码(有其他控制方法亦可)。报酬暂定1000。要求动作可以简单但是尽量减少调试工作量。从收到定金开始10天以内完成代码。
详细资料或者其他请联系邮箱:z_s@outlook.com 或者楼下回复亦可
小女子感激不尽