ATmega的新“ PB”变体在掉电检测器中是否有错误?


9

多年来,我们已经在许多产品中成功使用了ATmega48 / 88/168/328微控制器。现在,我们已经考虑从A和PA变体切换到新的PB变体(因为在新产品中我们将需要额外的引脚,计时器和UART,因为它变得更便宜,并且因为似乎旧的变体将不再使用),所以我们换了一个ATmega328PB的ATmega328A。断电后,它似乎经常出现混乱。这些问题从未在旧版本中出现过。

定期停电对于我们产品的用例而言是正常的。我们使用一个开关电源(像这样),将其设置为5V,并在ATmega的VCC上使用220µF的电容器,以使SRAM在几分钟内保持断电状态,以存储非任务状态的内部状态。至关重要,但可以通过在重新启动后立即使用来显着提高用户体验(这些状态经常变化足以使EEPROM不适用)。这一直有效。

但是,使用新的ATmega328PB,在电源中断后,芯片复位,而在MCUSR中没有找到复位条件,时钟似乎变得一团糟。

  • 每个保险丝都设置了欠压检测器。我们尝试了所有可用的bodlevel,所有这些错误都发生了。
  • 我们使用外部20 MHz,每个保险丝也正确设置。
  • 我们尝试了3种不同的芯片,所以这不是一次焊接或其他硬件故障。

发生错误后,时钟通常设置为慢2.5倍,表明MCU由8 MHz内部振荡器提供时钟。但是,有时放慢速度约为6倍。这意味着更改时钟分频器不会是软件错误,因为我无法通过软件设置保险丝,并且时钟分频器无法将时钟除以2.5或6。

因此,我的第一个怀疑是新的“时钟故障检测”保险丝。但是,无论打开还是关闭,其行为都保持不变。

为了排除软件的特殊性,我从头开始编写了一个简单的测试程序,该程序除了从计时器中断中以100 Hz的频率切换输出外,不执行其他任何操作,并在每次重启后以LED指示激活了哪些复位条件(如从MCUSR读取)。其余的硬件也被删除,只有单片机和调节器在那里(指示器指示灯带有串联电阻)。

结果

大约有2/3的时间,没有发生任何有趣的事情。停电后,单片机将恢复工作,掉电复位和加电复位指示灯均亮起。

(在图像上,红色是切换的引脚,蓝色是VCC。在此图像上,清晰可见2.7 V的欠压。我对其他欠压设置进行了相同的测试,结果完全相同,所以我将省略那些图片)

它重启正常

大约1/3的时间,上述错误发生,而当电力又回来了,没有掉电复位,上电复位指标都亮了起来!输出是不同的,好像MCU在用奇怪的时钟滴答作响。它并不混乱,但是,它以相同的频率不断滴答作响。

它以疯狂的状态重新启动

有趣的是,在这种情况下,掉电检测器似乎是完全不活动的,因为在下一次电源中断后(有时恢复了正确的时钟,有时没有恢复正确的时钟),在掉电检测器之后,输出仍保持良好的切换。超出级别。在这种情况下,时钟有时会变快,而其他时候会变慢:

没电,时钟更快 没电,时钟变慢

在这些测试中,我使用了16K CK / 14CK + 4.1 ms作为启动延迟(但是65 ms的延迟不能避免这些问题)。

这是放大的图片,您可以清楚地看到VCC在2 ms内在5 V下达到稳定状态:

成功启动,放大

在上图中,mcu正确启动。

有趣的是,如果没有,电源电压甚至更快地上升到稳定的5 V(似乎MCU的许多部分都没有上电,因此在启动期间消耗的电流更少)

以下是失败的开始的图像:

启动失败,放大了

请注意,在电源电压稳定后超过85毫秒后,软件将开始运行,而不是需要10.5毫秒。用于启动延迟的保险丝仍然相同,为16K CK / 14CK + 4.1 ms。

还需要注意的是,在电源关闭后,VCC稳定在1.1至1.2伏左右(旧的ATmega328A变型下降至0.6-0.7伏左右)。它保持了几分钟。如果我等待足够长的时间(大约半小时或更长时间),则MCU总是可以正确启动!因此,看来问题在于周围有1.1伏特,根据数据表,这不能保证足以进行上电复位。但这足以进行掉电复位!

除这些情况外,掉电检测器工作正常。它在第一张图像上可见(达到bodlevel时输出信号停止,并且由于mcu的部分关闭,电压降变慢)。当我将VCC降低到略低于bodlevel并使其再次爬回时,我进行了测试,在这种情况下,mcu总是正确地重新启动,只有掉电的复位指示灯亮起。

我是否错过了明显的东西,或者ATmega328PB的掉电检测器是否存在严重的错误?

编辑:

有趣的是,以上问题仅在我在调节器之前中断电源时出现。如果我在调节器(或使用实验室电源)之后中断它,则永远不会发生问题。好像上升的电压形状引起了问题。但是,正如您从上一张图像中看到的那样,电压上升相当不错,并且很快就稳定下来。

编辑2

我用16 MHz而不是20 MHz进行了测试,但是确实发生了同样的问题。


您是否已联系Atmel或调查了他们的勘误表?在当今时代,IC设计错误非常普遍。
埃德加·布朗

我已经浏览了勘误表(在这个方向上找不到任何东西),我们正在考虑与Atmel联系,但在进行更多测试并环顾四周之前没有联系。
vsz

3
根据我的经验,在联系制造商或使用他们的论坛之前,请不要浪费时间。您已经进行了足够多的调试,以提供一个很好的案例。利用不到的价钱,TI向我发送了一份其内部IC(未发布)勘误表,用于记录其问题的IC之一。
埃德加·布朗

我的两分钱价值:如果电源上升太快,我发现其他CPU也有问题。一些制造商指定了最大上升时间,但更多时候没有提到。
Oldfart '18

Answers:


3

我认为这不是掉电检测器的错误,而是您如何使用该芯片。

就像您自己说的那样,如果只是短暂地断开并连接电源,则不会达到上电复位阈值1.1 V,因此不会发生POR。

掉电检测器在这里也无济于事。您正在以20 MHz的频率使用AVR,这要求电源电压为4.5 V或更高,或者违反规格。而且BOD不能保证会在4.5 V时跳闸,通常低于4.3V。因此,即使在BOD触发之前,也无法保证AVR处于什么状态,但BOD应该触发,除非它可能由于您的20 MHz时钟而无法正常工作。当电压再次开始上升时,在电源电压再次回到安全的4.5 V电平之前,BOD会失活。如果触发正确。然后,应将启动延迟时间设置为足够高,以使电压在内部复位释放之前具有从BOD禁用电平上升到4.5 V的变化。

但是这一切都可能失败,因为它仅需要至少4.5 V即可在20 MHz下运行。AVR数据表确实提到如果内部复位系统不合适,请使用外部复位芯片,在这种情况下,看起来可以解决在电压降至4.5 V之前复位AVR的问题。


我以为BOD不使用处理器本身,而是专用硬件。也许他们将其更改为PB版本?如果他们不再支持20 MHz BOD,我会感到惊讶。最高bodlevel为4.3 V,因此20 MHz是否需要外部BOD?不过,我怀疑仅此一个原因。我用20 MHz,2.7V bodlevel进行了测试,将VCC设置为3V,它运行良好。当我手动将电压降低到2.7以下时,输出停止,当我将电压提高到2.7以上时,输出恢复,但始终不会失败,甚至一次也不会失败。只有从1.1 V开始的启动似乎会禁用BOD。
vsz

最有可能是专用硬件,但是在BOD启动之前的欠压期间,您是否可以确定从闪存中提取了正确的数据以执行CPU,并且CPU是否正确执行了这些数据?它可能或者只是将随机数据写入执行未指定操作的保留寄存器。PB版本的规格已更改,并且较旧的芯片也不支持20MHz的BOD。PB变型的BOD和POR曲线确实不同,随后会在较低电压下启动。
Justme,

请看我的第二张照片。BOD似乎已正确接合,并已重置芯片。它只能在下次启动时初始化。另外,我以3 V电压驱动了该芯片,并且该芯片工作正常,从未一次失败。
vsz

我认为该芯片无需在安全操作区域之外工作,但让我们继续。BOD不会重置时钟故障检测器,因此只有上电重置和外部重置才会从内部时钟切换出来。因此,请仔细检查CFD保险丝设置。您使用的是外部晶体还是外部时钟?CFD保险丝以前可能是全摆动保险丝。而且由于没有全摆幅熔断器,所以晶体的最大频率为16MHz,而20MHz需要外部逻辑电平时钟信号。因此也可能是晶振启动的问题,因此也应将范围放在晶振引脚上。
Justme,

我用水晶。好主意,我会调查一下。请注意,无论CFD处于打开还是关闭状态,都会出现与图像相同的行为。
vsz '18
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.