搜索
bottom↓
回复: 12

【讨论】大家讨论一下这个机器人电路构建方式的利弊

[复制链接]

出0入0汤圆

发表于 2005-10-9 22:11:50 | 显示全部楼层 |阅读模式
一款功能比较完善的机器人,必然涉及很多功能电路,8位单片机由于受IO数量、运算速度、处理能力等各方面影响,很难在一片单片机的电路里,处理那么多的任务。在这种情况下,如果能像结构化编程那样,将各个典型功能电路做成标准模块,然后在主控CPU的协调下分工合作,就可以比较好的解决以上问题,于是设想了以下电路构建方式:









以上各个功能电路板分别由一片低端单片机负责管理,任务管理的主CPU则稍微使用高级一些的,大家在主CPU的统一协调下工作,通过SPI或I2C互连总线,达到数据的双向传输。而在总线中传输的数据,均为主CPU的主控指令和各子CPU返回的数据,这样就把很多需要实时处理数据的工作分配到各个功能模块的子CPU中,减轻主CPU的负担,避免主CPU任务繁重和端口复用带来的各种问题。



这样子做的好处是:

1、整个机器人电路结构清晰明了、利于学习和使用,也方便故障定位和维修。



2、任务分担,各CPU不用在连续满负荷的状态下工作,提高稳定性和实时响应程度。



3、电路自由搭配,按需安装,未来扩展功能很方便。



4、写程序简单方便,各个功能模块程序单独写,避免程序庞大累赘,便于修改调试。



对比单CPU形式的结构,目前考虑到可能带来的不便是:

1、板子多了成本增加。



2、总线连线要求比较高,必须避免断路或接触不良,这样相对单CPU来说也牺牲了一定的稳定性。



3、编程除了要考虑单个功能模块的工作以外,还要重点写好主CPU的任务管理和协调机制,在预防总线竞争和优先权裁决机制上要十分完善,对写程序的人要求较高。





不尽之处,请大家讨论指点,谢谢!

出0入0汤圆

发表于 2005-10-10 00:00:37 | 显示全部楼层
记得国外有个开源的项目是用的这种设计。我比较喜欢这个设计,当然我对于这方面是外行。

出0入0汤圆

发表于 2005-10-10 03:07:21 | 显示全部楼层
模块化设计是最好的方式。

用i2c确实是跟方便,但是对于数量多了不知道抗干扰如何,速度够不够。

如果全用总线方式连接。那变得io口剩余过多?是不是可以把一部分放到主芯片上

比如电机的控制(因为写程序起来比较方便)驱动部分电路就单独做一块,其他一些需要数据量比较大的用并口或其他。

小模块就用i2c。

在就是板子多了,到时候固定起来是不是成另一个问题。会不会变成好几层。

出0入0汤圆

 楼主| 发表于 2005-10-10 08:56:10 | 显示全部楼层
方框图上表示的只是一个大致原理而已,如果实际制作,一般是不需要那么多板子的,可以把一些功能按照IO数量分配和CPU的处理强度来结合在一起,尽量缩减到3块板子左右为好,比如电机驱动板子里没用到定时器还可以用来产生38K红外调制信号等,需要好好的计划安排一下,太多CPU和板子不但浪费,还加重了编程的负担,降低稳定性。

出0入0汤圆

发表于 2005-10-10 10:25:37 | 显示全部楼层
电子设计竞赛的时候我们是这样做预先准备的,这里提供一点经验:

最好不要用i2c等协议,麻烦……有时候真的调死你,因为很多卖的模块的i2c都不是标准的,虽然你看着都是i2c但就是不能挂在一个总线上。个人推荐就用最常用的那个串口,什么片子都有,小模块弄个2051就搞定了。我们做的试验,一个16作主,把输出接到从的输入上(直接连上,什么都不要),把从的输出一起接到16的输入上,这样1带7(有16有51也有2051)没有出现问题,

另外一个问题就是通讯方面的了,假如你想只有主机能发起通讯的话很好办,总线上肯定不会发生冲突。但这样必然加大了主机的负担,要不断的询问各个从机才可以。假如要让从机可以发起通讯(感觉上象中断那样,一旦这个传感器发现XXX,就发起一个通讯给主机)就要考虑冲突的问题了,要有一个避让算法。我们当时设计的是在检测到冲突时,每个从机延迟一个特定的时间(地址号*基本时间),这样在从机不多(20个以内吧)不会造成太大的延迟,而且很好实现。同时你可以让重要的东西放在低地址上,可以优先响应。

其余的就没有什么了,另外说一点,和各个模块通讯的协议应该一样,不要给这个模块的启动是0xf0,那个又是0x55了,应该让主机尽量工作在一个不知道它是什么也可以的状态下。

出0入0汤圆

发表于 2005-10-10 10:27:59 | 显示全部楼层
另外固定方面的问题我有一个很不正规的做法:用口袋装,塑料袋就绝缘,不会短路,然后把线引出来就可以了~弄个口袋放车后面也不是不行:)

出0入0汤圆

 楼主| 发表于 2005-10-10 10:49:02 | 显示全部楼层
谢谢barrin的经验共享,想问一下的是:如果每块板子我都用AVR的I2C接口,会有连接不上总线的问题吗?使用I2C总线我并不是想直接使用市面上的I2C接口的传感器和现成模块,还是要一片低端AVR来处理数据和跟总线连接的。

出0入0汤圆

发表于 2005-10-10 10:53:55 | 显示全部楼层
这样成本不说,板子大小就是问题啊~16比2051大不少呢~

另外16的i2c我调过,可能是技术原因,有时候不稳定(连了N个以后),所以我放弃了这个想法~

另外一个我用串口的理由是这样可以直接和上位机连,当个从机直接挂在总线上比较方便~~

当然i2c的话寻址什么的就可以不用从新做了~也不错~

出0入0汤圆

 楼主| 发表于 2005-10-10 12:10:17 | 显示全部楼层
节约成本的话可以用M8或M48系列做从机板的主控,而主机板可用M16或M32都可以啊,用贴片的倒可不必在乎板子大小了,至于总体成本,我想会比市面上动则上千、几千大洋的东西性价比要高很多,毕竟一片M8也用不着几个钱。
头像被屏蔽

出0入0汤圆

发表于 2005-10-10 16:19:50 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

出0入0汤圆

 楼主| 发表于 2005-10-10 17:12:18 | 显示全部楼层
主CPU可以考虑使用高端的AVR,至于各个子板部分的CPU,用上M16都算浪费了,呵呵。刚才规划了一下电机驱动和运动反馈部分的子板,M8都绰绰有余,还要考虑一下结合更多的功能进来才算物尽其用。

出0入0汤圆

发表于 2005-10-11 02:04:23 | 显示全部楼层
用m8可能是不够。除非非常小的系统。我现在用的就轮子编码红外左右避障,舵机,1602,l298n,按纽,就已经到极限了。了只留了4个ad口备用

出0入0汤圆

发表于 2006-1-7 17:04:58 | 显示全部楼层
建议用CAN现场总线,速度快、连接简单、无数据传输冲突、占据空间也很小、技术成熟。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-20 19:52

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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