PIC 不断重置:我是否看到使用面包板的副作用?

电器工程 图片 振荡器 面包板 水晶
2022-02-02 08:53:59

我正在使用 PIC18F4680,并且在 HSPLL 模式下从 40 MHz 外部时钟源或 10 MHz 晶振运行它时遇到问题。在 HS 模式下使用 10 MHz 晶振似乎很好,在 HSPLL 模式下使用 5 MHz 晶振也可以正常工作。

发生的情况是 PIC 启动,工作了几秒钟,然后关闭了一段时间,然后重新启动。循环的总周期约为 5 秒,其中 PIC 工作在第二秒提前停止工作。

我还注意到,有时当我在面包板的电源总线上添加一个足够大的放电电容器时,PIC 会正常工作。有趣的一点是,只有当我在 PIC 已经运行时添加电容器时才会发生这种情况。如果我用那里的电容器为面包板供电,或者我放置一个尚未完全放电的电容器,问题仍然存在。

我在一些网站上读到,由于 PIC 在更高频率和更高最低工作电压下的功耗增加,可能会发生类似于我的问题。在这些情况下,如果电源上有一些短暂的电压降,它们更有可能在该频率上达到 PIC 的最低工作电压,因此最好在面包板上安装额外的电容器来解决该问题。由于在 40 MHz 满载下,整个电路使用大约 64 mA,我的第一个想法是放置一些 \$10 \mbox{ } \mu F \$ 钽电容器,希望它们足够大并且具有足够低的 ESR解决问题。一个没有帮助,第二个也没有帮助。所以我添加了一个 \$100 \mbox{ } \mu F\$ 铝电容器,但这也无济于事。然后我加了一个\$ 470 \mbox{ } \mu F\$ 铝电容没有效果。最后,我添加了一个 1 mF 铝电解电容器,然后电路第一次正常工作,直到关闭并打开电源。我还应该注意,出于测试目的,我使用了 5.5 V 的 Vcc,这是该微控制器的最高额定电压。这应该给我留出一些空间,直到 4.2 V,这是 40 MHz 的最低工作电压

接下来,我读到有时浮动输出会导致故障,所以我在所有未使用的引脚上放置了一些 \$10 \mbox{ }k \Omega\$ 下拉电阻,但这也无济于事。之后我读到如果振荡器输入浮动有时可能会出现问题,所以我尝试使用一些 \$10 \mbox{ }M \Omega\$ 电阻器将它们连接到 GND,但这并没有帮助。

由于从振荡器输出到 PIC 上的振荡器输入的导线长度,我预计会出现问题,但我没想到 10 MHz 晶体会出现问题,它非常靠近 PIC 上的振荡器引脚。同样对于晶体,我预计 HS 模式下也会出现问题,如果由于面包板导致的振荡器信号失真是问题,但在 HS 模式下,PIC 工作正常。

我通常为晶体使用 33 pF 电容器,但我也尝试使用 15 pF 并且我无法检测到任何变化。

我还应该注意,这个 PIC 具有故障安全时钟监视器和内部/外部振荡器切换。我已经尝试启用它们,希望它们至少能确认问题出在振荡器上,但它们对解决问题没有帮助。它们是打开还是关闭没有区别。

出于测试目的,我还禁用了看门狗定时器、掉电复位和堆栈上溢/下溢复位。我认为我关闭了该芯片的所有复位源。而且程序处于无限循环中,所以它没有结束。

PCF8583 没有任何问题,即使 PIC 自行复位,它也能继续正常工作,但另一方面,它的最低电压要低得多。

不幸的是,我没有示波器,但我用声音(96 kHz 采样率)卡做了一些测试,我注意到当 RTC 开启时,电源线上有一些 25 Hz 的噪音。我正在使用的程序报告了大约 300 mV 峰峰值,但我不知道有多少信任它,我不知道这是否足以导致 PIC 出现任何问题。当一切都关闭时,噪声峰峰值约为 100 mV,所以应该没问题。

如果有帮助,这是面包板本身的图片:(右键单击->查看完整尺寸的图像) 在此处输入图像描述

那么有人知道这里发生了什么吗?

最后,我可以只以 20 MHz 运行 PIC,但如果我需要更多处理能力,我希望能够以 40 MHz 运行它。

更新

我在面包板本身放置了另一个调节器,声卡拾取的噪音现在要低得多(峰峰值约为 50 mV),但它并没有影响主要问题。

4个回答

这是一些非常古老的建议,我不知道它是否与您的微机相关,但大约 4 年前,我使用 PIC18F 进行了一个项目,该项目遇到了奇怪的虚假复位。在阅读报告并重新记忆之后,似乎已经解决了这个问题:

您是否Low Voltage Programming Enable启用了配置位?你的PGM别针在PORTB吗?如果是这样,您可能需要考虑在复位时同时禁用Low Voltage Programming Enable和禁用Port B A/D Enable数字输入。根据我的旧报告,发生的事情是PORTB当它们是模拟输入并触发PGM引脚时我们保持浮动。回想起来,我不知道这个诊断是否正确,但我们确实成功地完成了那个项目,所以它可能值得一试。

有了这样的设置,我们几乎不可能准确地说出哪里出了问题。然而,我们可以说的是错误的。有很多事情是错误的,或者至少不像现在那么正确。这些事情中的任何一个都可能是您问题的真正根源,但它也可能需要将问题组合起来,当这些问题加起来等于您所看到的问题时。

调试它的唯一真正方法是修复任何你知道是错误的东西,无论它是否是确凿的证据。最终问题将以一种或另一种方式解决。

当这样的 MCU 无法正常运行时,您几乎总是必须关注基础知识:电源、时钟和复位。有了面包板,这三个都是可疑的!

对我来说,第 1 个嫌疑人是 40 MHz 时钟。在漂浮在空中的电线上运行 40 MHz 是相当快的。塞进面包板也很快,其中“信号分配系统”并不是真正为高速设计的。如果这是一块 PCB,我会告诉你确保你的走线阻抗是一致的,并正确地终止你的信号。不幸的是,你不能在面包板上真正做到这一点。我能告诉你的最好的事情是让你的电线尽可能短——然后让它们更短!在时钟信号上使用 o-scope,直接在 PIC 引脚上探测,探头的 GND 引线也直接在 PIC 上最近的 GND 引脚上。这会告诉你很多关于你的时钟的信息。

(如果可以的话,尽量借用一个 o-scope。没有它很难调试东西。)

#2嫌疑人是权力。功率也是面包板的一个大问题,因为导线的电感和电阻相对较高。再次,保持电线短。我还注意到您在 40 MHz 振荡器上没有任何去耦电容。对于 OSC,我会使用 0.1 uF 和更大的东西(4.7 uF 到 100 uF)并联。您的 PIC 还可以使用更大的东西与 0.1 uF 电容并联。通常不需要更大的盖子,但面包板没有什么是正常的。

嫌疑人#3被重置。您没有向我们提供有关复位信号的任何信息,我会说这是我怀疑的最低值,但无论如何您都应该检查一下。在上面放一个 o-scope,看看发生了什么。您也许可以简单地使用电压表。如果复位引脚上的电压接近阈值电平,则需要修复它。

现在,让我们回顾一下您尝试过的事情:

你做了很多在电源线上放置盖子的实验,结果很少或令人困惑。这是您只需要在其中设置一些上限并且不必担心他们是否在做任何积极的事情的时候之一。可能是您的电源噪音很大,但这只是导致问题的几件事之一。在 PIC 处添加与 0.1 uF 电容平行的更大电容。为 40 MHz 振荡器添加上限。确保引线尽可能短。然后继续下一件事。

额外的功率上限是不太可能引起问题的事情之一。这就是为什么你可以穿上一些,而不用太担心它们。尤其是 10-100 uF 的电容。

稍后,一旦一切正常,您可以一次取下一个盖子,看看问题是否再次出现。如果它没有返回,那么上限不是问题。但是现在您需要将其作为潜在问题删除,但要添加上限。

虽然浮动引脚可能是一个问题,但它们很少是足以导致 MCU 崩溃的大问题。值得修复,因为它会导致其他问题,但不太可能是这里的问题。注意:阻止未使用的引脚悬空的一种简单方法是将它们设置为输出!高低无所谓。但如果 PIC 正在驱动这些引脚,那么它们就不能浮动。

您没有提到 PGM(有时称为 LVP)引脚。这必须在配置字节中拉低或禁用 LVP。

你确定这张 PIC 可以直接占用 40 MHz 吗?有些只能通过内部 PLL 达到 40 MHz。我没有检查数据表,但你应该。即使是这样,我也不希望面包板上的 40 MHz 表现良好。我确实认为你应该能够使用 10 MHz 晶振和内部 4x PLL 运行 PIC,但如果你小心使用面包板并将旁路帽放在正确的位置。

这类问题经常出现。不要重复所有典型问题,请参阅https://electronics.stackexchange.com/a/29620/4512

我必须同意大卫的观点。有这么多长线,面包板上的 40MHz 是相当乐观的。我不敢相信你的时间真的值这么少,以至于你买不起一个小原型 PCB这些东西从PCB Train只需大约 30 英镑我相信你附近会有人可以提供类似的。

为什么不这样做。设计一个具有 PIC、振荡器和稳压器作为 SMD 组件的 PCB,然后是一整套性能板条。这样您仍然可以进行原型设计,但要确保 PIC 很高兴。

PC原型穿孔板