
EFT抗干扰措施,主要有三类方法:
1优化PCB(印制电路板)布线;
2I/O端口处理;
3优化程序结构设计。
EFT(电快速瞬变脉冲群)是由电路中的感性负载断开时产生。特点是一连串的脉冲,对电路的影响比较大,可造成MCU(单片机)程序跑飞、死机、复位等情况。由于一连串的脉冲可以在电路的输入端产生累积效应,使干扰电平的幅度最终超过电路噪声门限。
当脉冲串的每个脉冲相距很近时,电路的电容没有足够时间放电,就又开始新的充电,容易达到较高的电平。所以脉冲串的周期越短对电路影响越大。
从本质上而言看门狗就是一定时器,定时器一启动就一直运行除非硬件复位或软件关闭,定时到一定时间自动的益出使系统复位,如65536US益出,则对单片机复位,系统重新运行,所以我们编程时一定要小于65MS时重置定时器的初值(喂狗),喂狗也不能太频繁,这样降低了CPU的工作效率,一般时间留20-30%的余量。看门狗也没办法使程序不跑飞,只是程序跑飞后能重新启动不至于死机而已。
在定时中断中喂狗,应该是次数最少的,但万一在主程序中进入了死循环,看门狗就不起作用了。最好还是放在主程序中,次数多就多吧。
另外,看门狗最好是能及时发挥作用,防止误 *** 作,2S太长了,有危险,设个50~200毫秒吧。
相信你经过检查读写程序都没有问题的话。
那么从你所说的现象判断,是程序跑飞所致。
当单片机复位不良、或者抗干扰性能不好时,程序很容易跑飞(程序跳转到未知位置开始执行),尤其RISC的单片机这种现象特别明显,因为其指令长度固定,基本上程序存储器中任何一个单元就是一条指令,所以当程序计数器乱跳时,跳到任何一个位置都会找到一条可以执行的指令并开始从这里执行。
如果跑飞时刚好跳到写EEPROM指令程序前面一段,就会出现在未给待写入数据正确赋值的情况下写入EEPROM的情况,导致EEPROM被误写。
因为刚好跳到写EEPROM指令前面一段是小概率事件,所以一般被改写的只有开始几个字节。
解决办法:
1、完善上电复位电路,确保单片机在电源电压稳定的情况下才开始运行。在上电期间,如果电压不稳定,是导致单片机程序跑飞的最主要原因。
2、增强电路抗干扰性能。
3、在写EEPROM指令前加一条条件跳转指令,当某软件标志位1未设置时就跳转,并且在写EEPROM指令后立即清除软件标志位1。
当需要写EEPROM时,在正确赋值写入数据之后紧接着设置软件标志位1,然后立即调用写EEPROM子程序。
按以上优化的程序,将使误写现象降到最低概率,因为只有恰好跳转到设置软件标志位1指令时才会发生误写现象。
如果以上优化还让你不放心,你可以做成2级甚至更多级的防误写,在设置软件标志位1之前加一条条件跳转指令,只有当软件标志位2设置时才不跳转……
是的,电脑会出现保存不成功,但是原来的文件一般不会丢失的。STC之类的EEPROM,要考虑备份处理。我一般是保存在2个地方,不同的页,每个地方有写入正确的标志,开机时会检查和恢复数据。具体,你自己想就可以了,不同的人有不同的手法。
对的
void main()
{
初始化
while(1)
{
主循环
}
跑飞会死机,控制错误等。可以开启看门狗,确保程序不跑飞
}
单片机一般是 COMS 结构,电源电压范围已经很宽,如果电压过低,内部程序以及外部的控制电路工作极不稳定,会造成控制错误,还不如停止单片机的工作,这就是低电压复位。 低电压复位就是检测电源电压的结果,就是“不让单片机工作”。 我估计你说的“不让单片机工作”,是指程序继续工作,只是把控制停下,是低电压下,程序工作是不可靠的。具体情况就要看你的设备而定了。现在写程序一般都有看门狗这样的检测程序,如果死机的话,会重启。当然,也不排除看门狗有问题,当然,更多的是程序本身有问题而导致的! 外部可能引起死机可能就是电压不稳、静电过大等原因。单片机程序死机,跑飞了可以从以下几个方面查找原因:
1 意外中断。是否打开了某个中断,但是没有响应和清除中端标志,导致程序一直进入中断,造成死机假象;
2 中断变量处理不妥。若定义某些会在中断中修改的全局变量,这时要注意两个问题:首先为了防止编译器优化中断变量,要在这些变量定义时前加volatile,其次在主循环中读取中断变量前应该首先关闭全局中断,防止读到一半被中断给修改了,读完之后再打开全局中断;否则出现造成数据乱套。
以上就是关于EFT干扰单片机IO端口怎么处理全部的内容,包括:EFT干扰单片机IO端口怎么处理、看门狗是如何防止单片机程序跑飞的、AVR单片机程序有时跑飞,现在加了看门狗,程序正常了,但感觉程序中喂狗的次数太多,怎么减少喂狗次数等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)