温度测控系统是一单片机作为处理器,利用DS18B20采集当前温度值,将温度测量结果送入单片机中。单片机依据当前温度,并根据预先设置好的控制模式控制电机转动通风,实现对温度调节。下图为温度测控系统的原理图。系统主要有DS18B20测温电路、液晶显示电路和L298N电机驱动电路。L298N是双全桥步进电机专用驱动芯片,内部包含4个通道逻辑驱动电路,可同时驱动2个2相或1个四相步进电机,此芯片可直接由单片机的I/O端口提供时序信号驱动电机运行。
具体实现功能:当外部温度大于等于45℃时,直流电机在L298驱动下加速正转,温度达到75℃以上时全速正转;当外部温度小于等于10℃时电机加速反转,温度到达0℃及以下时电机全速反转;温度回到10~45℃之间时电机逐渐停止转动。
系统主要代码为PWM调速功能与温度值的设计。其中,温度测量显示实现见DS18B20与LCD1602温度测量显示案例。PWM调速功能与温度值如下所示:
//-----------------------------------------------------------------
// T0定时器溢出中断函数控制电机正/反转,并输出PWM信号控制转速
//-----------------------------------------------------------------
void T0_INT() interrupt 1
{
static INT8U t_Count=0;
TH0=(INT16U)(-11.0592/12*500)/256;
TL0=(INT16U)(-11.0592/12*500)%256;
if(++t_Count==100)//每50ms读取一次温度值
{
t_Count=0;
sendChangeCmd();
Temp=getTmpValue();
if(Temp!=Back_Temp_Value)//温度改变则刷新,不改变不更新屏显信息
{
Back_Temp_Value=Temp;
sprintf(Disp_Buffer,"%5.1f\xDF\x43",Temp);
LcdShowStr(5, 1,Disp_Buffer );
}
//温度高于75低于0,电机全速运转
if(Temp>=75) Temp=75;
if(Temp<=0) Temp=0;
//大于等于45时加速正转,高于75全速运转
if(Temp>=45)
{
MA=1;MB=0;
if(Temp==45)
{PWM1=0;delayMs(30);return;}
else
if(Temp==75)
{PWM1=1;delayMs(30);return;}
PWM1=1;delayMs(Temp-45);
PWM1=0;delayMs(75-Temp);
}//小于10时电机加速反转,0时全速运转
else if(Temp<=10)
{
MA=0;MB=1;
if(Temp<=10)
{PWM1=0;delayMs(10);return;}
else
if(Temp==0)
{PWM1=1;delayMs(10);return;}
PWM1=1;delayMs(10-Temp);
PWM1=0;delayMs(Temp);
}
else
{MA=0;MB=0;}
}
}
//完整代码及仿真图:单片机项目实战:温度测控系统设计