温度测控系统采用单片机作为处理器DS18B收集当前温度值,将温度测量结果送入单片机。单片机依据当前温度,并根据预先设置好的控制模式控制电机转动通风,实现对温度调节。下图为温度测控系统原理图。系统主要有DS18B20温度测量电路、液晶显示电路和L298N电机驱动电路。L298N是双全桥步进电机的专用驱动芯片,包括4个通道逻辑驱动电路,可同时驱动2个2相或1个四相步进电机,可直接由单片机制成I/O端口提供时序信号驱动电机运行。
当外部温度大于当外部温度大于等于45时℃直流电机在L在298驱动下加速正转,温度达到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)%6; 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;} } }
//完整代码及仿真图:单片机项目实战:温度测控系统设计