gicren 发表于 2013-11-6 14:24:51

关于机器人外设的规范

本帖最后由 gicren 于 2013-11-6 14:27 编辑

(注:本文所指的机器人,即教仪、DIY、家庭等简易机器人)

前言

      在我刚接触电子行业时,正值单片机行业百花齐放之时,以MCS51、PIC、AVR、MSP430等单片机为主控制器的开发套件琳琅满目,虽然单片机的内部资源大同小异,但在鬼斧神工的雕琢下,其外形可谓大相径庭……
      多年之后,一个如今备受全球青睐的以AVR单片机为核心的Arduino控制器鬼魅般地出现,它结合单片机的资源将控制板的外形与功能做了一个规范,渐渐地,很多围绕Arduino的外设厂商如雨后春笋般出现。后来,当我看到Renesas(GR-SAKURA)、TI(Arduino TRE)、Intel(Galieo)的出现,为之震惊,并意识到一个合理的规范,其价值远超一款优秀的产品。
      我与很多机器人爱好者一样,平时喜欢DIY,偶尔也会沉浸在小小发现后的喜悦中。直到有一天,终日徘徊于硬件与软件的简单生活被打破,增添了几分骚动,我发现,在很多机器人的应用中,Arduino并非游刃有余。机器人外设也是需要一个合理的规范,而且这个需求日益明显,我想自己并不是第一个尝试制定规范的人,然而时至今日,却一直没有看到对机器人外设通用规范的出现。可想而知,对机器人外设进行规范的难度,只因其风情万种。确实,机器人行业是一个多元化的行业,有着各式各样的应用需求,与其苦寻一种通讯接口作为代表,不如选择一个合适的端子包容它们,于是执笔写下这篇博文,与大家分享自己的一些心得与体会,同时也希望大家踊跃发表自己的观点与看法,一同定义一个合理的机器人外设规范。
      以鄙人之鄙见,机器人外设可按通讯距离分为近距离设备与远距离设备,近距离通讯设备又可细分为常规设备与桌面设备。常用的通讯接口很多,例如:UART、SPI、I2C、RS232、RS422、RS485、CAN、USB等,它们都有其优秀的一面,倘若一定要在其中选择几种,我只能忍痛割爱,选择了最普及的I2C、RS485、USB。接下来,应选择合适的端子,对于机器人的应用,务必考虑工作电流与外形尺寸,然而又一度陷入抉择的泥潭,显然这次还是难以做到情有独钟,请容许我再多情一回,留下潇洒满人间。对比了众多的现有接线端子,包括外形美观性、性价比等等,最终选择了公座DB9(车PIN的单引脚最大连续电流可达5A,主要用于功率驱动设备。注:市面上DB9有常规、窄体单排与窄体双排三种类型)与表贴的公座PH2.0-9PIN(单引脚最大连续电流可达2A,主要用于传感器设备)。
      在此,请允许我给它命个名吧,RSDS,即Robot Standard Device Socket的简称,您看何如?同时将公座DB9称之为RSDS-A,表贴公座PH2.0-9PIN称之为RSDS-B。



关于端子引脚的定义

      关于9PIN引脚的定义如下:
      1、RS485-A
      2、RS485-B
      3、SDA/USB-D+
      4、SCL/USB-D-
      5、GND
      6、VCC
      7、VCC
      8、Error/USB Detection
      9、GND

      RSDS实现了不同接口类型的设备,通过一个Socket连接在一起,从而使得设备级联时,更加简洁、美观。同时规定,通讯方式严格遵循主从式结构,即在系统中仅有一个系统主设备(所有数据传输的发起者),其余均为系统从设备。

疑问1:系统从设备出现故障时,如何通知系统主设备?
解决方法:RSDS为解决这个问题,引入了一个指示引脚8,通过外部上拉电阻至高电平,所有的系统从设备均将与该引脚相连的端口设为开漏输出。任何一个系统从设备出现异常,可通过拉低该引脚通知系统主设备。系统主设备在检测到异常后,遍历所有的系统从设备,读取故障字,以获悉所有的故障源。

疑问2:当设备具有USB接口时如何使用?
解决方法:由于USB接口不存在设备间的级联问题,RSDS为解决这个问题,所有的系统从设备,在初始化期间,将检测引脚8的状态,若外部将该引脚拉至低电平,则使能连接,等待主机枚举,若在规定时间内未被成功枚举,则关闭连接(所谓的连接,即是否使能D+或D-的上拉电阻,通知USB集线器有设备插入)。

关于电路板的外形尺寸

      关于电路板外形尺寸的规范,这个需溯及Microsoft.NET Gadgeteer,Gadgeteer设计团队对产品的规范做了很多的工作,我很欣赏他们的一些规范,在此感谢他们对机器人行业的贡献。


通讯协议参考及现有产品展示

Gicren设备通讯协议(RS485/G485_V11)
Gicren设备通讯协议(I2C/GI2C_V11)
SoftServo-B10CH(10路舵机控制器)
SoftServo-B24CH(24路舵机控制器)

learner123 发表于 2013-11-6 17:29:13

软广告,楼主该交广告费了

tlsmf 发表于 2013-11-7 08:49:51

。。。            

bailao99 发表于 2013-11-8 11:52:06

从抗干扰,适当速率,端子数尽量少等几个方面考虑,选择CAN比较明智,CAN收发器现在都是2rmb以下了。DB9的尺寸有点大,抗振动性能不佳。不动的设备可以考虑DB9,动的设备要往汽车上靠。USB,IIC都存在抗干扰性能不佳的问题。USB用于器件间互联,需要提供HOST支持,目前支持USB host的单片机较少,价格小贵。内部各单元之间互联在考虑速率的前提下,要特别注重可靠性,另外是考虑成本。

gicren 发表于 2013-11-13 00:40:07

learner123 发表于 2013-11-6 17:29 static/image/common/back.gif
软广告,楼主该交广告费了

无心插柳柳成荫,大人恕罪啊,{:tongue:}

gicren 发表于 2013-11-13 00:50:18

bailao99 发表于 2013-11-8 11:52 static/image/common/back.gif
从抗干扰,适当速率,端子数尽量少等几个方面考虑,选择CAN比较明智,CAN收发器现在都是2rmb以下了。DB9的 ...

1、原本差分信号的接口是选CAN的,后来考虑到很多工程师更熟悉RS485,为了降低门槛就选择RS485了。
2、最早我也以为DB9是比较大的,后来装了两三个电子市场,当我看到窄体DB9时,被深深吸引了,DB9有窄体单排和窄体双排,有一种窄体双排的,单引脚最大电流可以做到5A,两个并联,10A,对大多数的机器人外设是完全没有问题的
3、USB不存在直接并联的问题,使用USB的时候,需要转换头,不在设备上直接设计USB座子,主要是为了达到一个连接器的设想
4、I2C主要用于近距离设备间通讯,我发现很多工程师喜欢用UART,当仅有一个UART的MCU,并且被占用的时候,I2C可解燃眉之急
最后,对bailao99的悉心点评,万分感激......

gicren 发表于 2013-11-13 00:53:49

bailao99 发表于 2013-11-8 11:52 static/image/common/back.gif
从抗干扰,适当速率,端子数尽量少等几个方面考虑,选择CAN比较明智,CAN收发器现在都是2rmb以下了。DB9的 ...

前辈有推荐的连接器吗?我找了很长时间,都没有找到非常满意的,窄体DB9算是相对比较满意的了

bailao99 发表于 2013-11-14 13:39:45

到mouser或者digikey上查查,内部互联一定要考虑可靠,简单,还有应该是可变的一主多从,而不是固定的一主多从
页: [1]
查看完整版本: 关于机器人外设的规范