新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 一种线型组网的三线制数据测量方法

一种线型组网的三线制数据测量方法

作者:时间:2014-01-08来源:网络收藏

  1.2 工作原理

  主机启动一次数据采集时,首先闭合开关J1,总线VCC 得电,所有单元同时上电,单元内的单片机开始工作。单元的工作分为待机、工作、透传3种模式。上电后,所有单元进入待机模式,主机先向距离最近的1#单元发出启动脉冲,1#单元由“待机”转为“工作”模式,它会启动传感器,点亮指示灯L1,表示本单元是活动的,这时,主机可以与1#单元进行直接的通信,命令1#单元的进行测量并读取数据,完毕后,主机发送结束脉冲,命令1#单元结束活动态。1#单元在向2#单元发送启动脉冲后进入透传模式。于是,收到1#发出的启动脉冲,2#单元成为活动单元,点亮指示灯L1,进入工作模式。由于1#单元的透传作用,主机可以直接跟2#单元通信,直到2#单元收到结束指令后,它启动下个单元,然后自己变成透传,这样依次类推,各个单元逐个变成活动单元,主机总是透过已经变成透传模式的单元,直接与活动单元进行通信,获取数据,直到全部单元都完成数据采集。

  因此,在整个网络中,只有一个是活动单元,活动单元前面,是完成了数据采集变成透传模式的单元;在活动单元后面,是等待启动的待机单元。主机能够直接与活动单元联系,使用灵活约定的协议和速率,是本文提出线状组网的一大优势。

  主机与活动单元通信时,可以直接使用单片机的串口通信模式,在数据量小的时候,约定使用较低的波特率可以获得较远的传送距离。用来启动和停止单元工作的脉冲命令,可以有2种形式:

  (1)直接使用串行通信来改变单元的工作模式,只要约定主机下发给单元的串行数据命令字即可,例如约定0X55为启动命令,0XAA为停止命令;(2)使用脉冲宽度控制,只要命令脉冲与通信波特率通信脉冲有明显区别不产生混淆就可以,例如波特率使用1 200,启动和停止脉冲使用宽度为30 ms的低电平。

  1.3 特点分析

  总结上述阐述,本文提出的线状组网具有如下特点:

  (1)自带电源:三线中有一根电源线,所有单元可以直接授电;(2)功耗低:工作过程中,只有一个单元是活动的,处于待机和透传模式的单元,可以关闭所辖传感器的供电,只让单片机带电,如果使用MSP433 超低功耗单片机,100个单元的功耗也不会超过1 mA.

  (3)协议灵活:主机是通过透传单元直接与活动单元通信,允许系统搭建者使用自己约定的通信协议;(4)传送距离远:主机是通过接力与每个单元通信的,只要每个单元之间能有效传送,多个单元构成的整个系统就能正常工作。

  (5)扩展方便:当需要模式量传送时,只要再增加一条总线,每个单元增加模拟开关,活动单元把模拟开关闭合,该单元的模拟量就可以上传到总线上,送给主机。

  (6)无需单元编号:主机是顺序与各个单元建立联系的,所有单元完全一样,没有地址编号环节,适合批量生产制作。

  2 程序编制

  下面是主机和单元的程序编制流程与说明。

  主机程序流程如下:

  ①上电→②等待采集时间到→③启动供电开关J1→④发出启动命令→⑤等待单元发回应答→⑥与单元通信完成采集→⑦发出结束命令→⑧判断单元是否全部完成采集→⑨关闭J1供电→回到②等待下次采集。

  其中,在⑤如果等不到单元发回的确认,要回到断开J1 回到③重新开始,如果多次重复均不成功,要做出错处理;在第⑧步,如果单元采集没有完成,则回到第⑤等待下个单元的回复确认。

  对于每天只有几次采集的低频度情形,可使用低功耗定时振荡器,用硬件电路控制主机的CPU供电,达到采集时刻主机才上电工作1次,大大降低功耗,适合在野外现场做数据采集。

  单元程序流程如下:

  ①上电→②等待启动命令→③启动传感器采集数据/点亮L1/与主机通信/完成数据采集→④等待结束命令→⑤向下个单元发送启动命令→⑥进入透传模式。

  其中透传模式的编程框图见图3,思路如下:

  (1)透传的含义是既可以从接收主机方向数据传给后面的单元,也可以从后面单元接收数据传给主机(2)认为常态是高电平,不停检测左右两边的电平,为高时表示没有数据传递。

  (3)无论在哪个方向检测到低电平,都立即把低电平传输到另一个方向,直到这个低电平消失,便取消另一个方向的低电平。

  

  3 传送距离

  传送距离受透传单元引入的脉冲宽度失真和单元电压跌落两个因素影响,下面分别讨论。

  3.1 透传单元对脉冲的宽度的失真

  单元之间传输延迟如图4 所示,命令由第N - 1 单元传向第N 单元,在t1 时刻发出,t2 时刻结束,宽度为T1.线路电容等带来脉冲的下降和上升时间,第N 单元认定的翻转时刻,由该单元的输入端阈值决定,它认定的宽度为T2.同样道理,这个宽度传送到N + 1 单元时被认定为T3.T1,T2 ,T3 会有差异,造成脉宽逐级失真,超过一定限度就无法正确通信(串口专用11.059M 晶体用12M代替就无法工作,这时误差仅为8%)。解决逐级失真的办法有两个:

  (1)加快脉冲上升下降时间,可在单元的信号线加上拉电阻。上拉电阻的最小值,要保证它灌入的电流小于单片机能吸入电流的最大值;上拉电阻的最大值,要考虑它与信号线电容的时间常数小于通信脉宽的10%.例如,100 m的单元距离,按照普通绞线100 pF/m的分布电容,C = 100 pF×100=0.01 μF,如果使用1 200波特率,信号脉宽800 μs,则时间常数应小于80 μs,用τ = RC 计算,上拉电阻R = τ C = 80 μs /0.01μF =8 kΩ。按照经验这个数值是可以用于单片机上拉的。



评论


相关推荐

技术专区

关闭