简介:这是一款适用于DELL服务器PSU电源的智能取电盒,它能够控制电源的开关,读取电源的输入和输出的电压、电流、功率值以及温度在OLED屏幕上显示,支持通过DC5.5的接口和XT60来输出12V电源。
我将为你详细阐述这款DELL服务器电源智能取电盒的嵌入式软件架构设计,并提供相应的C代码实现。这个项目旨在构建一个可靠、高效、可扩展的系统平台,因此我们将采用分层架构和模块化设计,确保代码的清晰度和可维护性。
关注微信公众号,提前获取相关推文
系统架构设计
我们将采用经典的分层架构,将系统划分为以下几个层次,每一层都有明确的职责,层与层之间通过定义良好的接口进行通信,降低耦合度,提高系统的可维护性和可扩展性。
-
硬件抽象层 (HAL - Hardware Abstraction Layer)
- 职责: HAL层是直接与硬件交互的层,它向上层屏蔽了底层硬件的差异,为上层提供统一的硬件访问接口。这样,当底层硬件发生改变时,只需要修改HAL层代码,而无需改动上层代码,提高了代码的可移植性。
- 模块:
- GPIO 驱动模块: 负责GPIO的初始化、输入/输出控制,例如控制电源开关、读取按键输入等。
- ADC 驱动模块: 负责ADC的初始化、模拟信号的采集和转换,用于读取电压、电流、温度等模拟传感器的数据。
- Timer 驱动模块: 负责定时器的初始化和配置,用于实现周期性任务,例如数据采样、OLED屏幕刷新等。
- SPI/I2C 驱动模块: 负责SPI/I2C总线的初始化和通信,用于与OLED屏幕、数字传感器等外围设备进行通信。
- 电源管理模块: 负责电源相关的硬件控制,例如控制PSU电源的开关。
-
设备驱动层 (Device Driver Layer)
- 职责: 设备驱动层构建在HAL层之上,它负责驱动具体的硬件设备,例如传感器、OLED屏幕等。设备驱动层将HAL层提供的通用硬件接口转化为特定设备的控制接口,为上层提供更高级别的设备操作接口。
- 模块:
- 电源开关驱动模块: 基于GPIO控制,实现PSU电源的开关控制逻辑。
- 电压/电流传感器驱动模块: 基于ADC读取模拟信号,结合硬件电路(例如分压电阻、电流互感器或电流采样电阻),计算并返回电压、电流值。
- 功率计算模块: 基于电压和电流值,计算瞬时功率和累计功率。
- 温度传感器驱动模块: 根据使用的温度传感器类型(例如热敏电阻、数字温度传感器),实现温度数据读取。
- OLED屏幕驱动模块: 负责OLED屏幕的初始化、显示字符、显示数字、显示图形等功能。
- 按键驱动模块: 负责按键的扫描和检测,处理按键事件。
-
服务层 (Service Layer)
- 职责: 服务层构建在设备驱动层之上,它负责实现系统的核心业务逻辑,将底层的设备驱动组合起来,提供更高级别的服务接口给应用层使用。
- 模块:
- 电源监控服务模块: 周期性地读取电压、电流、功率、温度数据,并将数据存储和管理。
- 显示服务模块: 负责将需要显示的数据格式化,并调用OLED屏幕驱动模块进行显示。
- 电源控制服务模块: 接收应用层的指令,控制PSU电源的开关。
- 参数配置服务模块: 负责系统参数的配置和管理,例如采样周期、报警阈值等。
- 告警处理服务模块: 监测系统运行状态,当检测到异常情况(例如过压、过流、过温)时,进行告警处理。
-
应用层 (Application Layer)
- 职责: 应用层是系统的最高层,直接与用户交互,调用服务层提供的接口,实现系统的最终功能。
- 模块:
- 用户界面模块 (UI - User Interface): 负责构建用户界面,例如OLED屏幕上显示的数据布局、菜单显示等,处理用户输入(例如按键操作)。
- 主控逻辑模块: 负责系统的整体控制流程,初始化各个模块,调度各个服务模块,响应用户操作。
软件流程图