1-Wire在微处理器中的搜索算法的研究
- 格式:pdf
- 大小:237.35 KB
- 文档页数:3
性能优异的1-Wire网络驱动器摘要:本文介绍了一种基于微控制器的1-Wire®主机接口,适用于小规模、中等规模以及大规模的1-Wire网络。
采用精细的阻抗匹配和"智能" (软件控制)强上拉、摆率控制等方法保证网络的可靠工作。
本文给出了软件流程图,有助于用户利用任何适当的微控制器产生正确的复位脉冲、在线检测、写“1”、写“0”以及读时隙的1-Wire时序。
示波器测试曲线说明了驱动器的时间特性以及远距离通信时传输线的影响。
简介1-Wire网络的可靠性在很大程度上取决于主机与1-Wire从机器件之间所采用的通信驱动电路的性能。
本文介绍了一种1-Wire主机端接口,采用精细的阻抗匹配和"智能" (软件控制)强上拉等方法,保证网络在轻载到重载范围内均能可靠工作,且通信距离可达500m。
关于创建可靠的1-Wire网络指南,请参见应用笔记148。
电路描述网络驱动器(图1)由下拉部分(Q1,R1,C1,R5)和上拉部分(Q2,R2,C2,R6)组成。
晶体管Q3与周围的元件(C4、R7)组成强上拉电路,可为诸如EEPROM、温度传感器等器件提供额外电源。
本文没有讨论"强上拉"的功能。
任何时候,三个晶体管中最多只有一个处于导通状态;当1-Wire不进行通信("空闲"状态)时,这三个晶体管都不导通。
图1. 驱动器原理图R4、R1和R3的串联电路提供标准的1-Wire到V CC上拉。
在这种电路情况下,总的上拉电阻近似为1kΩ。
当1-Wire线空闲时,则线上呈现此阻抗。
由于R4与Q1的漏极相连,因此Q1导通时电流会流过该电阻,但不会影响1-Wire总线的低电平电压。
1-Wire总线电压升至5V的速度是由R4+R1+R3的电阻值和1-Wire网络的负载决定的。
不建议减小R4阻值,否则会导致1-Wire总线的低电平电压升高,而这不是我们所期望的。
应用笔记从理论上逐步阐述了如何充分利用1-Wire®功能,并列举了一些示例。
1-Wire主机已被设计到客户的A SIC芯片中,主控CPU用于读取1-Wire温度传感器的数值。
所提供的源代码用于1WM对4个温度传感器发送温度转换指令,并提供转换温度。
假设读者已经了解DS18B20温度传感器、DS1WM 1-Wire主机以及Dallas Semiconductor的1-Wire协议。
引言DS1WM 1-Wire主机为单总线控制器,专为简化主控CPU与周边1-Wire器件之间的单总线通讯而设计,利用D S1WM不必考虑位时序。
本应用笔记从理论上逐步阐述了如何充分利用1-Wire功能,并列举了一些示例。
假设读者已经了解DS18B20温度传感器、DS1WM 1-Wire主机以及Dallas Semiconductor 1-Wire通讯协议,详细资料请参考:Book of iButton Standards (PDF), DS1WM数据资料, DS18B20数据资料, 应用笔记119:嵌入1-Wire主机。
图1. 示例电路图1是以下示例所参考的电路配置,1-Wire主机已被设计到客户的ASIC芯片中,主控CPU通过它对4个DS1 8B20温度传感器发送温度转换命令,并读取转换的温度值。
1-Wire总线和INTR均上拉一个5k电阻,50MHz 的系统时钟通过CLK引脚为1-Wire主机提供时钟信号。
1-Wire主机已被映射到CPU的端口地址存储器中。
概述本示例的程序采用C语言编写,主程序为:GetTemperatures,它完成1-Wire主机的初始化,搜索1-Wire总线上的所有器件,并指定它们测量温度,然后将测量值送回CPU并存储。
如果总线上没有1-Wire器件,则退出主程序并返回值“1”,否则,则返回值0。
其它函数将在下面详细描述。
程序中的常数BASE是1-Wire主机被映射到CPU地址空间中的地址。
摘要:1-Wire器件利用一条数据线和地参考端进行通信。
使用不锈钢iButton封装的1-Wire器件时,协议还对处理断续连接(“接触”)方式做出了特殊规定。
该应用笔记讨论了在实现高度可靠的iButton设计中可以采用的技术和注意事项,以保证数据完整性。
读者应首先熟悉1-Wire总线的通信协议和利用微控制器产生1-Wire通信时序的方法。
本文讨论的内容主要关注的是在连接不可靠的环境下的应用,但也提出了几种改善1-Wire硬件可靠性设计的方案。
引言1-Wire器件利用一条数据线和地参考端进行通信。
1-Wire协议配合一些附加的内嵌功能使得iButton非常适合处理需要断续连接(“接触”)的应用。
当iButton用于高度安全的认证或支付交易时,高可靠性通信非常重要。
通用的1-Wire器件通信通常包括:搜索(识别总线上的器件)、读器件识别码(网络地址、注册码、64位唯一ID、64位光刻ROM)、读器件数据或状态、写存储器或控制数据等功能。
有些情况下,软件很容易检测到通信失败并加以修正。
比如,读取时发生错误时,软件会尝试重新读取iButton,或者由用户移走并重新加载iButton启动一次新的交易。
这些修正操作通常只会引起小的延时或给用户带来稍许麻烦。
但是,向iButton器件写数据时情况要复杂得多。
如果在回读数据进行验证之前iButton发生故障,用户甚至不知道数据出现写错误。
如果写数据时发生错误,可能将没有机会重新写入。
因此,失败的写操作会导致非常严重的后果。
例如,当iButton内部存储货币数据时,借方(买方)在每次购买时都要向iButton中写入改变后的货币数量。
如果数据更新时发生任何错误,都会破坏iButton的数据,用户可能丢失他们全部的货币余额。
通过断续连接实现1-Wire通信的软件设计必须经过周密的设计,以便在发生故障时能够重新操作。
软件开发人员必须考虑在操作失败时可能发生的任何状况。
快速检测到故障要比在随后作出快速的系统响应更重要,能够降低错误地更新(覆盖) iButton数据的危险。
【最新整理,下载后即可编辑】第四章 一维搜索法由第一章关于求解最优化问题概述中我们知道,从已知迭代点n k R X ∈出发按照基本迭代公式k k k k P t X X +=+1来求解最优化问题,其关键在于如何构造一个搜索方向n k R P ∈和确定一个步长1R t k ∈,使下一迭代点1+k X 处的目标函数值下降,即)()(1k k X f X f <+.现在我们来讨论,当搜索方向k P 已经确定的情况下,如何来确定步长k t ?步长因子的选取有多种方法,如取步长为常数,但这样选取的步长并不最好,如何选取最好步长呢?实际计算通常采用一维搜索来确定最优步长. 对无约束最优化问题)(min X f nR X ∈,当已知迭代点kX 和下降方向k P 时,要确定适当的步长k t 使=+)(1k X f)(k k k P t X f +比)(k X f 有所下降,即相当于对于参变量t 的函数)()(k k tP X f t +=ϕ要在区间],0[∞+上选取k t t =使)()(1k k X f X f <+,即)0()()()(ϕϕ=<+=k k k k k X f P t X f t .由于这种从已知点k X 出发,沿某一下降的探索方向k P 来确定步长k t 的问题,实质上是单变量函数()t ϕ关于变量t 的一维搜索选取问题,故通常叫做一维搜索.按这种方法确定的步长k t 又称为最优步长,这种方法的优点是,它使目标函数值在搜索方向上下降得最多.今后为了简便起见,我们用记号)(1k k k P X ls X ,=+ (4.1)表示从点k X 出发沿k P 方向对目标函数)(X f 作直线搜索所得到的极小点是1+k X .其中l 和s 分别是Linear search (直线搜索)两词的词首.在目标函数)(X f 已确定的条件下(4.1)等价于如下两式:⎪⎩⎪⎨⎧+==+=++kk k k tk k t k k k P t X X t tP X f P t X f 1)(min )(min )(,ϕ 下面进一步解释迭代点k k k k P t X X +=+1的空间位置.容易证明,若从k X 出发,沿k P 方向进行一维搜索得极小点k k k k P t X X +=+1,则该点1+=k X X 处的梯度方向)(1+∇k X f 与搜索方向k P 之间应满足0)(1=∇+k T k P X f .(4.2)事实上,设)()(k k tP X f t +=ϕ,对t 求导有k T k k P tP X f t )()(+∇='ϕ.令0)('=t ϕ,即0)(=+∇k T k k P tP X f ,所以0)(1=∇+k T k P X f .式(4.2)的几何意义是明显的.从某一点k X 出发沿k P 方向对目标函数)(X f 作直线搜索,所得到的极小点为1+k X .式(4.2)指出,梯度)(1+∇k X f 必与搜索方向k P 正交.又因为)(1+∇k X f 与目标函数过点1+k X 的等值面)()(1+=k X f X f 正交,所以进一步看到,搜索方向k P 与这个等值面在点1+k X 处相切(如图4.1所示).§4.1 搜索区间及其确定方法一、搜索区间设一维最优化问题为)(min max0t t t ϕ≤≤. (4.3)为了求解问题(4.3),我们引入如下的搜索区间概念.定义4.1 设])0[)(0[max **11t t t R R ,,,:∈∞+∈→ϕ,并且 )(min )(max0*t t t t ϕϕ≤≤=,若存在闭区间])0[])([0[][max t b a b a ,,,,⊂∞+⊂使][*b a t ,∈,则称][b a ,是问题(4.3)的搜索区间.简言之,一个一维最优化问题的搜索区间,就是包含该问题最优解的一个闭区间.通常,在进行一维搜索时,一般要先确定出问题的一个搜索区间,然后在此区间中进行搜索求解. 二、加步探索法下面,介绍一个确定问题(4.3)的搜索区间的简单方法.这个方法的思想是:先选定一个初始点])0[)(0[max 00t t t ,或,∈⊂∞+∈和初始步长00>h .然后,沿着t 轴的正方向探索前进一个步长,得到新点00h t +.若目标函数在新点处的值是下降了,即)()(000t h t ϕϕ<+,则下一步就从新点00h t +出发加大步长,再向前探索.若目标函数在新点处的 函数值上升,即)()(000t h t ϕϕ>+,图4.1则下一步仍以0t 为出发点以原步长开始向t 轴的负方向同样探索.当达到目标函数上升的点时,就停止探索,这时便得到问题(4.3)的一个搜索区间.这种以加大步长进行探索来寻找探索区间的方法叫做加步探索法.加步探索法算法的计算步骤:(1) 选取初始数据.选取初始点])0[)(0[max 00t t t ,或,∈⊂∞+∈,计算)(00t ϕϕ=.给出初始步长00>h ,加步系数1α>,令0=k . (2) 比较目标函数值.令k k k h t t +=+1,计算)(11++=k k t ϕϕ,若k k ϕϕ<+1,转(3).否则转(4).(3)加大探索步长.令k k h h α=+1,同时,令k t t =,1+=k k t t ,1k k ϕϕ+=,1k k =+,转(2).(4) 反向探索.若0=k ,转换探索方向,令1,+=-=k k k t t h h ,转(2).否则,停止迭代,令11min{}max{}k k a t t b t t ++==,,,输出][b a ,. 加步探索法算法的流程图如图4.2所示。