微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 简单程序打造“山寨”版机器手

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

时间:02-21 来源:互联网 点击:

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

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

做 " 山寨 " 版的机器手 , 只在 纸上谈兵或者在仿真软件里仿真是不 行的,必须让它"活"起来。首先, 需要构筑一个硬件平台,用什么芯 片好呢?51?PIC?AVR?ARM?呵 呵,也许有人已经猜到了,对!就是 用51芯片,对于一个初学者来说, 51芯片最合适不过了。具体型号就 用AT89C2051,这个芯片对于许多高 手、大侠来说,简直是小菜一碟,里 边的资源已经是"隔夜的"了,对于 像我这样的菜鸟,就找本基础的书慢 慢"刨"吧。"刨"完书,你就会发 现很多单片机硬件设计都脱离不了如 图 1所示的最小系统。 本"机器手"也不例外,只是在 外围添加了少许元件而已,如图2所 示。图中MCU的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的数据变化量很小, 对伺服电机转角的改变影响并不大,故 消抖程序可以省去。 此时或许有人提出 : 是

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top