新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 简单程序打造“山寨”版机器手

简单程序打造“山寨”版机器手

作者:时间:2011-02-21来源:网络收藏

如今,进入网络世界,君便可见满 山遍野都是"山寨",在这个 "山寨文化"蓬勃兴起的年代,很多 人都对这个新生事物充满着好奇心, 跃跃欲试。本人亦不例外,也想来 "山寨"一下。要"山寨"一件什么 东西好呢?想了N久,想不出来,恰 好,本人正学了和C语言不久, 就用C语言编个"山寨"程序吧;刚 好自己又是个机器人迷,就拿定主意 给编个简单的程序,做个"山 寨"版的机器手吧。

机器手的硬件平台与电路原理

做 " 山寨 " 版的机器手 , 只在 纸上谈兵或者在仿真软件里仿真是不 行的,必须让它"活"起来。首先, 需要构筑一个硬件平台,用什么芯 片好呢?51?PIC?AVR?ARM?呵 呵,也许有人已经猜到了,对!就是 用51芯片,对于一个初学者来说, 51芯片最合适不过了。具体型号就 用AT89C2051,这个芯片对于许多高 手、大侠来说,简直是小菜一碟,里 边的资源已经是"隔夜的"了,对于 像我这样的菜鸟,就找本基础的书慢 慢"刨"吧。"刨"完书,你就会发 现很多硬件设计都脱离不了如 图 1所示的最小系统。 本"机器手"也不例外,只是在 外围添加了少许元件而已,如图2所 示。图中的P1和P3口除了P1.0、 P1.1和P3.0外,内部均有上拉电阻, P1口全部用作独立式按键接口,由于 P1.0和P1.1比较特殊,是AT89C2051 内 置 模 拟 比 较 器 的 同 相 输 入 端 (AIN0)和反相输入端(AIN1),内 部没有上拉电阻,故需在外部接入上 拉电阻,阻值选用常用的10kΩ就可以 了。P3口的P3.6没有引出,而是作为 比较器的输出,故不能像普通的I/O口 那样访问引脚 ;P3.2~P3.5、P3.7则 接伺服电机。

接着 , 还是来介绍一下我们机 器手的另一个重要元件吧,这就是伺 服电机,它在航模界中被广泛使用, 亦称为"舵机",是一种PWM控制 部件。当它收到一串指定角度的"指 令"时,其输出轴就会转动到指定的 角度上。伺服电机跟其他电机不太一 样,输入线不像直流电机那样只有2 根,也不像步进电机(两相式)那样 有 6根,它有自己的特色,只有3根, 引线末端使用杜邦头,如图3所示。 图 3中的杜邦头引线由上至下, 红色的是控制线(脉冲输入线),接 到主控芯片上;中间的是电源线正极,第三条是地线(即电源负极), 供电电压一般是4 ~6V。伺服电机是 一个PWM控制部件,在其控制线上 输入一个周期性的脉冲信号,这个周 期性脉冲信号的高电平时间通常在 0.5 ~2.0ms之间,而周期在5 ~20ms 之间,要求并不十分严格,如图4所 示,图中表格给出了一个典型的20ms 周期性脉冲的脉冲宽度与伺服电机输 出轴旋转角度之间的对应关系。

根据表格中的数据可总结出一条 输出轴角度D和脉冲宽度T的转换关系 式: D=90T-135(TÎ[0.5,2.5]) 有了这个公式,我们就可以很方 便地将转角角度与脉宽互相转换,计 算出初始化等所需要的脉冲宽度。

程序的编写

作为一个初学者,对于单片机内 部的资源往往理解不深,故程序写得 不好,还请各位高手们手下留情,多 多包涵。机器手程序的总流程图如图5 所示。程序初始化后,就执行输出脉 宽,接着进行按键扫描,完毕后又返 回输出脉宽,循环不止。

图 6是输出脉宽到每个伺服电机 程序的详细流程图,W1、W2、W3、 W4、W5是5个脉冲宽度,按顺序分时 地从P3.2~P3.5、P3.7引脚向5个伺服 电机输出。例如要在P3.2输出一个宽度 为W1(ms)的脉冲,如程序1所示。 程序中Delay_ms(W1)是一个以 延时1ms为单位的函数,需要延时多 少毫秒只需在括号内填入对应的数字 即可(该函数的程序很简单,不再列 出)。

图 7是按键扫描子程序流程图。 为了说明原理和排版简洁,图中S1和 S2扫描判断原理采用详细流程,而对 S3~S8则使用简化框图。进入此流 程,首先以一个判断语句判断S1是否 按下,若未按下则继续往下扫描;若 按下了,则W1加1,并以2500为上限 值;如W1未超过该上限值,则继续往 下扫描;S2的扫描原理与S1相似,稍 有不同之处是判断W1的下限值,下限 为500。其他按键扫描的原理则分别与 S1和S2类同。

程序2所示是扫描S1和S2的程序代码。

读完代码,大家是否觉得按键扫 描部分是不是少了点什么东西?呵呵, 对了,就是没有延时去抖。刚开始自己 也觉得奇怪,没有消抖程序怎么能正确 识别出按键呢?后来,请教了其他高手 之后才知道,由于程序简短,整体循环 周期短,按键按下后,若第一次没扫 到,后一周期还可以扫到;即使受到抖 动干扰,由于Wn的数据变化量很小, 对伺服电机转角的改变影响并不大,故 消抖程序可以省去。 此时或许有人提出 : 是否可以 插入扫描按键释放的代码?关于这个 问题,本人也曾作过尝试,发现在代 码中插入释放判别后,当按键的按放 次数很少时,伺服电机是看不出有转 动迹象的,只在按放次数达几十次时 才有比较明显的效果,这样操作者会 感觉很累,原因是伺服电机转角参数 Wn的范围是在500 ~2500之间。鉴于 此,我就试着将Wn的增幅加大一点, 于是伺服电机达到了比较明显的旋转 效果,但旋转精度却会大打折扣,故 程序中未插入扫描按键释放的代码。 程序通过仿真后,就可以动手制 作硬件电路了。

PCB电路板的设计与制作

图 8所示是在DXP2004 SP2 下设 计的PCB,图中,已将按键从主板中独 立出来,两块板使用10针排线互联, 这样就可以很方便地操作机械手。图9 (a)和图9(b)是PCB3D仿真的正反 两面图。

由于电路很简单,我们可以直接 用"洞洞板"焊接,按图纸施工,不 需半小时便可完成,注意把按键接线 引出,接到控制手柄上。本人找了只 废旧的PS2游戏手柄改装代用,只需用 到其中的8个按钮,其余的可以去掉。 这样既看起来美观又用起来方便,如 图10所示。

完成后,用万用表检查无误,把 程序"灌"入芯片即可。至此,"山寨 版"机器手的软硬件部分都完成了,接 着就可以着手加工机械零件了。

机械部分的制作与调整

机械部分零件大部分采用2mm厚 的黑色广告用塑料板制作,为了提高板 材的机械强度,采取了双板粘合的办法 (粘合剂为氯仿),经粘合后的板材, 强度大大增强,估计可达单层的4~6 倍,为整机安全工作提供了足够的保 证。为了减少零部件并减轻机器上部重 量,直接使用螺栓将伺服电机和板材进 行组合,省去了伺服电机自带的舵臂。 这样既降低了重心,增大了稳定度,又 减轻了伺服电机的负载。

以伸缩臂与伺服电机组合为例, 简单介绍一下组合方法吧。首先,用 卡尺(最好用电子卡尺或带表卡尺, 精确度高些)量出伺服电机输出轴外 径f a和内径f b,然后在单层侧板上 合适的位置,按f a尺寸稍小开一圆 孔,使转轴穿过圆孔时,紧凑为宜。 注意,侧板两头应各开一孔,留一边 待用;取另一未开孔单层侧板B,在与 A侧板相同位置上以fb稍大开孔,再 将A、B侧板用氯仿粘合,待干后,一 块具有较高强度的新侧板C就诞生了。 再根据需要在侧板中部打若干个组装 孔,取一颗M3螺丝穿过侧板f b孔把伺服电机输出轴暂时固定,再往侧板 fa孔中注入适量有机溶剂,使孔壁软 化,收紧M3螺丝,使输出轴与侧板完 全配合,孔壁硬化后形成齿状内壁, 恰好与输出轴紧密接触,使侧板能随 轴转动。侧板的另一头也用相同的方 法,连接另一伺服电机。取另一个已 组装单个伺服电机的侧板,用合适长 度的铜柱和若干M3螺丝将两侧板组装 成臂体,组装时注意同端的两个伺服 电机转角一致。拧紧螺丝,臂体就完 成了。 该机器手的其中一个伺服电机需 要使用双输出轴,而一般伺服电机底 部均无输出轴,所以必须给它定造一 个"义轴",要求与原输出轴同心。 截取一块与伺服电机底部同等大小的 双层塑料板D,在适当位置钻孔,注意 D板贴上伺服电机底部时孔要与输出轴 同心,在任意一面上将孔扩大(切不 可整孔都扩),深度只需2mm左右, 用于藏入一个M3螺母,扩孔毕,取 一个螺母和长5mm的带螺纹铜柱,拧 紧,"义轴"便做成了。

采用相似的方法完成各部件后, 便可组装成整体了。组装完成以后, 还需作最后的整机测试,若伺服电机 初始化值和上下限值不适合,可以按 实际调试修改。确定后,将修改完的 源代码编译成bin或Hex文件,下载到 AT89C2051中。再找个合适的电源适 配器给它供电,至此,"山寨版"的 机器手工程顺利竣工。图11为完全手 工制作的"山寨版"机器手外形。

功能测试

机器完成后,本人做了些简易的 测试,主要是回旋范围和夹持搬运不 同物品的性能。

1.回旋范围测试 图11测试左右旋转范围,图12、 图13是测试前后伸展距离。

2.夹持不同物品搬运测试 图14是搬运铅笔测试,图15是搬运中的铁皮罐。

写在后面的话

我刚开始设计这个机器手时是仿 照国外的5个自由度的,后来因采购的 伺服电机的输出力矩不足(需要使用 大力矩的金属齿轮伺服电机),而改 为 4个自由度,在图11中能看到有些 "改造"的痕迹。制作机械部分时也 尝试过使用亚克力板材,由于条件所 限,加工设备只有手锯、锉刀和一把 电钻,加工起来效果不佳,最后只好 放弃了亚克力,改用了现在所用的普 通塑料板。另外,程序设计时,编写 了两个方案,一个见上文,另一个方 案见源代码,可到www.radio.com.cn 上下载,其原理也不复杂,请有兴趣 的读者可自行分析。

伺服电机相关文章:伺服电机工作原理




评论


相关推荐

技术专区

关闭