# 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()