2

关于投票
城市智能安防系统新型终端监控器的研制
城市智能安防系统新型终端监控器的研制
成都迅尔科技有限公司 金虹

前言

随着国民经济的迅速发展和城市规模的不断扩大,工商企业逐渐增多,新建居住小区不断涌现,流动人口迅速增加,这些既带来了经济的繁荣和人民生活水平的不断提高,也给整个城市的综合管理及安全保障带来了许多的负面影响和问题。火灾、盗抢、煤气泄漏等严重影响了人民的生命财产安全和正常生活秩序。如何提高大中城市整体安全防范体系,增强城市综合管理能力,是摆在政府相关部门的一项重要课题。

对此,我们在分析、比较国内外类似系统和产品的实际应用后,推出了《城市智能安防综合管理系统》,该系统采用计算机及网络拓朴技术,以城市监控管理中心为枢纽,以智能控制终端为服务对象,从建立调度、监控、综合管理以及信息发布等多方面实现科学化、系统化和数字化,充分利用现代遥感技术(RS)、地理信息系统技术(GIS)、办公自动化技术(OA)、全球定位系统技术(GPS)和现代通讯、网络技术,建立、健全一个全局性的《城市智能安防综合管理系统》。该系统现已在省会中心城市建网试用,效果良好。

新型终端监控器是与控制中心双向实时数据交换、本地控制执行、随时提供相关用户终端信息的控制单元,是城市智能安防综合管理系统网络的重要组成部分。


图1 系统构架图

总体设计方案和主要技术功能

新型终端监控器设计主要从安保监控管理子系统应用和用户脱网单独使用考虑,满足双向数据传输和本地服务需求,确保控制器稳定可靠,用户操作简便实用,减少误报,提高出警准确性。

①:采用世界著名IC微电脑芯片,功能完善,集成度高,抗干扰性强,EMC(电磁兼容性)优良。

②:率先使用来电显示检测电路,主动识别监控来电和用户私人电话,降低振铃声对用户的干扰。

③:集双音多频自动拨号电路和解码电路,满足与网络双向数据传输和个人单独监控使用。

④:智能警情排序设计,可根据报警优先等级自动识别处理。 ⑤:微电脑内含永久记忆体,断电永久保存当前工作参数,来电时保持原工作状态。

⑥:适合多规格多型号传感器输入,对开关量信号及脉冲电信号输入均能有效处理,微电脑内含10位模/数转换单元,输入信号分辨率最小可达4mV,大大提高了报警器工作可靠性,有效防止误报。

⑦:监控器设计有多项自检电路,对主要功能随时在线检测,故障上报及本地提示。⑧:配有工程键盘安装接口和用户红外遥控器,满足不同用途需求。


硬件电路设计功能框图

点击看大图
图2 硬件功能框图

主要电路设计简介

自动摘机电话接口电路

硬件原理如图3所示,整流桥提供极性变换,光电耦合器TLP521-1电路单元提供铃流检测,三极管Q1、Q2电路单元提供摘机负载和双音多频(DTMF)输出功能。工作时单片机设置端口RB0为中断输入下降沿有效,RB1为输出控制端口。在无来电时,RB0呈高电平,无信号跳变,当有铃流来到时,光电耦合器TLP521-1导通,RB0呈现低电平,经多次有效中断计数后,确认铃流有效,则RB1输出高电平,驱动高压三极管Q2导通,经负载回路使极性变换后电压降至DC 8V左右,自动摘机完成。该工作电路简单实用,工作稳定可靠,接口电路负载特性符合电信有关标准,改变了以往常用的用1:1隔离变压器做摘机接口的电路特点,降低了成本,提高了可生产性。

来电显示检测电路


图3 自动摘机电话接口电路图

图4 来电显示检测电路

BELL202数据流协议

来电显示(即主叫号码识别)现已成为电话通信中的一项重要功能,在许多交换机和客户服务呼叫中心都是不可缺少的,普通电话用户大多也已开通,但具体使用在安保监控系统中却鲜有报道。我公司在城市智能安防系统新型终端监控器中率先开发应用此项技术,对提高系统整体性能和改善客户服务奠定了良好的基础。

主叫号码识别是一种按V.23或BELL202数据流协议(即Caller ID),把主叫电话号码等信息在电话的呼叫阶段传给被叫客户的一种方法,典型的Caller ID协议由下列三个层次组成:

物理层:通过物理层异步传输8位字符,含起始位和停止位及6位数据。数据链路层:链路层是将内容数据帧组合成一个数据包,数据格式如下:

点击看大图

示意层:数据格式如下:

点击看大图

FSK(频移键控)

FSK(频移键控)是数据在电话线上进行二进制传输的一种调制方法,是用不同的载波频率来表示二进制数据"0"和"1",具有数据传送效率高,抗干扰能力好的特点。

电路原理和工作过程

在该单元电路中,我公司设计采用美国MITEL公司的MT88E39的FSK(频移键控)解码芯片。该器件为16PinSOIC封装,5个输入脚,8个输出脚,1对电源脚,1个内部连接脚,具体如下:

(1)第1、2脚:运放的模拟输入端IN+和IN-,FSK调制信号即由此输入。

(2) 第3脚(GS):运放增益调整端。

(3) 第4脚(VRE):参考电压输出端(2.5V)。

(4) 第5脚(CAP):外接0.1 F瓷片电容器接入端(另一端接地)。

(5)第6、7脚(OSC1和OSC2):晶振的连接端OSC1和OSC2。OSC1时钟输入,OSC2是时钟输出端。

(6)第9脚(DCLK):在不同工作方式,有不同功能。在模式0,它是串行数据输出位同步时钟,在无FSK信号输入时,其为高电平;在有信号时,其上升沿指示数据位已稳定,可以被读取。在模式1,它作输入端,需与微处理器的读信号相连。

(7)第10脚(DATA):串行数据输出端,在无FSK信号输入时,其为高电平;在有信号时,每字节按低位在前,高位在后送出。

(8) 第11脚(/DR):一个数据字准备好标志信号,即输出字同步时钟。

(9) 第12脚(/CD):在指定的时间内,载波被检测标志。

(10)第13脚(PWDN):低功耗运行控制输入端。高电平禁止,此时运放、振荡器及内部电路不工作。

(11)第14脚(MODE):工作模式选择输入端,分为模式0和模式1。两钟模式的不同仅在于数据输出与微处理器的接口方式,模式0使用较多。

(12)第15脚(IC),内部连接端,行数据输出端。

(13)第8、16脚(Vss、Vdd):一对电源脚。


图5 音频拨号电路

图6 主流程流程图

在电路中,我们选择MT88E39为工作方式0, 禁用低功耗模式,数据信号(DATA)接收波特率为1200B/s。 当检测到有效振铃信号后,单片机端口RA1随时监测MT88E39第9脚DCLK, 有下降沿跳变时,端口RA2以1200的波特率(单片机内部定时)从MT88E39第10脚DATA(数据输出)取得有效数据,按照上述BELL202数据流协议格式分析后即完成来电显示识别工作。


实例分析

此实例为从四川省成都电信局接受到的FSK数据,主叫号是手机13980881870,被叫号是85141190,来电显示采样数据为:0X55,0X55……0X55,0X55,0XFB,0X04,0X13,0X310X30,0X31,0X38,0X31,0X30,0X30,0X35,0X31,0X33,0X39,0X38,0X30,0X38,0X38,0X31,0X38,0X37,0X30,0X53数据解释:①信道有效数据:0X55,0X55……0X55,0X55 数目从24个至 32个不等,与首次振铃起始有关②起始信号:0XFB 此数据每次采样均有变化③信息类型:0X04④数据长度:0X13⑤通话时间ASCⅡ码:0X31,0X30,0X31,0X38,0X31,0X30,0X30,0X35分析为10月18日10时05分⑥主叫手机号13980881870:0X31,0X33,0X39,0X38,0X30,0X38,0X38,0X31,0X38,0X37,0X30⑦校验和:0X53

音频拨号电路

音频拨号电路中的DTMF双音多频拨号IC选用的是台湾和泰科技股份有限公司的HT9200A。该芯片系列有HT9200A,HT9200F,HT9200B等系列,其中9200A输入信号为串口接收方式;9200F与9200A 接收方式相同,但时钟只允许外输入,芯片增加了片选起始信号;9200B输入信号则为4线并口接收方式。考虑到成本和系统要求,我们选用了HT9200A款,由于DTMF输出端双音多频幅度不够,所以增加了一级三极管驱动,效果良好。


 
本文摘自《世界电子元器件》
系统分类: 消费电子
用户分类: 单片机外围
标签: 无标签
来源: 无分类
发表评论 阅读全文(15889) | 回复(0)

1

关于投票
模拟I2C总线多主通信研究与软件设计
作 者:■ 西安电子科技大学 郑旭阳 李兵兵 黄新平

摘要:介绍模拟I2C总线的多主节点通信原理,并提出一种新的实现方法。这种采用延时接收比较来实现仲裁的方法,可使不具有I2C接口的普通微控制器(MCU)能够实现模拟I2C总线的多主通信,同时对I2C总线的推广起到了积极作用。

关键词:模拟I2C总线 仲裁 多主通信

  I2C总线(Inter IC BUS)是Philips公司推出的双向两线串行通信标准。由于它具有接口少、通信效率高等优点,现已得到广泛的应用\[1~3\]。它除了可以进行简单的单主节点通信外,还可以应用在多主节点的通信系统中。在多主节点通信系统中,如果两个或者更多的主节点同时启动数据传输,总线具有冲突检测和仲裁功能,保证通信正常进行并防止数据破坏。现在许多微控制器(MCU)都具有I2C总线接口,能方便地进行I2C总线设计。对于没有I2C总线接口的MCU,可以采用两条I/O接口线进行模拟\[2,3\]。目前,一些介绍模拟I2C的资料主要讲的是在单主节点系统中进行的通信,这使得模拟I2C总线的应用具有一定的局限性。本文根据总线仲裁的思想,提出一种多主节点通信的思想及实现流程。

1 I2C总线系统简介[1~3]

  I2C总线系统是由SCL(串行时钟)和SDA(串行数据)两根总线构成的。该总线有严格的时序要求,总线工作时,由串行时钟线SCL传送时钟脉冲,由串行数据线SDA传送数据。总线协议规定,各主节点进行通信时都要有起始、结束、发送数据和应答信号。这些信号都是通信过程中的基本单元。总线传送的每1帧数据均是1个字节,每当发送完1个字节后,接收节点就相应给一应答信号。协议规定,在启动总线后的第1个字节的高7位是对从节点的寻址地址,第8位为方向位(“0”表示主节点对从节点的写操作;“1”表示主节点对从节点的读操作),其余的字节为操作数据。图1列出I2C总线上几个基本信号的时序。

  图1中包括起始信号、停止信号、应答信号、非应答信号以及传输数据“0”和数据“1”的时序。起始信号就是在SCL线为高时SDA线从高变化到低;停止信号就是在SCL线为高时SDA线从低变化到高;应答信号是在SCL为高时SDA为低;非应答信号相反,是在SCL为高时SDA为高。传输数据“0”和数据“1”与发送应答位和非应答位时序图是相同的。

  图2表示了一个完整的数据传送过程。在I2C总线发送起始信号后,发送从机的7位寻址地址和1位表示这次操作性质的读写位,在有应答信号后开始传送数据,直到发送停止信号。数据是以字节为单位的。发送节点每发送1个字节就要检测SDA线上有没有收到应答信号,有则继续发送,否则将停止发送数据。

2 I2C总线的仲裁

  在多主的通信系统中。总线上有多个节点,它们都有自己的寻址地址,可以作为从节点被别的节点访问,同时它们都可以作为主节点向其他的节点发送控制字节和传送数据。但是如果有两个或两个以上的节点都向总线上发送启动信号并开始传送数据,这样就形成了冲突。要解决这种冲突,就要进行仲裁的判决,这就是I2C总线上的仲裁。

        

  I2C总线上的仲裁分两部分:SCL线的同步和SDA线的仲裁。SCL同步是由于总线具有线“与”的逻辑功能,即只要有一个节点发送低电平时,总线上就表现为低电平。当所有的节点都发送高电平时,总线才能表现为高电平。正是由于线“与”逻辑功能的原理,当多个节点同时发送时钟信号时,在总线上表现的是统一的时钟信号。这就是SCL的同步原理。

  SDA线的仲裁也是建立在总线具有线“与”逻辑功能的原理上的。节点在发送1位数据后,比较总线上所呈现的数据与自己发送的是否一致。是,继续发送;否则,退出竞争。图3中给出了两个节点在总线上的仲裁过程。SDA线的仲裁可以保证I2C总线系统在多个主节点同时企图控制总线时通信正常进行并且数据不丢失。总线系统通过仲裁只允许一个主节点可以继续占据总线[1]。

  图3是以两个节点为例的仲裁过程。DATA1和DATA2分别是主节点向总线所发送的数据信号,SDA为总线上所呈现的数据信号,SCL是总线上所呈现的时钟信号。当主节点1、2同时发送起始信号时,两个主节点都发送了高电平信号。这时总线上呈现的信号为高电平,两个主节点都检测到总线上的信号与自己发送的信号相同,继续发送数据。第2个时钟周期,2个主节点都发送低电平信号,在总线上呈现的信号为低电平,仍继续发送数据。在第3个时钟周期,主节点1发送高电平信号,而主节点2发送低电平信号。根据总线的线“与”的逻辑功能,总线上的信号为低电平,这时主节点1检测到总线上的数据和自己所发送的数据不一样,就断开数据的输出级,转为从机接收状态。这样主节点2就赢得了总线,而且数据没有丢失,即总线的数据与主节点2所发送的数据一样,而主节点1在转为从节点后继续接收数据,同样也没有丢掉SDA线上的数据。因此在仲裁过程中数据没有丢失。
        
                  图3两个主节点的仲裁过程

3 多主通信的原理及其实现流程

  多主通信就是在总线上有多个节点。这些节点既可以作为主节点访问其他的节点,也可以作为从节点被其他节点访问。当有多个节点同时企图占用总线时,就需要总线的仲裁。对于模拟I2C总线系统,怎样实现总线的仲裁是现在研究模拟I2C总线系统的难点。文献\[4\]提出在系统中增加1根BUSY线,在占用总线之前先检测BUSY线,看总线是否被占用。若总线空闲,则设置BUSY线并向总线上传送数据;否则,接收数据,直到总线空闲时才占有总线。这种实现多主通信的方法有两个缺点:① 因为I2C最大的优点就是接口少、效率高,这样做不仅增加了使用资源而且减少了I2C总线的优势;② 当主节点数比较多时,等待时间比较长,效率不高。本设计根据总线的仲裁原理,提出一种基于延时比较的仲裁方法。当主节点想要占用总线时,先检测总线上是否空闲,如果总线是空闲的就发送数据。在发送数据的同时,将总线上的数据接收并与发送的数据进行比较。如果不同,说明总线上同时还存在其他节点,于是就退出;否则,一直到发送完数据。这种方法既体现了I2C总线的高效性,同时还具有良好的扩展性。
              
                  图4多主通信流程

  图4给出了基于延时比较的多主通信流程,其中MCU作为从节点部分的流程在图5中给出。在节点发送起始信号之前先要检测一下总线上是否为空闲状态(BUSY是否为0)。这里使用的检测方法是,持续检测一段时间看总线上的电平是否一直为高,若是说明总线上为闲状态,否则说明有其他的节点正在使用总线,要等一段时间再发送。当总线空闲时,发送起始信号,接着发送要访问的从节点的地址字节。每发送1位数据就接收比较1次,看发送和接收的是否一致,若是则继续,否则跳出到从节点的接收状态。如果没有产生冲突,MCU作为主节点继续发送数据,直到任务结束,然后发送停止信号并返回。如果数据不一样,MCU将跳转到从节点状态。由于在跳转到从节点接收状态的过程中累加器(ACC)和工作寄存器(Ri)的数据没有发生变化,所以数据没有丢失,作为从节点可以继续接收总线上的数据。这样整个通信的过程没有中断,数据也没有丢失。
              
                 图5从节点部分的流程

  图5给出了从节点的流程。进入从节点时,要将BUSY置为高,说明MCU现在正在工作,不能完成其他的任务。在MCU作为从节点完成接收任务后,要将BUSY置为低。MCU在接收到寻址字节后与自己的地址字节进行比较。如果是访问自己的就进入到下面的接收程序,否则跳出。在访问自己的时候,还要判断主节点是读取数据还是写数据,以便进入相应的程序。在写字节的子程序中,从节点每发送1个字节的数据后都要察看是否有应答信号(ACK),有则说明数据接收到了;否则要跳出等待,重新发送。在读字节的子程序中,每接收1个字节的数据就要发送1个应答信号(ACK),以示接收正常,否则主节点将停止继续发送。在现有的资料中,关于从节点的原理和源代码比较少,这里给出作为从节点时写字节子程序的源代码。由于篇幅有限其他的子程序没有列出。

4 部分源代码


  本节是在MCU多主通信中的部分源代码。多主通信的实现中有几个难点和重点。一是在作为主节点时的写字节子程序,里面要包括发送的每位数据和总线的数据进行比较并做出判断。如果数据不同,要跳出并进入从节点的状态。由于子程序返回主程序时改变的只是PC的值而累加器(ACC)和工作寄存器(Ri)里面的值是不变的,因此MCU进入从机状态后继续接收总线剩下的数据,这样总线的数据并没有丢失。二是作为从节点时的写字节的子程序。由于时钟线是由主节点的MCU控制的,所以怎样根据SCL线来读取SDA线的数据是其中的一个难点。三是在具有子地址的从节点关于是写字节还是读字节时的判断。如果是写字节时主节点会给出新的起始信号,并再次发送从节点的地址数据。这时从节点需要做出判断是读取数据还是写数据,并进入相应的子程序。这里给出以上三个重点和难点的子程序的源代码,以供读者参考。这些源代码经实践证明都是正确的。

  主节点的写字节子程序:
;其中的NOP可根据时钟的快慢自己加减
  WRBYTE:MOV R0,#08H
      CLR BUSY;将BUSY值清零
  WLP:  RLC A;取数据位
  JC   WR1
      SJMP WR0;判断数据位
  WLP1: DJNZ R0,WLP
      NOP
  OUT1: RET
  WR1:  SETB SDA;发送1
      NOP
      SETB  SCL
      MOV  C,SDA;判断是否与发送的数据相同
      JC   GOON
      SETB  BUSY
      AJMP  OUT1
  GOON: NOP
      NOP
      NOP
      CLR SCL
      SJMP WLP1
  WR0:  CLR SDA;发送0
      NOP
      SCL
      NOP
      NOP
      NOP
      NOP
      NOP
      CLR
      SCL
  SJMP  WLP1
  从节点的写字节子程序(返回为ACK):
  SWRBYTE:MOV R0,#08H
  WAGAIN: RRC A
      MOV B,#37H
  WWAIT1: JB SCL,WWAIT1;等待SCL为低
      JC WR1;判断是发送“1”还是发送“0”
      SETB SDA;发送“1”
      AJMP COM
  WR1:  CLR SDA;发送“0”
  COM:  DJNZ R0,WWAIT2;判断是否发送完毕
  WWAIT3: JNB SCL,WWAIT3;发送完毕等待应答信号
  WWAIT4: JB SCL,WWAIT4
  WWAIT5: JNB SCL,WWAIT5
      CLR ACK
      JB  SDA,ST0
      SETB ACK
  ST0:  RET;返回
  WWAIT2: JNB SCL,WWAIT2;等待SCL为高
      SJMP WAGAIN
      从节点的读字节同时判断是否有起始信号的子程序。如果有起始信号,则转为写字节子程序:
  SRDBYTE:MOV R0,#08H
      SETB 20H;设置标志位判断是读还是写
      SETB SDA;释放总线
  RWAITJ: JNB SCL,RWAITJ;等待SCL为高
      MOV C,SDA;从总线上读取数据
      RRC A;存入累计器
      DEC R0
      MOV C,ACC.7;判断是否为起始信号
      JNC RWAITJ1;为低继续读取数据
  REWAIT: JNB SCL,RWAITJ1;开始判断是否为起始信号
      JB  SDA,REWAIT
      CLR 20H;是,则清标志位并返回
      AJMP SjRDOUT
  RWAITJ1:JB SCL,RWAITJ1;等待SCL为低
  RWAITJ3:JNB SCL,RWAITJ3;等待SCL为高
      MOV C,SDA
      RRC A
      DJNZ R0,RWAITJ2
  SjRDOUT:RET
  RWAITJ2:JB SCL,RWAITJ2;等待SCL为低继续读数据
      SJMP RWAITJ3

5 总结

  根据总线协议中的仲裁原理,提出的基于延时比较的模拟I2C多主通信的方法,不仅能够体现了I2C总线的高效性,而且还具有良好的扩展性。它使普通不具有I2C接口的MCU可以应用在多主通信的系统中,既增加了普通MCU的使用范围,又突破了模拟I2C总线的应用局限性,为I2C总线的推广起到了积极的作用。

                 参考文献

1 The I2CBus Specification, Version 2.1. January, 2000. http://www.philips.com
2 张昆,邱扬,刘浩. 基于CPLD的系统中I2C总线的设计. 电子技术应用,2003(11)
3 何立民. I2C总线应用系统设计. 北京:北京航空航天大学出版社,1995
4