尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

基于STM32F103的空气净化器设计与实现——从硬件到PCB的完整方案

基于STM32F103的空气净化器设计与实现——从硬件到PCB的完整方案 简介本资源是一套完整的基于STM32F103RCT6微控制器的空气净化器嵌入式开发资料面向嵌入式初学者、电子设计爱好者及物联网设备开发者解决室内空气质量监测与智能调控的实际工程问题。资源包含原理图.SchDoc、PCB设计文件.PcbDoc、Keil MDK工程.uvprojx/.uvoptx、全部源码38个.h头文件、36个.c实现文件、编译中间文件.o/.d/.axf/.hex及配套说明文档.pdf/.txt共162个文件总大小4.05MB其中C/H文件涵盖传感器驱动温湿度、甲醛、TIM/PWM风扇调速、LCD显示与系统调度等核心模块工程结构清晰便于分层理解与二次开发。已有1493人学习下载资料可直接编译烧录运行提供从硬件设计到固件开发的全链路参考特别适合掌握STM32外设应用、多传感器融合采集及闭环控制策略的实践训练。 拿到这套基于STM32F103空气净化器设计资料的时候我其实刚做完一版12V风机直驱的样品板子一上电MCU就反复重启查了一整天最后发现是电源拓扑的问题。后来重新整理了原理图、程序结构和PCB布局才把整套系统稳定下来。这篇文章就把我从需求拆解、硬件链路、PWM调速程序、从原理图生成PCB到实测标定和常见坑的完整过程写出来。资料包里包含了程序源码、原理图源文件、PCB工程和Gerber我会顺便说明每一部分怎么打开、怎么改、怎么复用到你自己的净化器项目中。这篇内容适合正在做STM32F103项目的电子系学生、参加电赛的队伍以及想DIY一台“能自动调速、能显示空气质量”的桌面净化器的动手党。即使你手里的板子和我的不一样我的思路和排查方法也可以照搬到其它F103小系统上。1. 为什么最终选了STM32F103把净化器需求一条条对回去很多人在做一个设备的时候习惯先把手头最熟的芯片用上再往上堆功能。这么搞不是不行但很容易出现“引脚不够”“定时器不够用”“ADC通道不够”这种尴尬。我更习惯先把功能需求列出来再倒推主控需要哪些资源最后才看哪款芯片最合适。1.1 先列需求再谈选型一台桌面空气净化器功能清单其实非常固定采集粉尘浓度至少要能算出PM2.5的近似值控制风机转速用PWM调速是最省事且效果最好的方式显示当前浓度和风速档位OLED或LCD都行通过按键或者编码器切换模式、调节风速可选预留串口输出浓度数据方便调试和联网可选定时开关、蜂鸣器提醒这一套需求看上去不复杂但一落地就发现对主控外设的要求很“杂”传感器可能走UART、可能走ADC显示走I2C或SPI风机调速需要至少两个通道的PWM按键扫描又要普通GPIO。用一片8位单片机做程序逻辑容易乱资源也紧张直接上ESP32或者带Wi-Fi的芯片功能强但如果只是纯本地净化器反而增加了不少成本和学习成本。1.2 F103的资源分配刚好够用STM32F103C8T6是Cortex-M3内核72MHz主频64KB Flash、20KB RAM。价格便宜、资料铺天盖地、烧录调试工具多新人上手难度低。具体到这个项目里我用到的资源很清晰功能模块使用外设说明风机调速TIM3 CH1 / CH2两路PWM输出驱动两个风机或一个双速风机粉尘传感器USART2 或 ADC1_CH0PMS5003走串口GP2Y1010走ADCOLED显示I2C10.96寸OLED128x64按键/编码器GPIOA / GPIOB中断或轮询扫描调试串口USART1打印PM2.5、占空比、模式状态系统时基SysTick1ms节拍做非阻塞调度72MHz跑这些任务绰绰有余空闲时还能做点滤波算法和状态机逻辑。20KB RAM也足够我开了几个环形缓冲区、若干个滤波数组占用仍然很低。真正让我决定用F103的是它的定时器结构高级定时器、通用定时器各有多个通道PWM输出和ADC采集可以做到不冲突。另外ST标准外设库和HAL库的例程非常多哪怕你想从零开始写翻几篇PWM配置例程就能跑起来。1.3 模块化划分主板、传感器、风机电源分开想选型确定之后设计上我有一个很重要的习惯把系统拆成“主板 传感器小板 风机电源部分”在原理图里用网络标号连接在PCB布局时分开处理。这样做的原因很现实粉尘传感器和风机驱动是两类完全不同的电路。传感器模块需要干净的模拟电源和采样信号风机驱动则会有十几伏的电源波动和PWM开关噪声。混在一个区域后级ADC采出来的数据根本没法看。即使后面软件加了很多滤波硬件上的隔离才是治本。主板区域放MCU、按键、OLED接口、UART调试口传感器区域独立放置PMS5003接口或者GP2Y1010采样电路风机驱动区域和电源输入放在同一侧大电流走线短而粗。三个区域在PCB上用电源平面和地平面自然隔开模拟地和数字地单点连接。这样设计的净化器硬件后面调试时基本不会遇到“传感器读数飘忽不定”这种玄学问题。2. 硬件链路从粉尘传感器到风机PWM驱动的完整信号路径这一章是整个项目的核心硬件部分。如果你只关心程序可以跳过细节直接看代码但如果你打算自己打板、自己调试最好把信号路径完全理清楚。我按信号流的方向来讲输入侧是粉尘传感器输出侧是风机PWM驱动中间夹着MCU、电源和显示交互。2.1 粉尘传感器选型模拟输出还是串口输出粉尘传感器常见有两类一类是夏普GP2Y1010AU0F这种光学模拟传感器另一类是攀藤PMS5003这种激光数字传感器。两者我都用过差异非常明显。GP2Y1010AU0F价格便宜但驱动麻烦一点。它内部有一个红外LED和一个光电二极管需要周期性给LED施加脉冲电流然后在一个很窄的时间窗口内采样输出电压。典型工作时序是每10ms触发一次LED脉冲脉冲宽度约0.32ms在脉宽接近结束时采样输出。输出引脚V0的电压和粉尘浓度近似线性但个体离散性较大批量使用时最好每个传感器单独标定。PMS5003就省心很多供电5VUART输出默认主动上报每帧32字节直接读第5和第6字节就是PM2.5浓度值。数据稳定、量程宽0.1~1000 ug/m3缺点是多花几十块钱。我的建议是做DIY自己玩直接选PMS5003省下的调试时间远超差价做低成本课程设计选GP2Y1010当然也可以但采样电路和软件滤波要做得更仔细。参数GP2Y1010AU0FPMS5003输出方式模拟电压约0~3.6VUART数字帧供电5V5V测量范围约0~500 ug/m30.1~1000 ug/m3驱动复杂度高需要脉冲时序低串口直接读价格低中抗干扰能力一般需要滤波强输出稳定我用PMS5003做主力方案代码里预留了GP2Y1010的ADC分支。这样不管手边买到哪种传感器都能跑起来。2.2 风机驱动20kHz PWM与MOS低端驱动风机调速最简单有效的方案是PWM调压。我的风机是12V直流有刷风机工作电流大约0.4A启动瞬间可能到0.8A左右。选MOS管的时候我用了AO3400这种N沟道MOSSOT-23封装Vgs在4.5V时导通电阻只有几十毫欧3.3V逻辑直接驱动也能勉强工作但为了可靠性栅极驱动电压我直接复用12V系统用一颗三极管做电平转换或者选择逻辑电平MOS管让单片机3.3V的PWM信号干净地控制12V回路。如果你直接用3.3V接到12V风机的N-MOS栅极问题不大但要确认MOS的Vgs阈值。部分AO3400在2.5V才完全导通虽然3.3V也够但保险起见我在栅极加了一个10k下拉电阻到GND防止MCU上电瞬间引脚悬空导致风机误转。风机两端要并联一个续流二极管最好是快恢复二极管或肖特基二极管阴极接12V阳极接MOS漏极。没有这个二极管PWM关断瞬间风机的感性电动势会把MOS打穿这属于教科书级别但最容易漏掉的坑。PWM频率我选20kHz。原因很简单人耳可听范围大概在20Hz到20kHz低于20kHz的PWM会有明显的啸叫很多电机驱动板嗡嗡响就是PWM频率太低。20kHz已经超过人耳上限噪音明显减小。对MCU来说20kHz也不难实现72MHz主频TIM3的ARR设为3599预分频为0正好20kHz。2.3 电源系统与显示交互整个净化器的电源输入是12V适配器但F103和传感器、OLED都需要5V或3.3V。这里有一个非常容易踩的坑别直接用AMS1117-3.3干12V转3.3V。AMS1117的输入输出压差上限一般是15V但压差越大线性稳压器的损耗越大。12V转3.3V压差接近9V如果整板电流200mA损耗就接近1.8WAMS1117会烫到不敢摸。正确做法是先用一颗DC-DC降压模块或芯片把12V降到5V再用AMS1117-3.3从5V转3.3V。这样3.3V侧的压差只有1.7V发热可忽略。5V给PMS5003和OLED供电3.3V给MCU和逻辑电路供电。显示部分我用0.96寸I2C OLED四根线VCC、GND、SCL、SDA。I2C总线需要上拉电阻很多最小系统板上已经带了4.7k上拉但如果自己画板务必加上。串口调试接USART1PA9是TX、PA10是RX和USB转TTL模块交叉连接。如果你在淘宝上买的模块有不同引脚顺序先查清楚再接线否则会有一堆乱码。3. 程序框架状态机、可变频率PWM与浓度调速算法硬件链路跑通之后程序才是让净化器“聪明”起来的关键。我的程序没有用复杂的实时操作系统而是用了一个基于SysTick的非阻塞任务调度外加一个状态机。整体结构清晰调试问题也容易定位。3.1 软件分层的工程组织项目里我把源码分成几个维度底层驱动时钟、GPIO、定时器PWM、ADC、UART、I2C外设驱动PMS5003数据解析、OLED显示驱动、按键扫描业务逻辑状态机、调速算法、数据滤波应用入口main循环和任务调度这样做的好处是换传感器或者改显示屏幕时不需要重写应用逻辑。比如我最初用GP2Y1010后来换PMS5003只替换了“粉尘传感器驱动”这一层上层的浓度映射、风机调速、显示逻辑完全没动。3.2 PWM初始化与频率在线调整PWM初始化代码用标准外设库写。核心思路是开启TIM3时钟配置PA6为复用推挽输出初始化TIM3时基然后设置输出比较为PWM1模式。void PWM_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_OCInitTypeDef TIM_OCInitStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO, ENABLE); GPIO_InitStructure.GPIO_Pin GPIO_Pin_6; // TIM3_CH1 - PA6 GPIO_InitStructure.GPIO_Mode GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed GPIO_Speed_50MHz; GPIO_Init(GPIOA, GPIO_InitStructure); TIM_TimeBaseStructure.TIM_Period 3599; // ARR 3600-1, 72MHz/360020kHz TIM_TimeBaseStructure.TIM_Prescaler 0; TIM_TimeBaseStructure.TIM_ClockDivision 0; TIM_TimeBaseStructure.TIM_CounterMode TIM_CounterMode_Up; TIM_TimeBaseInit(TIM3, TIM_TimeBaseStructure); TIM_OCInitStructure.TIM_OCMode TIM_OCMode_PWM1; TIM_OCInitStructure.TIM_OutputState TIM_OutputState_Enable; TIM_OCInitStructure.TIM_Pulse 0; // 初始占空比0 TIM_OCInitStructure.TIM_OCPolarity TIM_OCPolarity_High; TIM_OC1Init(TIM3, TIM_OCInitStructure); TIM_OC1PreloadConfig(TIM3, TIM_OCPreload_Enable); TIM_ARRPreloadConfig(TIM3, ENABLE); TIM_Cmd(TIM3, ENABLE); }这里的ARR是决定PWM频率的关键。72MHz主频不变的情况下ARR越大频率越低。如果你想做“频率可调PWM”直接改ARR但注意一点改ARR之后必须同步重算比较值CCR否则占空比会变。void PWM_SetFreqAndDuty(uint32_t freq_hz, uint8_t duty_percent) { uint32_t arr (SystemCoreClock / freq_hz) - 1; uint32_t ccr (uint32_t)((uint32_t)arr * duty_percent / 100); TIM3-ARR arr; TIM3-CCR1 ccr; }我做一个空气净化器通常20kHz固定不变只需要改占空比。占空比对应的比较值更新用TIM_SetCompare1(TIM3, value)就行。占空比从0到100对应CCR从0到ARR。3.3 ADC采集与浓度换算如果使用GP2Y1010ADC采样是关键。PA0配置为模拟输入ADC1_CH0采样时间尽量长一些用239.5周期能降低内阻带来的误差。void ADC_Init_GP2Y1010(void) { ADC_InitTypeDef ADC_InitStructure; GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1 | RCC_APB2Periph_GPIOA, ENABLE); GPIO_InitStructure.GPIO_Pin GPIO_Pin_0; GPIO_InitStructure.GPIO_Mode GPIO_Mode_AIN; GPIO_Init(GPIOA, GPIO_InitStructure); ADC_InitStructure.ADC_Mode ADC_Mode_Independent; ADC_InitStructure.ADC_ScanConvMode DISABLE; ADC_InitStructure.ADC_ContinuousConvMode DISABLE; ADC_InitStructure.ADC_ExternalTrigConv ADC_ExternalTrigConv_None; ADC_InitStructure.ADC_DataAlign ADC_DataAlign_Right; ADC_InitStructure.ADC_NbrOfChannel 1; ADC_Init(ADC1, ADC_InitStructure); ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_239Cycles5); ADC_Cmd(ADC1, ENABLE); } uint16_t ADC_ReadSingle(void) { ADC_SoftwareStartConvCmd(ADC1, ENABLE); while (ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC) RESET) {} return ADC_GetConversionValue(ADC1); }电压值 ADC读数 × 3.3V / 4096。GP2Y1010输出是0~3.6V但直接接ADC时注意量程最好用电阻分压或运放电路把电压映射到0~3.3V以内。浓度换算的近似公式是浓度ug/m3 (Vout - 0.5) × 200其中0.5V为洁净空气下典型输出电压。这个公式是经验值不同传感器差异较大最好用标准粉尘仓或对比PMS5003来标定。PMS5003的解析则简单得多。串口每帧32字节帧头是0x42、0x4DPM2.5浓度在帧的第5、6字节PM10在7、8字节。我写了一个简单的环形缓冲区接收中断函数在主循环里查找帧头、校验、提取数据。注意PMS5003上电后需要稳定时间大概几十秒前30秒的数据不要用于控制风机。3.4 状态机调度与调速策略程序的核心逻辑是一个状态机状态包括待机、自动、手动、睡眠。默认上电进入自动模式。自动模式下读取PM2.5浓度按照分段映射计算目标占空比浓度小于35 ug/m3目标占空比20%低速维持空气流通35~75 ug/m3目标占空比40%75~150 ug/m3目标占空比60%大于150 ug/m3目标占空比90%直接跳变占空比会让风机声音突变而且启动电流冲击大。我在程序里做了软启动每次任务循环如果目标占空比大于当前占空比就让当前值缓慢增加每100ms最多增加2%。这样风机从低速升到高速整个过程平滑MCU也不会因为启动瞬间的电压跌落而复位。人手模式通过按键切换风速等级低、中、高、自动。风速等级直接映射到20%、50%、80%和自动逻辑。整个主循环是非阻塞的SysTick每1ms产生一次中断任务通过计数标志决定是否执行。OLED显示刷新一般10Hz就够了串口打印1Hz传感器读取3Hz按键扫描10ms一次。4. 从原理图到PCBAltium Designer里的关键操作顺序这一章专门讲ADAltium Designer从原理图生成PCB的完整流程。很多人觉得画原理图时把线连好、封装放好就完事了结果一到PCB阶段就各种报错其实问题大多出在“原理图到PCB”的连接过程没有按规范走。4.1 为什么很多人第一步就错编译和封装检查我见过不少同学原理图画完直接点Update PCB Document然后PCB里一堆元器件乱飞、网络高亮变成暗黑色甚至报错提示找不到封装。根源在于没有先编译工程也没有检查封装库。在AD里正确的是先在原理图界面按快捷键 C CCompile或者右键工程名选择Compile PCB Project。编译之后看Message面板里面会列出重复引脚、未连接网络、封装缺失等问题。特别留意三类错误引脚没有网络标号悬空元器件没有封装或封装引脚数不对使用了隐藏电源引脚但没接好封装检查可以用Tools - Footprint Manager批量查看每个元器件的封装是否完整。我会把容易出问题的器件单独确认一遍按键、接插件、电解电容、继电器这类有方向或孔径要求的元件。4.2 从原理图生成PCB的完整操作编译通过、封装无误之后才真正进入PCB流程。新建PCB文件设置好板框。我的净化器主板尺寸大约80mm×60mm用Mechanical1层画矩形再选中板框通过Design - Board Shape - Define from selected objects生成闭合板框。在原理图界面执行Design - Update PCB Document xxx.PcbDoc弹出Engineering Change Order窗口。点Validate Changes检查所有Change status变成绿色对勾后再点Execute Changes。导入成功后PCB里会出现一个Room区域元器件堆在一起旁边还有一堆飞线。先删除Room然后按模块把元器件拖出来。我习惯先放固定位置的接口器件比如电源插座、传感器接插件再放MCU、晶振、电容电阻。布局是PCB设计中最影响成败的一步。几个铁律晶振要离MCU尽量近走线短而直去耦电容放在MCU电源引脚旁边空气净化器的主板如果涉及风机接口大电流线尽量短OLED排针放在PCB边缘方便安装。布局基本完成后设计布线规则。快捷键 D R 打开PCB Rules and Constraints Editor。我用的参数如下规则项数值信号线宽0.254mm~0.3mm电源线宽1mm以上风机大电流线宽1.5mm~2mm安全间距0.2mm以上过孔内径0.3mm过孔外径0.6mm覆铜到板边距离0.4mm布线顺序很有讲究先布电源和地再布敏感信号线最后处理普通信号线。如果空间允许12V和5V电源走线直接加粗到1mm以上GND最后整片覆铜。布线的过程如果发现某一根飞线绕不过去可以回看原理图用网络标号重新规划引脚顺序不一定非要强行打过孔。布线完成后在PCB的顶层和底层分别执行Place - Polygon Pour网络选GND覆盖整板。覆铜之后别忘了在Tool - DRC Run Design Rule Check处理所有报错。4.3 Gerber输出与下单打样最终打样需要导出Gerber和钻孔文件。在AD中通过File - Fabrication Outputs - Gerber Files导出RS-274X格式注意勾选需要的层Top Layer、Bottom Layer、Top Overlay、Keep-Out Layer、Drill Drawing。钻孔文件用NC Drill导出。同时导出BOM表Bill of Materials方便核对贴片元器件数量。下单前我会再检查一次过孔和孔径最小限制。大部分PCB打样厂家支持最小孔径0.3mm如果板子比较密我会把过孔统一放在0.3/0.6mm既保证可制造性也减少钻嘴损耗。Gerber文件生成后用浏览器里的Gerber查看器或者嘉立创EDA在线预览检查一遍确认没有漏层、没有反字、没有缺失丝印再上传打样。5. 实测调试与标定这几类坑基本都会踩一遍硬件打样回来程序编译下载真正头疼的时刻才开始。这一章把我的实测过程和踩坑记录写出来能帮你省不少时间。5.1 上电阶段先看电源再看最小系统我的调试习惯是分步上电而不是一上来就把整个系统全接上。第一次上电只接12V电源用万用表量5V和3.3V是否正常再用示波器看有没有明显纹波。如果3.3V异常先查AMS1117输入输出和负载电容。电源没问题后接上ST-Link或者J-Link下载一个最简单的LED闪烁程序。如果LED正常闪烁说明MCU最小系统、晶振、复位电路都没问题。这个步骤看着基础但能快速把问题域缩小到外设部分而不是一锅粥地排查。5.2 传感器标定与数据解析PMS5003上电后串口会持续输出32字节数据帧。我调试时先用USB转TTL模块直接接PMS5003的TX/RX放到串口助手里看原始数据确认模块没有问题再接到STM32的USART2。如果MCU收到的数据是乱码优先查波特率PMS5003默认是9600波特率。如果数据时断时续检查供电是否稳定以及接线是否虚焊。GP2Y1010的标定更麻烦一点。因为LED脉冲触发和ADC采样需要在时序上配合我建议在主循环里用延时函数控制先触发LED脉冲延时一段时间再启动ADC采样。你可以把采样结果通过串口打印出来分别测室内环境和靠近香烟烟雾的读数记录电压值和对应状态再拟合一条线性曲线。没有标准粉尘仪的情况下用这种“两点标定”也能达到足够的控制效果。5.3 PWM干扰、风扇启动和OLED花屏我最开始遇到的第一个问题是只要风机转起来PMS5003读到的PM2.5数值就开始明显跳变。查到最后是电源共地导致的干扰还有PWM开关噪声耦合到了传感器供电线上。解决方案主要有三层传感器供电加LC滤波传感器区域独立覆铜软件读取时做滑动平均滤波。第二个问题是风扇启动瞬间MCU复位。用示波器抓12V电源轨发现启动瞬间电压跌落到了10V以下3.3V也跟着晃。原因是风机启动电流大12V电源余量不足。软件方案是软启动前面已经写了硬件方案是在12V输入端加一个470uF电解电容同时在风机MOS漏极靠近源端的位置加一个100uF电容吸收浪涌。加了以后即使占空比直接拉到100%也不会复位了。第三个问题是OLED花屏。常见的两个原因一是I2C上拉电阻缺失或者阻值过大二是OLED地址冲突。我的板子上SCL和SDA各接了4.7k上拉到3.3V屏幕接口VCC单独接5VGND与MCU共地花屏问题基本消失。如果你遇到OLED通电白屏先测电源再查I2C地址用扫描程序枚举一下地址列表很多OLED模块是0x3C或者0x3D驱动代码里地址错了就会花屏或者无显示。6. 这套资料里到底有什么怎么拿去做二次开发最后聊一聊资料本身。我整理这套基于STM32F103空气净化器资料的时候刻意把文件按功能分层放好让新手也能快速找到自己需要的东西。6.1 资料目录结构与使用建议整个资料包里包含程序源码、原理图、PCB、数据手册和使用文档目录结构大致如下STM32F103空气净化器设计资料/ ├─ 01-Projet-Program/ 程序源码MDK-ARM工程 ├─ 02-Principle-Schematic/ 原理图PDF与源工程 ├─ 03-PCB/ PCB工程、Gerber、BOM ├─ 04-Datasheet/ 芯片与模块数据手册 └─ 05-README/ 使用说明与调试记录程序源码建议直接用Keil MDK打开编译前先安装对应芯片的器件支持包。如果你用的是标准外设库版本注意宏定义里选择STM32F10X_MD。原理图源工程用Altium Designer打开PCB工程里面有布局布线好的板卡如果想改版可以直接在源工程上修改。Gerber文件夹里是已经导出的制板文件不想装AD的话直接把Gerber压缩包发给打样厂家即可。如果你是第一次接触这种项目我强烈建议不要一上来就改这改那先把原始程序编译下载、硬件点亮、串口能打印数据、风机能转起来完整跑通一遍。很多人拿到资料就先动代码结果硬件和软件互相甩锅越改越乱。先复现再创新这是最稳妥的做法。6.2 模块化改造与功能扩展这套设计并不是封闭的扩展方向很多把PMS5003的数据通过USART1转发的Wi-Fi模块比如ESP8266或ESP32手机端用微信小程序或App远程查看PM2.5浓度远程开关机。增加一个温湿度传感器比如SHT30或DHT11在OLED上显示并根据温湿度优化风机策略。把风机的驱动从有刷风机改成BLDC无刷风机降低噪音和寿命损耗但驱动电路需要重新设计程序里增加BLDC控制算法。把固定档位改成PID闭环控制传感器读数作为反馈量让浓度稳定在目标值附近。我个人的经验是二次开发时优先做“加传感器”和“加通信”因为这两块在程序里只要增加一个驱动文件和对应的任务函数硬件上也只需要预留好接口即可。如果要改风机驱动或者电源拓扑那基本等于重新画一版PCB工作量会大很多。这套净化器项目我已经做了三个版本。第一版直流电机直驱第二版加入PMS5003和软启动第三版加入了Wi-Fi透传和远程控制。每次修改最花时间的往往不是写代码而是定位电源干扰和接口匹配的问题。如果你在复现过程中卡住了先按我前面说的顺序检查电源、最小系统、传感器串口数据、PWM波形再往上层应用看大概率能快速找到问题所在。本文还有配套的精品资源点击获取
返回列表