[PIC®/AVR®/dsPIC®产品] Chaos-nano 在压力容器监控系统中的项目应用

[复制链接]
3006|4
kongrong 发表于 2025-11-18 08:41 | 显示全部楼层 |阅读模式
[i=s] 本帖最后由 kongrong 于 2025-11-18 08:43 编辑 [/i]

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

一、系统整体架构与核心组件解析

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

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

image.png

二、系统工作流程细化

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

  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:实现类功能,关键逻辑如下:
    1. 初始化(setup):设置引脚 4 为输出模式,初始状态为关闭(OFF),重置标志位(flag、mState)。
    2. 启停控制(on):
      • 开启(b=true):设置充气泵引脚为高电平(ON),启动压缩机控制任务,创建 30 秒定时器,标记当前状态为开启(mState=true)。
      • 关闭(b=false):取消定时器,设置引脚为低电平(OFF),阻塞压缩机控制任务,标记状态为关闭(mState=false)。
    3. 循环执行(loop):定时器每 30 秒触发 flag 置位,触发后反转充气泵状态(开→关 / 关→开),并重新创建定时器,实现周期性状态切换。
    4. 定时结束标志位(flag):当定时结束后,延迟函数会设置该标志位(flag)为 true,用于任务判断自身是否被定时器唤醒。

四、系统关键特性与优势

  1. 高可靠性:通过高优先级设备任务(充气泵、泄气阀控制)确保执行设备快速响应,避免设备过热损坏导致的风险;温湿度报警功能可提前规避环境对压力容器的影响;压力传感器检测频率高和根据充气泵的流量来综合考虑,可以将压力检测的优先级适当降低而不会影响整体系统的安全性。
  2. 低功耗设计:无可执行任务时,CPU 进入休眠模式(sleep_cpu ()),降低系统整体功耗,适合长期无人值守场景。
  3. 灵活可配置:用户可通过串口屏实时修改压力上下限、温湿度阈值、采样周期,无需连接电脑重新烧录程序,适配不同规格压力容器的监控需求。
  4. 故障自保护:充气泵和泄气阀通过定时器周期性反转状态,避免持续工作过热损坏;传感器数据采集失败时,系统不会误触发执行逻辑,提升运行稳定性。

五、 产品工作视频

https://github.com/Chaos2025/Chaos-nano/blob/main/pic/product_show.gif

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| kongrong 发表于 2025-11-21 09:24 | 显示全部楼层
Chaos-nano操作系统的代码和文档已经移植到了gitee上,有兴趣的可以多多指教。https://gitee.com/kongrong77/Chaos-nano
 楼主| kongrong 发表于 2025-11-25 09:18 | 显示全部楼层
关于 Chaos-nano 操作系统的介绍参考 《Chaos-nano 协作式异步操作系统》 https://bbs.21ic.com/icview-3492733-1-1.html
cooldog123pp 发表于 2026-1-26 13:42 | 显示全部楼层
感觉现在用串口屏的项目原来越多了啊,确实减少了本身对mcu的要求,还能有很好的界面
雨下纪事 发表于 2026-1-30 10:21 | 显示全部楼层
Chaos-nano(基于 ATMEGA328p)用于压力容器监控,核心实现压力 / 温湿度实时采集、阈值判断与闭环控制:1 秒采压力、2 秒采温湿度,超压泄放、欠压补气,串口屏交互 + 声光报警,低功耗休眠唤醒,适配化工、能源等场景的安全监测与稳定控制。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

42

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部
0