当前位置:文档之家› 关于温控风扇的设计报告_

关于温控风扇的设计报告_

关于温控风扇的设计摘要:现代社会都讲究绿色,节能环保。

在满足人们的基本要求上,能够尽可能的节约、环保。

而电扇在某些场合是必不可少的。

那么我们就可以设计一种可以保持环境温度一定的情况下,尽可能减少能量的消耗,降低风扇的转速。

实现实时的随温度的变化来调节风扇的的转速。

我们可以根据温度传感器采集环境温度,通过单片机显示出来。

并且调用函数,调节占空比控制风扇的转速。

这样的话,既满足了人们的需求,也大量节约了能源。

关键词:节能智能控制风扇1 设计要求1.根据温度传感器检测外部环境温度来控制风扇的转速。

2.利用light点亮的数目来显示当前转速的等级(高、中、低)。

3.显示当前检测的环境温度。

4.显示当前转速级数(0-99)。

2 总体设计2.1 系统组成及工作原理整体思路是:利用温度传感器DS18B20检测环境温度并直接输出数字温度信号给单片机mc9s08aw60进行处理,在LED数码管上显示当前环境温度值。

并且用小灯点亮的数量来显示当前转速的等级。

其中预设温度值只能为整数形式,检测到的当前环境温度可精确到小数点后一位。

主要功能是采用PWM脉宽调制方式来改变直流风扇电机的转速。

原理框图如图所示2.2 温度传感器的测量原理DS18B20测温原理如图所示。

图中低温度系数晶振的振荡频率受温度影响很小,用于产生固定频率的脉冲信号送给计数器1。

高温度系数晶振随温度变化其振荡率明显改变,所产生的信号作为计数器2的脉冲输入。

计数器1和温度寄存器被预置在-55℃所对应的一个基数值。

计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当计数器1的预置值减到0时,温度寄存器的值将加1,计数器1的预置将重新被装入,计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值即为所测温度。

图中的斜率累加器用于补偿和修正测温过程中的非线性,其输出用于修正计数器1的预置值。

主要特点(1)适应电压范围宽,电压范围:3.0~5.5V。

(2)DS18B20在使用中不需要任何外围元件,全部传感元件及转换电路集成在形如一只三极管的集成电路内。

(3)温范围-55℃~+125℃,在-10~+85℃时精度为±0.5℃。

(4)可编程的分辨率为9~12位,对应的可分辨温度分别为0.5℃、0.25℃、0.125℃和0.0625℃,可实现高精度测温。

(5)在9位分辨率时最多在93.75ms内把温度转换为数字,12位分辨率时最多在750ms内把温度值转换为数字,速度更快。

/清零3 硬件设计3.1 硬件组成本设计要用到感测外部环境温度的数字型温度传感器、显示用的数码管、电风扇、小灯,当然了还有主要的大脑单片机aw60。

他们之间的关系如图所示。

3.2 单片机核心模块1、MC9S08系列MCU的特点1)8-bit HCS08内核CPU;2)CPU频率可达40MHz;3)内部总线频率可达20MHz;4)支持多达32种中断/复位源;5)片内多达60KB的在电路可编程Flash存储器,支持块保护,还具有安全加密特性;6)ADC:16通道10位ADC,自动比较功能;7)SCI:2个串行通信接口模块;8)Timers: 1个6通道和1个2通道的16位定时器/脉冲宽度调制器模块(TPM)。

具有输入捕捉、输出比较、脉宽调制功能。

2、单片机的最小系统图:最小系统3.3 温度传感器电路数字式集成温度传感器DS18B20的高度集成化,大大降低了外接放大转化等电路的误差因数,温度误差变得很小,并且由于其检测温度的原理与热敏电阻检测的原理有着本质的不同,使得其温度分辨力极高。

温度值在器件内部转化成数字量直接输出,简化了系统程序设计,又由于该温度传感器采用先进的单总线技术,与单片机的接口变得非常简洁,抗干扰能力强。

因此,不但能够大大简化我们的工作量,同时使系统更加稳定、精确。

3.4 lED驱动、显示电路3.6 小灯电路3.7 驱动电路单片机输出的电流太小不足以支持电机的正常工作。

所以我们要在电机的前面加一个驱动电路。

电机的驱动电路我用的是H桥。

图:H桥示意图要使电机运转,必须使对角线上的一对三极管导通。

例如,如图所示,当Q1管和Q4管导通时,电流就从电源正极经Q1从左至右穿过电机,然后再经Q4回到电源负极。

按图中电流箭头所示,该流向的电流将驱动电机顺时针转动。

当三极管Q1和Q4导通时,电流将从左至右流过电机,从而驱动电机按特定方向转动。

图:软件连接的H桥4 程序设计1.1主程序设计程序设计部分主要用到了我们学过的pwm构件、light构件、LED构件和TPM构件。

首先对温度传感器初始化;通过DS18B20温度转换的函数实现对环境温度的实时采集;温度读取完成之后,单片机温度传感器的数据进行换算,然后进行显示输出。

与此同时,温度处理函数对采集到的温度进行分析处理,是否开启电机如果达到预置值要求的话,控制PWM的占空比从而控制电机的转速。

同时控制小灯点亮的数目;4.21)温度显示如果当前环境温度为C摄氏度,拆分为个位和十位。

然后显示在数码管上。

十位=C/10;各位=C-十位*10;2)利用温度数据调节当前PWM的占空比各参数之间的对应关系温度(摄氏度)占空比(%) 转速等级(0-99)档位(高中低)<=27 4040 低28 50 50 低29 60 60 低30 70 70 中31 75 75 中32 80 80 高33 85 85 高34 90 90 高35 100 100 高>35 100100高程序界面主要程序代码interrupt void isrT1Ch0In(void){unit8 temp ,sw,gw,level;DisableInterrupts();DisableTPM1ChInInt(0);Delay(1);temp=AW60_TPM1_CHSCSTR(0) &=~AW60_TPM_CHSCSTR_CHF; //输入捕捉功能接收温度信号EnableInterrupts();}sw=temp/10; //获取温度参数的个位和十位,然后显示在数码上gw=temp-sw*10;ledbuf[1]=gw;ledbuf[0]=sw;if (temp>35) //如果温度参数大于35度,按35度处理;{temp=35;}if(temp>=27&&temp<36) //小于27度不做处理也就是说处理范围是大于27度{switch(temp) //分为各种温度参数下的九种情况来做不同的操作{case 27: ledbuf[1]='4';ledbuf[2]='0'; //例如第一种情况27度。

显示当前的转速40 将温度转换为占空比参数level= 40;Light_Control(Light_Run_PORT,Light_Run,Light_OFF); //并且控制一个小灯亮,表示当前档位为低档。

break;case 28: ledbuf[1]='5';ledbuf[2]='0';level= 50;Light_Control(Light_Run_PORT,Light_Run,Light_ON);break;case 29: ledbuf[1]='6';ledbuf[2]='0';level= 60;Light_Control(Light_Run_PORT,Light_Run,Light_ON);break;case 30: ledbuf[1]='7';ledbuf[2]='0';level= 70;Light_Control(Light_Run_PORT,Light_Run,Light_ON);Light_Control(Light_Run_PORT,Light_Run1,Light_ON);break;case 31: ledbuf[1]='7';ledbuf[2]='5';level=75;Light_Control(Light_Run_PORT,Light_Run,Light_ON);Light_Control(Light_Run_PORT,Light_Run1,Light_ON);break;case 32: ledbuf[1]='8';ledbuf[2]='0';level= 80;Light_Control(Light_Run_PORT,Light_Run,Light_ON);Light_Control(Light_Run_PORT,Light_Run1,Light_ON);Light_Control(Light_Run_PORT,Light_Run2,Light_ON);break;case 33: ledbuf[1]='8';ledbuf[2]='5';level= 85;Light_Control(Light_Run_PORT,Light_Run,Light_ON);Light_Control(Light_Run_PORT,Light_Run1,Light_ON);Light_Control(Light_Run_PORT,Light_Run2,Light_ON);break;case 34: ledbuf[1]='9';ledbuf[2]='0';level=90;Light_Init(Light_Run_PORT,Light_Run,Light_ON);Light_Init(Light_Run_PORT,Light_Run1,Light_ON);Light_Init(Light_Run_PORT,Light_Run2,Light_ON);break;case 35: ledbuf[1]='9';ledbuf[2]='9' ;level=100Light_Init(Light_Run_PORT,Light_Run,Light_ON);Light_Init(Light_Run_PORT,Light_Run1,Light_ON);Light_Init(Light_Run_PORT,Light_Run2,Light_ON);break;}}PWM(TPM_NUM_1,TPM1_CH_3,0x0138, level); //输出占空比来控制直流电机的转速LEDshow(ledbuf);EnableTPM1ChInInt();EnableInterrupt() ;4 调试及结果电路仿真能够实现部分功能。

相关主题