ADC 模拟监控器配置与应用
1. 功能介绍ADC 模拟监控器用于自动判断 ADC 转换结果是否超出设定范围。通常情况下软件需要不断读取 ADC 数据再判断数值是否过高或过低使用模拟监控器后这一比较工作可以由硬件完成。当转换结果低于低阈值或高于高阈值时ADC 会产生监控事件并可进一步触发中断。该功能适合电源过压与欠压检测、温度保护、电流检测以及传感器异常报警等场景。需要注意的是模拟监控器比较的是已经完成的 ADC 转换结果因此必须先启动 ADC 转换它不能脱离 ADC 独立监测输入电压。与软件轮询相比模拟监控器可以减少重复读取和比较操作CPU 只需在输入越界时处理异常。不过监控响应速度仍与 ADC 采样周期有关转换越频繁越界被发现得越及时转换间隔越长功耗可能越低但响应也会变慢。因此应根据应用的实时性要求选择转换触发周期。2. 相关寄存器2.1 ADC_AMOCR 配置寄存器当 AMOSGL 使能时AMOCH 用于指定监控的 ADC 通道其编码与 ADC_RSQRx 寄存器中 SEQ 域的通道编码相同。AMOIE 只控制中断请求若要使 CPU 真正进入中断服务程序还需要在 PLIC 中使能对应的 ADC 中断。2.2 ADC_AMOHR 高阈值寄存器2.3 ADC_AMOLR 低阈值寄存器3. 示例程序分析示例程序将 ADC0 设置为 12 位、无符号、右对齐格式使能常规转换组并禁用注入转换组。模拟监控器的主要代码如下ADC_AmoStructure.ADC_AmoInterruptEn ENABLE; ADC_AmoStructure.ADC_AmoRegularEn ENABLE; ADC_AmoStructure.ADC_AmoInjectEn DISABLE; ADC_AmoStructure.ADC_AmoSingleModeEn ENABLE; ADC_AmoStructure.ADC_AmoSingleChannel ADC_CH_1; ADC_AmoStructure.ADC_AmoUpThreshold 3000; ADC_AmoStructure.ADC_AmoLowThreshold 1000; ADC_ConfigAMO(ADC0, ADC_AmoStructure);该配置表示只监控 ADC0 常规转换组中的通道 1允许范围为 10003000并使能模拟监控中断。当转换结果低于 1000 或高于 3000 时ADC0 产生中断。对于 12 位 ADC电压与数字码的理想换算关系为Vin ADC码 × Vref / 4095若参考电压为 3.3 V则数字码 1000 和 3000 分别约对应 0.806 V 和 2.418 V。因此示例的理论电压窗口约为 0.8062.418 V。实际值还会受到参考电压和 ADC 转换误差影响。主程序每隔 500 ms 启动一次软件转换因此输入信号持续越界时程序可能每隔约 500 ms 产生一次监控中断。中断服务程序如下void ADC0_IRQ_Handler(void) { printf(IRQ AMO \r\n); ADC_ClearFlag(ADC0, ADC_FLAG_AMO, ADC_CH_1); }程序进入中断后输出提示信息并清除通道 1 的模拟监控标志。清除标志十分重要否则可能反复进入中断。实际产品中应尽量减少中断内的打印操作可在中断中只设置异常标志再由主程序完成后续处理。推荐的配置顺序是打开 ADC、GPIO 和 PLIC 时钟配置模拟输入引脚与 ADC 通道设置数据格式及高低阈值选择监控模式清除已有标志最后使能中断并启动转换。先设置阈值、后开放中断可以减少初始化期间出现意外中断的可能。4. 实验现象实验中将可调电压接入 ADC0 通道 1。当 ADC 结果处于 10003000 之间时不产生模拟监控中断当结果超出该范围时串口终端输出 IRQ AMO。串口输出 IRQ AMO图中连续出现 IRQ AMO说明 ADC 转换结果处于阈值窗口之外模拟监控器已经触发中断中断服务程序也能够正常执行。由于输入可能持续越界并且程序周期性启动 ADC 转换因此终端会重复输出相同信息。为了进一步验证功能可以分别测试低于低阈值、处于正常窗口和高于高阈值三种输入状态并同时打印 ADC 原始值。这样能够更加准确地确认上下阈值是否配置正确。输入信号在阈值附近波动时ADC 结果可能在边界两侧跳动并连续触发中断。可在输入端增加适当的 RC 滤波或者在软件中连续多次检测到越界后再确认故障。若被测电压高于 ADC 引脚允许范围还必须先进行电阻分压不能将高压直接接入 ADC 引脚。5. 典型应用在电源监控中可将允许的最低和最高电压换算为 ADC 数字码发生欠压或过压时关闭负载在温度监控中可把温度传感器安全范围对应的电压设置为窗口阈值越界时启动风扇或降低系统功率电流、压力和液位传感器也可以采用相同方法实现异常报警。对于重要保护系统模拟监控器可作为快速告警手段并与硬件保护和软件诊断配合使用。6. 总结AS32C601 ADC 模拟监控器使用 ADC_AMOCR 选择监控模式和通道使用 ADC_AMOHR 与 ADC_AMOLR 设置上下阈值。当指定通道的转换结果越界时硬件可以自动产生状态标志和中断。该功能配置简单能够减少软件轮询适合电压、温度和其他传感器信号的范围检测。