看门狗电路设计中的关键参数与调试技巧

MAX706看门狗复位芯片在MCU系统调试中的关键作用与电路设计技巧 本文深入探讨了MAX706看门狗复位芯片在MCU系统中的关键作用与电路设计技巧。通过实际案例分析,详细解析了MAX706如何解决电源抖动、抗干扰等核心问题,并提供可靠的硬件复位保护。文章还分享了经典电路设计、调试策略及国产替代方案SGM706的对比测试,为嵌入式系统开发者提供实用参考。 阅读详情

1. 看门狗电路:你的系统“保镖”到底在守护什么?

大家好,我是老张,在嵌入式这行摸爬滚打十几年,设计过、也调试过无数带看门狗的系统。今天我们不聊那些高深的理论,就聊聊怎么把这个“系统保镖”用好、用稳。很多新手朋友一提到看门狗,就觉得是给MCU加个复位保险,代码里随便喂喂狗就完事了。结果真到产品现场,该死机还是死机,看门狗好像没起作用,或者不该复位的时候乱复位,搞得人焦头烂额。其实,看门狗电路设计远不是接几根线那么简单,关键参数的设置和调试技巧,直接决定了它到底是“守护神”还是“捣蛋鬼”。

你可以把看门狗想象成一个极其严格的“打卡机”。MCU就是员工,需要每隔一段时间(比如1秒)就去打卡机(喂狗)刷一次卡,证明自己还在正常工作。这个“每隔一段时间”就是喂狗周期。打卡机内部有个计时器,设定的最长容忍时间是超时时间。如果员工超过这个时间还没来打卡,打卡机就判定他“旷工”了,立刻拉响警报(发出复位信号),让整个系统重启,相当于换个人来干活。这个简单的比喻,背后却藏着几个决定系统生死的关键参数:超时时间设定多长?喂狗信号用什么波形?系统复位期间看门狗自己又在干嘛?这些参数没调好,你的系统可能永远在重启的循环里出不来,或者异常了也发现不了。

所以,这篇文章就是来填坑的。我会结合自己踩过的雷、趟过的河,把看门狗电路设计里那些最核心、最容易被忽略的参数掰开揉碎了讲,再分享几个实战中超级管用的调试技巧。无论你是正在画第一块板子的硬件新人,还是负责让产品在恶劣环境下稳定运行的软件老鸟,这些经验都能让你少走弯路。

2. 核心参数详解:不只是超时时间那么简单

很多人一上来就只关心超时时间(Timeout Period)设多少,这固然重要,但一个健壮的看门狗设计,需要通盘考虑一系列相互关联的参数。我们一个个来拆解。

2.1 超时时间:定生死的那条线

超时时间,通常用 t_WD 表示,是看门狗芯片从最后一次有效喂狗信号开始,到触发复位输出的最大等待时间。这是最核心的参数,没有之一。设得太短,系统稍微忙一点,喂狗不及时,就被误复位,这叫“防卫过当”。设得太长,系统真死机了,要等很久才复位,用户体验差,甚至可能错过关键的安全处理时机。

那到底怎么定这个值呢?我通常分三步走:

第一步,摸清系统的“心跳”周期。 你需要分析整个软件的主循环,或者喂狗任务所在的执行周期。假设你的主循环最坏情况下的执行时间是200ms,那么喂狗间隔肯定要大于这个值,比如设定在250ms。这里一定要留足余量,考虑到中断打断、任务调度抖动等。我一般会取1.5到2倍的安全系数。所以,如果主循环200ms,我会考虑将喂狗周期设定在300-400ms。

第二步,匹配看门狗芯片的档位。 看门狗芯片的超时时间通常是几个固定档位可选,比如100ms, 1.6s, 25.6s等(像TI的TPL5010),或者是通过外部电阻调节(像MAX706)。你根据第一步算出的理论值,去选择最接近且略大于它的档位。比如理论需要400ms,那就选1.6s的档位,千万别选100ms的,那会频繁误复位。

第三步,考虑极端场景。 你的系统有没有需要长时间关闭中断去操作关键数据(比如写Flash)的代码段?这段时间是无法喂狗的!超时时间必须大于这段“临界区”的最大持续时间。我遇到过的一个坑是,产品在升级固件时,擦写Flash需要2秒,但看门狗超时设的是1.6秒,结果每次升级必复位。后来只好把喂狗操作挪到擦写操作的间隙中,或者选用超时更长的看门狗芯片。

这里给个经验表格,你可以参考:

系统类型典型主循环周期建议喂狗周期建议看门狗超时时间考量点
高速控制(电机、无人机)1-10 ms10-50 ms100-200 ms响应极快,但需避免高频喂狗负担
通用嵌入式设备50-200 ms200-500 ms1-2 s平衡响应与可靠性,最常见
低功耗物联网节点1-5 s5-10 s30-60 s配合睡眠唤醒周期,省电是关键
带长耗时操作(文件系统、OTA)不定在长任务中插入喂狗必须 > 最长单次阻塞时间防止合法长任务触发复位

2.2 喂狗信号:不是有脉冲就行

喂狗信号(WDI)是MCU向看门狗证明自己“活着”的凭证。很多工程师随便用一个GPIO翻转就当喂狗信号,这在简单场合可以,但在复杂或高干扰环境下就容易出问题。

信号类型的选择: 最优选是使用硬件PWM或者定时器触发的脉冲输出。为什么?因为这种方式不依赖于主循环的准时性。即使你的软件主循环因为某个任务卡住,只要定时器中断还能运行,喂狗信号就能持续产生,看门狗就不会复位。这相当于给你的监控系统又加了一道保险。我用STM32的时候,特别喜欢用一个基本定时器(TIM6/TIM7)产生一个固定占空比(比如10%)的PWM,直接接到WDI脚,软件几乎不用管,非常稳。

脉冲宽度与边沿要求: 仔细看数据手册!有些看门狗芯片要求喂狗信号是一个最小宽度的脉冲(如几十纳秒),而有些则是检测边沿(上升沿或下降沿有效)。如果是边沿检测,你需要确保在超时时间内至少有一次边沿变化。如果MCU的GPIO意外锁死在固定电平,边沿检测的看门狗就会失效。这时,一个脉宽适中的脉冲信号(比如高低电平各占一半)会更安全。

信号容错与防干扰: 在电机驱动、电源开关等噪声大的环境里,连接到WDI的走线可能引入干扰毛刺。这些毛刺如果被误判为喂狗边沿,看门狗就“饿”不死了,失去作用。我的做法是:

  1. 硬件上:在WDI引脚就近放置一个几十到几百皮法的小电容到地,滤除高频毛刺。但注意电容不能太大,否则会平滑掉正常的喂狗脉冲。
  2. 软件上:采用“窗口看门狗”的思维。除了在固定周期喂狗,还可以在喂狗前检查一下距离上次喂狗的时间是否在一个合理窗口内。如果发现异常提前喂狗,可能是干扰,可以忽略或做异常记录。

2.3 复位脉冲宽度与输出类型:确保能“打醒”MCU

看门狗发现异常,会通过/RST引脚发出复位信号。这个信号必须能让MCU可靠复位。

复位脉冲宽度(t_RST): 这个参数指的是看门狗输出的复位低电平(或高电平,取决于有效电平)持续多长时间。它必须大于你的MCU所要求的最小复位脉冲宽度。通常MCU要求是几十微秒,而看门狗芯片的t_RST一般在几百毫秒级别(如MAX706的复位脉冲是350ms),所以通常绰绰有余。但如果你用的是超低功耗MCU,或者复位电路设计特殊(比如有大电容),就需要验算一下复位信号的上升/下降时间是否满足要求。

输出类型: 这是硬件设计时极易踩坑的地方!看门狗的复位输出常见两种:

  • 推挽输出(Push-Pull):可以直接驱动MCU的复位引脚。简单省事。
  • 开漏输出(Open-Drain, OD)或开源输出(Open-Source):这类输出需要外部上拉电阻才能输出高电平。如果你直接把它接到MCU复位脚,而忘了加上拉电阻,那么看门狗只能拉低复位线,却无法主动将其拉高,导致MCU一直处于复位状态!我早期就犯过这错误,调试了半天才发现复位脚永远低电平。所以,拿到一颗看门狗芯片,第一件事就是查数据手册,看/RST引脚是哪种输出。如果不确定,在PCB上预留一个上拉电阻的位置(比如10kΩ),这是成本极低但能救命的习惯。

复位电平极性: 确认MCU的复位引脚是低电平有效(/RST)还是高电平有效(RST)。大部分MCU是低电平有效,大部分看门狗输出也是低有效,但务必核对。如果不匹配,可能需要加一个反相器。

3. 硬件设计陷阱与规避指南

原理图连一连,PCB画一画,看门狗电路就算好了?远不止如此。硬件设计上的细微差别,会直接导致后期调试的噩梦。

3.1 电源与去耦:不稳的电源是第一杀手

看门狗芯片自己首先要工作稳定。它的供电电压(VCC)必须在数据手册规定的范围内。比如一颗3.3V供电的看门狗,你接到5V上,可能瞬间就损坏了;接到一个纹波巨大的电源上,它自己都可能工作异常,更别说监控别人了。

关键操作:

  1. 独立退耦电容:一定要在看门狗芯片的VCC和GND引脚之间,就近放置一个0.1μF~1μF的陶瓷电容。这个电容为芯片提供瞬间的电流缓冲,滤除电源线上的高频噪声。我习惯用0603封装的0.1μF电容,离引脚不超过2mm。
  2. 关注上电复位(POR)阈值:看门狗芯片内部通常也有上电复位电路。它的POR阈值(比如当VCC上升到2.5V时释放复位)需要和你的MCU的POR阈值协调。理想情况是,看门狗应在MCU稳定工作后才释放对MCU的复位。如果看门狗先于MCU就绪就释放了复位,而MCU的电源还没达到稳定工作电压,可能导致MCU启动异常。虽然大部分时候没问题,但在电源爬升缓慢的系统中需要留意。

3.2 手动复位(MR)功能的巧用与慎用

很多看门狗芯片都有一个手动复位引脚(/MR),低电平触发,可以方便地手动重启系统。但这个引脚如果处理不好,就是干扰的入口。

  • 悬空之危:绝对不能让/MR引脚悬空!悬空的引脚如同天线,极易拾取电磁干扰,导致意外复位。数据手册通常会明确要求,不使用时必须上拉到VCC。
  • 防误触设计:即使你要使用手动复位按键,也不能直接把按键接在/MR和地之间。因为按键按下时,触点抖动会产生一串毛刺,可能被识别为多次复位。正确的做法是串联一个电阻(如1kΩ)并并联一个电容(如0.1μF)到地,组成简单的RC滤波,消除抖动。也可以使用专用的复位芯片或利用MCU GPIO去检测按键再做软件复位,更可靠。
  • 布局布线:复位信号线(包括看门狗输出的/RST和手动复位/MR)应被视为敏感信号线。走线要尽量短,远离高频、高电流的走线(如时钟线、开关电源走线),避免串扰。

3.3 看门狗使能与初始化时序

这是一个软硬件协同的深坑:系统上电后,看门狗什么时候开始工作?

有些看门狗芯片(如MAX706)一上电就开始计时。这意味着,从MCU得电、到晶振起振、再到软件初始化GPIO并开始喂狗,这整个启动时间必须小于看门狗的初始超时时间,否则系统永远无法启动成功,一上电就被看门狗复位,陷入死循环。

解决方案:

  1. 选择有启动延时的芯片:一些高级看门狗芯片提供了“看门狗使能”引脚(WDE)或通过软件命令使能,允许你在MCU完全初始化后再启动看门狗监控。
  2. 软件快速初始化:在MCU启动代码的最前端,在初始化系统时钟和必要外设后,立刻、马上初始化用于喂狗的GPIO或定时器,并发出第一个喂狗信号。把其他不关键的初始化(如屏幕、传感器)放到后面。
  3. 硬件辅助:对于一上电就工作的看门狗,可以计算MCU启动到首次喂狗的最长时间,然后通过调整看门狗芯片的外部定时电阻(如果支持)来设置一个足够长的初始超时时间。等系统稳定后,再通过软件配置到正常的较短超时时间。

4. 软件喂狗策略与调试实战

硬件设计得当,只成功了三分之一。软件的喂狗策略是让看门狗智能化的关键。

4.1 喂狗代码的位置:放在哪比怎么写更重要

千万别把喂狗函数随便丢在主循环里就了事。喂狗操作应该放在系统“心跳”最可靠的地方。

  • 反面教材:如果你的喂狗调用在一个低优先级的任务里,而高优先级任务发生死循环,低优先级任务永远得不到执行,看门狗就永远吃不到“狗粮”,系统无法复位。这就失去了看门狗的意义。
  • 推荐做法:
    • 独立定时器中断:这是最可靠的方式。创建一个远短于看门狗超时时间的硬件定时器中断(比如超时1.6秒,定时器中断100ms),在中断服务程序里喂狗。这样只要中断系统还能响应,看门狗就能被喂到。中断优先级要设得比较高。
    • 最高优先级任务:在RTOS中,创建一个优先级最高的“看门狗任务”,它只做一件事:等待一个来自其他所有关键任务的“健康报告”信号量或事件标志,收集齐之后再去喂狗。这样,任何一个关键任务挂掉,都会导致喂狗停止。
    • 主循环监督:在简单的裸机系统中,确保喂狗函数放在主循环中不会被任何条件分支、循环或函数调用长时间阻塞的位置。并且要确保主循环的执行时间远小于看门狗超时时间。

4.2 “窗口看门狗”思想与软件容错

有些复杂的系统,仅仅“饿死”复位还不够,我们需要更精细的监控。可以借鉴STM32内部窗口看门狗(WWDG)的思想,在软件层面实现。

基本思想:不仅设置一个最晚喂狗时间(如1.6秒),还设置一个最早喂狗时间(如0.1秒)。喂狗必须在“时间窗口”内进行才算有效。

  • 喂得太早(<0.1秒):说明程序可能跑飞了,在某个地方死循环快速执行喂狗。
  • 喂得太晚(>1.6秒):说明程序阻塞或死机。
  • 只有在0.1秒到1.6秒之间喂狗,系统才正常。

软件实现:你可以用一个自由运行的定时器(如SysTick)来计时。每次喂狗时,检查距离上次喂狗的时间间隔是否在预设的合理窗口内。如果不在,可以触发一个软件错误处理流程,比如记录错误日志到非易失存储器、尝试软件恢复等,而不是立即复位。这为诊断复杂问题提供了宝贵线索。

4.3 调试技巧:当看门狗“乱叫”或不叫时

调试阶段,看门狗有时很烦人。比如你单步调试代码,一停下来看门狗就超时复位了。或者系统明明死了,看门狗却不复位。

对付调试复位:

  1. 利用芯片的调试模式:很多现代MCU在调试器连接时,会自动冻结或禁用看门狗(无论是内部的还是外部的)。检查你的MCU是否有此功能。
  2. 硬件使能控制:如果你的看门狗有使能引脚(WDE),可以把它连接到一个调试用的GPIO或测试点上。调试时,通过拉高或拉低这个引脚来禁用看门狗。
  3. 软件临时屏蔽:在调试版本的代码中,可以将喂狗函数注释掉,或者增加一个全局变量开关来控制是否喂狗。切记正式发布前一定要改回来!

诊断看门狗失效(该复位不复位):

  1. 检查喂狗信号:用示波器测量WDI引脚。看看是否真的有脉冲信号?脉冲宽度和周期是否符合预期?是不是因为软件错误,导致WDI引脚输出了固定的电平,而你的看门狗恰好是边沿检测型,且该固定电平是有效电平?
  2. 模拟故障:在代码中故意插入一个死循环(比如while(1);),然后观察看门狗的/RST引脚是否有复位脉冲输出。用示波器抓取。如果没有,依次检查:看门狗供电是否正常?复位输出线路是否连通?上拉电阻(如果是OD输出)是否焊上?
  3. 检查初始状态:回忆一下硬件注意事项里提到的,有些看门狗在WDI高阻时会自动产生内部喂狗。你的MCU在初始化GPIO前,引脚状态是不是高阻?这可能导致调试初期看门狗一直不动作。这就是为什么建议在WDI脚预留上下拉电阻,强制其进入确定状态,确保看门狗功能生效。

5. 进阶:在多任务与低功耗系统中的设计

当系统变复杂,看门狗的设计也需要升级。

5.1 RTOS环境下的喂狗策略

在RTOS中,单一喂狗点风险很高。推荐采用**“任务健康报告”机制**。

  1. 定义几个关键任务(如通信任务、控制任务、显示任务)。
  2. 每个任务在其主循环中,定期(周期应远小于看门狗超时时间)设置一个属于自己的“活着”标志(如递增一个计数器,或置位一个事件位)。
  3. 创建一个独立的、高优先级的“看门狗监护任务”。这个任务周期性地检查所有关键任务的“活着”标志。如果某个标志在预期时间内没有更新,说明该任务可能挂起或阻塞。
  4. 只有所有关键任务都报告健康,“监护任务”才去执行一次喂狗操作。
  5. 如果某个任务不健康,“监护任务”可以尝试恢复它(如删除重建),或者在一段时间后判定系统故障,主动停止喂狗,让硬件看门狗复位系统。

这种策略的好处是,它能定位到是哪个具体任务出了问题,而不仅仅是整个系统复位。

5.2 低功耗设备中的看门狗管理

在电池供电的设备中,MCU会频繁进入深度睡眠模式以省电。此时,所有外设包括定时器都可能关闭,无法产生喂狗信号。

解决方案:

  1. 选用低功耗看门狗芯片:有些看门狗芯片在监控状态下自身功耗极低(<1μA),可以始终保持供电。
  2. 睡眠期间禁用看门狗:进入深度睡眠前,通过硬件使能引脚或软件命令暂时关闭看门狗。醒来后立即重新使能并喂狗。这种方法有风险:如果在睡眠期间发生异常(如电压跌落导致程序跑飞),看门狗无法提供保护。
  3. 使用带唤醒功能的看门狗:这是更优雅的方案。例如,你可以将看门狗的超时时间设置为略长于你的睡眠周期(比如睡眠10秒,超时设12秒)。每次MCU被其他中断唤醒并工作后,立即喂狗。这样,即使MCU在睡眠中因干扰程序跑飞而无法正常唤醒,看门狗也会在12秒后将其复位。这需要精确计算睡眠和工作的最长时间,确保喂狗间隔总小于超时时间。

看门狗电路,看似简单,实则是嵌入式系统可靠性的基石。它要求硬件工程师和软件工程师紧密配合,从芯片选型、参数计算、电路布局,到软件架构、喂狗策略、异常处理,每一个环节都需要深思熟虑。我最深的体会是,不要等到产品出了问题才去折腾看门狗,而是在设计之初,就把它作为一个完整的“系统健康管理单元”来考量。多花一点时间理清这些参数和策略,后期测试和现场维护时,你会感谢当初那个较真的自己。

从‘喂狗’聊起:深入理解SP706看门狗芯片的监控逻辑与电路设计要点 本文深入解析SP706看门狗芯片的监控逻辑与电路设计要点,涵盖超时复位机制、电压监控特性及硬件设计中的关键细节。通过示波器波形图和实战案例,揭示WDI信号完整性、复位电路设计等常见误区与解决方案,帮助工程师提升嵌入式系统可靠性。特别适合工控、医疗等关键领域开发者参考。 阅读详情

相关推荐

嵌入式系统看门狗电路设计:从原理到实战的可靠性保障

在嵌入式系统开发中,系统可靠性是核心考量。看门狗电路作为一种独立的硬件监控机制,通过定时器与复位信号的博弈,为系统提供了抵御程序跑飞和死机的最后防线。其技术价值在于不依赖软件逻辑正确性,能在系统异常时强制复位,恢复至已知正常状态。这一机制广泛应用于工业控制、汽车电子和医疗设备等高可靠性要求的场景。本文以MAX706等经典芯片为例,深入解析外部看门狗的设计要点,涵盖电源监控、喂狗策略及常见问题排查,帮助工程师构建稳健的嵌入式系统。

weixin_34126557的博客 433

看门狗定时周期设置的秘密

之前使用看门狗时,遇到的绝大部分代码都是计时周期为1。 某日,突发异想把计时周期改到10秒,结果出问题了。。。设备一直重启! 先看代码,看门狗初始化配置代码如下: 翻看手册: so,看到了什么? 看门狗时钟16分频时,独立看门狗支持的最大计时周期是1638.4ms,即1.6384s,是无法实现我所期望的10秒周期的。如果需要实现看门狗计时10秒周期,查表可知,需要分频系数设置为128及以上。 修改后,实现10秒计时周期的代码如下: 此时,即可实现独立看门狗计时周期为10秒的配置。 但实际上为了保证设备异常

weixin_44612435的博客 6702

硬件看门狗SP706选型、电路设计与软件配置避坑指南

本文详细解析了SP706硬件看门狗芯片的选型、电路设计与软件配置,特别强调了其在工业环境中的稳定性和可靠性。通过对比内置看门狗与独立芯片的差异,提供SP706的典型应用场景和优化策略,帮助开发者避免常见设计陷阱,提升系统稳定性。

weixin_42629671的博客 232

stm32f103 c 语言编程,stm32f103 独立看门狗 - 全文

STM32的独立看门狗由内部专门的40Khz低速时钟驱动,即使主时钟发生故障,它也仍然有效。这里需要注意独立看门狗的时钟是一个内部RC时钟,所以并不是准确的40Khz,而是在30~60Khz之间的一个可变化的时钟,只是我们在估算的时候,以40Khz的频率来计算,看门狗对时间的要求不是很精确,所以,时钟有些偏差,都是可以接受的。首先我们得讲解一下看门狗的原理。我们总结一下:单片机系统在外界的干扰下会...

weixin_39592240的博客 576

SP706硬件看门狗实战:从电路设计到STM32喂狗策略

本文详细解析了SP706硬件看门狗在STM32项目中的实战应用,从电路设计到喂狗策略全面覆盖。重点介绍了SP706R与STM32的硬件连接要点、裸机与RTOS环境下的喂狗程序实现,以及常见问题调试技巧,帮助开发者提升系统稳定性与可靠性。

weixin_30813225的博客 301

硬件看门狗电路设计实战:从原理选型到PCB可靠性落地

硬件看门狗是嵌入式系统实现高可靠性的基础保障机制,其本质是通过独立于主控的超时检测与强制复位,解决软件静默失效导致的不可恢复死机问题。核心原理在于构建‘独立计时+周期喂狗+硬复位’闭环,技术价值体现在对工业控制、汽车电子、医疗设备等安全关键场景的故障自恢复能力。相比软件看门狗,硬件方案具备时钟源独立、抗干扰强、响应确定性高等优势;而专用看门狗IC(如TPS3823、MAX6326)则进一步集成了电源监控、窗口模式和温度补偿等工程刚需特性。本文聚焦硬件看门狗的选型逻辑、信号完整性设计、电源地布局规范及实测验证

weixin_34326429的博客 531

独立看门狗配置及计算详解

一、独立看门狗用途 独立看门狗通常用于防止软件意外卡死,在软件故障之后能够重启程序; 二、独立看门狗时钟源 独立看门狗使用的是专用的低速时钟,以GD32为例,其独立看门狗使用的是IRC40K时钟,以STM32为例,其独立看门狗使用的是LSI(40KHz); 三、独立看门狗寄存器分析 看门狗可以理解为是一个定时器,知道其时钟源,再根据想要的触发周期,计算出分频系数和重装载值就可以了。与定时器不同的是独立看门狗是独立于主程序运行的,即使在系统时钟异常,程序无法运行的情况下,独立看门狗仍然能够完全独立工作; 以S

weixin_44612435的博客 8973

硬件看门狗电路设计全指南:从原理到车规级实战

硬件看门狗电路是嵌入式系统实现高可靠运行的基础保障,其核心在于通过独立于主CPU的物理计时与复位机制,解决供电异常、程序失控和时钟失效三类典型故障。相比软件看门狗,它不依赖MCU时钟源与程序执行流,具备本质安全特性,在工业控制、智能电表、车载T-BOX等7×24小时运行场景中不可替代。本文深入解析RC型、晶体计数型、集成电压监控型及窗口看门狗等主流架构,覆盖超时时间计算、喂狗信号设计、复位电气匹配等关键工程细节,并结合IEC 61508、ISO 26262功能安全要求,提供从原理图检查、PCB布局到老化验证

weixin_34226706的博客 354

单片机-STM32 看门狗(八)

看门狗,又叫watchdog timer,是一个定时器电路,一般有一个输入,叫喂狗(kicking the dog/service the dog),一个输出到MCU的RST端,MCU正常工作的时候,每隔一段时间输出一个信号到喂狗端,给 WDT清零,如果超过规定的时间不喂狗(一般在程序跑飞时),WDT定时超过,就会给出一个复位信号到MCU,使MCU复位。防止MCU死机. 看门狗的作用就是防止程序发生死循环,或者说程序跑飞。

持续学习,不停歇 2682

SGM706硬件看门狗电路设计实战指南

硬件看门狗是嵌入式系统可靠启动与运行的关键保障,其核心原理在于通过独立于主控的模拟电路实时监控电源电压、程序执行状态及外部复位信号,并在异常时触发强制硬复位。相比软件看门狗,硬件方案具备毫秒级响应、不依赖CPU时钟、抗死锁等不可替代的技术价值,广泛应用于工业控制、车载电子、医疗设备等高可靠性场景。SGM706作为经典低功耗电压监控芯片,集成了POR上电复位、看门狗定时器和手动复位三重功能,但实际工程中需深度匹配MCU复位时序、严控PCB布局噪声、精准设定外围阻容参数——尤其在电压阈值漂移、WDI防误触发、R

weixin_32349093的博客 161

PROTEUS在ARM看门狗定时器实验中的应用

在IT领域,尤其是硬件开发和嵌入式系统设计,模拟软件工具对于开发周期来说是不可或缺的。PROTEUS是一款强大的电路仿真软件,它能够提供从简单的数字电路到复杂的模拟电路和微控制器系统的仿真。PROTEUS不仅能模拟电路的功能,还能测试电路板设计的物理布局,是硬件工程师进行电路设计验证的重要工具。看门狗定时器(Watchdog Timer,WDT)是一种在微控制器(MCU)中广泛应用的安全机制,它的存在是为了防止程序运行出现异常,如死循环、程序跑飞等。

weixin_30248619的博客 742

看门狗配置以及计算详解

https://blog.youkuaiyun.com/weixin_44612435/article/details/113500920

liaoshufangfang的博客 651

基于STM32平衡小车设计

随着智能硬件的发展,基于STM32的两轮智能平衡车作为一种新型的智能移动工具,具备较高的应用价值。本文旨在设计并实现一款基于STM32微控制器的智能平衡车系统,提升其稳定性和操控性,探索如何通过传感器数据和控制算法实现精确平衡控制。 本设计基于STM32微控制器,选择了STM32F103系列作为核心控制器,具有足够的处理能力和丰富的外设接口。系统通过MPU6050传感器获取三轴加速度和三轴陀螺仪数据,实现实时姿态检测。电机驱动部分采用合适的驱动模块,能够控制两个直流电机,并支持PWM调速。设计中还包括OL

m0_74026776的博客 2731

看门狗电路设计

那么电源的上电时间,一般是几百个微秒到几个毫秒之间,所以说200个毫秒的时间就可以保证我的其他持续的电源也都完成上电,进入这种正常工作的状态。硬件看门狗芯片,Watch DogTimer,可用于受到电气噪音、电源故障、静电放电等影响(造成软件运行进入死循环,或者卡死)的应用,当主控芯片程序运行异常时(一段时间主控芯片没有在特定“喂狗”引脚输出波形变化0一1或1一0),看门狗芯片拉低RESETN引脚复位主控芯片,让主控芯片重新加载运行看门狗的引脚定义与时序。就是芯片在刚上电的时候,它的这个输入电流会非常大。

weixin_41226265的博客 4083

ODS 与模态分析

模态分析不是通过现有的 FRF 来“推测”或“估计”其他模态参数,而是通过测量和分析 FRF 来。

轩辕霸天L 1261

Solidworks曲面建模学习(二)——3D草图

本文主要是演示有一些零件在solidworks中通过3D草来绘制会更加方便。

东东不熬夜的博客 9513

工业级ARM7硬件看门狗电路设计详解

详解基于ARM7的工业级硬件看门狗电路设计,深入浅出arm7架构特性与实际应用,结合可靠性需求解析关键电路实现方法,为嵌入式系统稳定运行提供保障。

weixin_28888459的博客 385

利用Matlab绘制非线性系统相图:从理论到实践

本文详细介绍了如何利用Matlab进行非线性系统的相图绘制与相平面分析。从理论基础的状态空间转换出发,通过无阻尼线性谐振子和范德波尔振荡器等实例,手把手演示了使用ode45求解器绘制相图、分析平衡点与极限环的完整流程,并分享了方向场绘制、参数分岔探索及常见错误解决方案等高级技巧,为动力学系统分析与控制设计提供了直观强大的可视化工具。

yhn456789的博客 908

STM32独立看门狗电路设计与代码实现教程

本文详细介绍STM32独立看门狗(IWDG)的工作原理、超时时间计算方法及HAL库代码实现,涵盖复位源检测、喂狗策略和常见工程陷阱,帮助开发者提升嵌入式系统稳定性。

weixin_42571280的博客 389

通过WorkVisual连接KUKA机器人的具体方法

通过WorkVisual连接KUKA机器人的具体方法

Robot_PLC_HMI_Automation 6849

万字长文介绍ARINC 653,以及在综合模块化航空电子设备(IMA)中的作用

ARINC 653 在综合模块化航空电子设备(IMA)的发展进程中扮演着极为关键的角色。从行业应用的实际情况来看,空客 A380 和波音 787 等先进飞机的航电系统套件充分体现了行业对 IMA 的高度重视和积极投入。在 IMA 架构下,核心软件具备强大的能力,能够支持多个航空电子应用程序的同时运行。这些应用程序可以并行开发,并高效地部署在同一个计算平台上,极大地提高了开发效率和系统集成度。ARINC 653 的出现为航空电子行业创造了一个充满活力和竞争力的商业环境。

2957

嵌入式系统守护神:看门狗电路设计实战与关键时序解析

本文深入解析嵌入式系统中看门狗电路的设计实战与关键时序,以TPV6823芯片为例,详细讲解其引脚功能、时序参数及多电源系统协同设计。通过实际案例分享抗干扰设计和软件喂狗策略,帮助工程师提升系统稳定性与可靠性,解决嵌入式系统死机等常见问题。

weixin_30919429的博客 484

Kubernetes(K8s)从入门到精通系列之一:一篇文章了解K8s全部核心知识点

Kubernetes(K8s)从入门到精通系列之一:一篇文章了解K8s全部核心知识点

zhengzaifeidelushang的博客 850

户外机器人硬件看门狗电路设计与功耗优化实践

本文详细探讨了户外机器人硬件看门狗电路设计,重点介绍了TPL5010芯片的低功耗特性和高可靠性。通过精确的定时电阻计算、防误触电路设计和电源管理策略,有效提升户外机器人在恶劣环境下的系统稳定性和续航能力,为硬件开发者提供实用解决方案。

ice55的博客 158

淘系商品的成长密码:历史与趋势透视

本文分析了淘系商品的发展历程,从早期的市场探索到如今的行业领先地位,深入探讨了技术创新、供应链优化、用户需求洞察等关键因素在淘系商品成功中的作用。通过对平台不断完善商品生态、提升购物体验和服务的过程分析,文章总结了淘系商品在竞争激烈的市场中如何通过创新应对挑战并推动电商行业的进步。未来,随着消费趋势变化和新兴模式的兴起,淘系商品将在更大范围内发挥其市场影响力。

曾经“等你生日那天”都遥远得像未来,如今却可欢愉的挥手说“下个十年见” 6万+

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

TPL5010硬件看门狗在IoT设备中的低功耗守护策略

本文详细介绍了TPL5010硬件看门狗在IoT设备中的低功耗应用策略。通过分析其仅35nA的超低功耗特性,结合WAKE和DONE信号交互优化、抗干扰设计和动态间隔调整等技术,为智能家居、环境监测等物联网设备提供可靠的系统守护方案,显著延长电池续航时间。

tgb34567890的博客 967

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

上一篇: Android 14 中 PowerManagerService 从深度休眠到浅休眠的触发机制与优化策略
下一篇: 从原理到实战:有源与无源晶振的选型决策树
sql99
博客等级 码龄19年 168粉丝 1905原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值