发明内容
本发明主要解决的技术问题是提供一种主从设备地址分配系统及方法,以使连接至所述主设备的第一从设备及至少一第二从设备能自动获得唯一地址,以解决地址冲突问题。
为解决上述技术问题,本发明采用的一个技术方案是:提供一种主从设备地址分配系统,包括:
主设备,用于发出包含有地址的指令;
第一从设备,连接所述主设备,在所述第一从设备连接上所述主设备时,开始计时,若在预设时间内所述第一从设备接收到所述主设备发出的指令,则将所述指令中的地址存储后输出应答信号给所述主设备;及
至少一第二从设备,连接所述第一从设备,在所述第二从设备连接上所述第一从设备时,开始计时,若在预设时间内所述第二从设备接收到所述主设备发出的指令,则将所述指令中的地址存储后输出应答信号给所述主设备。
为解决上述技术问题,本发明采用的一个技术方案是:提供一种主从设备地址分配方法,包括:
通过主设备发出包含有地址的指令;
在第一从设备连接上所述主设备时,开始计时;
判断在预设时间内所述第一从设备是否接收到所述主设备发出的指令;
若接收到指令,则将所述指令中的地址存储后输出应答信号给所述主设备;
在所述第二从设备连接上所述第一从设备时,开始计时;
判断在预设时间内所述第二从设备是否接收到所述主设备发出的指令;及
若接收到指令,则将所述指令中的地址存储后输出应答信号给所述主设备。
本发明的有益效果是:区别于现有技术的情况,本发明所述主从设备地址分配系统及方法通过在每一从设备中设置第一端口及第二端口,并通过开关芯片的第一及第二使能引脚使从设备在预设时间内接收到主设备的指令时则将对应地址存储并与主设备进行通信,以此解决多个从设备的地址冲突问题。
具体实施方式
请参考图1,是本发明主从设备地址分配的结构示意图。所述主从设备地址分配系统包括主设备100,用于发出包含有地址的指令;
第一从设备200,连接所述主设备100,在所述第一从设备200连接上所述主设备100时,开始计时,若在预设时间内所述第一从设备200接收到所述主设备100发出的指令,则将所述指令中的地址存储后输出应答信号给所述主设备100;及
至少一第二从设备200,连接所述第一从设备200,在所述第二从设备200连接上所述第一从设备200(即第二从设备实际连接上第一从设备,或者第一从设备的第二使能引脚开启以使得第二从设备连接第一从设备)时,开始计时,若在预设时间内接收到所述主设备100发出的指令,则将所述指令中的地址存储后输出应答信号给所述主设备100。
其中,若所述第一从设备200或所述第二从设备200在预设时间内没有接收到所述主设备100发出的指令,则所述第一从设备200不再从所述主设备100接收指令且不输出应答信号给所述主设备100。
其中,在所述主设备100接收到应答信号后对指令中的地址进行加一,即主设备100发送给第一从设备200的地址为1,发送给第二从设备的地址为2,以此类推。
请参阅图2至图6,具体地,所述主设备100包括处理器120、连接端口110及电阻R1,所述连接端口110的第一引脚1连接所述主设备100的处理器120的发送引脚robot_Tx及经所述电阻R1连接电压端Vdd,所述连接端口110的第二引脚2连接所述主设备100的处理器120的接收引脚robot_Rx,所述连接端口110的第三引脚3连接所述主设备100的处理器120的电源引脚Vdd,所述连接端口110的第四引脚4接地GND。
具体地,所述第一从设备200及所述每一第二从设备200均包括第一端口210、第二端口220、处理器230及开关芯片240,所述第一从设备200的第一端口210连接所述主设备100的连接端口110,所述第一端口210的第一引脚1连接所述处理器230的第一输入输出引脚I/O,所述第一端口210的第二引脚2连接所述第二端口220的第二引脚2,所述第一端口210的第三引脚3连接所述第二端口220的第三引脚3并连接电压端Vdd,所述第一端口210的第四引脚4连接所述第二端口220的第四引脚4并接地,所述第二端口220的第一引脚1连接所述处理器230的第二输入输出引脚I/O,所述处理器230的第三输入输出引脚I/O连接所述开关芯片240的第一使能引脚EN1,所述处理器230的第四输入输出引脚I/O连接所述开关芯片240的第二使能引脚EN2,所述处理器230的第一输出引脚AF用于输出应答信号,所述处理器230的第二输出引脚AF连接所述开关芯片240的第一输入输出引脚NO1及第二输入输出引脚NO2,所述开关芯片240的第一串行引脚COM1连接所述第一端口210的第一引脚1,所述开关芯片240的第二串行引脚COM2连接所述第二端口220的第一引脚1,所述开关芯片240的电源引脚VCC连接电压端Vdd,所述开关芯片240的接地引脚GND接地。
在本实施例中,所述主设备100的连接端口110连接所述第一从设备220的第一端口210,所述第一从设备200的第二端口220连接所述第二从设备200的第二端口220,所述第二从设备200的第一端口210连接下一第二从设备200的第一端口210,以此类推,实现主设备100与若干从设备200的连接,这里所说的连接是通过连接线将端口连接实现的。
在本实施例中,所述主设备100的连接端口110、所述第一从设备200及每一第二从设备200的第一端口210及第二端口220均为四线全双工通用异步收发传输器接口。所述主设备100为机器人本体,所述第一从设备200及所述至少一第二从设备200均为传感器。所述电阻R1的电阻值为4.7千欧。在本实施例中,使用通用异步收发传输器(UniversalAsynchronous Receiver/Transmitter,UART)双线全双工通信,波特率为115200Hz。
所述主从设备地址分配系统的工作原理描述如下:
机器人本体(主设备100)上电稳定后,robot_Tx引脚(主设备100的连接端口110的第一引脚1)被拉高,等待传感器接入,接入时可以单个传感器接入也可以同时串接多个传感器接入,传感器接入后,所有级联在UART总线上的传感器进行初始化,传感器的处理器230的引脚sensor_Rx_a(第一端口210的第一引脚1)和sensor_Rx_b(第二端口220的第一引脚1)设置成下拉输入,引脚Tx(第一输出引脚AF)设置成浮空输入,Rx(第二输出引脚AF)设置成AF复用输入模式;开关芯片240的第一使能引脚EN1及第二使能引脚EN2被关闭,引脚Rx和sensor_Rx_a高阻不通,引脚Rx和sensor_Rx_b高阻不通,引脚NO1(第一输入输出引脚I/O)和NO2(第二输入输出引脚I/O)连在一起。所有传感器上电初始化ID=0,并一直循环等待第一引脚sensor_Rx_a或sensor_Rx_b由低电平变高电平,然后进入等待接收机器人本体指令的状态,变高电平的原因是传感器接入到了连通到机器人本体的引脚robot_Tx上,允许从机器人本体接收指令,然后执行相应的操作。由低电平变高电平说明了要么本级传感器是直连到机器人本体,要么是上级传感器成功分配到了ID后打开了连通下个传感器,变成低阻通路,或者超时打开了连通下个传感器,变成低阻通路,超时的原因是上个传感器进入了等待接收机器人本体指令状态,若在预设时间内(如100毫秒)接收到指令,则连接到机器人本体的第一个传感器(第一从设备)编码为1,第二个传感器编码为2,第三个传感器编码为3,以此类推,若在预设时间内没有接收到指令,如第三个传感器没接收到指令则机器人本体保留ID=3,第四个传感器从机器人本体接收的地址则使用编码为4而不使用编码3,以此类推,机器人本体保留分配不成功的ID的原因是把这个ID通知给用户,方便用户知道是哪个传感器出问题了,用户可以根据级联传感器找到对应ID的那个传感器进行相关处理,以给维修检测提供方便。
在本实施例中以主设备连接四个从设备为例进行说明,即机器人本体串接了4个传感器,第一个传感器的引脚sensor_Rx_a连接了机器人本体引脚robot_Tx,第一个传感器的处理器发现引脚sensor_Rx_a被拉高后,先把引脚sensor_Rx_a从下拉输入配置成浮空输入模式,以免引脚sensor_Rx_a的下拉对通路造成其他影响,接着使能第一使能引脚EN1,以使引脚sensor_Rx_a与Rx从高阻变成低阻连通,进入等待接收指令状态。此时机器人本体通过一个外部触发,对第一个传感器发送指令进行ID分配,机器人本体主控发送一个ID=0的指令到总线上,此时,第一个传感器还没通过使能第二使能引脚EN2,此时4个传感器只有第一个传感器能从机器人本体接收到指令,其余3个传感器都不能接收到机器人主体引脚robot_Tx发出的指令。当第一个传感器在预设时间内接收到引脚robot_Tx发出的指令,则把分配到的ID=1存到内部存储器,接着使能第二使能引脚EN2,以连接引脚sensor_Rx_b和Rx,因此第一个传感器的引脚sensor_Rx_a、sensor_Rx_b和Rx都连通到机器人本体引脚robot_Tx上,机器人本体可以与第二个传感器进行通信。第一个传感器使能第二使能引脚EN2后,就要应答机器人本体,在通过引脚Tx应答给机器人本体时,需要对引脚Tx重新配置,配置成AF引脚模式,当应答完后,再把引脚Tx恢复成浮空输入模式,因为总线上接入连通了4个舵机,如果发送完后不把引脚Tx恢复成浮空输入模式,则引脚Tx的AF推挽会把引脚Tx强拉高,导致下一个传感器通信应答时(也是AF模式)形成Tx-Tx-Rx的拓扑结构,如果应答低电平,Tx-Tx会导致电平冲突,总线拉不低,应答失败。
在本实施例中,假设第二个传感器的引脚sensor_Rx_b连接了第一个传感器的引脚sensor_Rx_b,第二个传感器发现它的引脚sensor_Rx_b被拉高了,把引脚sensor_Rx_b从下拉输入配置成浮空输入模式,使能第二使能引脚EN2,以使引脚sensor_Rx_b与Rx从高阻变成低阻连通,同时开启接收指令超时的定时器,接着进入了等待接收指令状态。由于机器人本体、传感器或者校验错误等某些外部原因,第二个传感器再预设时间内(如100ms)内没有有效接收到机器人本体发出的指令,则在传感器内部存储器用一个变量做一个标记,标明以后不再接收机器人本体的任何指令,每个传感器只有一次机会成功获得ID,错过了就不再分配。因超时使能了第一使能引脚EN1,第二个传感器的引脚sensor_Rx_a、sensor_Rx_b和Rx都连通到机器人本体引脚robot_Tx,机器人本体与第三个传感器进行通信。因为机器人本体没有从第二个传感器接收到应答信号,因此机器人本体保留了ID=2,第二个传感器的ID仍等于0(初始化后的默认地址),第三个传感器就不再使用ID=2而是使用ID=3,机器人本体使用ID=2向用户报告第二个传感器有异常,用户对第二传感器做相应处理,后面的第三及第四个传感器的ID分配原理与上述相同,在此不再赘述。
请参阅图7,是本发明主从设备地址分配方法的流程图。所述方法包括:
步骤S1:通过主设备100发出包含有地址的指令。
步骤S2:在第一从设备200连接上所述主设备100时,开始计时。
步骤S3:判断在预设时间内所述第一从设备200是否接收到所述主设备100发出的指令。
步骤S4:若接收到指令,则将所述指令中的地址存储后输出应答信号给所述主设备100。
步骤S5:在所述第二从设备200连接上所述第一从设备200时,开始计时。
步骤S6:判断在预设时间内所述第二从设备200是否接收到所述主设备100发出的指令。
步骤S7:若接收到指令,则将所述指令中的地址存储后输出应答信号给所述主设备100。
其中,在步骤S3之后包括:
若所述第一从设备200在预设时间内没有接收到所述主设备100发出的指令,则所述第一从设备200不再从所述主设备100接收指令且不输出应答信号给所述主设备100。
在步骤S6之后包括:
若所述第二从设备200在预设时间内没有接收到所述主设备100发出的指令,则所述第二从设备200不再从所述主设备100接收指令且不输出应答信号给所述主设备100。
具体地,在所述主设备100接收到应答信号后对指令中的地址进行加一。例如,在从设备初始化后其地址为0,所述主设备100第一次发出指令中包含的地址为1,在接收到第一从设备200发出的应答信号之后所述主设备100将地址进行加一,即地址为2,然后发送包含有地址为2的指令,再接收到第二从设备200发出的应答信号之后所述主设备100将地址再次进行加一,即地址为3,然后发送包含有地址为3的指令,依次类推。
所述主从设备地址分配系统及方法通过在每一从设备中设置第一端口及第二端口,并通过开关芯片的第一及第二使能引脚使从设备在预设时间内接收到主设备的指令时则将对应地址存储并与主设备进行通信,以此解决多个从设备的地址冲突问题,在预设时间内没有接收到主设备的指令时则不能与主设备通信且主设备将对应地址保留以方便用户查询故障传感器。
以上所述仅为本发明的实施方式,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。