项目介绍:
此项目代码专为电动汽车(EV)充电站应用而设计。它提供了全面的功能来管理多达32个继电器,每个继电器可以控制单个电动汽车充电端口的电源供应。该系统包含了可靠操作、高效通信和准确的时间管理等功能,适用于商业和住宅充电站。
关键特性:
- 参数持久化: 系统利用W25Q128闪存芯片来存储关键参数,确保诸如设备地址、通信波特率和运行模式等设置即使在断电情况下也能得以保留。
- 实时时钟管理: 集成了BL8025实时时钟(RTC)芯片来跟踪当前日期和时间。这一功能用于实现充电计划、计费周期以及其他基于时间的操作。
- 交流电检测: 一种交流电检测机制确保只有在交流电可用时才激活继电器,从而防止潜在的安全问题,并确保只有在电源存在的情况下才能进行充电。
- RS485通信接口: 系统采用RS485串行接口来进行与管理系统之间的稳健通信。此接口允许交换控制命令、状态更新及其他对于充电站正常运行所需的信息。
- 继电器状态管理: 专用函数根据从主机接收到的命令和交流电状态来管理每个继电器的状态。这种智能控制确保仅授权且安全的充电会话发生。
- 电流监测和充电时间追踪: 电流监测过程持续测量通过每个充电端口的电流,并跟踪每次充电会话的持续时间。这些数据对于准确计费和监控充电活动至关重要。
系统组件:
- 闪存(W25Q128): 存储系统参数和运行数据,以确保跨电源周期的持久性。
- 实时时钟芯片(BL8025): 维持当前日期和时间,使基于时间的功能如调度和计费成为可能。
- 交流电检测电路: 监测交流电的存在与否,在激活继电器之前确保安全操作。
- RS485收发器: 实现充电站与中央管理系统之间的通信。
- 继电器控制电路: 管理多达32个继电器的状态,每个继电器控制一个充电端口。
- 电流监测传感器: 测量通过每个充电端口的电流,以监控使用情况并防止过载。
操作:
- 启动时,系统初始化RTC、闪存和其他组件。
- 从闪存读取参数,并在首次上电时设置默认值。
- 系统进入循环,管理RTC、监控交流电、处理传入的RS485命令以及更新继电器的状态。
- 根据来自主机的命令和交流电的可用性来发起充电会话。
- 进行电流监测和充电时间追踪,以确保准确计费并防止过载。
项目代码解析:
交流电检测进程:
#include "ACPowerDetection.h"
#include "delay.h"
#include "RS485.h"
#include "CRC.h"
uint8_t u8_ACPowerStatus;
__IO uint16_t u16_ACPowerDetectionTimerMs;
//IO初始化
void ACPowerDetection_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);//使能GPIOA时钟
//GPIOA4初始化设置
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;//普通输入模式
// GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHz
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉
GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化
u8_ACPowerStatus = 1;
}
void ACPowerDetection_Process(void)
{
if(u16_ACPowerDetectionTimerMs > 10000) //每10秒检测一次
{
u16_ACPowerDetectionTimerMs = 0;
u8_AlarmStatus &= ~0x80;
if(ACPowerIN() == 0) // 交流不存在 光耦不导通,所以拉低
{
delay_ms(10);
if(ACPowerIN() == 0)
{
// u8_ACPowerStatus = 1;
u8_AlarmStatus |= 0x80; //给予警告
}
}
}
}
void ACPowerDetection_Timer_Ms(void)
{
u16_ACPowerDetectionTimerMs++;
}
ACPowerDetection_GPIO_Init()
此函数初始化用于检测交流电源状态的GPIO引脚。它执行以下步骤:
- 为GPIOA(AHB1外围设备)启用时钟。
- 将GPIOA4配置为具有上拉电阻的输入引脚,速度为100 MHz。
- 将
u8_ACPowerStatus
的初始值设为1,表明默认认为交流电源存在。