矿石收音机论坛

 找回密码
 加入会员

QQ登录

只需一步,快速开始

搜索
查看: 11551|回复: 21

51单片机控制的四足爬行机器人

[复制链接]
     
发表于 2014-8-23 12:15:38 | 显示全部楼层 |阅读模式
本帖最后由 shadow 于 2014-8-23 13:56 编辑

只要一块单片机,四个舵机,一块电池,就可以做出来。是的,你没有看错,不要晶振,不要电阻,不要电容,不要7805,不要AMS1117,不要三极管。还在等什么,心动不行动,赶紧动手吧

咳咳。这个机器人可以往前直行,倒着走,左转,右转。

QQ截图20140823114812.jpg

为了方便控制使用了遥控。遥控使用315MHz收发模块(不带2262,2272等编码解码芯片)做的。串口透明传输,发射接收都要做反相处理,所以呢,实际是有三极管和电阻滴。

使用的是STC15W204S单片机。代码太长就直接上传附件吧。
无线串口-四足昆虫.rar (11.08 KB, 下载次数: 686)

已附带HEX文件,可直接烧录。P1^0,1,2,3口子分别接左上,右上,左下,右下四个舵机。不愿做遥控的可以直接用两根线(RX,GND)与电脑连接,用串口助手发送指令控制。指令格式为0x55 0x55 0x2A 0x5A + 三字节数据 + 一字节异或校验
当中三字节数据只取低4位,高4位为其反码。第一字节未使用,第二字节为左右方向,第三字节为前后和速度。具体的还是参考源代码吧。。。如55 55 2A 5A F0 78 78 0A,这个指令的执行结果是原地不动,四脚垂直

当中舵机驱动部分可以分离出来,这个驱动可以带很多舵机,你愿意的话带8*4=32个舵机也没问题。

注意事项
1.推荐使用STC15W204S单片机,烧写方便。宽电压范围不需要稳压芯片,程序大于2K所以至少要4K的单片机。
2.为了解决中断和主程序间的数据更新同步问题多处使用双缓冲,且代码本身是拼凑的,本是用于其他地方。所以冗余非常大,如果只是实现往前走的功能,代码量可以大大减少(现在有六百多行)。
3.由于使用串口透明传输,串口中断一定要处理好。315MHz接收模块会给RX端大量无用数据,导致程序频繁进入串口中断,主程序的实际执行时间远比你想象的长。
4.舵机工作时会吸取较大电流,在我的板子上不用滤波电容也能正常工作。但之前出现过复位的问题。所以建议还是加上大容量电解改善电压波动问题。在多个舵机一起工作时应避免大量舵机同时改变角度,可以适当错开舵机间的运动时间。
5.编译时注意参数,STC15W204只有256字节内存,Memory Model选Small,Code Rom Size选Compact。烧写时选24MHz。
6.如果要移植到其他单片机请注意串口问题。这里使用的波特率是9600.STC15W204S使用的是T2定时器作为串口工作模式1的时钟,而一般单片机都是定时器1。另外角度计算部分和定时器0的计数时间有关
7.遥控还可以控制P3^7口上拉的LED。并且接收到指令后会在TX发出当前的步伐数据,即每步中各个舵机的角度

评分

1

查看全部评分

     
发表于 2014-8-23 12:40:02 | 显示全部楼层
我是来看成品的....
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2014-8-23 14:03:55 | 显示全部楼层
wznanan 发表于 2014-8-23 12:40
我是来看成品的....

那张图就是成品,环氧板上八个扎带绑着的就是舵机。。。

之所以做的这么简陋是因为这本来就只是个验证模型。程序的结构就是按一定时间顺序周期调整多个舵机的角度,同样可以用于驱动那种6足18个舵机机器虫子,只是成本和机械加工的问题。

如果实现更复杂的功能,舵机已经不适合了:没有当前角度和力矩反馈,机械效率低,完全锁死缺乏弹性。所以我也只做到这里,不会进一步改进。
回复 支持 反对

使用道具 举报

     
发表于 2014-8-23 16:38:52 | 显示全部楼层
谢谢分享,最好把电路图贴出来供大家参考。
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2014-8-23 17:40:46 | 显示全部楼层
本帖最后由 shadow 于 2014-8-23 17:43 编辑

应该没有多少人把HEX烧进去就能成功的。首先,你要有4个舵机,还要有STC15W204S芯片。另外忘了说了,STC15W204S有多种不同引脚数的封装,要看具体该封装的引脚排列。最简电路只有舵机单片机的电源线和舵机信号线串口线,所以实际不需要电路图。。。另外,你的舵机杆子固定位置未必和我的一样,所以很可能需要调整代码中SERVO_DAT数组里的数据。

如果考虑移植,那么必须要修改串口的初始化代码。如果使用不同晶振频率ang_to_states函数中计算方法也要改。不需要外部控制的话请在while(1)前调用servo_step_set(),然后删除后面 if(UART_RECVED)条件语句中的内容,串口相关代码也可以都删了

-------------------

这个玩意最重要的不是让机器人爬起来,而是里面的多舵机驱动。之前见过一个6舵机驱动,用延时写的,很巧妙,但毕竟不精确,软件延时浪费MCU时间,而且难以扩展到更多舵机。我就动手写了这个N舵机驱动,理论上用它驱动32个舵机也没问题,就是初始化时会耗点MCU时间。因为初始化就是每次在T0中断里更新TH0TL0和端口状态,也不会占用多少MCU时间。

里面的遥控接收代码也可以作为参考。315MHz串口透明传输大概是最廉价的方案,这里连PT2262之类的芯片都给省掉了。

补充内容 (2014-8-24 13:16):
说错了,初始化会占用些CPU时间,但初始化完成后后面输出控制信号时每次只是在T0终端里更新TH0TL0和端口状态,不会占用太多MCU时间
回复 支持 反对

使用道具 举报

     
发表于 2014-8-24 12:53:14 | 显示全部楼层
学习一下,NN舵机驱动
回复 支持 反对

使用道具 举报

发表于 2014-8-25 13:21:44 | 显示全部楼层
线也太乱了
回复 支持 反对

使用道具 举报

     
发表于 2014-8-25 15:02:34 | 显示全部楼层
学习中不知好搞不
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2014-8-25 15:14:22 | 显示全部楼层
风淋雨沐 发表于 2014-8-25 15:02
学习中不知好搞不

控制舵机部分的代码分离出来还是比较容易的,可以用于需要控制多个舵机的场合
回复 支持 反对

使用道具 举报

发表于 2014-8-26 18:31:53 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

     
发表于 2014-8-28 20:03:47 | 显示全部楼层
现在还玩不转
回复 支持 反对

使用道具 举报

发表于 2014-8-30 23:03:36 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

     
发表于 2014-9-3 23:37:49 | 显示全部楼层
正在学51  收藏了  
回复 支持 反对

使用道具 举报

发表于 2014-9-4 16:51:05 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2014-9-4 19:14:42 | 显示全部楼层
ashen 发表于 2014-9-4 16:51
是STC89C52RC吗?

请仔细看前面的帖子正文。。。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 加入会员

本版积分规则

小黑屋|手机版|矿石收音机 ( 蒙ICP备05000029号-1 )

蒙公网安备 15040402000005号

GMT+8, 2025-4-30 14:55

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表