目录
摘 要
空气净化器是一种能够去除空气中有害物质,改善空气质量的设备。空气净化器的工作原理和吸尘器原理有点类似,都是由马达、风扇、过滤系统等三大结构组成。马达风扇带动空气循环,将污浊空气送入净化器内经过过滤系统吸附、分解等一系列操作后,形成洁净气体排出。空气净化器的过滤系统主要通过静电、负离子、紫外线UV灯、臭氧、光触媒和冷触媒等组件进行工作,实现对空气中的颗粒物、微生物、有害气体等的去除和分解。
本文介绍了一种基于STM32F1系列单片机完成智能空气净化器控制系统的设计,实现包括温湿度,甲醛与PM2.5的检测和静电发生器、负离子发生器、紫外线UV灯、臭氧发生器、电机PWM调速控制等功能。
本文作者主要完成了以下工作:
1.使用DHT11进行温湿度检测,通过单总线接口与单片机通信,获取温湿度数据,显示在OLED模块上,同时根据温湿度的变化调节风机的转速,保持室内的舒适度。
2.使用ZPH04 红外粉尘传感器进行PM2.5检测,通过UART接口与单片机通信,获取PM2.5数据,显示在OLED上,同时根据PM2.5的浓度调节静电发生器、负离子发生器、紫外线UV灯、臭氧发生器等过滤组件的工作状态,保持空气的清洁度。
3.换网开关检测,用轻触开关模拟,通过GPIO接口与单片机连接,检测过滤网的使用情况,当过滤网需要更换时,通过OLED模块提示用户,同时控制风机停止运行,避免空气净化器的效率降低或损坏。
4.空气净化模块控制,包括静电发生器、负离子发生器、紫外线UV灯、臭氧发生器控制,使用LED灯模拟,通过GPIO接口与单片机连接,控制静电发生器的开关,根据PM2.5的浓度自动调节静电发生器的工作时间,保证空气中的颗粒物被有效去除。
5.电机(风机)PWM调速控制,可使用直流电机模拟,通过PWM接口与单片机连接,控制风机的转速,根据温湿度和空气质量的变化自动调节风机的转速,保持空气的流通和舒适度。
6.显示与按键模块,采用OLED模块实现显示,通过I2C接口与单片机通信,显示温湿度、PM2.5、过滤网状态等信息,同时提供手动模式和自动模式的切换,手动模式下,用户可以通过按键控制风机的转速和过滤组件的开关,自动模式下,单片机根据检测数据自动控制风机的转速和过滤组件的开关。
7.完成一组完整自动空气净化程序,完整程序包括并不限于粉尘和PM2.5检测,控制风机转速,维持空气质量良好状态,正常状态下,风机保持30% 低速平稳运行。经过最终的整体调试,本系统基本实现了预期的功能。
关键词:空气净化器;STM32F1;过滤系统;控制系统
1.引 言
1.1课题背景
随着现代社会的不断进步和科技的飞速发展,人们对于生活品质的追求已经不再局限于物质层面,而更加注重健康和环境的全面提升。在这个背景下,空气净化技术的创新和发展成为了改善室内空气质量、维护居住者身体健康的重要途径。全球范围内,城市居民对于污染物质的担忧不断升温,尤其是细颗粒物、甲醛、二氧化碳等对健康构成潜在威胁的污染物质。
在这一背景下,设计一款智能型空气净化器(如图1-1),通过科技手段更加精准、高效地去除多种污染物,成为当前环境科学和工程技术的热点之一。本课题选用STM32F103RCT6微控制器作为核心,借助先进的传感技术、智能控制算法以及通信模块,旨在构建一种能够适应多样化室内环境、实现智能联动的空气净化解决方案。
本研究在技术层面具有独创性和前瞻性,将不同领域的创新技术有机结合,形成一种集成化、智能化的系统。通过充分利用STM32F103RCT6微控制器的强大性能,我们能够实现实时、精准的数据处理和控制,从而提高空气净化器的工作效能。同时,多传感器融合监测的设计理念使得这款净化器能够更全面地感知并应对不同污染源,确保室内空气质量的全面净化。
在用户界面设计方面,我们注重提供友好直观的操作体验,使用户能够轻松了解室内空气状况,并进行个性化的设定。此外,通过通信模块的应用,我们实现了空气净化器与其他智能设备的互联,为用户创造了更加便捷、智能的生活环境。
因此,本研究不仅在技术创新上具有重要意义,更是为满足人们对于健康生活的期望提供了实际解决方案。通过对空气净化器的设计与实现,我们有望为推动智能家居产业的发展、提升室内空气质量、改善人们生活环境等方面做出积极贡献。在这一引人注目的研究课题中,我们将深入探讨各种技术手段的整合,以期为未来智能环境和健康生活的建设提供新的范本和启示。
图1-1 智能空气净化器
1.2国内外研究现状
1.2.1国外研究现状
1.先进的传感技术应用
在国际研究领域,空气净化技术的发展日益引起广泛关注。研究者们普遍致力于采用先进的传感技术,以提高空气质量监测的准确性和实时性。光电散射颗粒物传感器、红外光谱气体传感器等高性能传感器的应用,使得国际上的空气净化器更为智能和适应不同污染源的能力更强。
2.智能控制算法的应用
国际上的研究者倾向于采用模糊控制、神经网络控制等先进算法,以实现对空气净化器的智能化调控。这些算法通过对传感器实时数据的综合分析,能够更精确地调整净化器的运行模式,提高净化效率。在不同国家和地区,研究者们纷纷提出了适应于当地环境和气象条件的控制策略,推动了空气净化技术的不断创新。
3.智能家居系统整合
国际上,智能家居概念的普及和智能化生活方式的提倡,使得研究者们开始将空气净化器与智能家居系统进行有机整合。通过联动各类智能设备,如智能温控系统、智能照明系统等,形成全方位的室内环境监控和调控网络。这不仅提升了用户对居家环境的感知和掌控能力,也为空气净化技术在实际生活中的应用带来了更多可能性。
4.前沿材料与技术的引入
国际研究者在空气净化材料方面进行了深入研究,引入一些新型的净化材料,如纳米材料、光催化材料等。这些材料具有更高的吸附能力和催化降解能力,有望进一步提高空气净化器的净化效果。此外,国际上还有一些研究关注生物净化技术,通过植物、微生物等生物体的作用来实现对空气污染物的去除。
5.政策法规推动
一些国际地区制定了严格的空气质量标准和法规,推动了空气净化技术的研究和应用。这种法规的制定既促使了空气净化器行业的健康发展,也促进了技术创新,推动了更多环保型、高效能的产品投放市场。
综合而言,国际研究者在空气净化技术领域的研究更加注重于技术的先进性和系统的智能化。通过引入新材料、新技术和前沿的控制策略,国际研究者不断推动着空气净化技术的发展,并为解决全球范围内的空气污染问题提供了创新性的解决方案。这也对国内的研究者提出了更高的挑战,需要更加紧密地关注国际领先水平,吸取国际研究的经验,推动中国空气净化技术的全面提升。
1.2.2国内研究现状
在国内,空气净化技术的研究取得了显著的进展,为改善室内空气质量提供了重要支持。以下是当前国内对于相关空气净化器研究现状的几个优势方面:
1.传感技术的进展
在传感技术领域,国内的研究者积极探索适用于空气净化器的高性能传感器。光电散射颗粒物传感器、光电化学传感器等国产传感器的研发与应用成为国内研究的亮点。这些传感器不仅具有较高的灵敏度和稳定性,而且在成本上更具竞争力,为国内空气净化技术的本土化提供了可行性。
2.微控制器技术的采用
国内研究者在微控制器技术的应用上取得了一系列成果。STM32系列微控制器由于其强大的性能、低功耗和丰富的外设接口,在国内空气净化器设计中得到广泛应用。这些微控制器不仅提供了可靠的硬件支持,而且为系统的灵活性和可扩展性带来了便利。
3.智能控制算法的优化
国内研究者在智能控制算法方面进行了深入研究,尤其注重在提高净化器系统适应性和智能化水平方面的改进。通过引入模糊逻辑、遗传算法等先进算法,国内研究者致力于提高空气净化器对复杂环境的适应性,实现更加精准和高效的空气净化。
4.智能家居系统的发展
随着智能家居概念的兴起,国内研究者也开始将空气净化器与智能家居系统相融合,如图1-2。通过整合智能家居平台,实现对空气净化器的远程监控和智能调控。这一趋势不仅提高了用户对室内环境的感知能力,也为居家生活的智能化奠定了基础。
5.行业标准和政策的推动
在国内,相关行业标准和政策的推动也加速了空气净化技术的研究与发展。国家对于空气净化器性能、能效等方面的要求日益提高,推动了国内相关产业的技术创新和产品升级。
综上所述,国内在空气净化技术领域的研究不仅注重技术创新,更强调本土化需求。通过自主研发先进的传感器、采用国产微控制器、优化智能控制算法,国内研究者积极应对挑战,推动了空气净化技术在国内市场的发展。然而,在面对全球环境问题的挑战时,国内研究者仍需密切关注国际先进技术的发展趋势,加强国际合作,共同推动空气净化技术的创新与进步。
图1-2智能化家居系统与空气净化技术
1.3应用场景
1.智能家居场景:
控制与监测: 利用STM32F103RCT6的低功耗和其他相关模块,用户可以通过自发控制来达到令本产品实时监测室内空气质量并控制净化器的效果。
时间调度与自动化: 设计相关开关功能,让用户可以预设不同的净化器工作模式,实现智能化的空气净化。
2.室内环境优化:
利用STM32F103RCT6的处理能力,实现净化器智能适应室内空气质量,自动调整工作模式以维持良好的室内环境。
传感器数据分析: 使用传感器监测空气中的各种污染物,通过STM32F103RCT6进行实时数据分析,提供详细的室内空气质量报告。
3.医疗健康应用:
配置高效检测和空气净化模块,使净化器能够有效除散室内空气中的粉尘颗粒和病毒,为用户提供更健康的室内环境。
4.学校和图书馆应用:
安静模式与定时运行:设计净化器在空气环境优良状况下的安静模式(转速调整),确保在学校和图书馆等空气较为清新的安静环境下工作时不产生噪音干扰,同时支持定时运行功能,避免用户手动干预。
空气质量可视化: 利用STM32F103RCT6连接OLED显示屏,实现对空气质量的可视化显示,提醒用户当前室内空气状况。
2.总体设计
2.1系统功能描述
2.1.1系统硬件选用及其功能描述
基于STM32F103RCT6的空气净化器系统是一款高度智能化、可靠性强的设备,致力于提供卓越的室内空气质量控制体验。该系统充分发挥STM32F103RCT6微控制器的优势,结合先进的传感技术和实时操作系统,以应对日益严峻的空气污染问题。
1.嵌入式系统架构:
STM32F103RCT6微控制器:
我们选用了STM32F103RCT6单片机开发板(图2-1)作为我们本次系统的核心,提供高性能的计算和实时操作系统支持,以保证对多种传感器数据的高效处理和系统的快速响应。
外设接口:
集成了与传感器、显示屏、电机驱动模块等外设的接口,为系统提供了良好的可扩展性和灵活性。
图2-1 STM32F103RCT6开发板
2.传感器技术:
多传感器融合:
整合ZPH04传感器(图2-2)、DHT11传感器(图2-3)等多种传感器,实现对室内环境的多方面监测,采用此类高精度传感器,确保准确获取各项参数,为系统提供精准的室内空气质量数据。
ZPH04红外粉尘传感器产品概述:
ZPH04红外粉尘传感器整合了红外PM2.5检测技术,采用粒子计数原理对环境中PM2.5进行检测。可灵敏检测直径1μm以上灰尘颗粒物。传感器在出厂前经过老化、调试、标定、校准,具有良好的一致性和较好的灵敏度。
传感器特点:长期稳定性好、灵敏度高、接口输出方式丰富、一致性好、模块化设计,抗干扰性好、易安装维护。
主要应用:空气净化器、新风系统、空气清新机、空调系统、民用及商用空调、烟雾报警。
图2-2 ZPH04红外粉尘传感器
DHT11数字温湿度传感器产品概述:
DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器。它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有枀高的可靠性与卓越的长期稳定性。传感器包括一个电容式感湿元件和一个NTC 测温元件,并与一个高性能8位单片机相连接。
应用范围:暖通空调、除湿器、农业、冷链仓储、测试及检测设备、消费品、汽车、自动控制、数据记录器、气象站、家电、湿度调节器、医疗、其他相关湿度检测控制。
产品亮点:成本低、长期稳定、相对湿度和温度测量、品质卓越、超快响应、抗干扰能力强、超长的信号传输距离、数字信号输出、精确校准。
图2-3 DHT11数字温湿度传感器
3.用户界面与交互:
0.96英寸OLED屏(SSD1306)显示:
配备大尺寸、高分辨率的0.96英寸OLED屏显示(图2-4),提供直观的用户界面,方便用户实时了解室内空气状况和操作设备。
图2- 4 SSD1306 0.96英寸OLED显示屏
用户友好设计:
设计简洁、直观的用户界面,以确保用户能够轻松使用系统的各项功能,同时查看相关的参数设置。
本项目旨在通过各个系统模块的应用来提供一款智能、高效、可靠的室内空气净化器,满足用户对于清新健康空气的需求,并为用户提供良好的使用体验。
2.1.2需求分析
1.空气质量监测需求:
实时监测:
系统需要能够实时监测室内空气中的PM2.5、CO2等污染物浓度,以提供准确的空气质量数据。
多传感器融合:
系统应支持多种传感器的融合,以综合评估室内环境状况。
2.用户界面与交互需求:
直观显示:
用户界面需要以直观的方式展示当前室内空气质量、工作状态和其他相关信息,通过OLCD屏和按键等显示控制方式提供友好的用户交互体验。
3.系统优化与扩展需求:
低功耗设计:
系统整体功耗较低,此运行模式可以达到延长设备寿命,并减少能耗的目的。
通过以上需求分析,系统能够满足用户对于实时、智能、可靠的室内空气净化需求,并提供了一系列人性化、用户友好的功能。系统以实时监测为基础,通过先进的传感器技术,全方位、多角度地感知室内的空气质量。这种细致入微的监测不仅包括PM2.5和环境温湿度等关键参数,还对其他可能的污染源进行全面检测,确保用户能够清晰了解室内环境的整体状况。在用户界面与交互方面,系统以简洁直观的设计为用户提供了友好的使用体验。配备OLED屏和按键,用户能够通过直观的界面轻松了解室内空气状况,并且能够通过按键进行各种设置和操作,以便根据需要进行实时调整,以确保系统在不同场景下都能够为用户提供良好的使用体验。
2.2系统设计方案
2.2.1系统总体设计
系统总体设计旨在确保基于STM32F103RCT6的空气净化器能够高效、智能地实现空气质量监测与净化。以下我们本次项目系统设计的主要方案:
1.硬件设计:
主控芯片:
采用STM32F103RCT6微控制器,充分发挥其高性能和实时操作系统的优势,以支持复杂的控制算法和实时数据处理。
传感器模块:
集成ZP04传感器、DHT11温湿度传感器、电器驱动电路等,确保全面、准确地监测室内空气质量参数且对其起一定的净化作用。
OLED屏和按键:
采用OLED屏提供清晰的实时数据显示,配合按键提供用户友好的本地操作和设置。
2.软件设计:
嵌入式系统架构:
基于STM32CubeMX工具进行系统架构设计,合理分配主控资源,确保系统的稳定性和高效性。
实时操作系统:
利用STM32F103RCT6的实时操作系统,实现对空气质量数据的实时处理和控制算法的精准执行。
控制算法设计:
设计智能控制算法,通过实时反馈和学习机制,根据传感器数据自动调节净化器的工作模式,提升净化效果。
用户界面设计:
利用0.96英寸OLED屏幕展示实时空气质量数据、工作状态和设置选项,通过按键实现用户的本地操作和设置。
3.系统优化与扩展设计:
低功耗设计:
充分利用STM32F103RCT6的低功耗特性,确保系统长时间运行而不损害设备寿命。
未来固件升级:
支持相关固件升级,用户可以方便地通过更换外接器件的方式获取最新的功能和性能优化,确保设备整体效用在日后仍然保持领先地位。
基于以上系统设计方案进行合理讨论后,我们旨在打造一款高性能、智能、安全可靠的空气净化器,以满足用户对清新室内空气的追求,并为以后的优化设计奠定相关基础。
2.2.2开发环境
为了有效地开发基于STM32F103RCT6的空气净化器系统,我们选择了一系列现代化的开发工具和硬件设计平台,以确保项目的高效开发和可靠性。
1.主控板:
STM32F103RCT6微控制器:
作为系统的主控芯片,提供强大的计算能力和丰富的外设接口,支持实时操作系统和控制算法的顺利运行。
2.开发工具及版本:
嵌入式开发工具:
使用KEIL 5作为主要的嵌入式开发工具,该版本具有强大的集成开发环境(IDE),能够有效管理和调试STM32系列的嵌入式系统。Keil5是一款非常友好和强大的C语言软件开发系统。为我们提供了清晰直观的操作界面,而且使用起来十分的轻松便捷,并具备编译器、编译器、安装包和调试跟踪,主要新增包管理器功能,支持多种编译方式和相关环境。适合我们使用。
编译器:
配套KEIL 5的ARM编译器,用于将高级编程语言代码转化为STM32F103RCT6可执行的二进制代码。
调试工具:
利用KEIL 5的调试功能,包括实时监视、变量查看和实时跟踪,以保障系统在开发过程中的稳定性和可调试性。
3.硬件设计:
设计工具:
使用Altium Designer进行硬件设计,该工具提供了先进的电路设计和PCB布局功能,确保电路板设计的精准和高效。Altium Designer作为一款专业的电子设计自动化(EDA)软件,专注于电路板设计、仿真和制造领域。它提供了全面的设计解决方案,整合了原理图设计、PCB设计、信号完整性分析、模拟仿真、设计规则检查和制造文件生成等功能。
具备直观而强大的用户界面,Altium Designer使设计师能够轻松创建复杂的电路板设计。支持多层PCB设计,可迅速进行电路板的布局和布线,同时提供了丰富的元器件库,包括标准元件和供应商特定元件,以便设计师快速找到所需元件并进行设计。
Altium Designer还配备强大的仿真工具,能够进行数字电路、模拟电路和混合信号电路的仿真和性能分析。设计师可利用仿真工具验证电路的功能性、时序和稳定性,并通过优化设计来满足项目要求。Altium Designer的全面功能和用户友好的界面使其成为电子设计领域的重要工具。
主控板设计:
通过Altium Designer设计主控板,包括主控芯片的布局、外设接口的连接以及电源电路的设计,以最大限度地优化电路板的性能和可靠性。
传感器集成:
在硬件设计中,对ZP04和DHT11传感器进行合理的布局和连接,以确保传感器能够稳定、高效地获取室内空气质量数据。
PWM波电机驱动:
集成PWM波电机驱动模块,通过主控板的PWM输出占空比控制电机的运行,以实现精确的风速控制。
图2- 5 PWM波驱动直流电机原理示意图
通过以上选择的开发环境,我们能够确保在项目开发的各个阶段都能够高效、稳定地进行工作,同时能够快速响应和解决可能出现的问题。这样的开发环境不仅提高了开发效率,还有助于确保最终交付的空气净化器系统达到高质量的标准。
2.3设计理念
2.3.1总体框图
2.3.2硬件应用描述
1.主控芯片STM32F103ZET6:
采用STM32F103ZET6微控制器,搭载高性能的ARM Cortex-M3内核,提供高性能的计算能力和强大的实时控制能力,使其成为嵌入式系统的理想选择。
STM32F103RCT6还备多种通用输入/输出端口、定时器、串口通信等丰富的外设接口,支持各种传感器和执行器的连接,使系统具备出色的扩展性。集成闪存和RAM,为程序和数据提供充足的存储空间,支持系统固件的灵活更新和运行时数据的高效处理。内置实时时钟模块,确保系统具有准确的时间基准,适用于需要时间敏感性的应用场景。具备低功耗运行的方式,有效延长设备的使用寿命,特别适用于长时间运行且对功耗要求较高的应用
STM32F103RCT6还为我们提供了多种通信接口,包括SPI、I2C、USART等,方便与各类外部设备进行高效的数据交互。其也具备工业级温度范围和抗干扰能力,适用于各种复杂的工业环境。并支持实时操作系统,如FreeRTOS,为系统的实时性和多任务处理提供良好支持。
通过强大的主控芯片,整个系统得以高效、可靠地执行各种任务,保证空气净化器在不同环境和工作条件下都能够稳定运行。综合而言,STM32F103RCT6以其性能强大、外设丰富和适应性广泛等特点,为嵌入式系统设计提供了可靠的硬件基础。
2.传感器集成:
集成ZPH04传感器,用于准确检测室内空气中的PM2.5颗粒物浓度。
配备DHT11传感器,负责测量室内温度和湿度,提供全面的环境监测数据。
3.电机驱动与风扇控制:
采用PWM波控制的电机驱动,用于驱动净化器中的风扇。这种控制方式能够精确地调整风扇转速,以满足不同的空气净化需求。
4.OLED屏与按键:
配备OLED屏幕,用于实时显示室内空气质量、温度、湿度等关键数据。用户可以通过简洁的界面获取实时信息。
使用按键进行本地操作,用户可手动调整设置,如风速、定时等功能。
5.LED灯模拟的静电发生器:
集成LED灯模拟的静电发生器,用于模拟空气中的静电情况,提高净化效果。
6.继电器:
集成继电器,用于控制系统的开关和各个组件的电源供应。通过继电器,系统能够灵活地实现各种工作模式。
7.电源电路:
设计稳定可靠的电源电路,确保系统各组件能够正常运行。采用过压、过流保护等技术,提高整个系统的安全性和稳定性。
8.PCB布局与连接:
利用Altium Designer进行PCB布局设计,确保电路板的紧凑性和信号传输的稳定性。精心设计的连接方案保证各组件协同工作,提高系统整体性能。
通过这些硬件组件的有机结合,空气净化器系统能够实现对室内环境的全面监测和智能控制,为用户提供高效、便捷、安全的空气净化体验。
3详细设计
3.1硬件设计与实现
3.1.1DHT11原理图设计
图3- 1 DHT11温湿度检测模块典型电路
微处理器与 DHT11 的连接典型应用电路如上图所示,DATA 上拉后与微处理器的 I/O 端口相连。
1.典型应用电路中建议连接线长度短于 5m 时用 4.7K 上拉电阻,大于 5m 时根据实际情况降低上拉电阻的阻值。
2. 使用 3.3V 电压供电时连接线尽量短,接线过长会导致传感器供电不足,造成测量偏差。
3. 每次读出的温湿度数值是上一次测量的结果,欲获取实时数据,需连续读取 2 次,但不建议连续多次读取传感器,每次读取传感器间隔大于 2 秒即可获得准确的数据。
4. 电源部分如有波动,会影响到温度。如使用开关电源纹波过大,温度会出现跳动。
3.1.2DHT11串行通信说明(单线双向)
◎单总线说明
DHT11 器件采用简化的单总线通信。单总线即只有一根数据线,系统中的数据交换、控制均由单总线 完成。设备(主机或从机)通过一个漏枀开路或三态端口连至该数据线,以允许设备在不发送数据时能够 释放总线,而让其它设备使用总线;单总线通常要求外接一个约 4.7kΩ 的上拉电阻,这样,当总线闲置时, 其状态为高电平。由于它们是主从结极,只有主机呼叫从机时,从机才能应答,因此主机访问器件都必须严格遵循单总线序列,如果出现序列混乱,器件将不响应主机。
◎单总线传送数据位定义
DATA 用于微处理器与 DHT11 之间的通讯和同步,采用单总线数据格式,一次传送 40 位数据,高位先出。
数据格式: 8bit 湿度整数数据 + 8bit 湿度小数数据 + 8bit 温度整数数据 + 8bit 温度小数数据 + 8bit 校验位。
注:其中湿度小数部分为 0。
◎校验位数据定义
“8bit 湿度整数数据 + 8bit 湿度小数数据 + 8bit 温度整数数据 + 8bit 温度小数数据”8bit 校验位等于所得结果的末 8 位。
图3- 2 DHT11温湿度传感器数据时序
3.1.3ZPH04 红外粉尘传感器
图3-3 ZPH04红外粉尘传感器外形尺寸及检测原理
图3-4 ZPH04红外粉尘传感器通讯协议
3.2软件设计与实现心得体会
3.2.1软件框图
3.2.2代码模块说明
3.2.2.1整体系统模块说明
int main(void)
{
HAL_Init(); /* 初始化HAL库 */
SystemClock_Config(RCC_PLL_MUL9); /* 设置时钟, 72Mhz */
Delay_Init(72); /* 延时初始化 */
usart_init(115200); /* 串口1初始化 */
USART2_Init(9600); /* 串口2初始化 */
Led_Init(); /* LED初始化 */
DHT11_Init(); /* DHT11初始化 */
OLED_I2C_Init(); /* OLED I2C初始化 */
OLED_Init(); /* OLED初始化 */
rtc_init(); /* 初始化RTC */
EXTI_Init(); /* EXTI初始化 */
ZPH04_Init(); /* ZPH04初始化 */
MX_SPIFlash_Init(); /* SPI初始化 */
Key_Init();
GTIM1_PWM_chy_Init(720, 1000);
GENERAL_TIMx_Init();
HAL_TIM_PWM_Start(&htimx, TIM_CHANNEL_1);
Air_begin();
line();
MX_TIM3_Init();
MX_TIM4_Init();
HAL_Delay(1000);
HAL_TIM_Base_Start_IT(&htim4);
HAL_TIM_Base_Start_IT(&htim3);
while (1)
{
if (tim > 10)
{
tim = 0;
}
Key_scan();
Led_scan();
Menu_key_set(); /* 菜单函数 */
}
}
3.2.2.2直流电机风扇模块
/**
* 功能: 通用定时器PWM输出初始化函数
* 参数: None
* 返回: None
* 说明: None
*/
void GTIM1_PWM_chy_Init(uint16_t arr, uint16_t psc)
{
TIM_OC_InitTypeDef timx_oc_pwm_chy = {0}; /* 定时器PWM输出配置 */
g_timx_pwm_chy_handle.Instance = GTIM_TIMX_PWM; /* 定时器x */
g_timx_pwm_chy_handle.Init.Prescaler = psc; /* 预分频系数 */
g_timx_pwm_chy_handle.Init.CounterMode = TIM_COUNTERMODE_UP; /* 向上计数模式 */
g_timx_pwm_chy_handle.Init.Period = arr; /* 自动重装载值 */
g_timx_pwm_chy_handle.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; /* 时钟分频因子 */
HAL_TIM_PWM_Init(&g_timx_pwm_chy_handle); /* 初始化PWM */
timx_oc_pwm_chy.OCMode = TIM_OCMODE_PWM1; /* 模式选择PWM1 */
timx_oc_pwm_chy.Pulse = ( arr + 1 ) / 2; /* 设置比较值,此值用来确定占空比 */
/* 默认比较值为自动重装载值的一半,即占空比为50% */
timx_oc_pwm_chy.OCPolarity = TIM_OCPOLARITY_LOW; /* 输出比较极性为低 */
HAL_TIM_PWM_ConfigChannel(&g_timx_pwm_chy_handle, &timx_oc_pwm_chy, GTIM_TIMX_PWM_CHY); /* 配置TIMx通道y */
HAL_TIM_PWM_Start(&g_timx_pwm_chy_handle, GTIM_TIMX_PWM_CHY); /* 开启对应PWM通道 */
}
/**
* 功能: 定时器输出PWM MSP初始化函数
* 参数: None
* 返回: None
* 说明: None
*/
void HAL_TIM_PWM_MspInit(TIM_HandleTypeDef *htim)
{
if (htim->Instance == GTIM_TIMX_PWM)
{
GPIO_InitTypeDef gpio_init_struct;
GTIM_TIMX_PWM_CHY_GPIO_CLK_ENABLE(); /* 开启通道y的GPIO时钟 */
GTIM_TIMX_PWM_CHY_CLK_ENABLE(); /* 开启定时器X时钟 */
gpio_init_struct.Pin = GTIM_TIMX_PWM_CHY_GPIO_PIN; /* 通道y的GPIO口 */
gpio_init_struct.Mode = GPIO_MODE_AF_PP; /* 复用推挽输出 */
gpio_init_struct.Pull = GPIO_PULLUP; /* 上拉 */
gpio_init_struct.Speed = GPIO_SPEED_FREQ_HIGH; /* 高速 */
HAL_GPIO_Init(GTIM_TIMX_PWM_CHY_GPIO_PORT,&gpio_init_struct); /* 初始化IO */
}
}
void TIM_SetTIM1Compare1(uint32_t compare)
{
TIM1->CCR1=compare;
}
//定时器1中断服务函数
void TIM1_IRQHandler(void)
{
HAL_TIM_IRQHandler(&g_timx_pwm_chy_handle);
}
3.2.2.3温湿度检测模块
/**
* 函数功能: 一次完整的数据传输为40bit,高位先出
* 输入参数: DHT11_Data:DHT11数据类型
* 返 回 值: ERROR: 读取出错
* SUCCESS:读取成功
* 说 明:8bit 湿度整数 + 8bit 湿度小数 + 8bit 温度整数 + 8bit 温度小数 + 8bit 校验和
*/
uint8_t DHT11_Read_TempAndHumidity(DHT11_Data_TypeDef *DHT11_Data)
{
uint8_t temp;
uint16_t humi_temp;
/*输出模式*/
DHT11_Mode_Out_PP();
/*主机拉低*/
DHT11_Dout_LOW();
/*延时18ms*/
Delay_ms(18);
/*总线拉高 主机延时30us*/
DHT11_Dout_HIGH();
DHT11_Delay(30); //延时30us
/*主机设为输入 判断从机响应信号*/
DHT11_Mode_IPU();
/*判断从机是否有低电平响应信号 如不响应则跳出,响应则向下运行*/
if(DHT11_Data_IN()==GPIO_PIN_RESET)
{
/*轮询直到从机发出 的80us 低电平 响应信号结束*/
while(DHT11_Data_IN()==GPIO_PIN_RESET);
/*轮询直到从机发出的 80us 高电平 标置信号结束*/
while(DHT11_Data_IN()==GPIO_PIN_SET);
/*开始接收数据*/
DHT11_Data->humi_high8bit= DHT11_ReadByte();
DHT11_Data->humi_low8bit = DHT11_ReadByte();
DHT11_Data->temp_high8bit= DHT11_ReadByte();
DHT11_Data->temp_low8bit = DHT11_ReadByte();
DHT11_Data->check_sum = DHT11_ReadByte();
/*读取结束,引脚改为输出模式*/
DHT11_Mode_Out_PP();
/*主机拉高*/
DHT11_Dout_HIGH();
/* 对数据进行处理 */
humi_temp=DHT11_Data->humi_high8bit*100+DHT11_Data->humi_low8bit;
DHT11_Data->humidity =(float)humi_temp/100;
humi_temp=DHT11_Data->temp_high8bit*100+DHT11_Data->temp_low8bit;
DHT11_Data->temperature=(float)humi_temp/100;
/*检查读取的数据是否正确*/
temp = DHT11_Data->humi_high8bit + DHT11_Data->humi_low8bit +
DHT11_Data->temp_high8bit+ DHT11_Data->temp_low8bit;
if(DHT11_Data->check_sum==temp)
{
return SUCCESS;
}
else
return ERROR;
}
else
return ERROR;
}
3.2.2.4粉尘传感器模块
/**
* 功能: ZPH04数据校验函数
* 参数: None
* 返回: None
* 说明: None
*/
unsigned char FucCheckSum(unsigned char *i, unsigned char ln)
{
unsigned char j, tempq = 0;
i += 1;
for (j = 0; j < (ln - 2); j++)
{
tempq += *i;
i++;
}
tempq = (~tempq) + 1;
return (tempq);
}
/**
* 功能: ZPH04函数
* 参数: None
* 返回: None
* 说明: None
*/
void ZPH04_Init(void)
{
uint16_t low_pulse_rate_int;
uint16_t low_pulse_rate_frac ;
if(g_usart2_rx_flag == 1)
{
// 检查起始位
if (g_rx_buffer2[0] == 0xFF&&g_rx_buffer2[1] == 0x18)
{
g_usart2_rx_flag = 0;
// 计算校验和
uint8_t checksum = FucCheckSum(g_rx_buffer2, sizeof(g_rx_buffer2));
// 检查校验和
if (g_rx_buffer2[8] == checksum)
{
// 解析数据
low_pulse_rate_int = g_rx_buffer2[3];
low_pulse_rate_frac = g_rx_buffer2[4];
//pm25的值
pm25 = low_pulse_rate_int * 10 + low_pulse_rate_frac / 10.0 ;
}
}
}
else
{
}
}
3.2.2.5SPI_FLASH模块
/**
* 函数功能: 串行FLASH初始化
* 输入参数: huart:串口句柄类型指针
* 返 回 值: 无
* 说 明: 该函数被HAL库内部调用
*/
void MX_SPIFlash_Init(void)
{
hspiflash.Instance = FLASH_SPIx;
hspiflash.Init.Mode = SPI_MODE_MASTER;
hspiflash.Init.Direction = SPI_DIRECTION_2LINES;
hspiflash.Init.DataSize = SPI_DATASIZE_8BIT;
hspiflash.Init.CLKPolarity = SPI_POLARITY_HIGH;
hspiflash.Init.CLKPhase = SPI_PHASE_2EDGE;
hspiflash.Init.NSS = SPI_NSS_SOFT;
hspiflash.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_4;
hspiflash.Init.FirstBit = SPI_FIRSTBIT_MSB;
hspiflash.Init.TIMode = SPI_TIMODE_DISABLE;
hspiflash.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
hspiflash.Init.CRCPolynomial = 10;
HAL_SPI_Init(&hspiflash);
}
/**
* 函数功能: SPI外设系统级初始化
* 输入参数: hspi:SPI句柄类型指针
* 返 回 值: 无
* 说 明: 该函数被HAL库内部调用
*/
void HAL_SPI_MspInit(SPI_HandleTypeDef* hspi)
{
GPIO_InitTypeDef GPIO_InitStruct;
if(hspi->Instance==FLASH_SPIx)
{
FLASH_SPIx_RCC_CLK_ENABLE(); /* SPI外设时钟使能 */
FLASH_SPI_GPIO_ClK_ENABLE(); /* GPIO外设时钟使能 */
FLASH_SPI_CS_CLK_ENABLE();
/**SPI1 GPIO Configuration
PA4 ------> SPI1_NSS
PA5 ------> SPI1_SCK
PA6 ------> SPI1_MISO
PA7 ------> SPI1_MOSI
*/
GPIO_InitStruct.Pin = FLASH_SPI_SCK_PIN|FLASH_SPI_MOSI_PIN;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
HAL_GPIO_Init(FLASH_SPI_GPIO_PORT, &GPIO_InitStruct);
GPIO_InitStruct.Pin = FLASH_SPI_MISO_PIN;
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(FLASH_SPI_GPIO_PORT, &GPIO_InitStruct);
HAL_GPIO_WritePin(FLASH_SPI_CS_PORT, FLASH_SPI_CS_PIN, GPIO_PIN_SET);
GPIO_InitStruct.Pin = FLASH_SPI_CS_PIN;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
HAL_GPIO_Init(FLASH_SPI_CS_PORT, &GPIO_InitStruct);
}
}
/**
* 函数功能: 读取串行Flash型号的ID
* 输入参数: 无
* 返 回 值: uint32_t:串行Flash的型号ID
* 说 明: FLASH_ID IC型号 存储空间大小
0xEF3015 W25X16 2M byte
0xEF4015 W25Q16 4M byte
0XEF4017 W25Q64 8M byte
0XEF4018 W25Q128 16M byte
*/
uint32_t SPI_FLASH_ReadID(void)
{
uint32_t Temp = 0, Temp0 = 0, Temp1 = 0, Temp2 = 0;
FLASH_SPI_CS_ENABLE();/* 选择串行FLASH: CS低电平 */
SPI_FLASH_SendByte(W25X_JedecDeviceID); /* 发送命令:读取芯片型号ID */
Temp0 = SPI_FLASH_SendByte(Dummy_Byte); /* 从串行Flash读取一个字节数据 */
Temp1 = SPI_FLASH_SendByte(Dummy_Byte); /* 从串行Flash读取一个字节数据 */
Temp2 = SPI_FLASH_SendByte(Dummy_Byte); /* 从串行Flash读取一个字节数据 */
FLASH_SPI_CS_DISABLE(); /* 禁用串行Flash:CS高电平 */
Temp = Temp1 << 8 | Temp2;
return Temp;
}
/**
* 函数功能: 读取串行Flash设备ID
* 输入参数: 无
* 返 回 值: uint32_t:串行Flash的设备ID
* 说 明:
*/
uint32_t SPI_FLASH_ReadDeviceID(void)
{
uint32_t Temp = 0;
FLASH_SPI_CS_ENABLE();/* 选择串行FLASH: CS低电平 */
SPI_FLASH_SendByte(W25X_DeviceID);/* 发送命令:读取芯片设备ID * */
SPI_FLASH_SendByte(Dummy_Byte);
SPI_FLASH_SendByte(Dummy_Byte);
SPI_FLASH_SendByte(Dummy_Byte);
Temp = SPI_FLASH_SendByte(Dummy_Byte);/* 从串行Flash读取一个字节数据 */
FLASH_SPI_CS_DISABLE(); /* 禁用串行Flash:CS高电平 */
return Temp;
}
4 总结
4.1任务收获
在空气净化器项目的开发中,我们获得了许多宝贵的任务收获,以下是我们在项目中所学到的关键经验和技能:
1.嵌入式系统开发:
通过对STM32F103RCT6微控制器的应用,我们掌握了嵌入式系统的设计和开发流程。了解了硬件和软件之间的协同工作,为我们未来在嵌入式领域的项目奠定了坚实的基础。
2.硬件设计与调试:
使用Altium Designer进行硬件设计,学会了通过进行PCB布局和连接设计来使我们的项目效率更具优势。通过硬件调试,我们提高了对传感器、电机驱动和其他硬件组件的理解,培养了解决实际问题的能力。
3.嵌入式程序设计:
利用KEIL 5进行嵌入式程序的编写和调试,学到了提升我们针对嵌入式系统进行程序开发的能力。在优化相关传感器数据处理和风扇控制算法的过程中,使我们有了对于嵌入式系统性能更深刻的认识。
4.团队协作与分工:
在项目团队中,我们分工合作,高效地解决了各种问题。通过与团队成员的密切合作,我们培养了良好的沟通和协作能力,提高了团队整体的执行效率。
5.实际问题解决
在项目中,我们面对了硬件和软件调试中的实际问题,从而培养了解决问题的能力。这种经验对我们未来在工程领域的实际应用大有裨益。
6.全面项目管理:
从项目的需求分析、设计、开发到调试,我们全面参与了整个项目生命周期,了解了项目管理的方方面面,包括时间管理、资源分配和问题解决等方面。
这些任务收获不仅让我们对嵌入式系统有了更深的了解,还培养了我们解决实际问题、团队协作和项目管理的实际能力。这对我们未来的职业发展和学术研究都具有重要的启发意义。
4.2心得体会
在空气净化器项目的开发过程中,我们不仅深入了解了嵌入式系统的设计与开发,还学到了如何将硬件与软件协同工作,以创造出一款能够在各种环境下稳定可靠运行的智能产品。以下是我们在本次项目实践中得到的心得与体会:
首先,通过对STM32F103RCT6微控制器的充分学习、了解与应用,我们深刻体会到了其多样化的性能和丰富的外设接口在嵌入式系统中的便捷性。这为我们提供了一个坚实的基础,使我们能够合理地实现空气净化器的各项功能。
其次,在硬件设计方面,我们学到了如何有效地利用Altium Designer进行电路板设计,从而确保PCB的布局合理、连接稳定。硬件调试阶段的工作让我们深入了解了传感器、电机和其他硬件组件的工作原理,为我们的设计提供了实践的基础。
在软件方面,通过KEIL 5的使用,我们学到了如何进行对传感器数据的处理和风扇控制算法的优化,让我们体验到了在资源有限的嵌入式环境中进行算法设计和性能优化的挑战。
在整个项目中,我们深刻认识到了团队协作的重要性。通过分工合作,我们能够高效地解决问题、优化系统性能,并最终实现了一款功能强大、稳定可靠的空气净化器。
总体而言,这个项目不仅为我们提供了宝贵的实践经验,还让我们更加深入地理解了嵌入式系统的开发流程。我们相信这样的经历将对我们未来的工作和学习产生积极的影响。
致 谢
我们由衷感谢陈老师在本项目中的悉心教导与无私帮助。在平日学习与实践的过程中,陈老师不仅为我们提供了深厚的专业知识指导,更在学术上和实践中给予了细致入微的支持。
陈老师以其丰富的经验和卓越的专业素养,为我们提供了开发嵌入式系统的宝贵指导,使我们更好地理解了有关于STM32嵌入式项目的脉络。
在平日中的学习与开发中,陈老师始终倾注关心,及时解答我们在硬件设计、软件编程以及调试优化等方面遇到的问题。他的耐心指导和不懈的帮助,使我们在项目中能够迎刃而解各种技术难题。
在学业上,陈老师总是愿意倾听我们的问题,耐心解答疑惑,使我们对学科有更为清晰的认识。他的严谨治学态度和对知识的深刻理解为我们提供了坚实的学术支持。
除了专业知识,陈老师还在培养我们的创新能力和团队协作精神方面付出了很多心血。他鼓励我们提出独立见解、勇于创新,并组织团队活动,使我们更好地理解和适应未来工作的挑战。
在陈老师的悉心教导下,我们感受到了学科的广度和深度,对未来的发展有了更清晰的规划。我们衷心感谢陈立群老师在平日的课业中为我们所做的一切,是您的教育让我们受益匪浅,受到了更全面的培养。
在项目的顺利完成后,我们要特别感谢陈老师为我们提供了一个学术探讨与实践成果的良好平台。他的悉心指导和鼓励让我们不断成长,更深入地理解了嵌入式系统的开发与应用,最终,我们不仅在本次的项目作业中完成了空气净化器项目,更收获了宝贵的学术经验和团队合作精神。
再次感谢陈老师在平日中的悉心教诲与帮助!