单片机的自组织网络互同步节点设计
图中阈值(Pth)表示节点闪烁的阈值,当闪烁能力(Power)达到这个值时节点开始闪烁。T为节点闪烁的周期。从图2可以看出,初始时刻两个节点虽有共同的闪烁周期,但两节点开始闪烁的时刻不同,下方节点闪烁能力要更晚到达阈值,即闪烁的开始时刻要晚于上方节点。而当上方节点开始闪烁的时刻,通过光敏电阻,下方节点侦测到了这一变化,并将自己下一次的发光时刻提前,发光周期缩短为新的周期(T1)当然仅通过一次提前并不能做到两者同步,但是经过n次调整,两者的闪烁时刻逐次逼近,而且下方节点新的周期(Tn)也恢复为原周期(T),两者最终达到了同时刻同周期的互同步。该算法并不受节点规模的影响,因此网络规模可以灵活扩展。
2.2 程序设计实现
从上面论述可知算法实现并不复杂,下面只对关键代码做简要描述,流程图如图3所示。
节点上电复位以后,程序的初始化部分对节点硬件进行相应的初始化,主要是对模/数转换(ADC)进行设置,选择对应的转换通道并使能,设置发光二极管为关闪烁状态。
需要注意的是,由于系统采用光敏电阻作为传感器件,因此节点之间的相互感应不可避免地会受到外界光照的干扰,也就是说即使在邻近节点不闪烁时,闪烁能力(Power)的初值也不会为0。为此,本程序选择外界的背景光作为基础门限值(threshold),这个值可以通过模/数转换(ADC)多次采样再做平均获得。相关代码实现如下:
代码中对4次采样值进行了平均,考虑到干扰的问题,对平均值再加80进行调整。
随后,程序进入主循环,在主循环中主要完成三件工作。
首先是闪烁能力(Power)值的递增。如前面算法描述,当它逐渐增加达到闪烁阈值(FLASH_POWER)时,二极管将开始有节奏地闪烁。为了保证快速和精准,闪烁能力值的递增并不是均匀的,而是分段区别进行的。闪烁能力值比较小时,以较大的增量累积(如Power+=16),随
着其逐渐接近阈值,增量减小,比如当Power>6000后,以1为递增幅度进行(如Power+=1)。
在计算了节点闪烁的能力后,程序进入第二个阶段,主要工作是修正闪烁能力值。考虑到外界干扰,节点可能会受到突然的外界强光照射影响,当光照很强时,节点将无法正确感知邻近节点的变化,为此还需要做相应异常处理。相关代码如下:
该段程序中首先进行采样,获得当前的光照(light)值,如果其大于预设的环境光照常量(ENV_LIGHT),则认为外界光照太强,此时节点之间已经无法进行有效地相互感应,出现异常。这里将节点延时一段时间进入休眠状态,隔一段时间再做检测。考虑到选用的单片机,环境光照常量设为总量程的一半较为合适。如果外界光照对节点的光感应处在正常范围,则再判断当前的光照(light)是否大于前面计算的基础门限值(threshold)。当其值大于此基础值时,表明邻近有节点在闪烁,且该节点晚于邻近节点的闪烁,因此需要对闪烁能力进行快速调整(如Power+=200)。这个增量远远大于常规的闪烁能力积累,执行效果就是将节点下一次开始闪烁时刻大大提前了。
最后的工作就比较简单了,通过判断闪烁能力是否大于闪烁阈值(FLASH_POWER),当大于时设置发光二极管为开闪烁,当小于时设置为关闪烁。
程序主体是一个死循环,根据需要还可添加电源管理、中断处理等其他功能模块。文中主要仅论述了两个节点间的互同步实现,但文中所述算法可以不加修改就适用于节点数更多的网络。这正体现了自组织网络的特点:其中功能有限的节点利用局部信息就可达到整个网络的高度协调一致。
结语
本文详细阐述了一种利用单片机进行自组织网络互同步算法学习的方法,网络同步的效果良好。设计的节点具有简单直观、网络规模扩展灵活的特点,是一个对自组织网络的很好的实体模拟,对于掌握无线传感网或多智能体等需要进行同步的自组织组网技术有一定的借鉴意义。
- FPGA的DSP性能揭秘(06-16)
- 基于单片机通用引脚的软件UART设计(10-16)
- 分时操作系统思想在单片机中的具体应用 (10-30)
- 基于AT89C51+DSP的双CPU伺服运动控制器的研究(05-26)
- 关于RTX51 TINY的分析与探讨(05-30)
- 基于MC9S12DGl28单片机的智能寻迹车设计(04-03)