目 录
摘要 Ⅲ
维持发动机在各种工况下均在最适宜的温度内工作,使发动机得到良好的动力性与经济性是发动机冷却系统的职能。如果冷却过度,因为散热损失增多,致使热效率下降,既是能量的浪费,也是一些不良后果的诱因,因此对发动机冷却不可过度。
只有在适宜温度范围内工作的发动机才能避免因发动机冷却不足或过度冷却对发动机造成的过早损害,在此介绍一种基于单片机控制的一套发动机冷却风扇的电控系统。系统采用单片机作为微处理芯片,通过温度传感器进行数据的采集,然后经过单片机将信号输入给PWM的输出信号实现对冷却风扇的调速,并设有温度显示。发动机冷却风扇电控系统以硬件设计为基础,以单片机作为微处理芯片来控制,并给出发动机冷却系统的原理图以及硬件部分的电路原理图。通过实验得出该控制系统是否达到预期的效果。
关键词:发动机;冷却系统;冷却风扇;单片机;温度传感器。
…………
附录1:
程序:#include<reg51.h>
#include<intrins.h>
#define DutyCycle temperature//zhan kong bi
#define uchar unsigned char
#define uint unsigned int
// dian ji kong zhi
sbit R=P0^1;
sbit L= P0^0;
sbit PWM=P0^2;
bit flag=1;
sbit DQ=P0^3;
uchar dida=0;
uchar code table[]={0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F};
uchar temperature,ten,bits;
//yan shi
void delay_50us(uint t)
{
uchar j;
for(;t>0;t--)
for(j=19;j>0;j--);
}
void delay_2us(uchar i)
{
while(--i);
}
//shu ma guan xian shi
void LEDDisplay()
{
P2=table[ten];
P1=0xfb;
delay_50us(20);
P1=0xff;
P2=table[bits] ;
P1=0xf7;
delay_50us(20);
P1=0xff;
}
//DS18B20 CHU SHI HUA
void DS18B20Reset()
{
DQ=0;
delay_50us(10);
DQ=1;
delay_50us(1);
while(!DQ);
_nop_();
}
//du DS18B20 HAN SHU
uchar DS18B20ReadByte()
{
uint i;
uchar dat=0;
for(i=0;i<8;i++)
{
DQ=0;
_nop_();
dat>>=1;
DQ=1;
delay_2us(2);
if(DQ)
dat |=0x80;
delay_2us(20);
DQ=1;
}
return(dat) ;
}
//xie DS18B20
void DS18B20WriteByte(uchar dat)
{
uchar j;
for(j=0;j<8;j++)
{
DQ=0;
delay_2us(5);
if(dat&0x01)
DQ=1;
delay_2us(15);
dat>>=1;
DQ=1;
_nop_();
}
}
//WEN DU ZHUAN HUAN
void temperConvert()
{
DS18B20Reset();
DS18B20WriteByte(0xcc);
DS18B20WriteByte(0x44);
}
//du chu wen du han shu
void temperRead()
{
uchar temph,templ;
DS18B20Reset();
DS18B20WriteByte(0xcc);
DS18B20WriteByte(0xBE);
templ=DS18B20ReadByte();
temph=DS18B20ReadByte();
temperature=(temph<<4)|(templ>>4);
ten=temperature%100/10;
bits=temperature%10;
}
void turnClockwise()
{
R=1;
L=0;
}
void turnAntClockwise()
{
R=0;
L=1;
}
//CHU SHI HUA
void init()
{
TMOD=0x01;
ET0=1;
TR0=1;
IT0=1;
EX0=1;
EA=1;
PWM=1;
}
void motor()
{
turnClockwise();
}
//zhu han shu
void main()
{
uchar j;
init();
while(1)
{
temperConvert();
for(j=0;j<250;j++)
LEDDisplay();
EA=0;
temperRead();
motor() ;
EA=1;
}
}
void ex0() interrupt 0
{
flag=!flag;
}
//ding shi qi 0de de zhong duan fu wu hanshu
void time_0() interrupt 1
{
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
dida++;
if(dida>= temperature)
PWM=0;
else
PWM=1;
if(dida==100)
dida=0;
}
附录2:
实物图: