licj15 / Infrared_photoelectric_transmission

电工小学期:电度表红外光电传送

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

电度表数字光电传送

参与者:刘心志 蔡志军 李朝鉴

一张图看懂如何使用

UM00

题目描述

1.基本要求

  • 1)采用光电数字传送方式(Finished)
  • 2)将电度表表盘转动圈数转化为数字量,用计数器进行记录(Finished)
  • 3)电度表能接受抄表员发出的用电数据读取指令(Finished)
  • 4)电度表在收到读取指令后,将电度表用电数据传送并显示在人端的接收(Finished)

2.设计内容

  • 1)计数:设计计数电路,记录电度表表盘转动圈数(Finished)
  • 2)编码:将计数器记录的数字量转换为对应的数字脉冲(Finished)
  • 3)译码与时间协调:红外光发射与接收电路设计(Finished)
  • 4)显示:用户端显示与按钮交互设计(Finished)

题意理解

1.模块划分

电表端:

  • 1)电表计数显示模块:
输入:电度表光电传感器产生的计数方波
输出:数码管实时显示/数据载入移位寄存器并行输入端
技术路线:逻辑门二值化滤波->可重复触发单稳滤波->计数器实时计数->BCD-7段译码器/移位寄存器并行输入
  • 2)电表端通信模块
输入:计数器并行输出/请求数据标志/收发数据状态位
输出:TX发送编码后串行64位数据/收发数据状态位
技术路线:收到请求数据标志->根据信号时长判断->收发状态数据位翻转->移位寄存器串行输出->4*4位二进制数编码为4*4*4位二进制->加入载波发送->发送完毕收发数据位翻转

用户端:

  • 1)用户端显示模块
输入:收发状态数据位/寄存器并行输出
输出:接收完毕后数码管显示
技术路线:收发数据状态位翻转->数码管使能显示
  • 2)用户端通信模块
输入:接受到4*4*4位信号/收发数据状态位/按钮延时方波信号
输出:收发数据状态位/寄存器并行输出
技术路线:按钮延时方波信号->收发数据状态位翻转/数码管显示关闭使能->4*4*4位二进制数据译码为4*4位数据->寄存器并行输出->收发数据状态位翻转/数码管显示使能
  • 3)用户端自动交互模块
输入:按键按下弹起原始信号
输出:延时后的方波信号
技术路线:按键动作信号->电容延时充放电->单稳整形->单稳延时触发方波信号

2.通信协议

  • 1)实现方式概述

根据在作品完成后与老师的交流中得知,往届学生的作品主要采取以下三种编码方式:

a)数据-波数直接相关型:

当电表端接受到发送数据请求后,将当前用电数根据高频信源每次减一,同时通过红外二极管发送一个脉冲,用户端收到一个脉冲后就在显示上加一,当电表端计数减至零,发波停止,用户端在一定时间内没收到脉冲则认为传送结束。

优点:实现简单
缺点:发送时间和数据数值大小正相关,等待时间不确定;扩展性不强;抗干扰能力弱

b)同步通信型

当电表端接受到发送数据请求后,电表端高频时钟源分频得到低频信号控制发送用电数的二进制,用户端收到信号,同频低频信号开始工作,同步接受二进制数据。其余与数据-波数直接相关型相似。

优点:实现简单,比数据-波数直接相关型稳定
缺点:时钟源难以调到同频

c)异步通信编码型

将信号进行编码,标准格式包括包头/数据/校验位,当电表端接收到发送请求后,将要发送的数据进行编码,用户端收到特点包头后开始解码,完成校验后收发完毕。

优点:准确率高/两侧时钟可不同频/扩展性强/抗干扰能力强
缺点:实现复杂
  • 2)本项目实现方式

以上三种实现方式本项目均有考虑过,数据-波数直接相关型/同步通信型,实现较为简单,而异步通信型虽然实现复杂但更稳定/扩展性更强。考虑到本项目传输的数据只有16位二进制数据,我们在标准的异步通信实现方式上进行了改进,去掉了校验位,将包头包含在了每个二进制数据之前,通过电路中必须实现的数据位数计数来校验。虽然在时间上进行了一定牺牲,但使用了更少的芯片达到了同样稳定的效果。

具体编码/译码实现方式如下

编码:

0 - 0100
1 - 0111

encode

01为每个二进制数据的包头,利用其中的上升沿触发译码电路工作

译码:

在发送请求数据指令后,等待数据,收到上升沿后,间隔一定时间(四位编码中的第二 位结束和第四位结束之间)查看信号,为高电平则译为1/为低电平译为0

decode

原理图:

decode&encode

功能设计实现

分为电表端和用户端两个独立模块,具体原理图与仿真详见 用户端.ms12/电表端.ms12

1.电表端电表计数显示模块设计

基本功能 - 电表盘转动脉冲产生、整形、计数电路

电表盘转动产生脉冲波形图、整形后方波

设计**:由波形图可知,电表盘转动所产生的信号非规整的方波,甚至存在毛刺。首先我们利用两个非门将产生的模拟信号转换为数值信号。为消除毛刺,我们又利用555设计可重复单稳触发电路,对原始波形进行滤波整流,得到了规则的方波。电路仿真设计如下图:

czj01

tek00

基本功能 - 电表端计数、译码、显示电路

设计**:将所得的方波作为时钟信号触发计数器——74LS162. 74LS162四个并行输出引脚直接与BCD七段译码器74LS47相连,并将74LS47输出引脚与显示数码管相接即可。电路仿真示意图如下(只显示其中一个7段译码管,共四个):

czj02

2.电表端通信模块设计

基本功能 - 电表端原始信号编码与红外发送电路

设计**:电表端接受到控制方发送的申请指令,即一个脉冲。通过对脉冲进行滤波延时处理,电表端相当于得到一个定时长的高电平(常态为低电位),称为开关信号。此状态发射准备,也为控制方进行接受状态预留足够的时间。电平由高转变为低时触发JK触发器(上电自动复位,Q输出0,Q反输出1),Q电位进行翻转。此时Q输出为1,Q反输出为0。Q反经过逻辑门电路后与74LS194移位寄存器S1控制端相连,即S1端电位与Q反相同。194芯片的S0端直接置为高电位。74LS914芯片能实现并行输入串行输出和串行输入并行输出的功能。在整个编码与译码部分占有重要的地位。其中74LS194的功能表如下:

czj03

可以看到,当S0与S1同为高电位时(即发射准备阶段时期),输入时钟信号会对74LS194输出引脚进行置数。实验中74LS194四个输入引脚直接与74LS162计数器的四个输出引脚相连。此过程实现了将“用电度数”读入到寄存器当中。电路仿真图如下:

czj04

当下降沿JK触发器翻转后,S1引脚置为低电平,74LS194进入到右移状态。74LS194的时钟信号由系统的时钟信号经过四分频得到。将74LS194的Q4引脚输出作为控制信号,控制两个74LS194芯片。该两片芯片分别实现0和1的编码。在本报告的前面已对该编码方式进行了介绍,这里就不重复介绍了。我们分别称两片芯片为0号与1号。我们仍然通过控制S1与S0的状态来控制74LS194芯片的状态。Q4控制0号芯片与1号芯片的方式如下:

czj05

两个移位寄存器的时钟信号频率恰为存储数据的移位寄存器时钟频率的四倍,即每位对应四个时钟的周期。状态信号在发射准备阶段为高电位,即此时S0与S1均为高电位,寄存器并行写入数据。0号芯片写入0100,1号芯片写入0111。在发射阶段,状态信号为低电平,S0电位高低由Q4信号决定。当Q4位为低电位时,0号移位寄存器处于移位状态,输出数据。1号移位寄存器处于写入状态,QA一直为低电平。将两个芯片的QA输出端信号进行或运算,则得到0的编码信号-0100。当Q4为高电位时,1号移位寄存器处于移位状态输出数据。0号移位寄存器处于写入状态,QA一直为低电平。将两个芯片的QA输出端信号进行或运算,则得到1的编码信号-0111。

将得到的波形图作为调制信号与555构成的多谐振荡器输出38KHz的载波进行“与”运算,得到最后的信号输给红外二极管发射头发出即可。在此过程中,实际过程中的波形如下所示:

tek02

额外功能 - 信号丢失校验与重启电路

设计**:在控制方发送申请指令后,控制方电路进入到信号接受状态。由于通信方式为无线,信号传送过程中,难免会出现信号位丢失的情况。根据我们的通信协议,在16位均接收到了的情况下,不会发生错位现象。只有信号丢失的现象才会导致传输的数据出现错误。为了检测到信号丢失的异常情况,并做出适当的特征显示,我们设计了这部分电路。

在给定的一段定长的接受信号的时间后(足够完成数据的传送),检测是否接收到16位信号。已收到16位信号,则进入到下一个通信周期中。未收到16位信号,则将7段数码管全部置零。同时为了区别正常显示与异常强制清零显示,我们设置了识别信号灯。

3.用户端通信模块设计

基本功能 - 用户端接收红外信号脉冲整形相关控制电路

设计**:接受到的红外脉冲信号要作用于移位寄存器,使其工作并补位。接受到的原始红外脉冲信号有一定噪音,可能会对之后的判断产生干扰,那么让其先接一个非门做二值化滤波,再通过一个555构成的单稳触发器对信号进行一定调整后输入74LS123进行单稳延时,延时时间设定为2个基本时间单位,产生的脉冲的下降沿作用于移位寄存器的移位操作。

原理图:

reshape

4.用户端显示模块设计

基本功能 - 用户端信号解码/显示电路

设计**:由74LS123延时输出的脉冲触发移位寄存器右移操作后,移位寄存器的补位取74LS123延时前的信号的当前值,这就完成了译码电路的设计要求。而数码管的显示应该符合通信时不显示,闲时显示,所以利用16进制计数器,当接受完成后,16进制计数的最高位从0跳至1,产生一个下降沿,将JK触发器翻转,JK触发器的输出端连接数码管的使能端即可控制数码管的亮灭。

原理图:

decode

show

额外功能 - 状态提示电路(工作状态提示/按键无效提示/数据无效提示)

5.自动交互模块

基本功能 - 用户端请求信号发送电路

设计**:将进行按键误操作处理之后的信号(CH1,时长约1000ms)引入基于NE555的38KHz红外载波信号,逻辑“与”运算后得到请求脉冲信号(CH2)利用红外发射二极管发射。

如果在发射的同时利用CH1脉冲的结束边沿控制用户端状态转换为接收状态,则有可能接收到自己发出的请求信号,因此需要对CH1进行略微延时,产生CH3,利用CH3结束边沿触发状态转换。当然由于电表端接收到信号后会在250ms之内开始发送信号,因此CH3延时不能过长。笔者利用基于NE555的施密特触发器以及二极管、电容、电阻进行简单的放电延时。

lxz04

基本功能 - 用户端状态转换电路

设计**:用户端需要一个触发器来储存当前用户端的工作状态并调控各个模块工作的时序。当数据请求指令通过按键发送时,JK触发器翻转,用户端进入待接受状态,锁上来自数据请求按钮的信号,防止发生错误的翻转,但用户端收完数据并校验成功后,JK触发器再次翻转,重新回到显示示数状态。而如果校验失败,即受到不完整/错误信号,等待一定时间后将会自动将收到的数据清零,并使JK触发器翻转,进入显示状态。

原理图:

status

基本功能 - 电表端接受请求信号与识别电路

设计该部分电路是为了提高整个系统的抗干扰能力。实际电路在未改进之前,电表端的红外接收头对周围环境中的杂音信号异常的敏感。比如空调的遥控器,就能够启动电表端的信号发射。甚至用手在红外接收头前轻轻的晃动也可能启动电表端的信号发射,扮演了控制方的命令请求信号。

通过实际采波发现的干扰波形如下:

tek05

可以通过计数器对时长进行判断。直接将开关输出信号与计数器的清零端相连,时钟信号输入端输入系统时钟经过分频信号。当开关信号为高电平时(红外接收头接受到信号),计数器工作。在1s时间内,保证计数器输出引脚输出高电位,将该信号与开关信号作为初始的开关信号。对于干扰信号,计数器输出引脚一直输出低电平,故经过与运算后,处理后的开关信号一直为低电平,从而不会启动电表端的发射电路

基本功能 - 电表端状态转换电路

  • 多余请求信号的屏蔽

设计**:电表端红外接收头接收到用户端发送的请求信号之后,经过请求信号识别电路之后经放电延时电路平整波形,得到低电平脉冲信号(CH1),该信号触发单稳1延时50ms(波形CH2)与单稳2延时1000ms(波形CH3),将CH2与CH3进行“或”运算得到波形CH4(时间长约200ms),可以屏蔽掉第一个请求信号之后因误操作等发送的其他请求信号。

实物图:

lxz00

  • 控制编码信号的发出与接收信号状态的相互转换

设计**:该部分由基于74LS112的JK触发器完成,利用其翻转的两个状态来控制电表端处于(待)接收请求信号/发送信号2个阶段的相互切换。利用JK触发器的两种状态输出通过逻辑运算“屏蔽”(Disable)不属于当前状态的信号:“与”运算可以Disable高电平有效信号,“或”运算可以Disable低电平有效信号。

然而,在具体实践过程中,我们发现JK触发器两个阶段相互翻转并不是“严格连续”的,在翻转过程中,会由于衔接不紧产生“竞争与冒险”异常信号,这也是笔者采用1000ms单稳脉冲信号(该信号时长严格大于整个发送信号阶段总时长)来完成无关信号的Disabled的功能的原因

经过处理多余请求信号的单脉冲(CH5)与基于74LS161的16进制异步计数器的Q3输出端子信号(CH6)取或以后充作JK触发器的时钟CP信号(CH7,检测下降沿),第一个单脉冲下降沿使JK触发器第一次翻转进入信号发送阶段(CH8),与此同时此时利用16进制计数器计数16位信号完成之后,Q3由高电平翻转成为低电平,从而使JK触发器第二次翻转进入信号接收阶段(CH8),等待下一次的接受请求信号。

实物图:

lxz01

  • 信号结束自锁功能

设计**:电表端的状态分为两种:即(待)接收请求信号状态与发送编码信号状态,这两种状态由JK触发器两种翻转的状态区分。具体为:JK触发器输出端Q连接移位寄存器S0、S1控制端,当Q=S0=S1=1时,移位寄存器处于并行输入阶段,不发送信号,处于(待)接收请求信号状态;当Q=S0=S1=0是,移位寄存器处于串行输出阶段,编码电路开始工作,产生编码信号,处于信号发送阶段。当16位信号发送后利用计数器触发JK触发器翻转,状态进行切换,信号自然停止发送,自锁成功。

额外功能 - 按键误操作电路

  • 按键误操作

设计**:用户端按键产生的波形经放电延时整形后波形(CH1)上升沿触发单稳1(CH2,可重复触发,时长约50ms),利用单稳1脉冲结束边沿触发单稳2(CH3,时长需要2000ms以上,可以根据实际情况调整,笔者采用6000ms延时),利用CH2与CH3逻辑“与”运算,屏蔽之后按键多次点击的误操作,同时用此单脉冲触发单稳3(CH4,时长约1000ms)作为请求读数脉冲信号的控制信号。

由于单稳2的存在,可以在定长时间内屏蔽多余按键脉冲,故需要一指示灯(绿)来表示当前按键状态:灯亮表示可以按下按键读取电表读数;灯灭则表示当前正在读取数据之中或者读取错误,无需重复按压,静待示数显示或提示错误。

实物图:

lxz02

  • 信号校验

设计**:笔者采用脉冲计数校验方式:采用计数器进行计数,若在规定时间内未能收集到16位信号以致JK触发器翻转显示数据,则对所有器件统一清零,并提醒用户进行下一次读取请求发送。

接收信号之后,用16进制计数器进位产生的脉冲(CH5)下降沿作为一个新计数器Q0状态翻转的CP信号,将Q0取“反”的结果(CH6)与单稳2产生的长脉冲(CH3)进行逻辑“与”运算,得到波形CH7。

CH6、CH7的两种波形的示意

可以观察到如果未能在CH3时间内接收到16位信号,则CH7会出现一个下降沿,利用此下降沿触发一个新的单稳信号(CH8),利用CH8将器件清零,并以Led灯(蓝)提示用户:蓝灯灭表示当前读数正确,可以抄取;蓝灯亮表示当前正在接收信号或者读取到的信号错误,用户可重新发送读取数据指示。

实物图:

lxz03

可拓展模块:数据读取失败重发请求信号

读取数据失败后,将失败脉冲CH8引入按键波形CH1,则可实现信号重发,无需用户再次按压按钮,此功能可根据用户需求定制。

About

电工小学期:电度表红外光电传送