一种实现波特率自适应的模拟uart的方法
【技术领域】
[0001 ]本发明涉及通讯领域,具体涉及一种实现波特率自适应的模拟UART的方法。
【背景技术】
[0002]随着我国市场经济改革日趋成熟和电力行业体制改革的不断深化,电力市场引入竞争机制,电网内部管理也逐渐走向商业化市场,而商业化运行的核心就是供电和购电双方以电力交换点的电能量作为计量结算依据,原来人工抄表和统计结算的抄表方式显然不能适应市场商业化运营的需要,因此,必须建立以自动化为基础的电能量计量自动化系统,以提高电能量的采集、传输、处理的精确性、可靠性和及时性。
[0003]电能量采集系统由系统主站、数据通道、厂站设备三部分组成,实现了对电网和电能表实时数据采集和监测,独立完成分时计费、电能量统计、电能量平衡、电能量管理以及电力营业考核自动化等功能;并具有远程维护、授权Internet用户远程查询等远程管理功能;并且通过与MIS、SCADA、DMS、EMS等系统实现数据交换与共享,为其他子系统提供了准确、完整的信息数据。
[0004]电能表随着微电子技术的进步有许多的通讯方式应用其中,包括红外通讯、有线通讯、无线通讯、电力载波通讯、串口通信。
[0005]串口通信是一种可以将接受来自CPU的并行数据字符转换为连续的串行数据流发送出去,同时可将接受的串行数据流转换为并行的数据字符供给CPU的器件;而波特率则是在串口通信是的速率,指的是信号被调制以后单位时间内的变化,即单位时间内载波参数变化的次数;在电能表的应用中,通讯波特率的切换都会遇到问题,有时并不知道电能表内部的波特率而需要对每个波特率都进行试通讯来确定正确的波特率,从而浪费操作人员的时间,增加了人力成本。
【发明内容】
[0006]本发明的目的是为了提供一种能在通讯时波特率自适应,无需手动切换的实现波特率自适应的模拟UART的方法。
[0007]本发明通过以下技术方案实现:一种实现波特率自适应的模拟UART的方法,步骤如下:
a )将电能表上电初始化,开启一个定时器,根据波特率的最小周期确定定时器的步进,并将接收引脚配置为双边沿外部中断输入,发送引脚配置为普通输出,同时开辟至少20个缓存,将前20个缓存标记为Tl至T20,用于存放前19个电平的持续时间;
b)检测电能表的中断信号,每次检测到中断信号,都将边沿变化记入缓存中记录定时器的值,记满前20个缓存;
c)依次计算前19个电平的持续时间,取持续时间最短的电平标记为Tmin,进行滤波处理,清除干扰信号;
d)取与Tmin持续时间最近的波特率Tb,并将Tmin与Tb匹配,Tmin? Tb ;匹配成功则Tb就为当前通讯的波特率;匹配不成功则抛弃接收数据;
e)将接收到的19个电平进行解析,并通过((Tn+1)-Tn)/Tb算出每个电平代表的数据位;
f)设置定时器的定时间隔为Tb,并关闭外部中断输入;
g)每次在定时中断中,读取接收引脚的电平直至接收完成;
h)电能表将接收的数据处理完后在间隔为Tb的定时器中断中将应答的数据发送出去;
i)发送完成后,初始化定时器,并将接收引脚配制为双边沿外部中断输入,进入接收模式,回到步骤b。
[0008]作为优选,所述步骤c中的滤波处理为根据通讯情况和硬件滤波器对持续时间最短的电平Tmin进行去抖动处理。
[0009]作为优选,所述步骤a中的定时器为微妙级定时器。
[0010]本发明利用数据帧的前20个边沿,在扫描时找出电平持续时间最短的一个电平,根据实际通讯情况和硬件滤波器的情况决定对最小电平进行一个滤波去抖动处理,最后确定的最短电平的持续时间与哪个波特率匹配,那么这个波特率就是当前通讯的波特率。
[0011]本发明的有益之处在于:I)利用一个定时器和多个1边沿中断,高效实现多路模拟UART功能,效率更高;2)通过对前20个中持续时间最短的电平与波特率进行匹配,得出与之匹配的波特率就是当前通讯的波特率,起到能自适应波特率的功能,无需操作人员再对每个波特率进行通讯从而确定当前通讯的波特率,节省人力成本。
【具体实施方式】
[0012]下面结合【具体实施方式】,对本发明作进一步描述。
[0013]一种实现波特率自适应的模拟UART的方法,步骤如下:
a )将电能表上电初始化,开启一个定时器,根据波特率的最小周期确定定时器的步进,并将接收引脚配置为双边沿外部中断输入,发送引脚配置为普通输出,同时开辟至少20个缓存,将前20个缓存标记为Tl至T20,用于存放前19个电平的持续时间;
b)检测电能表的中断信号,每次检测到中断信号,都将边沿变化记入缓存中记录定时器的值,记满前20个缓存;
c)依次计算前19个电平的持续时间,取持续时间最短的电平标记为Tmin,进行滤波处理,清除干扰信号;
d)取与Tmin持续时间最近的波特率Tb,并将Tmin与Tb匹配,Tmin? Tb ;匹配成功则Tb就为当前通讯的波特率;匹配不成功则抛弃接收数据;
e)将接收到的19个电平进行解析,并通过((Tn+1)-Tn)/Tb算出每个电平代表的数据位;
f)设置定时器的定时间隔为Tb,并关闭外部中断输入;
g)每次在定时中断中,读取接收引脚的电平直至接收完成;
h)电能表将接收的数据处理完后在间隔为Tb的定时器中断中将应答的数据发送出去;
i)发送完成后,初始化定时器,并将接收引脚配制为双边沿外部中断输入,进入接收模式,回到步骤b。
[0014]本实施方式中,所述步骤c中的滤波处理为根据通讯情况和硬件滤波器对持续时间最短的电平Tmin进行去抖动处理。
[0015]本实施方式中,所述步骤a中的定时器为微妙级定时器。
[0016]本实施方式中,首先开启一个定时器,定时器的步进根据波特率的最小周期确定,小于最小周期的1/20即可;接收时,将输入信号设置成双边沿触发,捕获定时器的值并放入一个缓冲区中,如果MCU具有DMA功能,可以使用DMA加边沿捕获功能来实现,后续分析缓冲区中的定时器的值,得出每个电平的宽度,从而分析出通讯的数据内容;发送时,根据起始位、数据内容、奇偶校验位、停止位等,确定每个电平的发送持续时间,根据定时器的比较翻转电平模式,进行比较1输出。
[0017]本实施方式中,根据各种不同的规约,一帧数据至少有20个电平变化,本发明主要利用数据帧的前20个边沿,而在前20个边沿中肯定存在一个电平持续时间为I位波特率的电平,例如电能表中的《DLT645-2007》协议、DLMS协议等都具备此特点,就是在检测电能表的中断信号时,找出前20个边沿中电平持续时间最短的一个电平,可根据实际通讯情况和硬件滤波器的情况决定对最小电平进行一个滤波去抖动处理,最后确定的最短电平的持续时间与哪个波特率匹配,那么这个波特率就是当前的波特率。
[0018]本实施方式中,t为滤波值,用于去除抖动,根据通讯的特点和电路的参数进行选值。
[0019]本实施方式中,步骤I)检测电能表的中断信号,取边沿捕获数,将边沿变化记入缓存中记录定时器的值,并将电平最小值寄存器设置为OxfffT;
步骤2)检测捕获数是否大于O,若不大于O,则进入步骤5,如大于O则计算各个电平持续时间t (i) -t (1-Ι)并计算电平持续的位数;
步骤3)检测该电平持续时间是否小于t,若大于t则进入步骤4,若小于t则将捕获数减I,进入步骤2;
步骤4)检测该持续时间是否小于最小值寄存器,若不小于最小值寄存器则将捕获数减I,进入步骤2,若大于最小值寄存器则进步步骤5;
步骤5)用该电平持续时间更新最小值寄存器;
步骤6)得出最小值寄存器的时间就是通讯的波特率,并设置通讯的波特率。
[0020]本发明的保护范围包括但不限于以上实施方式,本发明的保护范围以权利要求书为准,任何对本技术做出的本领域的技术人员容易想到的替换、变形、改进均落入本发明的保护范围。
【主权项】
1.一种实现波特率自适应的模拟UART的方法,其特征在于,步骤如下: a)将电能表上电初始化,开启一个定时器,根据波特率的最小周期确定定时器的步进,并将接收引脚配置为双边沿外部中断输入,发送引脚配置为普通输出,同时开辟至少20个缓存,将前20个缓存标记为Tl至T20,用于存放前19个电平的持续时间; b)检测电能表的中断信号,每次检测到中断信号,都将边沿变化记入缓存中记录定时器的值,记满前20个缓存; c)依次计算前19个电平的持续时间,取持续时间最短的电平标记为Tmin,进行滤波处理,清除干扰信号; d)取与Tmin持续时间最近的波特率Tb,并将Tmin与Tb匹配,Tmin? Tb ;匹配成功则Tb就为当前通讯的波特率;匹配不成功则抛弃接收数据; e)将接收到的19个电平进行解析,并通过((Tn+1)-Tn)/Tb算出每个电平代表的数据位; f)设置定时器的定时间隔为Tb,并关闭外部中断输入; g)每次在定时中断中,读取接收引脚的电平直至接收完成; h)电能表将接收的数据处理完后在间隔为Tb的定时器中断中将应答的数据发送出去; i)发送完成后,初始化定时器,并将接收引脚配制为双边沿外部中断输入,进入接收模式,回到步骤b。2.根据权利要求1所述的一种实现波特率自适应的模拟UART的方法,其特征在于:所述步骤c中的滤波处理为根据通讯情况和硬件滤波器对持续时间最短的电平Tmin进行去抖动处理。3.根据权利要求1所述的一种实现波特率自适应的模拟UART的方法,其特征在于:所述步骤a中的定时器为微妙级定时器。
【专利摘要】本发明公开了一种实现波特率自适应的模拟UART的方法,利用数据帧的前20个边沿,在扫描时找出电平持续时间最短的一个电平,根据实际通讯情况和硬件滤波器的情况决定对最小电平进行一个滤波去抖动处理,最后确定的最短电平的持续时间与哪个波特率匹配,那么这个波特率就是当前通讯的波特率。
【IPC分类】G06F13/38, G08C17/02
【公开号】CN105512068
【申请号】CN201510839360
【发明人】郑坚江, 王运兵, 应碧锋, 陈恢云, 应必金, 刘其君
【申请人】宁波三星医疗电气股份有限公司
【公开日】2016年4月20日
【申请日】2015年11月27日