# fuzzy.py 函数文档

模糊温度控制算法实现模块，用于精确控制系统温度。

## 常量定义

### PID控制参数
- **_DEFAULT_Ki**: 积分系数 (1)
- **_DEFAULT_KI**: 积分时间 (960)
- **_DEFAULT_Kp**: 比例系数 (320)
- **_DEFAULT_KC**: 控制差异 (1, 0.01℃)
- **_DEFAULT_MAXNEGINTERG**: 最大负积分值 (-1000)
- **_MAX_TEMP**: 最大温度值 (2000, 即200.0℃)

### PWM控制参数
- **PWM_PITCED**: PWM最小周期 (0)
- **PWM_PERIOD**: PWM最大周期 (4000)
- **DEF_CTEMP**: 初始启动控制温度 (300, 即3.00℃)

## AI_Control 类

### 初始化函数
```python
def __init__(self)
```
- **功能**: 初始化模糊控制系统
- **初始化内容**:
  - 控制常量 (KC, Ki, KI, Kp)
  - 控制变量 (WarmFlag, iDestTemp, gTemp)
  - 误差值 (Error, dErr)
  - 输出值 (SumErrLimit, PreOut, CurOut)

### 核心控制函数

#### task_fuzzy(self)
- **功能**: 执行模糊控制算法
- **控制流程**:
  1. 检查加热标志
  2. 计算误差和误差变化率
  3. 根据误差范围选择控制策略：
     - 误差在控制范围内：使用PID控制
     - 误差在控制范围外：使用直接计算
  4. 限制输出范围
  5. 更新输出值
- **控制策略**:
  - 误差增加时：累积误差并计算比例+积分输出
  - 误差减小时：仅使用积分输出
  - 误差稳定时：保持上一次输出
- **安全特性**:
  - 温升过快时抑制积分作用
  - 输出限幅保护

#### ctrl_stove(self, c_open, cur_temp, l_dest_temp)
- **功能**: 控制加热系统
- **参数**:
  - c_open: 开启控制标志
  - cur_temp: 当前温度指针
  - l_dest_temp: 目标温度
- **实现**:
  - 设置加热标志
  - 初始化控制参数
  - 设置目标温度
  - 重置积分限制
  - 设置积分时间

#### stop_heat(self)
- **功能**: 停止加热
- **实现**:
  - 清除加热标志
  - 设置最小PWM输出

### 参数说明

#### 控制参数
- **KC**: 控制差异，单位0.01℃
- **Ki**: 积分系数
- **KI**: 积分时间，决定积分作用强度
- **Kp**: 比例系数
- **MAXNEGINTERG**: 最大负积分值，控制积分分离深度

#### 状态变量
- **WarmFlag**: 加热标志位
- **iDestTemp**: 目标温度
- **gTemp**: 当前温度指针
- **Error**: 误差值数组[当前误差, 上一次误差]
- **dErr**: 误差变化率
- **SumErrLimit**: 积分值
- **PreOut**: 上一次输出
- **CurOut**: 当前输出

## 使用示例

```python
from fuzzy import AI_Control

# 创建控制器实例
controller = AI_Control()

# 设置回调函数
controller.set_p_out = your_pwm_output_function

# 开始温度控制
current_temp = [3000]  # 当前温度30.00℃
target_temp = 8000    # 目标温度80.00℃
controller.ctrl_stove(True, current_temp, target_temp)

# 在任务循环中调用
def control_loop():
    controller.task_fuzzy()
```

## 性能特性

1. 温度控制精度：0.01℃
2. PWM周期：4000ms
3. 控制响应：
   - 大误差时快速响应
   - 小误差时精确控制
   - 过冲抑制
4. 安全保护：
   - 输出限幅
   - 积分饱和限制
   - 温升速率限制

## 调优建议

1. **积分时间(KI)**:
   - 较小值：积分作用增强，响应更快
   - 较大值：积分作用减弱，稳定性更好

2. **比例系数(Kp)**:
   - 增大：提高响应速度，可能造成过冲
   - 减小：减少过冲，但响应变慢

3. **控制差异(KC)**:
   - 影响误差计算精度
   - 默认0.01℃，可根据需要调整

## 注意事项

1. 温度单位统一使用0.01℃
2. PWM输出范围：0-4000ms
3. 温升过快时会自动抑制积分作用
4. 需要正确设置PWM输出回调函数
5. 建议在独立任务中周期调用task_fuzzy()
