程序延时导致单片机功耗变化从而引起不能采集数据

故障现象:当不同集抄设备下面挂接的表具数量超过一定值时出现完全不能采集水量数据,初步分析故障现象跟随表具变化。

分析过程:

第一次去现场,测试了表具的静态电流,根据每个表具的静态电流可以算出总的电流,实际测试和理论计算基本相符,说明每个表具正常工作。然后读取了表具版本号,发现出现问题基本上是由于HC32L单片机的水表在超过一定数量的时候引起的。

第二次去现场,带上示波器,首先测试了电流调制的返回数据,通过识别返回的数据,发现数据返回正常,能够通过CRC校验,说明表具是能够正常接收命令,而且能够正常返回数据。通过改变采集器下面的表具数量发现超过一定数量的表具后,采集器不能识别出数据。而减少到一定数量后,又能够正常识别电流调制数据。

 第一个箭头为电压调制,第二个箭头为采样过程,第三个箭头处有一个电流的突然增加,第四个箭头处为上行电流调制,此波形为在22欧姆的电阻两端测得的电压波形。经过分析可知,第三个箭头处的电流降低是导致采集器不能识别电流调制信号的主要原因。进一步分析发现,这个现象的产生是由于电压调制后,目标表具开始进行采样,采样完后定时器延时100ms,最后返回数据。在电压调制后,非目标表具没有进行采样,仅仅进行100ms的延时,延时完成后就进入到一个while循环中;由于while语句的功耗高于定时器延时语句的功耗,所以在多个非目标表具延时时间到达后就统一进入while,就会有功耗的突然增加。而采集器端是在第二和第三个箭头之间建立比较器的比较基准值,在负载比较大的时候用一个二极管建立的比较基准电压回高于后面电流调制电平,导致识别不出数据;用二个二极管来建立比较基准电压刚好能够解决这个问题。

 上图为二个二极管+60欧姆的调制电阻。

 上图为二个二极管+40欧姆的调制电阻。可以看到电流突变处随调制电阻的减小而减小。

不是所有的单片机while循环的功耗都高于定时器延时的功耗,多数单片机的功耗是一样的,用下面的程序测试了三种单片机,其中两种的功耗是一样的。 

testcount = 0;
    while(1)
    {
    while(++testcount < 25000);
    testcount = 0;
    SysTick->VAL = 0;
    Delay_1uS(100000);     //延时100mS
    }

 测试方法为测试1K电阻的两端电压,参考点为电阻的连接Mbus总线正级,流过电阻的电流越大,则电压越低。

 上图短的波形为25000的while循环,长的为定时器延时波形,可以看出消耗的功耗是不一样的,while循环消耗的电流大,定时器循环消耗的电流小。

总结:

        硬件设计上的不同,软件造成的影响也存在不同;如果硬件设计上采用mbus传输芯片例如国产的ms721或者进口的ts721,由于721芯片在静态或者电流调制的时候从总线上提取的电流是一定的,相当于恒流源,则单片机软件不同语句照成的电流不同并不会影响总线上的电流,对数据识别不会产生影响。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值