搜索
bottom↓
回复: 99

不要忘记使用AVR的BOD功能!

[复制链接]

出0入0汤圆

发表于 2007-6-12 22:14:33 | 显示全部楼层 |阅读模式
作为一个正式的系统或产品,当系统基本功能调试完成后,一旦进行现场测试阶段,请注意马上改写熔丝位的配置,启用AVR的电源检测(BOD)功能。



对于5V系统,设置BOD电平为4.0V;对于3V系统,设置BOD电平为2.7V。然后允许BOD检测。



这样,一旦AVR的供电电压低于BOD电平,AVR进入RESET(不执行程序了)。而当电源恢复到BOD电平以上,AVR才正式开始从头执行程序。保证了系统的可靠性!



原因分析如下:

AVR是宽电压工作的芯片,当电压跌至2.5V,系统程序还能工作。这是有2个可怕的现象可能出现,

1。外围芯片工作已经混乱,AVR读到的东西不正确,造成程序的执行发生逻辑错误(不是AVR本身的原因)。

2。当电源低到临界点,如2.4V时,并且在此互上互下的,AVR本身的程序执行也不正常,取指令、读数据都可能发生错误,或程序乱飞、不稳定(AVR本身的原因,实际任何的单片机都是这样的),非常容易造成EEPROM、FALSH的破坏。有人问51怎么不会?实际上51也是这样,只是51内部没有直接写EEPROM、FLASH的指令,它的程序乱飞留不下痕迹。还有人有疑问:外挂EEPROM,掉电时怎么不会改写?实际是外挂EEPROM,当电压低于4V(2.7V)时,它已经不工作了,程序去改内容也改不了。而AVR内部的东西在临界电压时都能工作,但非常不稳定。



AVR的BOD功能必须要使用,我早期使用51时,凡是产品外部都要使用电源监测芯片,现在AVR自己本身就有该功能,一定要使用。



这些教课书上是没有的。

出50入0汤圆

发表于 2007-6-12 22:22:27 | 显示全部楼层
恩,受用了,谢谢老师

出0入0汤圆

发表于 2007-6-12 22:27:51 | 显示全部楼层
谢谢马老师,受教。

出0入0汤圆

发表于 2007-6-12 22:28:46 | 显示全部楼层
谢谢!

出0入0汤圆

发表于 2007-6-12 23:31:20 | 显示全部楼层
马老师不说,还真不知道这个功能的重要性,十分感谢!

出0入0汤圆

发表于 2007-6-12 23:32:44 | 显示全部楼层
BOD我也专门测试过,对于AVR单片机非常重要。我专门做了慢速上下电测试,打开看门狗,打开指示灯,就做个非常简单的程序,但慢速下电的时候,电压要非常低才会使指示灯停止闪烁,此时电源指示电流也不大,但当慢速上电的时候,问题就来了,就发现电源急剧增大,达到几百个毫安。指示灯也不闪烁了,(外部没有其他电路了,输入都采用上拉),电压根本就没敢升到5V!我怕将芯片烧掉啊。不过从这里非常明显看到看门狗根本就没有用,内部什么情况我不知道,但我知道程序根本就没有运行,看门狗也不知道干什么去了。最后加上BOD,就可以随便试了,没出现过问题。

出0入0汤圆

发表于 2007-6-12 23:36:03 | 显示全部楼层
经验之谈啊!



感谢马老师!

出0入0汤圆

发表于 2007-6-13 00:11:50 | 显示全部楼层
马老师几年前在我一个百思不得其解的问题上,指点过我.原因就是BOD功能没有打开,现在想起来仍记忆犹新.

    再次感谢马老师!
-----此内容被zhb2000于2007-06-13,00:14:19编辑过

出0入0汤圆

发表于 2007-6-13 08:07:26 | 显示全部楼层
刚知道它的重要性。

谢谢马老师!

出0入0汤圆

发表于 2007-6-13 08:13:50 | 显示全部楼层
昨天在南瑞做EMC试验时,有个试验项目:电源暂降和跌落,单片机的这个功能就体现出来了..........

出0入0汤圆

发表于 2007-6-13 08:17:25 | 显示全部楼层
经验之谈啊!



感谢马老师!

出0入0汤圆

发表于 2007-6-13 08:30:41 | 显示全部楼层
那么说像一些MAX809之类的复位蕊片都可以不要了哦

出0入0汤圆

发表于 2007-6-13 08:40:33 | 显示全部楼层
请马老师帮我看一下我的看门狗程序,怎么就是不叫啊

   #asm("cli");

   #asm("wdr");

   WDTCSR=0x18;

   WDTCSR =0x0F;

   #asm("sei");

出0入0汤圆

发表于 2007-6-13 09:09:38 | 显示全部楼层
感谢马老师~!

出0入0汤圆

发表于 2007-6-13 13:43:01 | 显示全部楼层
但是,还有一个问题需要解决:复位后怎么继续运行之前的程序?

因为通常的程序结构是复位后先清RAM。



即使能区分开来了是BOD复位,那么,到底此时的RAM内容是否还能信?

看到有些人的建议是RAM分成3块,BOD或者WDT复位后做3选2判断,但是我想不出怎么在程序中实现这样的思路。





比如说,控制马达,上电复位后需要按一个键启动,如果是马达运转过程中MCU复位了,那么复位后,还必须让马达继续运转(但是又不能要求用户再去按键)。



9楼能否说说你的程序结构?

出0入0汤圆

 楼主| 发表于 2007-6-13 13:54:03 | 显示全部楼层
【14楼】 mig29 笨笨兔:



这就要使用断电保护的设计了,在我的《M128》书第5章中有相关内容的介绍。

出0入0汤圆

发表于 2007-6-13 14:01:19 | 显示全部楼层
利用非初始化变量就可以实现你的功能了。如果不知道的话,也可以用指针,方法比较多的。复位并不会清除RAM,但掉电就不一定了,一般是在内存区域加个标志,如果复位后检测数据未发生变化,则认为没有丢失数据。

出0入0汤圆

发表于 2007-6-13 14:15:04 | 显示全部楼层
这个和 外部复位芯片 还是有一定差距的。个人认为。

出0入0汤圆

 楼主| 发表于 2007-6-13 14:25:52 | 显示全部楼层
【16楼】 ssyniuej

单单依靠BOD功能的话,你所介绍的方法是不可靠的。



我们在这里就是讨论的掉电(包括电源大范围的变动,不稳定)情况,BOD可以使电压低于4V时AVR进入复位,尽管不清除RAM,但你怎么知道这次电源下降有没有到2V后马上再上来?那么在低于2V时,AVR中的RAM数据发生什么变化?哪些变化了?哪些又没有改变?在这种临界的状态下根本不能做出正确的估计。因此,正确的方法只能以最坏的情况考虑,那就是掉电!!掉电就意味着RAM中的数据全部无效了。

出0入0汤圆

发表于 2007-6-13 14:29:06 | 显示全部楼层
牢记马老师的教导!

出0入0汤圆

 楼主| 发表于 2007-6-13 14:40:18 | 显示全部楼层
我在《M128》书第5章中介绍了掉电保护的设计方法,这也是我在实际产品中所使用的。尽管没有具体的程序,但方法介绍的非常清楚,是依靠软件、硬件、再配合AVR的BOD综合的应用。



该产品控制6-7个马达工作(包括正反转),在一个执行过程中的任何时间都可以把整个系统电源拔掉。只要再次上电,程序能使该执行过程继续进行(如掉电前执行了30%,那么再次上电就从30%处继续执行),而不是从头开始。



该产品已经4年了,每月4-5K。

出0入0汤圆

 楼主| 发表于 2007-6-13 14:42:31 | 显示全部楼层
17楼,差距是什么?

出0入0汤圆

发表于 2007-6-13 15:16:11 | 显示全部楼层
顶,感谢马老师!

出0入0汤圆

发表于 2007-6-13 15:36:36 | 显示全部楼层
  由于没有开启BOD功能,我一上电就读EEPROM,把我整惨了。

  由于产品支持热插拨,因此必须测试上电瞬间来回插拨产品,结果EEPROM非常容易造成混乱。

出0入0汤圆

发表于 2007-6-13 19:04:21 | 显示全部楼层
回马老师,这种方法是对于电压过低的确是不可靠,但是这里如果打开了BOD就可以检测出来是否发生过低压,如果发生低压则认为数据无效,而在其余时候则检测数据是否有被破坏。但说实话如果为了保证完全不错,那么要做的工作太多了。以前我曾经做了个自动保存现场的功能,其实就是在外部加了个电压下降检测功能,检测稳压电路前面的高压是否下降,因为在外部电源消失的时候,电容还可以供一段时间的电,足够我写EEPROM了,现在对于AVR其实很方便的,因为可以在启动后检测一下复位状态,然后做相应的操作。以前也曾经因为板上有个12C887,所以把一些关键数据写到那里面,所要的使用都要配合自己的硬件和软件来工作的,并没有什么完全固定的方法。对于楼上的说法,套用一句广告词:我一直在用,呵呵。用EEPROM一定要打开BOD,否则很容易出现问题。象我做的东西,上电后要从EEPROM里面读取大量的配置数据,另外还是在工业现场使用,所以都会打开BOD的。

出0入0汤圆

发表于 2007-6-13 19:15:11 | 显示全部楼层
24楼的所说的,上一个月给客户做东西我也碰到了,深有体会,如果用eeprom一定要打开BOD。

出0入0汤圆

发表于 2007-6-13 20:28:29 | 显示全部楼层
但是打开BOD后,会是干扰复位的几率大幅度升高的,怎么办?

出0入0汤圆

发表于 2007-6-13 20:36:11 | 显示全部楼层
【26楼】:干扰复位总比程序乱跑引起不可预测结果好~

出0入8汤圆

发表于 2007-6-13 21:14:51 | 显示全部楼层
我的有一个东西,有M48做到的功能是掉电时将数据写到EEPROM里,我打开BOD,检测电压是2.7V,这样可靠吗,还是检测电压是4V好一点,如果是4V我担心只1V的差,不能可靠将数据写到

EEPROM里??

出0入0汤圆

发表于 2007-6-13 22:35:14 | 显示全部楼层
我也打开了BOD,但是还是会有读EEPROM乱的情况. 少到但是会有... 我现在都怕用内部的EEPROM了.

出0入0汤圆

发表于 2007-6-14 00:50:48 | 显示全部楼层
不打开BOD如果电源出现问题就不是程序乱跑的问题了,可能是程序根本就不跑了,如果乱跑还可以让狗把它逮回来,如果不跑呢?没办法了吧。如果打开BOD程序经常复位,一般就该找一下电源的问题了。如果电源好的话,不容易出现BOD复位的。

出0入0汤圆

发表于 2007-6-14 07:22:04 | 显示全部楼层
我使用的干扰就是用接触器的方法,把线圈的控制线绕到CPU最近的PCB上5圈,然后用手拿着直接往端子上碰触使继电器不断的动作,可以看到碰触时产生很强的火花。接触器是220VAC22A的小型的那种。此中方式要比用开关控制接触器的干扰强很多倍。结果是我开了BOD则发生频繁复位,大概接触器动作5-6次就一次复位。关了BOD则没有了,但是如果频繁开关CPU的电源,则有可能会使程序不启动(死机),最后采用了打开WDTON熔丝的方法就没有开不了机的问题了。目前我没有发现有开关机引起的EEPROM错乱的问题,到是有一次工作过程中突然复位,然后所有的EEPROM的数据全部变为00,那个产品当时是开着BOD的。CPU是M48,BOD=2.7V。

楼上的,WDT的振荡是独立的,程序不跑了,也好使。

出0入228汤圆

发表于 2008-4-8 12:51:53 | 显示全部楼层
顶一下

出0入0汤圆

发表于 2008-4-8 16:01:20 | 显示全部楼层
记录!

出0入0汤圆

发表于 2009-3-3 22:52:01 | 显示全部楼层
很好,受教了

出0入0汤圆

发表于 2009-3-4 16:10:41 | 显示全部楼层
good experience! mark

出0入21汤圆

发表于 2009-3-6 13:04:07 | 显示全部楼层
感谢马老师!

出0入0汤圆

发表于 2009-5-31 19:57:28 | 显示全部楼层
有这个设置真的不错,我上次就是看到了这个贴子,后面怎么也找不到 当时一下就晃过去了 终于找到了 标记一下

出0入0汤圆

发表于 2009-5-31 21:38:58 | 显示全部楼层
好帖子!

出0入0汤圆

发表于 2009-6-2 18:09:00 | 显示全部楼层
以前一直没有注意,标记一下,谢谢!

出0入0汤圆

发表于 2009-6-2 21:49:19 | 显示全部楼层
学习了~~~~

出0入0汤圆

发表于 2009-6-3 01:21:33 | 显示全部楼层
很久的帖了,不过马老师知识渊博,值得学习

出0入0汤圆

发表于 2009-6-3 01:31:50 | 显示全部楼层
嗯,的确如此.

出0入0汤圆

发表于 2009-6-3 10:35:27 | 显示全部楼层
顶一下,看大侠的讨论真是受益匪浅啊

出0入0汤圆

发表于 2009-6-3 10:51:47 | 显示全部楼层
学习啦。很有用啊!谢谢

出0入0汤圆

发表于 2009-6-3 11:24:26 | 显示全部楼层
收藏!

出0入0汤圆

发表于 2009-6-3 14:05:01 | 显示全部楼层
不错,下次设计一定要用上。

出0入0汤圆

发表于 2009-6-4 16:04:44 | 显示全部楼层
看门狗在上电的时候不能用:
因为看门狗生存的前提是:电压基本稳定的时候,可能有些干扰,但无大碍,慢速上电,看门狗首先就不好生存
不知对不

出0入0汤圆

发表于 2009-6-5 08:23:30 | 显示全部楼层
MARK

出0入0汤圆

发表于 2009-6-5 09:20:16 | 显示全部楼层
学习

出675入8汤圆

发表于 2009-6-6 11:25:25 | 显示全部楼层
标记,受教了

出0入0汤圆

发表于 2009-11-7 19:20:32 | 显示全部楼层
ji

出0入0汤圆

发表于 2009-11-11 23:35:48 | 显示全部楼层
记号

出0入9汤圆

发表于 2009-11-12 00:09:33 | 显示全部楼层
学习了,谢谢。

出0入0汤圆

发表于 2009-11-12 00:23:59 | 显示全部楼层
学习了

出0入0汤圆

发表于 2009-11-12 08:58:35 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-11-12 10:08:25 | 显示全部楼层
mark----------------

出0入0汤圆

发表于 2009-11-12 11:25:45 | 显示全部楼层
请问马老师:
   
    使用ATmega8L的芯片它的工作电压为2.7V~5.5V,使用BOD功能是没问题的,但是,如果使用ATmega8不带L的芯片它的工作电压为4.5V~5.5V,这时使用BOD功能已经没作用了,那单片机到4.5V以下时就不工作了,那它还会不会冲乱 EEPROM 呢?

出0入0汤圆

发表于 2009-11-12 12:22:41 | 显示全部楼层
MARK

出0入46汤圆

发表于 2009-11-13 10:43:21 | 显示全部楼层
受教了,拜谢

出0入0汤圆

发表于 2009-11-14 17:13:27 | 显示全部楼层
MARK,受教了

出0入0汤圆

发表于 2009-11-16 17:29:00 | 显示全部楼层
我設計的產品,沒有一個能開BOD 的, 原因他要耗電呀.
休眠時,會把充電電池拖壞的.所以產品的可靠性方案我搞了
三年.前兩年才搞定,難阿!

出0入0汤圆

发表于 2009-11-29 19:30:26 | 显示全部楼层
学到不少东西

出0入143汤圆

发表于 2009-11-29 19:41:30 | 显示全部楼层
谢谢马老师的热心指点

出0入0汤圆

发表于 2009-11-30 01:27:17 | 显示全部楼层
谢谢指点。。

出0入0汤圆

发表于 2010-10-7 14:40:15 | 显示全部楼层
谢谢指导啊,今年的沙发

出0入0汤圆

发表于 2010-10-7 19:41:16 | 显示全部楼层
这个都加了

出0入0汤圆

发表于 2010-10-8 08:30:38 | 显示全部楼层
mark,好经验,多谢马老师。

出0入16汤圆

发表于 2010-10-8 16:48:53 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-10-8 22:34:48 | 显示全部楼层
mark!

出0入0汤圆

发表于 2010-10-16 17:06:55 | 显示全部楼层
mark  感谢马老师!

出0入0汤圆

发表于 2010-10-16 20:23:04 | 显示全部楼层
mark !

出0入76汤圆

发表于 2010-10-17 14:38:05 | 显示全部楼层
确实如此,感谢马老师

出0入0汤圆

发表于 2010-10-18 11:15:19 | 显示全部楼层
高手之间的辩论,值得我们深思~!

出0入0汤圆

发表于 2010-11-1 21:45:11 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-2-26 11:45:12 | 显示全部楼层
回复【37楼】eydj2008 风
有这个设置真的不错,我上次就是看到了这个贴子,后面怎么也找不到 当时一下就晃过去了 终于找到了 标记一下
-----------------------------------------------------------------------

什么设置??

出0入0汤圆

发表于 2011-2-26 12:13:07 | 显示全部楼层
谢谢马老师

出0入0汤圆

发表于 2011-2-26 19:17:15 | 显示全部楼层
又涨见识了

出0入0汤圆

发表于 2011-2-26 21:28:30 | 显示全部楼层
MARK

出0入0汤圆

发表于 2011-2-26 21:33:32 | 显示全部楼层
谢谢马老师,受教。

出0入0汤圆

发表于 2011-2-28 00:45:13 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-2-28 15:39:22 | 显示全部楼层
学习了!!!

出0入0汤圆

发表于 2011-2-28 17:14:07 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-5-18 15:59:37 | 显示全部楼层
谢谢,马老师!

出0入0汤圆

发表于 2011-5-18 21:14:11 | 显示全部楼层
刚知道它的重要性。 同样感激,谢谢

出0入0汤圆

发表于 2011-5-18 21:44:23 | 显示全部楼层
其他的mcu也会有这样的问题,值得记号参考

出0入0汤圆

发表于 2011-5-19 17:58:39 | 显示全部楼层
mark!!!!!!

出0入0汤圆

发表于 2011-5-19 20:54:51 | 显示全部楼层
经验之谈,
谢谢

出0入0汤圆

发表于 2011-9-7 11:47:52 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-9-7 16:56:40 | 显示全部楼层
谢谢谢谢!

出0入0汤圆

发表于 2011-9-8 19:03:09 | 显示全部楼层
谢了

出0入0汤圆

发表于 2011-9-9 16:55:52 | 显示全部楼层
马克

出0入0汤圆

发表于 2011-12-28 13:15:54 | 显示全部楼层
回复【61楼】kmingroy
-----------------------------------------------------------------------

【61楼】kmingroy
我設計的產品,沒有一個能開bod 的, 原因他要耗電呀.
休眠時,會把充電電池拖壞的.所以產品的可靠性方案我搞了
三年.前兩年才搞定,難阿!
-----------------------------------------------------------------------

这种情况下如何搞定的,烦兄弟指教一二,我怕是也碰到你相同问题了

出0入0汤圆

发表于 2011-12-28 13:18:07 | 显示全部楼层
很遗憾,开BOD相对来讲太耗电了,有些场合还真不能开,咋办?

出0入0汤圆

发表于 2012-2-14 17:48:58 | 显示全部楼层
我们有一批车载的用STC12的芯片,没有用电源监控,结果几个月后芯片就要重新下载程序。
惨痛的一个教训

出0入0汤圆

发表于 2012-2-15 15:41:28 | 显示全部楼层
学习了!谢谢马老师!

出0入0汤圆

发表于 2012-2-16 19:12:59 | 显示全部楼层
受教了。谢谢!!!

出0入0汤圆

发表于 2012-8-6 09:30:16 | 显示全部楼层
谢谢老师啊!学习了

出0入0汤圆

发表于 2012-8-6 20:06:38 | 显示全部楼层
马教授的经验很重要啊,细节决定一些

出0入0汤圆

发表于 2012-8-6 20:38:27 | 显示全部楼层
学习了,谢谢
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-8 10:05

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表