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