关于温控风扇的设计摘要:现代社会都讲究绿色,节能环保。在满足人们的基本要求上,能够尽可能的节约、环保。而电扇在某些场合是必不可少的。那么我们就可以设计一种可以保持环境温度一定的情况下,尽可能减少能量的消耗,降低风扇的转速。实现实时的随温度的变化来调节风扇的的转速。我们可以根据温度传感器采集环境温度,通过单片机显示出来。并且调用函数,调节占空比控制风扇的转速。这样的话,既满足了人们的需求,也大量节约了能源。关键词:节能智能控制风扇1设计要求1.根据温度传感器检测外部环境温度来控制风扇的转速。2.利用light点亮的数目来显示当前转速的等级(高、中、低)。3.显示当前检测的环境温度。4.显示当前转速级数(0-99)。2总体设计2.1系统组成及工作原理整体思路是:利用温度传感器DS18B20检测环境温度并直接输出数字温度信号给单片机mc9s08aw60进行处理,在LED数码管上显示当前环境温度值。并且用小灯点亮的数量来显示当前转速的等级。其中预设温度值只能为整数形式,检测到的当前环境温度可精确到小数点后一位。主要功能是采用PWM脉宽调制方式来改变直流风扇电机的转速。原理框图如图所示MC9S08AW60DS18B20直流电机Pwm显示温度Light小灯晶振复位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内把温度值转换为数字,速度更快。斜率累加器预置比较低温度系数晶振计数器1预置为零温度寄存器高温度系数晶振计数器2为零停止加1置位/清零3硬件设计3.1硬件组成本设计要用到感测外部环境温度的数字型温度传感器、显示用的数码管、电风扇、小灯,当然了还有主要的大脑单片机aw60。他们之间的关系如图所示。温度传感器数码管单片机AW60小灯(3个)电风扇(直流电机)驱动电路3.2单片机核心模块1、MC9S08系列MCU的特点1)8-bitHCS08内核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.4lED驱动、显示电路3.6小灯电路LS1LampLS2LampLS3LampGNDGNDQ12N3904Q22N3904Q32N39041KR16Res21KR18Res21KR20Res21KR15Res21KR17Res21KR19Res2+5V+5V+5VPTF1PTF2GNDJ7LED4PTB0PTB1PTB2PTB3PTB4PTB5PTB6PTB7PTD2PTD3PTD1abcdefghCS0CS1CS2CS31KR371KR391KR401KR38PTD03.7驱动电路单片机输出的电流太小不足以支持电机的正常工作。所以我们要在电机的前面加一个驱动电路。电机的驱动电路我用的是H桥。图:H桥示意图要使电机运转,必须使对角线上的一对三极管导通。例如,如图所示,当Q1管和Q4管导通时,电流就从电源正极经Q1从左至右穿过电机,然后再经Q4回到电源负极。按图中电流箭头所示,该流向的电流将驱动电机顺时针转动。当三极管Q1和Q4导通时,电流将从左至右流过电机,从而驱动电机按特定方向转动。Q?2N3904Q?2N3904Q?2N3904Q?2N3906Q?2N3906Q?2N3904D?DiodeD?DiodeD?DiodeD?Diode1KR?Res21KR?Res21KR?Res21KR?Res2GNDGNDGNDVCCVCCM图:软件连接的H桥4程序设计1.1主程序设计程序设计部分主要用到了我们学过的pwm构件、light构件、LED构件和TPM构件。首先对温度传感器初始化;通过DS18B20温度转换的函数实现对环境温度的实时采集;温度读取完成之后,单片机温度传感器的数据进行换算,然后进行显示输出。与此同时,温度处理函数对采集到的温度进行分析处理,是否开启电机如果达到预置值要求的话,控制PWM的占空比从而控制电机的转速。同时控制小灯点亮的数目;4.2子程序设计开始程序初始化温度传感器初始化温度转换函数显示温度控制风扇PWM结束1)温度显示如果当前环境温度为C摄氏度,拆分为个位和十位。然后显示在数码管上。十位=C/10;各位=C-十位*10;2)利用温度数据调节当前PWM的占空比各参数之间的对应关系温度(摄氏度)占空比(%)转速等级(0-99)档位(高中低)=274040低285050低296060低307070中317575中328080高338585高349090高程序界面主要程序代码interruptvoidisrT1Ch0In(void){unit8temp,sw,gw,level;35100100高35100100高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(temp35)//如果温度参数大于35度,按35度处理;{temp=35;}if(temp=27&&temp36)//小于27度不做处理也就是说处理范围是大于27度{switch(temp)//分为各种温度参数下的九种情况来做不同的操作{case27:ledbuf[1]='4';ledbuf[2]='0';//例如第一种情况27度。显示当前的转速40将温度转换为占空比参数level=40;Light_Control(Light_Run_PORT,Light_Run,Light_OFF);//并且控制一个小灯亮,表示当前档位为低档。break;case28:ledbuf[1]='5';ledbuf[2]='0';level=50;Light_Control(Light_Run_PORT,Light_Run,Light_ON);break;case29:ledbuf[1]='6';ledbuf[2]='0';level=60;Light_Control(Light_Run_PORT,Light_Run,Light_ON);break;case30: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;case31: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;case32: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;case33: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;case34: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;case35: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调试及结果电路仿真能够实现部分功能。本系统能够实现单片机系统检测环境温度的变化,然后根据环境温度变化来控制风扇直流电机输入占空比的变化,从而产生不同的转动速度。当环境温度低于设置温度27摄氏度时,电机停止转动;当环境温度高于设置温度时,单片机对应输出口输出不同占空比的PWM信号,控制电机开始转动,并随着环境温度增加电机的转速逐渐升高。系统还能动态的显示当前温度和设置温度。。附录(电路原理图下面的电路图的具体功能分别是第一行单片机系统单片机最小系统电源第二行执行单元温度传感器数码管小灯第三行驱动电路74ls138H桥锁存器PTD0/AD1P842PTD1/AD1P943PTD2/KBI1P5/AD1P1046PTD3/KBI1P6/AD1P1