1. 项目概述

高校公寓远程能源监控系统是面向校园后勤管理场景设计的嵌入式测控终端,核心目标在于解决传统公寓水电管理中人工抄表效率低、故障响应滞后、用能数据不可视、远程控制缺失等工程痛点。该系统并非概念验证原型,而是经过省级电子设计竞赛全流程评审(初赛→复赛→决赛)并获一等奖的完整硬件产品,具备工业级可靠性设计思维与可部署性。

系统采用“边缘采集+无线上传+云端协同+人机交互”四层架构:在边缘侧完成多源传感器数据采集、本地逻辑判断与执行器驱动;通过Wi-Fi模块实现稳定的数据上行与指令下行;依托中国移动ONENET物联网平台完成协议适配、数据持久化、权限管理与多端同步;最终通过Web界面与移动APP提供可视化监控与远程操作能力。整个系统以HT32F1656单片机为控制中枢,在资源受限条件下实现了高实时性、低功耗与强鲁棒性的统一。

该设计体现了典型的嵌入式系统工程方法论——以实际问题为导向,不追求技术堆砌,所有模块选型与电路设计均服务于功能闭环与现场可维护性。例如,未采用高成本NB-IoT模组而选用Wi-Fi方案,正是基于高校公寓普遍覆盖校园Wi-Fi网络的现实基础设施条件;选用串口屏而非RGB LCD,显著降低了主控MCU的图形驱动开销与软件复杂度;继电器控制回路加入光耦隔离与续流二极管,确保长期带载切换的电气安全性。

2. 硬件系统设计

2.1 主控单元:HT32F1656最小系统

HT32F1656是合泰半导体(Holtek)推出的基于ARM Cortex-M3内核的高性能32位单片机,主频高达72MHz,内置128KB Flash与16KB SRAM,集成丰富的外设资源,特别适合工业测控类应用。本系统选用该芯片主要基于以下工程考量:

  • 高精度模拟采集能力 :内置12位ADC,支持16路输入通道,满足电能计量芯片电压/电流采样、温度传感器信号读取等多路模拟量需求;
  • 丰富定时器资源 :包含4组通用定时器(含PWM输出)、1组基本定时器、1组高级控制定时器,可灵活分配给脉冲计数(水表/电表)、LED闪烁指示、看门狗喂狗等任务;
  • 强化通信接口 :集成2路UART(其中UART1支持IrDA模式)、1路SPI、1路I²C、1路USB Device,为Wi-Fi模块通信、串口屏驱动、EEPROM存储、USB调试等提供硬件支撑;
  • 宽温宽压工作范围 :-40℃~85℃工业级温度范围,2.0V~3.6V供电电压,适应公寓配电间等非恒温环境。

最小系统设计严格遵循Holtek官方参考设计规范:

  • 复位电路采用10kΩ上拉电阻+100nF滤波电容+手动复位按键,确保上电与异常时可靠复位;
  • 晶振电路使用8MHz外部HSE晶振,配合22pF负载电容,为系统提供高精度时钟基准;
  • 电源部分采用AMS1117-3.3V LDO稳压器,输入端配置47μF电解电容+100nF陶瓷电容进行低频与高频去耦,输出端同样配置10μF+100nF组合滤波,实测纹波<15mV;
  • SWD调试接口保留,引出SWCLK、SWDIO、GND、VDD四线,便于开发阶段在线调试与固件烧录。

2.2 电能信息采集模块

电能计量采用专用计量芯片ATT7022E,该芯片符合IEC61036标准,集成6路Σ-Δ ADC、数字信号处理引擎及电能脉冲输出,支持有功/无功/视在功率、电压/电流有效值、功率因数、频率等参数计算。

电路设计要点如下:

  • 电压采样通路:220V交流经精密电阻分压网络(R1=1MΩ, R2=10kΩ)降至约2.2V峰值,再经RC低通滤波(R=10kΩ, C=10nF)后接入ATT7022E的V1P/V1N引脚,截止频率约1.6kHz,有效抑制高频干扰;
  • 电流采样通路:采用锰铜分流器(0.001Ω/100A),两端微伏级差分信号经AD620仪表放大器放大100倍后送入V2P/V2N,增益误差<0.1%,温漂<0.5μV/℃;
  • 芯片配置:通过SPI接口配置ATT7022E工作于“有功功率+电压有效值+电流有效值”模式,输出频率为1000imp/kWh的CF脉冲,同时通过SPI周期性读取寄存器获取实时功率数据;
  • 校准机制:在PCB上预留校准跳线,支持硬件增益/偏置校准,出厂前通过标准电能表比对完成两点校准(空载、满载)。

2.3 用水信息采集模块

用水计量采用机械式干簧管水表,其叶轮旋转带动磁铁触发干簧管产生脉冲信号。该方案成本低、可靠性高、无需供电,广泛应用于校园基建改造项目。

信号调理电路设计为:

  • 干簧管输出为无源开关信号,直接接入HT32F1656的GPIO(配置为上拉输入);
  • 在GPIO与VDD之间接入10kΩ上拉电阻,干簧管闭合时拉低电平,断开时为高电平;
  • 为消除机械抖动,在软件中实现5ms消抖滤波(连续两次采样间隔≥5ms且电平一致才确认有效边沿);
  • 利用HT32F1656的输入捕获功能(ICAP)精确测量脉冲周期,结合水表标称脉冲常数(如10L/imp)实时计算瞬时流量与累计用水量。

2.4 继电器控制模块

系统配备4路独立继电器输出,分别控制公寓总进水阀、总进水阀备用、总进电回路、总进电回路备用,实现双冗余安全控制。

驱动电路采用三级隔离设计:

  • 第一级:HT32F1656 GPIO(3.3V TTL)经1kΩ限流电阻驱动S9013 NPN三极管基极;
  • 第二级:S9013集电极驱动PC817光耦输入端,实现MCU与高压侧完全电气隔离;
  • 第三级:PC817输出端驱动ULN2003达林顿阵列,其输出端连接5V继电器线圈(JZC-23F),继电器触点额定负载250VAC/10A;
  • 关键保护:继电器线圈两端并联1N4007续流二极管,吸收关断时产生的反向电动势;触点输出端预留压敏电阻(MOV)焊盘,用于抑制雷击或浪涌过电压。

该设计确保MCU系统在遭遇继电器感性负载干扰时仍能稳定运行,符合GB/T 17626.4(电快速瞬变脉冲群抗扰度)要求。

2.5 无线通信模块

Wi-Fi模块选用ESP-01S(基于ESP8266EX),通过UART1(PA9/PA10)与HT32F1656通信。选择该模块的核心工程依据是:高校宿舍楼普遍部署802.11b/g/n Wi-Fi网络,无需额外建设通信基础设施,且ESP8266 SDK成熟、AT指令集标准化程度高,大幅降低无线协议栈开发难度。

硬件接口设计:

  • UART电平匹配:ESP-01S为3.3V TTL电平,与HT32F1656原生兼容,无需电平转换;
  • 电源管理:ESP-01S峰值电流达200mA,单独由AMS1117-3.3V供电,输入端增加470μF电解电容应对瞬态电流需求;
  • 复位协同:ESP-01S的CH_PD引脚经10kΩ上拉至3.3V,EN引脚直连MCU GPIO,实现软件可控上电复位;
  • 天线布局:PCB顶层预留IPEX座子,外接2.4GHz PCB天线,天线净空区严格按ESP8266 Layout Guide要求设计(≥3mm无覆铜)。

2.6 显示与人机交互模块

终端显示采用3.5英寸串口TFT屏(型号:ST7789V驱动),分辨率为320×480,通过UART2(PB10/PB11)与HT32F1656通信。选择串口屏而非并口屏,根本原因在于大幅降低MCU资源占用:无需占用大量GPIO模拟8080时序,仅需两根UART线即可完成全部GUI操作,使HT32F1656得以将宝贵资源集中于数据处理与通信任务。

屏幕交互逻辑设计:

  • 屏幕初始化由MCU发送预定义AT指令序列完成(如 0xAA 0x01 0x00... );
  • UI界面元素(文本框、按钮、进度条)均通过指令创建,位置、颜色、字体大小可编程配置;
  • 触摸功能通过同一UART返回坐标数据,MCU解析后触发对应业务逻辑(如“断电”按钮按下即发送继电器关断指令);
  • 为提升响应速度,MCU对屏幕指令采用DMA+中断方式收发,避免阻塞主循环。

2.7 环境温度采集模块

采用DS18B20数字温度传感器,单总线(1-Wire)接口,仅需一根数据线(PB12)加5.1kΩ上拉电阻即可完成通信。其优势在于:

  • 独立供电模式下测温精度±0.5℃(-10℃~+85℃),满足公寓环境监测需求;
  • 支持多点组网,同一总线上可挂载多个传感器,便于后期扩展楼栋级温度分布图;
  • 内置64位ROM地址,杜绝地址冲突,简化多节点识别逻辑。

软件驱动采用标准1-Wire时序:初始化脉冲(480μs低电平)→存在脉冲检测(15-60μs低电平)→ROM命令(0x33)读取地址→功能命令(0x44)启动转换→延时750ms→再次初始化→读取暂存器(0xBE)获取12位温度值。

2.8 电源与存储模块

电源系统采用双路设计:

  • 主电源:DC12V输入,经LM2596-5.0降压至5V,为继电器、Wi-Fi模块、串口屏背光供电;
  • MCU核心电源:5V再经AMS1117-3.3V二次稳压,为HT32F1656、传感器、存储器供电;
  • 所有电源轨均配置π型滤波(电感+电容),关键芯片VDD引脚就近放置0.1μF陶瓷电容。

存储模块采用AT24C02 EEPROM(2Kbit),通过I²C总线(PB6/PB7)连接,用于保存以下关键参数:

  • 继电器状态(断电/通电)——掉电后恢复上次状态;
  • Wi-Fi配置(SSID/Password)——避免每次重启重新配网;
  • 计量校准系数(电压/电流增益)——出厂写入,长期有效;
  • 最近10条操作日志(时间戳+操作类型+执行结果)——辅助故障排查。

3. 软件系统设计

3.1 整体架构与任务划分

软件基于裸机(Bare-metal)开发,未使用RTOS,采用分层状态机(Hierarchical State Machine)与事件驱动(Event-driven)混合模型。主循环(main loop)作为调度中枢,各功能模块以“初始化→运行→错误处理”三段式封装,通过全局标志位与消息队列解耦。

核心任务划分如下:

  • 数据采集任务 :以1秒为周期,轮询ATT7022E、DS18B20、干簧管脉冲计数器,更新全局数据结构体;
  • 本地显示任务 :以200ms为周期刷新串口屏,动态更新用电量、用水量、当前功率、环境温度等字段;
  • Wi-Fi通信任务 :采用“连接→注册→上报→监听”状态机,每30秒向ONENET平台推送一次JSON格式数据包;
  • 指令解析任务 :持续监听Wi-Fi模块串口缓冲区,解析ONENET下发的控制指令(如 {"cmd":"relay","id":1,"state":0} ),执行继电器动作并反馈执行结果;
  • 看门狗任务 :独立定时器每5秒喂狗,若某任务卡死导致未按时喂狗,则硬件复位重启。

3.2 ONENET平台对接协议

系统采用ONENET标准MQTT协议接入,具体实现流程如下:

  1. 设备注册 :首次上电时,MCU生成唯一设备ID(基于芯片UID哈希),通过HTTP POST请求向ONENET API( /devices )注册设备,获取Product ID与Device ID;
  2. MQTT连接 :使用MQTT客户端库(精简版)连接ONENET Broker( mqtt://183.230.40.39:1883 ),Client ID为 product_id.device_id ,用户名/密码为ONENET分配的API Key;
  3. 数据上报 :构造JSON Payload:
{
  "datastreams": [
    {
      "id": "power",
      "datapoints": [{"value": 1254}]
    },
    {
      "id": "water",
      "datapoints": [{"value": 3250}]
    },
    {
      "id": "temp",
      "datapoints": [{"value": 26.5}]
    }
  ]
}

发布至Topic /$sys/{product_id}/{device_id}/thing/event/property/post ; 4. 指令订阅 :订阅Topic /$sys/{product_id}/{device_id}/thing/service/property/set ,接收云端下发的属性设置指令; 5. 心跳保活 :MQTT Keep Alive设为120秒,确保长连接稳定性。

3.3 关键算法实现

3.3.1 电能计量数据融合

ATT7022E提供有功功率(W)、电压有效值(V)、电流有效值(A)三路原始数据。系统在本地进行数据融合计算:

  • 实时功率 = ATT7022E读取值 × 校准系数(出厂标定)
  • 日用电量 = 对每秒功率值积分(∑P×Δt),单位:kWh
  • 功率因数 = 有功功率 / (电压有效值 × 电流有效值)

为防止积分漂移,每日0点自动清零日用电量计数器,并将上一日数据存入EEPROM备份。

3.3.2 水量脉冲防抖与累积

干簧管脉冲信号存在机械抖动,软件采用“边沿检测+时间窗过滤”算法:

// 全局变量
static uint32_t last_pulse_time = 0;
static uint32_t water_counter = 0;

// GPIO中断服务程序(下降沿触发)
void GPIO_IRQHandler(void) {
    uint32_t now = GetSysTick(); // 获取当前毫秒计数
    if ((now - last_pulse_time) > 5) { // 时间窗>5ms
        water_counter++;
        last_pulse_time = now;
    }
}
3.3.3 Wi-Fi连接状态机

为应对校园Wi-Fi信号波动,设计健壮连接状态机:

  • DISCONNECTED :尝试AT+CWJAP连接,超时(30s)则进入 RETRY
  • RETRY :等待5秒后重试,最多3次,失败则进入 AP_MODE (启动SoftAP供手机配网);
  • CONNECTED :成功连接后,启动MQTT会话,若MQTT连接失败则返回 DISCONNECTED
  • AP_MODE :广播SSID EnergyMonitor_AP ,提供简易Web配网页面(通过ESP-01S内置Web Server)。

4. BOM清单与关键器件选型依据

序号 器件名称 型号/规格 数量 选型依据
1 主控MCU HT32F1656 1 Cortex-M3内核,128KB Flash,12位ADC,双UART,工业级温宽,Holtek生态完善
2 电能计量芯片 ATT7022E 1 符合IEC61036,6通道Σ-Δ ADC,内置DSP,CF脉冲输出,高精度计量需求
3 Wi-Fi模块 ESP-01S 1 成熟AT指令集,低成本,高校Wi-Fi覆盖完善,SDK文档齐全
4 串口TFT屏 ST7789V (3.5") 1 UART接口简化驱动,320×480分辨率满足信息展示,支持触摸,功耗低于RGB屏
5 温度传感器 DS18B20 1 单总线简化布线,±0.5℃精度,-55℃~+125℃宽温,支持多点组网
6 继电器 JZC-23F (10A) 4 250VAC/10A触点容量,满足公寓总闸负载,线圈电压5V,与ULN2003完美匹配
7 光耦 PC817 4 CTR≥50%,隔离电压5000Vrms,确保MCU与220V强电完全隔离
8 电源管理IC AMS1117-3.3V 2 低压差LDO,最大输出1A,纹波抑制比60dB,满足MCU与传感器供电需求
9 EEPROM AT24C02 1 I²C接口,2Kbit容量,写入寿命100万次,掉电保存关键配置与日志
10 电容/电阻/电感 - 若干 全部选用Yageo、Murata、TDK等工业级品牌,温度系数与耐压值满足设计裕量要求

5. 系统测试与验证

5.1 功能测试项

  • 计量精度测试 :使用Fluke 1735电能质量分析仪作为基准,对比系统读数与标准值,220V/5A工况下误差≤±0.8%;
  • 脉冲计数测试 :标准水表检定装置输出1000L脉冲,系统累计值为999L,误差0.1%;
  • Wi-Fi连接稳定性 :在信号强度-75dBm环境下连续运行72小时,无断连记录,平均上报延迟<800ms;
  • 继电器寿命测试 :以10秒周期切换,连续动作10万次后触点接触电阻仍<50mΩ;
  • EMC测试 :通过静电放电(±4kV接触放电)、电快速瞬变(±2kV)测试,系统无复位、死机现象。

5.2 实际部署效果

该系统已在某高校3栋学生公寓试点部署,运行6个月数据显示:

  • 抄表效率提升:从每月2人×3天人工抄表,变为后台一键导出全楼数据,效率提升98%;
  • 异常用电识别:通过功率曲线分析,成功定位2起私拉乱接大功率电器事件;
  • 节能效果:通过APP推送“峰谷电价提醒”,学生主动错峰用电,试点楼栋月均用电量下降6.2%;
  • 运维响应:水管爆裂报警平均响应时间从47分钟缩短至8分钟。

6. 设计经验总结

本项目从竞赛作品走向实际应用,沉淀出若干嵌入式硬件工程师应掌握的实战经验:

  • “够用即止”原则 :HT32F1656的128KB Flash在完成全部功能后仅占用63%,留出充足空间用于后续OTA升级与功能扩展,印证了资源评估的准确性;
  • 物理层优先思维 :所有传感器接口(干簧管、DS18B20、ATT7022E)均严格按芯片手册推荐电路设计,未因“看起来差不多”而简化滤波或保护,这是系统长期稳定运行的基础;
  • 协议栈瘦身实践 :ONENET MQTT客户端代码仅2.1KB,通过裁剪非必要QoS等级、禁用SSL加密(校园内网环境)、固定Topic长度等方式实现,证明轻量化协议栈在资源受限MCU上的可行性;
  • 可制造性设计(DFM) :PCB采用双面板设计,所有过孔均做绿油塞孔,继电器焊盘加宽至2mm,贴片元件全部选用0805及以上封装,确保嘉立创SMT产线一次良率>99.2%;
  • 文档即代码 :原理图中每个器件旁标注“RefDes+Value+Footprint+Source”,BOM表包含供应商料号与采购链接,使得任何工程师接手均可在4小时内完成首板焊接与基础功能验证。

该系统的设计过程,本质上是一次对嵌入式系统工程方法论的完整实践:从真实问题出发,以可靠性为底线,以可维护性为标尺,最终交付一个经得起时间检验的硬件产品。

Logo

openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。

更多推荐