0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何实现模拟看门狗?

工程师 来源:STM32 作者:逸珺 2020-10-23 14:51 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

作者:逸珺

转自:STM32

对于看门狗大家或许不陌生,但对于模拟看门狗有的朋友可能就不甚了解了。本文来聊聊模拟看门狗,旨在梳理相应的概念,理解模拟看门狗原理、与常规看门狗的异同点以及工程应用价值。

啥是看门狗?

一般来讲,单片机的看门狗可简单看成相对独立的两部分,即计时单元和监控单元。计时单元实现计数与重装。在计数过程中,软件可以适时对计数器的初始值进行重装,以防溢出。监控单元监视计时器的溢出事件,若计数器因未被软件适时重装而发生溢出,看门狗通常会执行复位动作,比如复位处理器

以STM32F4系列单片机独立看门狗IWDG( Independent watchdog)为例,看看其计时电路的功能架构:

我们再结合STM32的复位逻辑模块,来大致看看IWDG的复位控制过程。

当IWDG看门狗模块监测到计数溢出时,IWDG reset信号输出低,经过与逻辑电路触发脉冲发生器,产生一个正向窄脉冲以控制MOSFET在该脉冲宽度期间导通,并经由滤波电路产生系统复位事件信号,进而触发STM32复位。

上面大致介绍了常见的独立看门狗的功能及工作流程。那么STM32芯片的模拟看门狗是又怎么回事呢?跟上面提到的独立看门狗有关系吗?它是怎么工作的?

请继续阅读。。.。。

模拟看门狗

模拟看门狗跟上面提到的监控微处理器是否正常运行的独立看门狗没有关系,它是基于ADC外设应用的一个功能模块。它以类似于独立看门狗的方式进行工作, 只不过它监视的是模拟通道输入信号幅度,当监测到输入异常时会触发模拟看门狗事件。软件上基于模拟狗事件再进行相应的处理。

当我们在对模拟看门狗做初始化配置时,需事先设定看门狗要监视的模拟输入通道的输入阈值,即上下门限值【被监测模拟信号幅度对应的ADC值】。当模拟看门狗监测到输入信号电压超过阈值时,它将产生看门狗事件,并可以触发中断以运行相应处理代码。

如果说没有这个模拟看门狗,而我们又需要对模拟输入信号幅度做实时监测,往往会有两方面的方案。其一,我们通过软件方式,对ADC采样值进行代码轮询。显然,这会大大增加CPU的负荷,而且实时性也难以保证。其二,我们可以考虑额外设计硬件监控电路。比方,将模拟输入外接两个比较器,将模拟信号与外部产生的上下边界比较阈值进行比较(如下图),从而产生中断信号给单片机也能实现类似的实时功能需求。

那么,此时需要更多的外围器件并占用单片机额外的中断请求引脚。

不难看出,对于模拟输入信号幅度的监测,借助于STM32片内模拟看门狗可轻松实现硬件监测,既无须外扩硬件电路也无须软件轮询信号的合法性或安全性。同时,又大大减轻了CPU的负荷,并保证了对输入异常的实时响应。

模拟看门狗在哪里?

既然模拟看门狗是ADC模块的一部分功能单元,我们不妨以看看STM32F4系列的ADC框图。对于如何使用一个外设模块,首先浏览其功能框图无疑是个不错举措。我们可以从ADC模块的功能框图中找到模拟看门狗功能单元之所在。

有啥工程应用价值?

到此,我们知道模看门狗可监控模拟信号是否超界,据此我们可以想到这样一些应用场合:

供电电源超界检测。在产品开发中,常常需要实现较为智能的电源诊断。在一个产品的关键功能链中,电源是否异常往往需要格外关注。通常需要相应的诊断检测电路,以检测设备电源电压是否超出限定值,如超出限定值需做出诊断报警。这在工业产品、汽车电子、医疗器械中都有明确强制要求。

实现控制环路fail-safe模式。比如一个控制系统根据采集到的传感器信号来控制阀门的开度,以实现流量控制。或者一个速度控制系统,如果传感器信号异常,需要马上将设备置于功能安全状态,以避免造成经济损失或者带来人身伤害。还比如一个电机转速控制系统,如果电流传感器值超限,需要马上让电机停机等。

其实,需要做模拟监测的场合还很多,这里不多做列举。

代码怎么写呢?

下面给出大致参考例程,主要演示实现的基本思路和框架,细节根据项目相应需求完善。 顺便提醒,尽量基于 STM32CubeMx 来着手我们的 STM32 软件开发。

static void ADC_Config(void){ ADC_ChannelConfTypeDef sConfig; ADC_AnalogWDGConfTypeDef AnalogWDGConfig; /* 初始化 */ AdcHandle.Instance = ADCx; AdcHandle.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV1; /* 异步时钟模式,时钟不分频 */ AdcHandle.Init.Resolution = ADC_RESOLUTION_12B; /* 12位 */ AdcHandle.Init.DataAlign = ADC_DATAALIGN_RIGHT; /* 右对齐模式 */ AdcHandle.Init.ScanConvMode = DISABLE; /* Sequencer disabled (ADC conversion on only 1 channel: channel set on rank 1) */ AdcHandle.Init.EOCSelection = ADC_EOC_SINGLE_CONV; /* EOC标志指示转换结束 */ AdcHandle.Init.LowPowerAutoWait = DISABLE; /* 自动延迟转换功能禁用 */ AdcHandle.Init.ContinuousConvMode = DISABLE; /* 禁用连续模式,单次模式 */ AdcHandle.Init.NbrOfConversion = 1; AdcHandle.Init.DiscontinuousConvMode = DISABLE; AdcHandle.Init.NbrOfDiscConversion = 1; AdcHandle.Init.ExternalTrigConv = ADC_EXTERNALTRIG_T3_TRGO; /* Timer 3 触发 */ AdcHandle.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_RISING; /* 软件触发 */ AdcHandle.Init.DMAContinuousRequests = ENABLE; /* DMA 循环模式使能 */ AdcHandle.Init.Overrun = ADC_OVR_DATA_OVERWRITTEN; /* 如溢出DR寄存器将被最后的转换结果覆盖 */ AdcHandle.Init.OversamplingMode = DISABLE; /* 禁用过采样 */ if (HAL_ADC_Init(&AdcHandle) != HAL_OK) { /* 初始化错误处理 */ Error_Handler(); } /* 如ADC转换超出所设模拟看门狗窗口,则考虑到IT在每次ADC转换后发生,*/ /* 请选择足够长的采样时间和ADC时钟,以免在IRQHandler中产生开销。*/ sConfig.Channel = ADC_CHANNEL_5; /* 通道选择 */ sConfig.Rank = ADC_REGULAR_RANK_1; /* Rank 选择 */ sConfig.SamplingTime = ADC_SAMPLETIME_6CYCLES_5; /* 采样时间 */ sConfig.SingleDiff = ADC_SINGLE_ENDED; /* 单端输入模式 */ sConfig.OffsetNumber = ADC_OFFSET_NONE; /* 无偏移 */ sConfig.Offset = 0; /* 偏移禁用,该值无用 */ if (HAL_ADC_ConfigChannel(&AdcHandle, &sConfig) != HAL_OK) { /* 通道配置错误处理 */ Error_Handler(); } /* 设置模拟看门狗阈值 */ /* Analog watchdog 1 模拟看门狗配置 */ AnalogWDGConfig.WatchdogNumber = ADC_ANALOGWATCHDOG_1; AnalogWDGConfig.WatchdogMode = ADC_ANALOGWATCHDOG_ALL_REG; AnalogWDGConfig.Channel = ADCx_CHANNELa; AnalogWDGConfig.ITMode = ENABLE; AnalogWDGConfig.HighThreshold = (RANGE_12BITS * 5/8); AnalogWDGConfig.LowThreshold = (RANGE_12BITS * 1/8); if (HAL_ADC_AnalogWDGConfig(&AdcHandle, &AnalogWDGConfig) != HAL_OK) { /* 配置错误处理 */ Error_Handler(); } } void HAL_ADC_LevelOutOfWindowCallback(ADC_HandleTypeDef* hadc) { /* 看门狗错误处理,这里可以实现fail-safe需求*/ /* 1.比如关闭关键电路 */ /* 2.设置报警标志 */ /* 3.代码尽可能运行短 */ 。。.。。 ubAnalogWatchdogStatus = SET; } #define ADCCONVERTEDVALUES_BUFFER_SIZE 256 /* 数组aADCxConvertedValues[]大小 */ /* ADC转换结果 */ static __IO uint16_t aADCxConvertedValues[ADCCONVERTEDVALUES_BUFFER_SIZE]; static void start_adc(void){ /* 启动ADC以DMA模式运行 */ if (HAL_ADC_Start_DMA(&AdcHandle, (uint32_t *)aADCxConvertedValues, ADCCONVERTEDVALUES_BUFFER_SIZE ) != HAL_OK) { /* 启动错误处理 */ Error_Handler(); } }

总结

这里针对STM32芯片模拟看门狗的概念及原理做了较为清晰的介绍,它也算是STM32一个具有特色的功能模块。对于产品开发中需要进行模拟输入幅值监控的场合,使用它会非常便利。

责任编辑:haq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 电路图
    +关注

    关注

    10495

    文章

    10764

    浏览量

    557356
  • 单片机
    +关注

    关注

    6078

    文章

    45580

    浏览量

    673677
  • STM32
    +关注

    关注

    2313

    文章

    11195

    浏览量

    374652
  • 信号
    +关注

    关注

    12

    文章

    2930

    浏览量

    80408
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    探秘MAX6814:5引脚看门狗定时器电路的实用指南

    探秘MAX6814:5引脚看门狗定时器电路的实用指南 在电子系统设计中,可靠性是至关重要的。今天,我们将深入探讨Maxim Integrated推出的MAX6814,一款采用5引脚SC70封装
    的头像 发表于 03-26 14:50 167次阅读

    SGM819SxQ 汽车应用看门狗定时器电路解析

    SGM819SxQ 汽车应用看门狗定时器电路解析 在电子系统设计中,尤其是汽车、工业设备等对可靠性要求极高的领域,看门狗定时器电路是保障系统稳定运行的关键组件。今天我们就来详细了解一下
    的头像 发表于 03-24 10:10 197次阅读

    【瑞萨RA × Zephyr评测】多线程和看门狗

    本文章旨在评估使用 Zephyr RTOS 在 Renesas FPB-RA6E2 开发板上实现多线程调度与硬件看门狗功能的应用。评估内容包括任务调度、看门狗初始化流程、主程序逻辑的详细解析,以及实验现象与数据分析。
    的头像 发表于 01-10 10:23 2659次阅读
    【瑞萨RA × Zephyr评测】多线程和<b class='flag-5'>看门狗</b>

    什么是ADC模拟看门狗

    模拟看门狗功能,支持将 ADC 转换结果与用户设定的阈值进行比较,支持上阈值、下阈值、区间值比较,通过阈值寄存器 ADC_VTH 和 ADC_VTL 设置比较阈值。 模拟看门狗功能只在
    发表于 12-12 06:15

    中科芯CKS32F107XX系列MCU的独立看门狗介绍

    中科芯CKS32F107xx系列产品内部提供两个看门狗定时器单元,独立型看门狗IWDG(Independent Watchdog)和窗口型看门狗WWDG(Window Watchdog),它们在
    的头像 发表于 11-28 14:51 4012次阅读
    中科芯CKS32F107XX系列MCU的独立<b class='flag-5'>看门狗</b>介绍

    中科芯CKS32F107XX系列MCU的窗口看门狗介绍

    中科芯CKS32F107xx系列产品内部提供两个看门狗定时器单元,独立型看门狗IWDG(Independent Watchdog)和窗口型看门狗WWDG(Window Watchdog),本文主要介绍WWDG的应用,关于IWDG
    的头像 发表于 11-28 14:48 4316次阅读
    中科芯CKS32F107XX系列MCU的窗口<b class='flag-5'>看门狗</b>介绍

    “喂狗”的艺术:看门狗不叫,才是系统好

    看门狗选哪只好呢? 中间那只看起来不错。 咳咳搞错了,自动化项目中说的看门狗是PLC的看门狗,那这个有什么用呢?难道真的是看大门的
    的头像 发表于 11-25 10:50 430次阅读
    “喂狗”的艺术:<b class='flag-5'>看门狗</b>不叫,才是系统好

    既然有独立看门狗了,为啥还要窗口看门狗(WWDT),窗口看门狗的特色是什么?

    既然有独立看门狗了,为啥还要窗口看门狗(WWDT),窗口看门狗的特色是什么?
    发表于 11-21 06:42

    看门狗定时器、复位源、异常处理机制科普

    在嵌入式开发中,系统一旦“跑飞”,工程师最怕的不是bug,而是程序卡死无人知。这时,芯片自身的自我保护机制就至关重要。看门狗、复位源和异常处理机制,是保证系统可靠性的三大基石。本文带你梳理清楚它们
    的头像 发表于 11-17 10:53 1685次阅读
    <b class='flag-5'>看门狗</b>定时器、复位源、异常处理机制科普

    小安派BW21-CBV-Kit入门教程之看门狗简介

    这是一个简单的看门狗定时器(WDT)示例,演示了看门狗 API 的用法。 有关看门狗的定义和工作原理,请参阅以下信息。
    的头像 发表于 11-13 17:22 5215次阅读
    小安派BW21-CBV-Kit入门教程之<b class='flag-5'>看门狗</b>简介

    ADS7038 8通道、1MSPS、12位模数转换器(ADC)技术手册

    。 该ADS7038通过SPI兼容接口进行通信,并以自主或单次转换模式运行。该ADS7038使用具有可编程高低阈值、迟滞和事件计数器的数字窗口比较器,通过每个通道的事件触发中断来实现模拟看门狗功能。该ADS7038具有用于
    的头像 发表于 11-03 15:22 764次阅读
    ADS7038  8通道、1MSPS、12位模数转换器(ADC)技术手册

    ADS7128 小型 8 通道 12 位模数转换器技术手册

    看门狗功能。该ADS7128具有内置的循环冗余校验 (CRC),用于数据读/写作和上电配置。该ADS7128具有均方根 (RMS) 模块,可计算任何模拟输入通道的 16 位真实 RMS 结果。集成的过零检测 (ZCD) 模块允许在可配置阈值交叉点附近进行瞬态抑制和滞后。
    的头像 发表于 11-03 10:56 720次阅读
    ADS7128 小型 8 通道 12 位模数转换器技术手册

    ADS7138-Q1 汽车、8通道、140kSPS、12位模数转换器技术手册

    的事件触发中断来实现模拟看门狗功能。ADS7138-Q1 具有内置的循环冗余校验 (CRC),用于数据读/写作和上电配置。
    的头像 发表于 11-01 14:16 1275次阅读
    ADS7138-Q1 汽车、8通道、140kSPS、12位模数转换器技术手册

    ‌ADS7038/ADS7038H 数据手册完整总结

    。 该ADS7038通过SPI兼容接口进行通信,并以自主或单次转换模式运行。该ADS7038使用具有可编程高低阈值、迟滞和事件计数器的数字窗口比较器,通过每个通道的事件触发中断来实现模拟看门狗功能。该ADS7038具有用于
    的头像 发表于 10-23 10:39 635次阅读
    ‌ADS7038/ADS7038H 数据手册完整总结

    德州仪器TPS3436-Q1汽车级窗口看门狗定时器技术解析

    Texas Instruments TPS3436-Q1精密窗口看门狗定时器是一款超低功耗(250nA典型值)器件,提供可编程窗口看门狗定时器。TPS3436-Q1可提供具有多种功能的高精度超时
    的头像 发表于 08-18 14:54 1947次阅读
    德州仪器TPS3436-Q1汽车级窗口<b class='flag-5'>看门狗</b>定时器技术解析