最近遇到一个现场反馈问题:其他厂家的集中器在抄读我们的MBUS水表的时候,一款能抄读,一款不能抄读;而我们自家的集中器怎么都能抄读。
分析过程如下:
首先到现场用便携式示波器测试了Mbus总线上的下发电压调制波形和总线上行调制电流(通过表头总线处串联10Ω电阻),发现都有下发的电压调制波形,但一款表没有上行的电流调制,也就是说有一款表没有应答。
从右边展开的波形可以看到10Ω电阻上有152mV的电压,所以上行电流为15.2ma,水表有响应且满足接口标准。
由于手持示波器功能有限,没有分析出另外一款水表无响应的原因,因此把集中器连夜带回公司进行分析,发现集中器下发的电压调制波形如下:
下面两幅图是上面波形的展开,可以看到低电平的时候△x=450us,1/△x=2.222KHZ;高电平的时候△x=380us,1/△x=2.6316KHZ;跟标准的2400波特率有8%~9.6%的误差,所以导致其中一个水表没有应答。
下面是自家的集中器产生的电压调制波形:
可以看到1/△x=2.3148KHZ~2.5KHZ,跟标准2400波特率的误差仅为3.55%~4.17%,所以两个水表都有应答。
进一步分析两种表具在波特率实现上的差别,发现其中一款是用两个上升沿来识别波特率,另外一款是通过连续的两个1bit的宽度来识别波特率,用识别出来的波特率去设置串口的波特率,再进行数据接收。用两个上升沿这种模拟方式来识别波形可以有效消除发送端波形的异变,也就是说识别出来的波特率总是跟发送端一致,因为选择的两个上升沿是有一个高电平和一个低电平组成;而如果使用两个连续的高电平或者低电平来识别,由于高低电平均存在误差所以并不能真实反映发送端的波特率,在用这个误差大的波特率去设置串口波特率后就会导致接收端收到的数据存在错误,出现不通信的情况。
可以看到用1、2箭头处的两个上升沿产生的波特率比用3处两个连续1产生的波特率要精确。