2025-04-16 09:58:09 +08:00
|
|
|
|
#include "electrode.h"
|
|
|
|
|
|
2025-05-20 09:41:22 +08:00
|
|
|
|
// 除磷控制变量
|
|
|
|
|
uint32_t phosphorus_timer = 0; // 除磷计时器
|
|
|
|
|
uint32_t PHOSPHORUS_RUN_TIME = 20; // 运行20分钟
|
|
|
|
|
uint32_t PHOSPHORUS_STOP_TIME = 40; // 停止40分钟
|
2025-04-16 09:58:09 +08:00
|
|
|
|
uint8_t polarity_state = 0; // 极性状态:0-正常,1-反转
|
2025-05-20 09:41:22 +08:00
|
|
|
|
uint8_t Dephosphorization_state = 0; // 0表示禁用,1表示启用
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 除磷极性控制函数
|
|
|
|
|
|
2025-04-16 09:58:09 +08:00
|
|
|
|
|
|
|
|
|
// 除磷极性控制函数
|
|
|
|
|
void Control_Phosphorus_Polarity(void)
|
|
|
|
|
{
|
|
|
|
|
if(polarity_state)
|
|
|
|
|
{
|
|
|
|
|
// 反转极性
|
|
|
|
|
Control_Plate1(1); // 极板1为正极
|
|
|
|
|
Control_Plate2(0); // 极板2为负极
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
// 正常极性
|
|
|
|
|
Control_Plate1(0); // 极板1为负极
|
|
|
|
|
Control_Plate2(1); // 极板2为正极
|
|
|
|
|
}
|
|
|
|
|
}
|
2025-05-20 09:41:22 +08:00
|
|
|
|
// 除磷控制更新函数
|
|
|
|
|
void Phosphorus_Control_Update(void)
|
2025-04-16 09:58:09 +08:00
|
|
|
|
{
|
2025-05-20 09:41:22 +08:00
|
|
|
|
// 按20分钟开40分钟关的逻辑运行
|
|
|
|
|
if(phosphorus_timer <= PHOSPHORUS_RUN_TIME)
|
2025-04-16 09:58:09 +08:00
|
|
|
|
{
|
2025-05-20 09:41:22 +08:00
|
|
|
|
Control_Phosphorus(1); // 开启除磷
|
|
|
|
|
Dephosphorization_state = 1;
|
2025-04-16 09:58:09 +08:00
|
|
|
|
}
|
2025-05-20 09:41:22 +08:00
|
|
|
|
else if(phosphorus_timer <= (PHOSPHORUS_RUN_TIME + PHOSPHORUS_STOP_TIME))
|
2025-04-16 09:58:09 +08:00
|
|
|
|
{
|
2025-05-20 09:41:22 +08:00
|
|
|
|
Control_Phosphorus(0); // 关闭除磷
|
|
|
|
|
Dephosphorization_state = 0;
|
2025-04-16 09:58:09 +08:00
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
2025-05-20 09:41:22 +08:00
|
|
|
|
phosphorus_timer = 0; // 重置计时器
|
|
|
|
|
polarity_state = !polarity_state; // 切换极性
|
|
|
|
|
Control_Phosphorus_Polarity(); // 更新极性
|
|
|
|
|
Control_Phosphorus(1); // 开始新循环
|
2025-04-16 09:58:09 +08:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2025-05-21 13:23:18 +08:00
|
|
|
|
void Save_Phosphorus_Time_To_EEPROM(uint32_t run_time, uint32_t stop_time)
|
|
|
|
|
{
|
|
|
|
|
// 保存时间参数
|
|
|
|
|
Save_Float_To_EEPROM(PHOSPHORUS_RUN_TIME_ADDR, (float)run_time);
|
|
|
|
|
Save_Float_To_EEPROM(PHOSPHORUS_STOP_TIME_ADDR, (float)stop_time);
|
|
|
|
|
|
|
|
|
|
// 保存标志位
|
|
|
|
|
Inf_AT24C02_WriteByte(PHOSPHORUS_FLAG_ADDR, PHOSPHORUS_FLAG_VAL);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void Load_Phosphorus_Time_From_EEPROM(void)
|
|
|
|
|
{
|
|
|
|
|
uint8_t flag = Inf_AT24C02_ReadByte(PHOSPHORUS_FLAG_ADDR);
|
|
|
|
|
|
|
|
|
|
if(flag == PHOSPHORUS_FLAG_VAL)
|
|
|
|
|
{
|
|
|
|
|
// 读取时间参数
|
|
|
|
|
PHOSPHORUS_RUN_TIME = (uint32_t)Read_Float_From_EEPROM(PHOSPHORUS_RUN_TIME_ADDR);
|
|
|
|
|
PHOSPHORUS_STOP_TIME = (uint32_t)Read_Float_From_EEPROM(PHOSPHORUS_STOP_TIME_ADDR);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
// 如果EEPROM中没有有效数据,使用默认值并保存
|
|
|
|
|
Save_Phosphorus_Time_To_EEPROM(PHOSPHORUS_RUN_TIME, PHOSPHORUS_STOP_TIME);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void Phosphorus_Init(void)
|
|
|
|
|
{
|
|
|
|
|
// 从EEPROM加载时间参数
|
|
|
|
|
Load_Phosphorus_Time_From_EEPROM();
|
|
|
|
|
|
|
|
|
|
phosphorus_timer = 0; // 初始化计时器
|
|
|
|
|
polarity_state = 0; // 初始极性状态
|
|
|
|
|
Control_Phosphorus_Polarity(); // 设置初始极性
|
|
|
|
|
Control_Phosphorus(1); // 初始状态开启
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|