在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 5071|回复: 10

【请教】想用VHDL设计一个用摇杆,控制基于FPGA的蜘蛛型行走机器人

[复制链接]
发表于 2009-8-19 14:52:38 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
小弟在这些设计方面的经验非常不足,真诚希望能够得到帮助。
这个蜘蛛型机器人有六个脚,每个脚上有两个伺服马达,两个伺服马达分别控制水平移动和垂直移动;机器人的身体实际上是一块FPGA板子,是xilinx Spartan-3 XC3S4000。
我的这个任务是接着别人做的,机器人的部分已经由别人做好了,我的主要任务是用vhdl来描述这个摇杆(就好比游戏机那样的类比摇杆),通过摇杆来控制机器人的行走。这个摇杆是两个8-bit,“上下","左右”分别是一个8-bit,摇杆的数据通过串行通信的方式传输给机器人。


vhdl的基础语法小弟虽然都学过,但是在应用方面经验尚浅,望诸位设计高手能就这个任务给小弟指明一些基本的思路。不胜感激!

[ 本帖最后由 kojuk 于 2009-8-19 14:54 编辑 ]
发表于 2009-8-24 16:25:45 | 显示全部楼层
这个还真是不容易啊呵呵,摇杆的输入量是什么样的?
发表于 2009-8-24 21:32:16 | 显示全部楼层
楼主能对整个系统的功能和结构划分再说的详细点吗?

据我个人的理解,摇杆的位置信号应该是通过某种途径(有线的,或是无线的)传到FPGA板子上,然后存放在两个8位寄存器中,你所设计的模块就是从这两个8位寄存器中读取数据,然后再通过串行的方式传给下面的接收端口,再由接收端口进一步控制机器人的行动。如果这一接收端口事先已定义好,就不在楼主设计的考虑范围中了。


所以,楼主设计的模块和其他模块的接口就是:(1)摇杆信号的两个8位寄存器 (2)串行接收端口

模块所要考虑的问题有 :(1)从8位寄存器读取数据的定时问题,即每隔多久去读取一次数据  (2)串行数据的发送时序及协议,是否需要接收端口的应答信号?如果接收端口接收数据失败,是否要重发?
(3)由于从寄存器读数据和向接收端口发数据不是同步的,所以可能需要一个FIFO来作为缓冲。

以上只是我按照自己的理解,能想到的一些问题。欢迎大家讨论,补充
 楼主| 发表于 2009-8-29 23:56:43 | 显示全部楼层
非常感谢楼上的回复。

根据楼上的建议,我所设计一个模块,应该是一个并行输入,串行输出的模块吧?是不是也得用VHDL把两个寄存器描述出来?

由于系统本身比较复杂,完全把VHDL代码贴出来篇幅太长,所以我尽可能详细地把前人做出来的蜘蛛机器人FPGA上的各个功能说一下:

如顶楼所述,机器人有六个脚,每个脚上两个马达,其中一个马达可以上下动(最上是127,最下是-127)另一个马达可以前后动(最前是127,最后是-127)。
机器人的身体是一块FPGA,其中FPGA上关于机器人的各种motion已经被前面的人通过VHDL编出来了。
这个VHDL结构体下还包括3个component:
- 1. PWM信号生成的描述。由于马达的移动是靠PWM信号来控制的,所以这个元件主要负责生成PWM信号。
- 2. 一个指令定时器。即两个指令之间的间隔等待时间。
- 3. 闪存控制。 把预先编写的机器人行走程序存入FPGA的闪存中,这样机器人可以自动完成一段行走路线。(关于这一部分,大概和我的摇杆部分没有关系,因为我是直接用摇杆来控制机器人的行走)




模块所要考虑的问题有 :(1)从8位寄存器读取数据的定时问题,即每隔多久去读取一次数据  
(2)串行数据的发送时序及协议,是否需要接收端口的应答信号?如果接收端口接收数据失败,是否要重发?
(3)由于从寄存器读数据和向接收端口发数据不是同步的,所以可能需要一个FIFO来作为缓冲。



关于(1):楼上所指的是不是就是串行通信的波特率?
关于(3):使用FIFO来实现数据同步的内容过去只是略有耳闻,不知道可否详细讲述一下或者推荐一些相关的文章?


非常感谢。
发表于 2009-8-30 00:16:05 | 显示全部楼层
有意思!!
发表于 2009-9-12 02:09:18 | 显示全部楼层
看样子挺复杂的
发表于 2009-9-12 16:10:31 | 显示全部楼层

这是一个控制系统

1,首先你目的是控制蜘蛛,要行与停,左转,右转,后退四个动作.
2.接下去,你要对蜘蛛动做进行建模,描术每个动做与每个脚之间的函数关系(带时间参数的关系,我是不太理解这个关系).把每个动作分解成脚的动做.
3,再接下去,你要把脚的动做分解为电机的动作.
4.明白了如上的控制关系,也就没明白了你的解码关系.先把行控制为解码为脚的动作.再后再解码为电机动作.
最后,我再说一点吧,动作都是时间的函数,这样每个动之间准确的描术要用泛函吧(我不太清楚了),简化一点可以把时间化为参量,但这样蜘蛛的动做一定不会流畅.不过这对硬件人员来说是很强的实现了.找个算法分析的帮你分析一下吧.
自已做的话找一找动做建模这样的书会有参考意义,3D游戏中有很多动做建模,不过它的模型是让人看上去好看,能不能让实物动就不知道了.楼主你的努力啊,这可以让中国研究生的毕业东东.
发表于 2009-9-13 08:51:07 | 显示全部楼层
刚刚开始学,也想有朝一日做个机器人。学习一下
发表于 2009-9-13 21:06:13 | 显示全部楼层
有点意思
 楼主| 发表于 2009-9-23 19:55:17 | 显示全部楼层
关于串行通信有一点还是不太明白: 摇杆有X轴和Y轴,每个轴分别是8 bit。通过8 bit的串行通信输入到FPGA上的话,如何区分X和Y的值?

也就是说,我现在比如用摇杆输入方向“上”,“上”的值是(X=00h ,Y= 7Fh),
在串行通信中,是不是先送一组
“开始位&00h&停止位”
然后再送一组
“开始位&7Fh&停止位“

然后把两组数据分别存到两个寄存器中?
是不是这样的?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条


小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-12-20 16:54 , Processed in 0.047088 second(s), 9 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表