- 实现PID控制加热片温度
- 加热棒(电机)的PWM驱动函数能输入PWM的值作为参数(在PID控制的实例中,实际用不到按键)
Duty = 5;
Heater_SetDutyCycle(Duty);
DutyCycle=50, 100, 确认温度极限
- 电位计DMA+AD转换驱动函数,通过电压转换能计算出热敏电阻的温度值。
- 热敏电阻的计算公式:T=f(Voltage, Belta)
- DMA
- 串口输出热敏电阻的温度值,连接上位机图形化显示
Serial_Printf("Rps: %.2f\n", Rps); //串口输出转速,换行打印
- 待完成功能:Kp, Ki, Kd参数通过串口输入,而不用每次更改都编译和下载一遍
- 简单粗暴的控制方式,不能让温度稳定在 xxx 度
if (Temp > 41) Speed--;
if (Temp < 39) Speed++;
- 热敏电阻PID控制加热片温度
float Err=0, LastErr=0, NextErr=0, Add=0, Kp=10, Ki=0.6, Kd=0.05, POut=0, IOut=0, DOut;
int8_t TotalOut=0;
/**
* @brief PID控制温度
* @param Rps: 将当前的目标值传入函数
* @param Target: 将当前的测量值传入函数
* @retval 返回执行量
*/
float PID(float Rps, float Target)
{
Err = Target - Rps; //计算实际值与目标值的偏差值
POut = Kp * Err; //计算PID的比例值P的输出值
IOut += Ki * Err; //计算PID的积分值I的输出值
DOut = Err - LastErr; //计算PID的微分值D的输出值
TotalOut = (int8_t)(POut + IOut + DOut); //PID值的和
LastErr = Err;
return TotalOut;
}
*功能* *定时器* *类型*
闲置 TIM1 高级定时器
PWM TIM2 通用定时器
(Encoder) TIM3 通用定时器
(Timer) TIM4 通用定时器
- 电机驱动TB6612(确认加热片的额定DC和功率,已有的TB6612是否能用?)
- 加热棒(额定电压DC 24V, 额定功率65W。为了简化电路,直接从ST-Link取电5V。验证电流:R=U^2/P=24^2/65=8.86 ohm,那么在5V下 I=U/R=5/8.86=0.8A,小于电机驱动的额定1.2A)
- 热敏电阻(规格NTC 100k, B3950)