打印

单片机的自组织网络互同步节点设计

[复制链接]
402|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Peonys|  楼主 | 2018-12-21 14:57 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
单片机的自组织网络互同步节点设计

摘要:针对自组织网络中的互同步算法进行了研究,基于单片机设计了一种便于验证学习的实体节点,弥补了单纯软件仿真的不足。该设计具有简单直观、网络规模扩展灵活的特点,对于掌握无线传感网或多智能体等进行同步和协调的自组织组网技术有一定的借鉴意义。
关键词:单片机; 自组织网络; 互同步

引言

     随着无线网络与电子技术的发展和普及,各类专业设备甚至民用产品之间的数据传输已经不满足于简单的点对点形式,对组网的需求日益突出。为了应对这一需求,自组织网络技术应运而生。
自组织网络的突出特点是,没有传统的中心控制节点来协调组网过程,分布的节点之间的组织主要靠“临时性的自治”实现。实现无线自组织网络的基础之一是网络互同步技术。该技术通过网络节点之间时间基准的相互交换和相互控制,实现节点之间的相互同步。
由于无线节点硬件成本偏高,相关软件使用也较为复杂,在进行相关技术的研究和学习时,大多通过计算机软件仿真。这种纯粹软件仿真实验的形式更适用于已有一定的实践经验和算法基础的人员,对于其进行更专业的算法学习和研究有较大帮助。但由于缺乏具体的实物,初学者难以建立起直观的感性认识。
为此,本设计首先选择低成本的单片机作为核心,利用简单的光电信号替代WiFi、蓝牙等无线通信形式,最大程度地降低了硬件制作成本。其次,剔除了复杂的通信协议栈,仅关注于自组织网络中互同步技术的核心算法实现,最大程度地简化了学习的难度。所设计的节点组成的学习平台不仅简单直观,而且可以根据需要验证各类不同算法,网络规模也可灵活调整,不受节点数量增加的限制。


1 节点硬件设计
    综合考虑成本、供电和算法更新等方面,选择ATtiny13A-10pu作为仿真节点的核心。该芯片是一款低功耗的8位微处理器,可以工作在0~4 MHz@1.8~5.5 V状态,用一粒普通的CR2032纽扣电池就可以为其提供3 V供电,内部有1 KB Flash RAM,64字节RAM和64字节EEPROM,空间虽然不大,但做基本算法验证已经够用。除此之外它还有4路10位ADC可作为光电信号检测之用。在光电检测元件方面采用的是常见的光敏电阻5516,当然也可以选择性能更稳定、一致性更好的环保光敏电阻。
除了上面所述的单片机、光敏电阻以外,节点还需要有一个发光二极管用于显示各节点间的同步状态。当初始亮灭不一致的节点经过一段时间后,以相同时间点、频率进行闪烁,这时表示网络同步成功。对发光二极管只要求电压电流适当即可,设计中选择的是1.7 V、2 mA的低电流发光二极管,低电流更有利于延长节点电池的工作时长。
整个电路力求简洁,因而没有设计复位电路。另外,由于片内振荡器已经进行了9.6 MHz的标定,经8分频后可以实现1.2 MHz的系统时钟,已经可以满足本设计的需要,所有也无需外接晶振。电路原理图如图1所示。



需要注意的是,图中电阻R1、R2阻值的具体选择和电源电压、发光二极管及光敏电阻的参数有关。电阻R1的作用主要是限流,其阻值可参考公式R1=(Up-U1)/I1选择,其中Up为供电电压,U1为发光二极管压降,I1为发光二极管的电流。电阻R2的阻值主要受到光敏电阻R3工作效果的影响,选定的原则主要由保证光敏电阻在日光下可以对光线变化作出反应的灵敏程度来决定,在最初确定时可以用电位计来替换固定电阻R2,通过试验,1 kΩ阻值的电阻已经可以保证节点正常工作。
另外,如果不采用节点间相互分离的独立电路设计,而采用多个节点固定在同一块底板上的布线,也可以不采用独立的纽扣电池供电方式,统一为所有的节点提供5 V电源供电。


2 算法设计与实现

2.1 互同步算法原理
     为了更好地对算法进行解释,首先简单介绍自组织网络的生物原型。在自然界中有很多自组织的生物系统,在这些系统中,个体一般不具备高智商,对信息的获取和处理能力也十分有限,尽管如此,整个系统却可以在群体行为上呈现出令人吃惊的统一性和协同性。比如鱼群、鸟群等生物群体在集体活动时,虽然没有一个中心指挥,系统整体状态仍然可以依赖构成系统的个体间的相互作用,形成一个有机整体。
在这里只研究这一行为实现的基础,互同步的相关算法。算法的实现非常类似于萤火虫同步闪烁,本设计最终呈现的效果也是模拟一个有众多“萤火虫”(节点)的网络同步。
开始的时候,众多独立节点发光二极管的闪烁是随机的。但是,随着时间的推移,它们能够慢慢地与最近的邻居同步,随着时间的推移,最后所有的节点都同步闪烁。
本设计采用了一种最简单的算法来实现这一过程。首先假设所有节点的闪烁频率是相同的,这就类似于同一种群的萤火虫具有相同的闪烁频率一样,它们最初呈现的不同步其实只是各自闪烁的时间点不一样。这样在简化算法实现的同时,并不失其普遍意义。
算法中设定了一个变量,闪烁能力(Power),用于表示节点闪烁的能力,这个值随着时间会慢慢增加,当其增加到一个临界阈值(Pth)时,节点的发光二极管开始闪烁,随之这种能力开始逐渐“消耗”,即闪烁能力减小。闪烁能力的变化过程默认对于所有的节点都是一样的,也就是说所有节点闪烁的固有频率是一样的。
通过光敏电阻,每个节点都可以感受到邻近节点的存在,这个过程是通过单片机的ADC实现的。这些节点都依据相同的原则进行同步。如果某个节点发现它比邻近节点闪烁得晚,那么下次它将稍稍提前闪烁,经过节点间的相互作用,所有的节点最终会在同一时刻按照相同的频率闪烁。这个方法虽然简单,但却十分有效,基于它的进一步研究已经在Ad Hoc网络的互同步中得到应用。相关算法如图2所示。


图中阈值(Pth)表示节点闪烁的阈值,当闪烁能力(Power)达到这个值时节点开始闪烁。T为节点闪烁的周期。从图2可以看出,初始时刻两个节点虽有共同的闪烁周期,但两节点开始闪烁的时刻不同,下方节点闪烁能力要更晚到达阈值,即闪烁的开始时刻要晚于上方节点。而当上方节点开始闪烁的时刻,通过光敏电阻,下方节点侦测到了这一变化,并将自己下一次的发光时刻提前,发光周期缩短为新的周期(T1)当然仅通过一次提前并不能做到两者同步,但是经过n次调整,两者的闪烁时刻逐次逼近,而且下方节点新的周期(Tn)也恢复为原周期(T),两者最终达到了同时刻同周期的互同步。该算法并不受节点规模的影响,因此网络规模可以灵活扩展。

2.2 程序设计实现
从上面论述可知算法实现并不复杂,下面只对关键代码做简要描述,流程图如图3所示。





节点上电复位以后,程序的初始化部分对节点硬件进行相应的初始化,主要是对模/数转换(ADC)进行设置,选择对应的转换通道并使能,设置发光二极管为关闪烁状态。
需要注意的是,由于系统采用光敏电阻作为传感器件,因此节点之间的相互感应不可避免地会受到外界光照的干扰,也就是说即使在邻近节点不闪烁时,闪烁能力(Power)的初值也不会为0。为此,本程序选择外界的背景光作为基础门限值(threshold),这个值可以通过模/数转换(ADC)多次采样再做平均获得。


结语

    本文详细阐述了一种利用单片机进行自组织网络互同步算法学习的方法,网络同步的效果良好。设计的节点具有简单直观、网络规模扩展灵活的特点,是一个对自组织网络的很好的实体模拟,对于掌握无线传感网或多智能体等需要进行同步的自组织组网技术有一定的借鉴意义。


相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

640

主题

901

帖子

5

粉丝