这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 企业专区 » Microchip » Chaos-nano在压力容器监控系统中的项目应用

共1条 1/1 1 跳转至

Chaos-nano在压力容器监控系统中的项目应用

菜鸟
2025-11-15 19:37:58     打赏
Chaos-nano 在压力容器监控系统中的项目应用一、系统整体架构与核心组件解析

Chaos-nano 压力容器监控系统以ATMEGA328p 单片机为控制核心,整合了硬件执行、环境感知、人机交互三大模块,形成闭环式压力容器压力与环境监控能力,各核心组件功能与作用如下:

组件类别具体设备核心功能技术参数与连接方式
执行设备充气泵(压缩机)为压力容器补气,维持压力稳定由 COMPRESSOR_PIN(引脚 4)控制,支持高低电平切换启停,单次连续工作不超过 30 秒
执行设备泄气阀当压力超标时释放多余气体,避免安全风险由 BLEED_PIN(引脚 3)控制,支持高低电平切换启停,单次连续工作不超过 2 秒
传感器气压传感器实时采集压力容器内部压力数据输出模拟 / 数字信号,通过单片机 AD 转换或专用接口传输数据,采样周期可通过系统设置
传感器温湿度传感器监测压力容器周围环境温湿度,规避环境影响风险采用单总线协议,周期性采样,数据精度达 ±2℃(温度)、±5% RH(湿度),超标时触发报警
人机交互串口屏显示实时数据(压力、温湿度)+ 支持参数设置通过串口与 ATMEGA328p 通信,可设置压力上下限、温湿度报警阈值、传感器采样周期
报警设备蜂鸣器温湿度超标时发出声报警,提醒工作人员干预低功耗有源蜂鸣器,由单片机 IO 口直接控制,报警音量≥60dB

系统框图

二、系统工作流程细化

系统以 “压力稳定控制” 和 “环境风险预警” 为核心目标,工作流程分为数据采集 - 逻辑判断 - 执行控制 - 交互反馈四个阶段,具体步骤如下:

  1. 数据采集阶段

  • 气压传感器:按照预设周期(如 1 秒 / 次)采集压力容器内部压力,将原始数据传输至单片机缓冲区,标记 “压力数据就绪” 状态。

  • 温湿度传感器:同步周期性(如 2 秒 / 次)采集环境温湿度,数据传输至缓冲区后,标记 “温湿度数据就绪” 状态。

  • 数据触发机制:任一传感器完成采集并标记就绪后,立即唤醒 “传感器数据处理任务(TASK_ID_SENSOR_HANDLE)”,避免数据堆积。

  1. 逻辑判断阶段

  • 压力数据处理:传感器数据处理任务读取气压数据,与串口屏预设的 “压力上限”“压力下限” 对比。

    • 若压力<下限:判定为 “压力不足”,触发充气泵启动逻辑。

    • 若压力>上限:判定为 “压力超标”,触发泄气阀启动逻辑。

    • 若压力在上下限之间:判定为 “压力正常”,不执行任何执行设备操作。

  • 温湿度数据处理:读取温湿度数据,与预设的 “温度报警阈值”、“湿度报警阈值” 对比。

    • 若温度>上限或湿度>上限:判定为 “环境超标”,触发蜂鸣器报警,直至数据恢复正常或人工干预。

    • 若温湿度均在正常范围:判定为 “环境正常”,关闭蜂鸣器(若此前报警)。

  1. 执行控制阶段

  • 充气泵控制:启动后,系统同步启动 “压缩机控制任务(TASK_ID_DEV_COMPRESSOR)”,该任务通过定时器(DELAY_MS=30 秒)控制充气泵工作时长。

    • 定时器每 30 秒触发一次状态反转:若充气泵当前为开启,则关闭;若为关闭,则开启(避免持续工作过热)。

    • 当气压传感器检测到压力回升至正常范围时,系统调用 Compressor::on (false),关闭压缩机、取消压缩机定时器并阻塞压缩机控制任务。

  • 泄气阀控制:启动后,“泄气阀控制任务(TASK_ID_DEV_BLEED)”,该任务通过定时器(DELAY_MS=2 秒)控制泄气阀工作时长。

    • 定时器每 2 秒触发一次状态反转:若泄气阀当前为开启,则关闭;若为关闭,则开启(避免持续工作过热)。

    • 当气压传感器检测到压力回升至正常范围时,系统调用 Temp_Humd::on (false),关闭泄气阀、取消泄气阀定时器并阻塞泄气阀控制任务。

  1. 交互反馈阶段

  • 数据显示:串口屏实时刷新显示气压(单位:kPa/PSI,可通过设置切换)、温度(单位:℃/℉)、湿度(单位:% RH),以及各执行设备当前状态(充气泵:开 / 关;泄气阀:开 / 关;蜂鸣器:报警 / 正常)。

  • 参数设置:用户通过串口屏按键输入新的 “压力上/下限”、“温湿度阈值”、“采样周期”,数据通过串口传输至单片机,更新系统控制参数,无需重新烧录程序。

三、软件架构与任务调度机制

系统基于 Arduino 开发环境,搭载 Chaos-nano 操作系统,采用 “任务化” 设计,将功能拆解为 6 个独立任务,通过优先级调度实现高效协同。

3.1 任务分类与优先级设定

Chaos-nano 系统将任务分为 “设备任务” 和 “用户任务” 两类,其中设备任务优先级高于用户任务,确保执行设备(充气泵、泄气阀)的控制响应速度。

任务 ID任务名称任务类型核心功能优先级触发方式
TASK_ID_DEV_BLEED泄气阀控制任务设备任务通过定时器控制泄气阀启停,防止泄气阀工作过热0泄气阀设备打开时触发任务(工作 2 秒,休息 2 秒)
TASK_ID_DEV_COMPRESSOR压缩机控制任务设备任务通过定时器控制压缩机启停,防止压缩机工作过热1压缩机设备打开时触发任务(工作 30 秒,休息 30 秒)
TASK_ID_SENSOR_TEMP_HUMD温湿度检测任务设备任务周期性采集温湿度数据,存入缓冲区2系统定时器周期性触发(如 2 秒 / 次)
TASK_ID_SENSOR_BAROMETRIC气压检测任务设备任务周期性采集气压数据,存入缓冲区3系统定时器周期性触发(如 0.5 秒 / 次)
TASK_ID_SENSOR_HANDLE传感器数据处理任务用户任务读取缓冲区数据,判断是否触发执行逻辑4传感器数据就绪时唤醒
TASK_ID_USER_DISP屏幕交互任务用户任务处理串口屏数据显示与参数设置指令5串口屏有数据输入时被串口中断触发
3.2 核心任务代码逻辑解析(1)主任务调度逻辑(loop 函数)

主函数通过 “获取下一个高优先级任务→执行任务→状态重置” 的循环,实现任务调度,核心逻辑如下:

void loop() {
 // 1. 获取当前最高优先级的任务ID
 int8_t pri = task.getNextPriority();
 // 2. 根据任务ID执行对应逻辑
 switch (pri) {
   case TASK_ID_DEV_BLEED:
     // 执行泄气阀控制逻辑(防止泄气阀过热损坏)
     bleed.loop();
     break;
   case TASK_ID_DEV_COMPRESSOR:
     // 执行充气泵控制逻辑(防止压缩机过热损坏)
     compressor.loop();
     break;
   case TASK_ID_SENSOR_TEMP_HUMD:
     // 采集温湿度数据,若采集成功,唤醒数据处理任务
     sensor_th = th.loop();
     if (sensor_th) {
       task.runOnce(TASK_ID_SENSOR_HANDLE);
     }
     break;
   case TASK_ID_SENSOR_BAROMETRIC:
     // 采集气压数据,若采集成功,唤醒数据处理任务
     sensor_pressure = barometric.loop();
     if (sensor_pressure) {
       task.runOnce(TASK_ID_SENSOR_HANDLE);
     }
     break;
   case TASK_ID_SENSOR_HANDLE:
     // 数据处理任务会一次把所有的数据都处理完,所以来新数据后只需要执行一次
     task.stopOnce(TASK_ID_SENSOR_HANDLE);
     // 处理气压数据:判断是否需要启停充气泵/泄气阀
     if (sensor_pressure) {
       float pressure = barometric.get();
       sensor_pressure = false;
       Serial.print("n[main:] pressure = ");
       Serial.println(pressure);
       sensor_handle_pressure(pressure); // 压力控制逻辑函数
     }
     // 处理温湿度数据:判断是否需要触发蜂鸣器报警
     if (sensor_th) {
       sensor_th = false;
       float temp = th.get_temp();
       float humd = th.get_humd();
       Serial.print("n[main:] temp = ");
       Serial.println(temp);
       Serial.print("n[main:] humd = ");
       Serial.println(humd);
       sensor_handle_temp_humd(temp, humd); // 温湿度报警逻辑函数
     }
     break;
   case TASK_ID_USER_DISP:
     // 处理串口屏交互:读取用户输入的参数,更新系统设置
     Serial.println("[main:] TASK_ID_USER_DISP");
     char inChar;
     while (Serial.available()) {
       inChar = (char)Serial.read();
       Serial.print("revc: ");
       Serial.println(inChar);
       disp_handle(&inChar); // 串口屏数据处理函数(如解析参数、更新显示)
       task.stopOnce(TASK_ID_USER_DISP); // 处理完成后停止任务
       break;
     }
     break;
   default:
     // 当所有任务都执行一遍后恢复默认状态是非阻塞态的任务;
     // 模拟 CFS 调度,防止低优先级任务被饿死
     task.restoreAll();
     // 如果没有可执行的任务则系统进入到低功耗状态
     if (IDLE_PRI != task.getNextPriority()) {
       sleep_cpu();
     }
     break;
 }
}
(2)充气泵控制代码逻辑(compressor.h/.cpp)

充气泵控制类(Compressor)封装了引脚初始化、启停控制、状态监测功能,核心逻辑依赖定时器实现 “30 秒状态反转”,避免设备持续工作损坏。

  • compressor.h:定义类接口,包括初始化(setup)、启停控制(on)、状态获取(state)、循环执行(loop)函数,确保其他模块可调用充气泵控制功能。

  • compressor.cpp:实现类功能,关键逻辑如下:

    • 开启(b=true):设置充气泵引脚为高电平(ON),启动压缩机控制任务,创建 30 秒定时器,标记当前状态为开启(mState=true)。

    • 关闭(b=false):取消定时器,设置引脚为低电平(OFF),阻塞压缩机控制任务,标记状态为关闭(mState=false)。

    1. 初始化(setup):设置引脚 4 为输出模式,初始状态为关闭(OFF),重置标志位(flag、mState)。

    2. 启停控制(on):

    3. 循环执行(loop):定时器每 30 秒触发 flag 置位,触发后反转充气泵状态(开→关 / 关→开),并重新创建定时器,实现周期性状态切换。

    4. 定时结束标志位(flag):当定时结束后,延迟函数会设置该标志位(flag)为 true,用于任务判断自身是否被定时器唤醒。

四、系统关键特性与优势
  1. 高可靠性:通过高优先级设备任务(充气泵、泄气阀控制)确保执行设备快速响应,避免设备过热损坏导致的风险;温湿度报警功能可提前规避环境对压力容器的影响;压力传感器检测频率高和根据充气泵的流量来综合考虑,可以将压力检测的优先级适当降低而不会影响整体系统的安全性。

  2. 低功耗设计:无可执行任务时,CPU 进入休眠模式(sleep_cpu ()),降低系统整体功耗,适合长期无人值守场景。

  3. 灵活可配置:用户可通过串口屏实时修改压力上下限、温湿度阈值、采样周期,无需连接电脑重新烧录程序,适配不同规格压力容器的监控需求。

  4. 故障自保护:充气泵和泄气阀通过定时器周期性反转状态,避免持续工作过热损坏;传感器数据采集失败时,系统不会误触发执行逻辑,提升运行稳定性。


五、 产品工作视频





关键词: Chaos-nano     Arduino     操作系统         

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]