打印
[MM32硬件]

如何通过灵动MCU内置比较器实现低电压报警?

[复制链接]
70|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
基本原理
模拟比较器比较两个输入电压信号:

正输入端(+):连接你想监测的电压,比如电池电压。

负输入端(-):连接一个参考电压(可用内部参考或DAC生成的电压)。

当正输入电压低于负输入参考电压时,比较器输出翻转,可触发中断或控制其他逻辑。

配置步骤
1. 开启比较器模块时钟
确保你开启了比较器所需的外设时钟(如 RCC 中的 COMP 时钟)。

2. 配置比较器输入
根据具体芯片型号(如MM32F103、MM32L073等),配置:

IN+(正输入) 接入电池或外部电压。

IN−(负输入) 选择内部参考电压或DAC输出(例如1.2V、2.0V等)。

示例(伪代码):

c
复制
编辑
COMP_InitStructure.INP = COMP_INP_IO;    // 外部电压输入
COMP_InitStructure.INM = COMP_INM_VREF;  // 内部参考电压
3. 配置参考电压源
若支持内部参考电压,可选择不同电压档位(如1.2V、2.0V)。

若芯片支持DAC输出给IN−,可精细调整报警电压阈值。

c
复制
编辑
DAC_SetChannel1Data(DAC_Align_12b_R, 2048); // 对应1.65V参考
4. 配置输出行为
可以输出到引脚供外部查看。

更常用的是中断模式,在比较结果变化时触发中断处理。

c
复制
编辑
COMP_ITConfig(COMP_Selection_COMP1, ENABLE);
NVIC_EnableIRQ(COMP1_IRQn);
5. 中断服务函数中处理报警
c
复制
编辑
void COMP1_IRQHandler(void) {
    if(COMP_GetITStatus(COMP_Selection_COMP1)) {
        // 电压低于阈值 —— 执行报警逻辑
        TriggerLowVoltageAlarm();
        COMP_ClearITPendingBit(COMP_Selection_COMP1);
    }
}
配置技巧与建议
滤波配置:为防止电压波动引起误判,建议配合比较器的**迟滞功能(hysteresis)**或软件防抖处理。

参考电压选择:使用内部DAC或VREF模块可灵活设定阈值电压,提升精度。

低功耗需求:比较器通常可在待机模式下运行,适合低功耗场景。

应用示例:低电压阈值为 3.0V
电池电压接 IN+。

内部DAC 设置为 3.0V(或接近)。

当电池电压下降至 3.0V 以下时,比较器输出翻转,系统触发报警。

使用特权

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

本版积分规则

23

主题

128

帖子

0

粉丝