打印
[应用方案]

MG32F02A ADC 窗口监测功能解析

[复制链接]
305|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
呈兴|  楼主 | 2025-3-27 14:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1. ADC 窗口监测功能简介
MG32F02A 系列 MCU 内置的ADC(模数转换器)支持窗口监测功能(Window Monitoring),可以在采集模拟信号时自动监测输入值是否超出预设的上下限范围,并触发相应的事件或中断。该功能适用于:

电池电压监测(检测电压是否过高或过低)

传感器阈值检测(温度、压力、光照等)

电机控制保护(防止电流过载)

2. ADC 窗口监测功能原理
窗口监测(AWD,Analog Watchdog)在 ADC 采样过程中自动比较转换结果,当 ADC 采样值超出或进入预设的上下限时,可触发中断或事件,无需 CPU 参与,从而提升系统效率。

窗口监测的关键参数:

ADC_THL (Threshold Low):ADC 采样值的下限,低于该值时触发事件。

ADC_THH (Threshold High):ADC 采样值的上限,超过该值时触发事件。

ADC_WM0 (Window Mode 0):

0: 仅在超出窗口范围时触发(默认)

1: 仅在窗口范围内时触发

3. 配置 ADC 窗口监测
(1)初始化 ADC
c
复制
编辑
#include "MG32x02z.h"

// 设置 ADC 窗口监测阈值
#define ADC_LOW_THRESHOLD   1000  // ADC 低阈值
#define ADC_HIGH_THRESHOLD  3000  // ADC 高阈值

void ADC_Init(void) {
    // 使能 ADC 时钟
    APB1CLK |= (1 << APB1EN_ADC);

    // 选择 ADC 通道(例如 AIN0)
    ADC0->CR0 &= ~ADC_CR0_MDEN;     // 关闭深度模式
    ADC0->CR1 = (0x01 << ADC_CR1_SEL_Pos); // 选择 AIN0

    // 设置 ADC 采样时间
    ADC0->CLK = (3 << ADC_CLK_DIV_Pos);  // 分频设置,提高转换速度

    // 设置 ADC 窗口监测上下限
    ADC0->THL = ADC_LOW_THRESHOLD;   // 低阈值
    ADC0->THH = ADC_HIGH_THRESHOLD;  // 高阈值

    // 使能 ADC 窗口监测中断
    ADC0->INT |= (1 << ADC_INT_WDTF);

    // 使能 ADC
    ADC0->CR0 |= ADC_CR0_ADEN;
}
(2)配置中断
在 ADC 采样时,若数据超出阈值,则会触发 ADC 窗口监测中断(ADC_WDTF)。

c
复制
编辑
void ADC_WDT_IRQHandler(void) {
    if (ADC0->STA & (1 << ADC_STA_WDTF)) {  // 确认 ADC 窗口监测中断
        uint16_t adc_value = ADC0->DATA;    // 读取 ADC 数据

        if (adc_value < ADC_LOW_THRESHOLD) {
            // 低于下限值,执行低电压保护
        } else if (adc_value > ADC_HIGH_THRESHOLD) {
            // 高于上限值,执行过压保护
        }

        ADC0->STA |= (1 << ADC_STA_WDTF);  // 清除中断标志
    }
}
(3)主循环读取 ADC
c
复制
编辑
void main(void) {
    ADC_Init();  // 初始化 ADC

    while (1) {
        ADC0->CR0 |= ADC_CR0_ADST;  // 启动 ADC 采样
        while (!(ADC0->STA & (1 << ADC_STA_ADIF)));  // 等待转换完成
        uint16_t adc_value = ADC0->DATA;  // 读取 ADC 值

        if (adc_value < ADC_LOW_THRESHOLD) {
            // 低电压报警
        } else if (adc_value > ADC_HIGH_THRESHOLD) {
            // 高电压报警
        }
    }
}
4. 结论
MG32F02A MCU 的 ADC 窗口监测功能可以实时监测输入电压,当信号超出设定范围时自动触发中断,从而实现低功耗、高效的自动监控系统。适用于:

电池电量检测

过流/欠压保护

温度监测

环境监控

通过本教程,你可以灵活运用窗口监测功能,提高系统响应速度,降低 CPU 负载。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

24

主题

147

帖子

0

粉丝