温度控制电机转动案例
时间:2022-08-23 22:30:01
温度测控系统采用单片机作为处理器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;}
}
}
//完整代码及仿真图:单片机项目实战:温度测控系统设计