基于STM32的智能风扇.docx
- 文档编号:5888271
- 上传时间:2023-01-01
- 格式:DOCX
- 页数:14
- 大小:255.91KB
基于STM32的智能风扇.docx
《基于STM32的智能风扇.docx》由会员分享,可在线阅读,更多相关《基于STM32的智能风扇.docx(14页珍藏版)》请在冰豆网上搜索。
基于STM32的智能风扇
基于STM32的智能风扇
摘要
随着高新技术的高速蓬勃发展,许多智能产品应运而生。
大家都在积极地改进传统家电,希望给它们加入智能元素,注入新的能量。
智能风扇,一种除了具备传统风扇的基本功能外,还具有远程调控、智能显示温度档位等功能的新式智能家电。
本设计以STM32单片机为基础,另外使用LCD1602液晶显示屏、温度传感器以及人体红外感应模块作为智能模块。
通过软件编程,设计出了一款能够根据外界温度调节风速档位和自动启停的智能风扇。
LCD1602液晶显示屏能够显示出设置好的温度、温度传感器检测到的温度、还有当前风扇是否工作以及档位,方便我们直观地了解风扇状态。
温度传感器能够把周围的温度检测到之后,把数据直接传送到单片机中进行处理。
人体红外感应模块可以检测到风扇前是否有人在活动,进而控制风扇是否工作。
我们使用的Keil5进行软件编程,下载到STM32单片机中来进行软件控制。
关键词:
STM32单片机;电风扇;智能控制;人性化设计
1前言
调档控制麻烦、电机噪声大、摇头方式比较单一的传统风扇不太适合现代人的生活需求。
针对这些传统风扇的缺点,本文以STM32F103C8T6单片机作为管控单元自制了一款经济性好、功耗比较低的智能电风扇。
该风扇结合了DS18B20温度采集模块、LCD1602液晶显示器、人体红外监测模块,运用了智能化的控制技术。
可以进行根据环境温度的采样转变风扇的风速的修改,而且可以把温度和风速档位的情况显示到液晶显示屏上。
1.1本设计的目的、意义及应达到的技术要求
春夏(或者夏秋)交替时期,周围温度还比较高,我们这时候一般会使用传统的电风扇进行降温,这时候传统电风扇的弊端就显现出来了。
第一方面:
我们想要打开电风扇需要手动开启,对于现代人来说这太麻烦了,需要一种远程控制开关的功能。
第二方面:
传统风扇一般使用较大功率、转速高的风扇,然而风扇的功率与其噪音成正比,功率越大,噪音越大,导致平时我们开启风扇造成噪音比较大,不适合入睡。
第三方面:
到了晚上,我们开风扇睡觉的时候,一般会选择较小档位,以免入眠后,周围温度下降导致感冒,而且会加一个定时让电风扇定时关闭,可是有时候电风扇关闭之后,人会感觉炎热,热醒后还得亲自重新打开电风扇,重新调整定时,实在不人性化。
对此,我想到了现在市场上流行的智能家居,里面的智能模块应用到电风扇上,可以解决以上这些问题。
使用温控模块实现自动控制风扇的开关,档位,用微控制器实时控制,用液晶显示器来显示温度以及档位,并且用户们可以设定相应的温度,使得单片机在该值进行启停或者调档的操作,十分准确。
预计风扇应具备功能有:
①传统风扇的档位功能。
②环境温度检测功能。
③人体红外检测功能。
④液晶显示温度功能。
⑤自动模式和手动模式的切换。
1.2本设计在国内外的发展概况及存在的问题
平时夏天炎热,为了电费和环保,人们比较趋向于使用电扇降温。
电扇还是很普遍的,电扇类型有很多,吊扇、电风扇还有新的USB插口的风扇和智能风扇在生活中都能很容易找到。
虽然空调作为另一种降温工具走进了我们的生活,但是电扇的地位还是无可替代的。
它的价格低廉,安装使用方便,功耗相对较低,
是节能环保的降温首选。
商家在选用智能控制芯片时候,大多选用单片机,单片机不仅能够实现
很多高智能化的控制,还不容易被干扰,而且它售价较低适合商家成本计算,广受大家欢迎喜爱。
其实市面上已经有不少的智能风扇问世,种类多种多样,传统的风扇可以手动调档还有定时关,但是就这些功能而言,对于我们现代人来说还是不够人性化、智能化。
在这个市场需求不断提高、风扇在中国市场上仍然占据一定比例的份额的情况下,智能风扇的市场,未来可期。
而为了抢占这个市场,制作的风扇必须得在技术含量上有一定的提升,通过提高风扇的人性化、智能化,符合现代人的使用需求。
同时为了检验自己大学三年的研习情况,我决定结合所学的相关软硬件知识来制作出一个以STM32芯片作为控制单元的电风扇。
该风扇应在兼具之前普通的风扇的功能的基础上,能够实现随着周围环境温度的升降调整风速档位,检测到无人时可以自动关闭,还能时刻显示出当前的档位和温度作为参考,给使用人一个自我设定的可能,达到刚才所说的个性化,智能化。
2方案论证
2.1温度传感器的选择
我们寻找了三种能够作为温度传感器的元件:
方案一:
我们尝试使用热敏电阻来检测温度,当热敏电阻检测到室内温度变化时,其阻值会发生改变,会是电阻相连的电压改变,如果是温度升高,那么阻值会降低,温度降低,阻值则会升高。
我们再使用数模转换芯片ADC0809把刚才的电压模拟信号转换成为数字信号,接着输入给我们的单片机里,让单片机处理后,就能得到我们所需要的加档减档的操作。
方案二:
我们尝试使用热电偶来检测温度,让其利用测温的特性检测出温度后,把信号通过我们的桥式电路传到数模转换器中,数模转换器继续把模拟信号转换成为数字信号,让单片机处理数字信号控制电扇。
方案三:
我们尝试使用数字式的DS18B20来检测温度,这种传感器可以直接
把检测到的温度直接转换成为数字信号,方便单片机直接控制,实现各个控制功能。
对于方案一,在网上购买热敏电阻非常简单而且成本低,利于我们作品的设
计。
热敏电阻有个特性叫负温度系数,当它检测温度的时候,温度高,它的阻值
就会变低;温度低了,阻值反而升高。
它虽然反应速度灵敏,但是不稳定(线性度不好导致),即使是出售电阻元件的厂商,也难以给我们一个正确的阻值曲线
作为参考。
这就导致我们如果使用热敏电阻来作为测温元件,将让我们在测试阶段难度大大提高,需要多次检测阻值对应的温度,而且容易不精确。
哪怕我们使用一些纠正电路来纠正阻值带来的误差,但同时电路的增加会让我们电路复杂性相应提高,让我们设计的作品稳定性变低,不利于作品的设计。
所以该方案不采用。
对于方案二,热电偶自身的线性比较好(和热敏电阻相比较),热电偶是把两种不同的金属焊接在一起,将其尾端通过焊接接在一起,再测出不加热的部位的温度,就可以获得加热点的温度。
但是我从网上所知,这种搭配的电路也比较复杂,而且它对温度的改变也不够灵敏,达不到智能风扇所需的温度检测精度需求,故这个方案也不合适。
对于方案三,DS18B20这个传感器模块比较智能,使用起来也简单方便,这样我们就不需要外加其他放大或者纠正电路了。
比较起来,不仅设计起来简单,而且稳定性也高了不少,温度的测量误差自然而然变少了。
该模块是直接将检测到的信号转换为数字信号输出,简化了电路的设计,而且它使用的是单总线技术,用单根信号线实现时钟和数据的传输,提高了它的抗干扰能力。
2.2控制核心的选择
方案一:
上网查找到电压比较器LM339是可以通过电压值来控制电路的。
我们可以利用这个特点,依靠热敏电阻或者热电偶来感受温度,当电阻值达到某个值或者热电偶测温温度达到某个温度时候,我们再利用集成运放比较电路获得对应的阻值或者温度信号,最后把这个数据转成电信号,依靠这个电信号的大小来调整电扇档位。
方案二:
购买STM32单片机,利用这种普遍使用的高集成控制芯片来作为控制元件。
用编写程序的方式来实现我们想要的测温、调档、显示温度等功能。
对于方案一,采用电压比较器的话相对而言实现起来难度不大,它的电路不是很繁杂,连接起来较为简便,而且它没有编写的需要,省去调试程序的麻烦。
但是能够实现的功能过于单一,而且一旦设定就无法改变,不能让使用者自己调节预设温度,无法满足用户的个性化需求,虽然易于实现,但是不采用。
对于方案二,单片机功能比较强大,可以通过编程实现很多我们想要的操作功能。
可以通过软件使检测的温度显示到显示屏上,用户也可以使用按钮对应显示屏进行操作,改变上下限,达到用户自我调整的目的,满足个性化需求。
而且
利用程序来检测温度,具有较高的精准度,减少误差。
故采用方案二。
2.3控制核心的选择
方案一:
选用五位共阳数码管显示温度,动态扫描方式显示。
方案二:
选用液晶显示屏LCD显示温度。
对于方案一,购买共阳数码管比较简单也比较便宜,上网就可以买到。
而且它亮度比较高,显示温度的时候人眼比较容易看清,而且功耗低,由于我们设计供电是5V,这就很契合我们的需求,况且想要编写数码管的代码也不难。
这种显示方式也由经受了时间的检验,得到了绝大多数人的喜爱。
我们开始学习单片机的时候也是使用共阳数码管来实现数字显示的,具有广泛适用性。
缺点是:
动态扫描是使五个数码管一一点亮,因此会有闪烁,人眼视觉暂留是20ms,当扫描周期小于这一时间,我们人眼将察觉不出闪烁,如果要使用数码管动态扫描,可以增加扫描频率的方法减轻数码管对人眼产生的闪烁感。
对于方案二,液晶显示屏可以显示出数字甚至是图案,美感相对数码管显示好得多,而且硬件连接简单。
2.4调速方式的选择
方案一:
改变风扇的转速的功能,我们尝试使用DAC0832转换芯片来控制。
思路是使用传感器先去测温,让温度数值传到单片机中,单片机就会把数字信号输出出来,模数转化芯片能够把单片机传过来的数字信号变成模拟信号。
利用这个模拟信号控制我们预先放置在电路中的晶闸管,通过晶闸管的导通角和无级调速电路来改变风扇的转速。
方案二:
PWM(脉冲宽度调制)波调速。
我们单片机会把数字信号传出来,这时候PWM波就可以把数字信号利用起来,通过这信号来控制模拟电路。
PWM具有从CPU到被控系统或者元件的信号都是以数字形式来输出的优点,这样一来就不需要进行AD数模转换了。
其他元件控制电路的时候可能需要经过数模转化,可是PWM就不需要,它全程都是依靠数字来通信,这样可以降低电路的杂音问题。
PWM波就是一种矩形波,它只有两种状态,要么拔高的时候显示高电平,要么拉低显示低电平。
比如我们这个电扇用的是5V电源供电,用PWM波控制MOS管的导通时间进而控制电机转速,当PWM波高电平的时候,则MOS管导通,那么电机达到最高转速,如果低电平的时候,那么MOS管截止,电机就会停止转动,我们可以依靠定时器控制PWM波高电平的时长,来细微调整档位的高低。
有如下两种提案:
①利用软件延时,当高电平“1”的延时时间到,对I/O口的电平进行取反,
使高电平转变为低电平,然后再延时一个间隔;当低电平延时时间到时,再对该I/O口电平取反,如此反复进行,最后获得PWM波。
在本设计中应用了此解决方案。
②利用定时器。
控制方法与
(1)相同,但是这里不同的是我们想要使用微控制器中自带的定时器来控制高电平与低电平的转变。
应用此方案时编程相对复杂。
我们来看方案一,该方案能够让智能风扇利用AD数模转换实现无级调速。
反应速度比较灵敏,但是其温控状态下无级调速的性能不高,所以不采用。
对于方案二,使用程序直接实现PWM波调速相较于其他软硬件结合更简单,成本更低,能够充分发挥单片机的控制性能,综上所述,决定使用PWM调速。
3硬控设计
3.1智能风扇的总体设计
本次设计选择STM32系列的F103C8T6型号微控制器作为主控芯片,通过DS18B20来采集温度信号,由LCD1602液晶显示温度和当前档位还有当前模式。
根据用户设定改变上下限,依靠检测的温度不同,STM32单片机将会控制风扇进行调档。
下图1是总体硬件框图:
图1总体硬件框图
3.2各硬件模块介绍
3.2.1DS18B20介绍
人们一般选用的数字温度传感器就是DS18B20了,这种温度传感器体积小(与
三极管大小无异),价格实惠、降低了我们的成本,使用网上购物软件很容易就
可以买到,而且抗干扰能力强,精度较高。
DS18B20的连接方式简单易懂,本设计传感器只需和一个10K电阻并联即可使用。
美国DALLAS半导体公司把DS1820
升级改进成最新的温度传感器DS18B20,它跟传统的热敏电阻比较来说,这款传感器能够把监测出来的温度直接读出,并且可以根据我们软件具体情况,以编程的形式转化成9~12位的数字值读数方式。
DS18B20读写信息只需要单根线,数
据总线可以提供温度变换所需要的输出功率。
总线自身也可以向所连接的DS18B20温度传感器进行电力供应,不需要外接电源,因此这款温度传感器可以使得系统变得更简洁可靠。
①DS18B20采用单总线技术,用一根信号线就实现数据还有时钟的双向传输,提高了它的抗干扰能力。
②使用时不需要接其他的元件,本设计只需要接一个10K的电阻限制它的高低电平即可。
③可以使用数据线进行电力供应,+3V到+5.5V是它的正常电压范围。
④温度测量的区域在-55到+125℃。
测温精度可达0.5℃。
⑤可以依靠程序编写来实现信号的转换,转化为9~12位的数字值读数方式。
⑥用户可以自行调整上下限,达到个性化调档。
DS18B20的初始化方式:
首先我们可以把通信的数据线的电平拉高至“1”这个时候根据时序图我们要做一个短的延时再拉低数据线的电平为“0”,在程序中做一个等待,当低电平到了之后,就进行下一步的750微秒延时,再给一个高电平“1”,再做一个延时等待,等待成功后,传感器就会在15到60微秒之内产生一个的低电平“0”。
但是得做一个超时控制防止传感器进入死循环。
⑦当芯片读取到了低电平“0”,再做一个延时(从第五步开始累积最少480微秒)。
再次拉高数据线的电平至“1”即可。
DS18B20的写操作
首先第一步把通信的数据线的电平拉低至“0”,在程序中做一个延时15微秒的操作,然后使其按照从低到高的顺序,逐个字节发送出来,再做一个45
微妙的延时,接着把数据线的电平拉高至“1”,如此类推这几步之后,发送完字节之后把数据线电平拉高至“1”则停止工作。
DS18B20的读操作:
温度传感器的读操作就比较简单了,因为字节已经传过来,只需要逐个读取即可:
首先将数据线电平拉高至“1”,延时2微秒之后,把电平拉低至“0”,
然后做一个延时3微秒的操作之后,再使其电平拉高至“1”,再做一个延时5
微秒的操作,然后去读数据线的状态得到1个状态位,然后相应元件进行数据处理,最后做一个延时60微秒的操作即可。
DS18B20内部结构及管脚如图2,图3所示:
图2DS18B20内部结构图
图3DS18B20外形及管脚图
3.2.2STM32介绍
我们这次选的是增强型系列时钟的STM32,频率达到了72MHz,这款单片机算是同类型的STM32产品中性能最高的、性价比最好的了。
我们做个比较,基本型时钟的频率为36MHz,这两款产品的价格差不多,但是性能却差的比较多,它
们都内置了32K到128K的RAM闪存,但是SRAM的可存容量还有外设的接口组合不一样,性价比不言而喻。
增强型单片机从RAM执行代码的时候,如果时钟频率
为72MHz的时候,功耗为36mA,相当于0.5mA/MHz秒,这款产品属于功耗最低的产品了。
3.2.3LCD1602液晶显示器介绍
LCD1602液晶显示器,是一款数字式显示屏,它最多能同时显示16列2行,也就是32位字符,是一种点阵型的液晶模块,可以表示字母数字和符号。
但是它由于每一位之间都会有一个点距的间隔,这虽然可以起到了字符间隔和行间距的作用,但同时也不能满足我们想要做出一个好看的图案的想法。
我们这个风扇只需要做出温度和档位显示,所以功能上还是满足的,如果想要显示图案我们可以选用LED显示屏了。
其实物图如图4所示:
图4LCD1602实物图
LCD1602液晶显示屏特性:
它的工作电压在3.3V或者5V,这符合我们设计的5V电源要求,与之相匹配。
而且它自带复位功能,可以自行复位。
具有一个DDRAM显示数据存储器,可以把我们想要的数据显示的同时并保存起来,还可以使用厂家提供的控制命令,使其清屏、让我们显示的字符或者光标闪烁还有让字符移位等多种功能。
还有一个字符发生器CGROM,建有192个5×6点阵,一共有八个此类发生器供用户自定义。
由于它体型较小而且工作电压较低,特别适合那些比较袖珍的系统或者有功耗要求的系统上。
3.2.4DYP-ME003人体感应模块介绍
人体红外线传感器的基本构造和基本原理:
红外传感器,顾名思义是可以接受红外线的一种传感器,这个元件并不需要接触人体就可以检测到人体辐射出来的红外线能量,然后把这些能量信号变成电
压信号发送出来,我们只需要接一个放大电路,就可以使用这个电信号来进行控
制了。
厂家一般是将制作探测元的材料做成薄片,将这些材料做成很薄的薄片,每一片薄片相对的两面各引出一根电极,在电极两端则形成一个等效的小电容。
因为这两个小电容是做在同一硅晶片上的所以它们能够发生自我极化,极性相反的两种电荷(正、负)附着在电容上。
假如红外传感器检测不到红外线能量,附着电容上的正负电荷就会相互抵消,渐渐地,回路就会因为没有正负电荷,而没有电流产生,传感器就会没有输出了。
当有人站在传感器面前但是静止不动时,虽然人会产生红外能量波动释放到传感器的电容片上,但是由于不动,照射到两个探测片上的能量都是相当的,仍然会使得两种极性相反的电荷相互抵消,如同检测不到的情况一样,不会有输出。
当人在传感器探测范围前相对运动,那么照射到探测片的能量就会不对等,不对等也就是会使得两种电荷不均衡,那么传感器就会产生输出。
那么由此可见,红外传感器只会对活动的人体或者释放红外线的能量接近人体的物体才会作出反应。
功能特点:
①全自动感应:
当人体对传感器来说是相对运动的时候,输出高电平,当人体对传感器来说是相对静止的时候,则自动延时关闭高电平,输出低电平。
②感光控制(可选择,出厂时未设):
可设置感光控制,当处于白天或光线强时不工作。
③温度补偿(可选择,出厂时未设):
在夏日当环境温度上升到30~32℃,检测距离稍变短,温度补偿可作一定程度上的数值补偿。
④两种启动方式:
(可跳线选取)
1.不可重复触发方式(L):
即红外模块检测到高电平输出之后,先做一个延时,那么这个输出就会变成低电平。
2.能够重复触发方式(H):
即感应到高电平之后,也就是说有人经过感应器前,那么红外模块就会输出,它仍会进行延时,在延时的这个时间段内,如果人还在感应器的探测范围内,那么红外模块就会一直维持在高电平输出,直到探测不到无人体在活动,延时后才会降为低电平。
⑤感应模块在从高电平转成低电平的过程中,附加一个时间封锁,这个封锁可以使得感应器无法接收或者输出任何信号,这使得同时做到“探测输出时间”还有“屏蔽时间”成为可能,可应用于间隔检测产品;这个功能可以在一定时间内(0.5到99s),减少运作过程中负载切换产生的干扰。
⑥正常电压范围比较宽:
工作电压理论设置在DC4.5V-20V。
⑦耗能较低:
静态电流<50微安,特别合适那些依靠干电池进行供电的自动
化产品。
⑧输出高电平信号:
便于我们和各种各样的电路进行连接。
3.2.5PWM风扇介绍
下面图6就是PWM风扇部分:
图6PWM风扇部分
这里我们选用一个1K电阻R4来对电平进行限制,只有当单片机给DJ一个高电平,8050才会导通(8050高电平导通),这时候的VCC和GND就可以导通了。
10K电阻R14在这里是用作上拉电阻,如果电路不接VCC电流就直接导通,那么电路中的8050无法进行控制。
这时候的8550是正常工作的。
然后我们通过编程控制一定时间内通过8050三极管的高电平脉冲次数,就可以控制M1电动机的工作频率了,即控制风扇档位的高低。
3.3各部分电路设计
3.3.1温度传感器电路
温度传感器我们使用的是DS18B20,该模块无需外接的元件,所以电路比较简单。
DS18B20数字温度传感器的工作原理:
传感器采集现场温度,将测量到的数据经由STM32的GPIO口传送到芯片内进行处理,再由STM32芯片传送数据到液晶显示屏上进行数字化显示。
并且将数据与用户设定的上下限进行对比,如果采集的温度高于上限值或者低于下限值,则芯片就会控制风扇电机转速进行调整。
图5为DS18B20温度计原理图:
图5 DS18B20温度计原理图
3.3.2LCD1602液晶屏显示电路
图6 液晶显示电路
4软件设计
4.1软件系统总体设计
本系统使用了C语言编程。
采用模块化的设计,除了主程序外,还添加了子程序,比如延时,液晶显示屏,人体红外模块子程序等。
分别执行直流电机驱动调速以及温度的信号采集,液晶显示屏显示温度以及档位模式等。
编辑环境采用集成开发环环境Keil。
程序总体运行流程图如下:
图7程序运行流程图
4.2系统初始化程序设计
该系统初始化最主要包含了STM32系统定时器的初始化,GPIO口初始化以及LCD1602液晶显示器的初始化。
图8初始化程序流程图
4.3温度采集与显示算法
DS18B20温度传感器进行温度采集时,要依次进行初始化,ROM操作指令,
存储器操作指令,数据传输等操作。
具体程序设计流程如图9:
图9温度采集与显示流程图
5系统调试
5.1硬件调试
5.1.1硬件调试方法
①检查电路:
焊接好电路后,给电路通电之前,有几步需要确认,首先要对照电路图检查电路连线,这个很关键。
因为正负引脚接反、电源与地短路或者二极管的接线方向还有电解电容的极性出错、甚至是集成电路和晶体管的引脚接错了,这些问题都会造成我们的系统出错,无法工作。
我之前就尝试过正负极接反造成元件无法工作,这是检查的第一步,是进行其他检查的前提要求。
看看焊点牢不牢固,有没有虚焊的情况发生(可以轻轻地摇一摇元器件是否松动),特别检查电源系统,防止电源短路和极性错误,必要时使用万用表检查,缩短排查时间。
我刚焊接好电路板后比较兴奋,想着这么小心地焊接应该没有错了,一排查后发现自己的温度传感器的VCC和GND接反了,还有液晶显示屏的背光VCC没有
焊接好,还好检查了一遍,不然通电后就可能烧坏元件了。
②排除电源故障:
在通电前,要检查电源电压的正负极有没有接反还有幅值是否符合设计,否则容易损坏集成块。
加电后检查各插件上的引脚的电位,检测VCC与GND之间的电压,输出电压在4.8到5V之间都属于正常工作范围。
③通电观察:
确保电路板电源端不会因为人为失误造成短路后,给电路尝试接通电源。
电源接通后不应急于用仪器观测数据和波形,而是要观察是否有异常现象,如冒烟了或者出现异常气味、放电或者是元器件发热发烫。
如果有以上现象就立刻关闭电源,待找到故障发生的原因排除掉后再尝试通电。
最后检测每个模块的电源引脚电压是不是正常,确保集成电路已经通电开始工作。
④指标测试:
确保电路无误,调试正常之后,根据设计要求进行电路的试验。
测量并记录数据,对数据进行分析,最后做出测试的结论,确保电路符合设计要求,如果有不符的地方,认真找出问题所在,排除故障。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 STM32 智能 风扇