2. 系统总体架构:系统框图、核心模块划分与工作流程
好,咱们正式开始聊方案设计。这一章我打算把整个系统的骨架给你搭起来。你想想看,一个太阳能供电的灌溉控制器,它到底长什么样?里面有哪些东西?它们怎么配合干活?
我个人习惯,做任何嵌入式系统之前,先画一张系统框图。这张图就是整个项目的“地图”。没有它,后面做硬件选型、写驱动、调协议,全都会乱套。我在项目中遇到过好几次,团队里有人不看框图就直接画原理图,结果电源轨算错了,IO口不够用,最后只能飞线改板子……嗯,那滋味可不好受。
2.1 系统框图
先给你看一个典型的系统框图结构。说白了,整个系统可以分成四个大块:
- 能源侧:太阳能板 + 充电管理 + 电池
- 控制侧:主控MCU + 通信模块
- 感知侧:土壤湿度、光照、流量等传感器
- 执行侧:电磁阀、水泵、驱动器
它们之间的数据流是这样的:传感器采集数据 → MCU做决策 → 执行器动作。而能源侧呢,默默地在背后给所有模块供电。我习惯把电源总线画在最下面,像地基一样托着上面所有东西。
核心设计原则:能源侧必须独立于控制逻辑。也就是说,即使MCU死机了,太阳能充电电路依然能正常工作,电池依然能被充满。这一点我在早期项目里吃过亏,后来就再也不敢把电源管理和主控混在一起设计了。
2.2 核心模块划分
咱们把每个模块拆开来看。我按功能把它们分成四类,你对照着框图看会更清楚。
2.2.1 太阳能供电模块
这是整个系统的“心脏”。没有电,一切都是白搭。这个模块包含:
- 太阳能电池板:常见的有单晶硅和多晶硅。我个人倾向于单晶硅,转换效率高,同样面积下功率更大。在野外安装,面积就是成本。
- MPPT充电控制器:最大功率点跟踪。说白了,就是让太阳能板始终工作在最佳输出状态。别小看这个,好的MPPT能比普通PWM充电多充20%-30%的电量。
- 锂电池组:建议用磷酸铁锂,安全、寿命长。我曾经在西北项目里用过三元锂,夏天高温暴晒,电池鼓包了……从那以后,户外项目我只用磷酸铁锂。
- 电源管理IC:负责把电池电压转换成稳定的3.3V或5V,给MCU和传感器供电。
我的小技巧:选电池容量时,按“连续3个阴雨天”来算。比如系统每天耗电1000mAh,那电池至少要有3000mAh的可用容量。别忘了留20%的余量给电池老化。
2.2.2 控制模块
这是系统的大脑。我一般选低功耗的ARM Cortex-M系列,比如STM32L0或者GD32E230。为什么?
- 休眠功耗能做到微安级别
- 外设丰富,SPI、I2C、UART都有
- 生态成熟,遇到问题网上资料多
控制模块还负责通信。如果是近距离,用LoRa或者Sub-1G;如果是远距离,用4G Cat.1或者NB-IoT。我个人习惯在农田场景用LoRa,因为基站覆盖不到的地方太多了。
2.2.3 传感模块
传感器是系统的“眼睛”。常见的几种:
| 传感器类型 | 测量参数 | 常用型号 | 注意事项 |
|---|---|---|---|
| 土壤湿度 | 体积含水率 | FDR-100、SM300 | 别用电阻式的,容易腐蚀 |
| 光照强度 | 光合有效辐射 | BH1750、TSL2591 | 注意防水封装 |
| 流量计 | 瞬时流量、累计流量 | YF-S401、霍尔式 | 安装方向不能搞反 |
| 温度 | 环境/水温 | DS18B20、SHT30 | 线长超过5米要加屏蔽 |
注意:土壤湿度传感器埋在土里,时间长了会有离子迁移问题。我建议每半年校准一次,或者干脆用FDR频域反射法的传感器,寿命长很多。
2.2.4 执行模块
执行模块负责“动手”。灌溉嘛,无非就是开阀、关阀、启泵、停泵。
- 电磁阀:12V或24V直流驱动,注意线圈电流。我一般用MOS管加续流二极管来驱动,别直接用MCU的IO口推,会烧的。
- 水泵:如果是直流无刷泵,需要PWM调速;如果是交流泵,得加继电器或者固态继电器。
- 驱动器:建议用光耦隔离,把控制侧和执行侧的电气隔离开。为什么?因为水泵启停瞬间会产生很大的反向电动势,不隔离的话,MCU很容易被干掉。
2.3 工作流程
好了,模块都认识了。它们是怎么协同工作的?我给你捋一遍典型的工作流程:
- 系统上电:太阳能板开始给电池充电。MCU上电后,先初始化所有外设,然后进入低功耗模式。
- 定时唤醒:MCU每隔15分钟(这个间隔可以配置)从休眠中醒来。先读取电池电压,如果低于3.3V,就立刻回去睡觉,保命要紧。
- 采集数据:依次读取土壤湿度、光照、温度。每个传感器采集3次取平均值,防止单次读数跳变。
- 决策判断:把采集到的土壤湿度跟预设的阈值比较。比如湿度低于30%就开阀,高于70%就关阀。这个阈值可以通过远程下发的指令动态调整。
- 执行动作:如果需要灌溉,MCU拉高电磁阀的驱动引脚,打开阀门。同时记录开启时间,防止忘记关阀导致水漫金山。
- 数据上报:把本次采集的数据、执行的动作、电池电量打包,通过LoRa或4G发送到云端。发送完立刻进入休眠。
- 异常处理:如果连续3次通信失败,数据会暂存在本地Flash里,等下次唤醒再重发。我曾经遇到过LoRa信号被山体遮挡的情况,这个本地缓存机制救了我好几次。
关键点:整个工作流程的核心是“低功耗”。MCU 99%的时间都在休眠,只有1%的时间在工作。一个设计良好的系统,平均工作电流应该控制在50μA以下。这样一块10Ah的电池,理论上能撑200000小时,也就是22年以上。当然,实际要考虑自放电和老化,但做到3-5年免维护是完全可行的。
嗯,这一章的内容差不多就这些。系统框图、模块划分、工作流程,这三样东西你心里有数了,后面每一章的细节设计就有了落脚点。下一章咱们聊太阳能供电模块的详细设计,包括MPPT算法怎么选、电池充电曲线怎么配,到时候我会把我在项目里踩过的坑一个一个讲给你听。