简介:微孔雾化片自动扫频软件及配套原理图,面向雾化设备研发、电子工程与嵌入式开发人员,用于快速定位雾化片最佳谐振频率,改善雾化效率与运行稳定性。资源共100个文件,压缩包约295KB,主要有C语言与汇编源码(包含初始化、ADC采样、定时中断、延时处理、测试电源等子程序)、头文件、工程配置文件,以及原理图Word文档,并附有编译生成的中间文件、列表文件与映射文件,便于深入比对代码逻辑和硬件连接。通过学习,可掌握自动扫频从信号发生、功率放大、驱动电路到传感器反馈的完整链路,了解扫频速度、步进大小、噪声滤波与优化算法的设计取舍,以及不同模块在电路中的具体布局和信号流向。已有4764人学习,适合从事医疗雾化、家用加湿及工业精细雾化控制的技术人员参考借鉴。 做雾化片驱动的朋友应该都遇到过这个场景:同一批次买回来的微孔雾化片,按标称频率做驱动板,结果有的雾化量正常,有的却几乎不出雾,换个环境温度又变。我把十来片号称108kHz的雾化片实测了一遍,谐振点从104kHz到112kHz都有,偏差远超预期。固定频率方案在这种离散性面前基本靠运气。后来我索性做了一套基于STM32F103C8T6的自动扫频方案,上电先扫描,找到最佳工作频率再锁定,运行中还能根据工况微调,从此换雾化片不再需要重新调参数。这篇文章把原理图拆解和扫频软件的实现思路完整写出来,给正在做加湿器、香薰机或雾化器驱动的开发者一个可直接参考的方案。
1. 为什么雾化片需要自动扫频
1.1 微孔雾化片的工作原理与关键参数
微孔雾化片本质上是一个压电陶瓷换能器。中间是带微孔阵列的金属振动片,外围是压电陶瓷环,两边引出电极。当在电极上施加高频交流电压时,压电陶瓷会产生逆压电效应,带动金属片做高频机械振动。这个振动把贴在振动片表面的液体"挤压"过微孔,变成几微米级别的细小液滴喷出,形成我们看到的白雾。
这里有几个关键参数直接影响驱动方案的设计。一个是谐振频率,常见的小型雾化片标称在108kHz、113kHz、163kHz等频点,不同尺寸不同用途差异很大。另一个是谐振阻抗,小型雾化片在谐振点附近的等效阻抗可以低到几欧姆,非谐振区阻抗会高出很多。还有一个是静态电容,一般在几千皮法级别。理解这几个参数之后,驱动电路的设计逻辑就很清晰了——我们要在谐振点附近给雾化片提供足够大的驱动功率,而在非谐振区,雾化片基本不干活。
1.2 固定频率驱动方案的根本问题
很多量产雾化器用的是固定频率专用芯片,频率由外部晶振或电阻设定,出厂后就不变了。这在要求不高的场景下能用,但问题很明显:谐振频率存在个体差异。同一批次、同标称频率的雾化片,谐振点实际能差出好几kHz,因为压电陶瓷的烧结厚度、金属片张力、微孔加工误差都会影响最终频率。
温度漂移是另一个无法回避的因素。压电陶瓷的弹性模量随温度变化,实测冬天和夏天同一片雾化片的最佳工作频率能差出1~2kHz。还有液体负载,水位高低、液体浓度变化都会改变雾化片的等效阻抗,导致原锁定频率不再匹配。固定频率方案面对这些情况只能妥协,结果就是雾化量下降、雾粒变大、功耗升高,甚至根本不工作。
1.3 自动扫频到底在做什么
自动扫频的目标一句话就能说清:主动搜索并持续跟踪雾化片在当前状态下效率最高的那个频率点。工程实现上就是对驱动电路输出频率进行扫描,同时检测反馈信号,找到谐振频率的位置并锁定。因为压电陶瓷在串联谐振频率附近等效阻抗最小,驱动电流最大,所以最常用的方法就是找"电流峰值对应的频率"。
扫频不只是开机扫一次就完事。运行过程中,雾化片升温、液位下降、液体变浓都会让谐振点漂移,所以软件还需要周期性地做小范围微调,让工作频率始终跟着谐振点走。这就是完整意义上的自动扫频——启动扫描加运行跟踪。
2. 方案选型与原理图拆解
2.1 为什么是STM32加半桥电路
要做自动扫频,第一步就是放弃固定频率的专用雾化片驱动芯片,改用MCU直接控制驱动电路。我选STM32F103C8T6,主要是因为它自带高级定时器TIM1,可以输出带死区控制的互补PWM信号,频率和占空比都可在运行中动态修改,这对扫频来说是刚需。F103C8T6价格便宜,使用量大,资料多,配合嘉立创EDA画原理图、做PCB都很顺手。
驱动拓扑选的是半桥加LC匹配电路,而不是全桥。半桥只需要两个NMOS和一个半桥驱动芯片,电路简单、成本低,对雾化这类低压小功率场景完全够用。半桥输出的是方波,直接加在雾化片上虽然也能振,但效率差一些。所以我在半桥输出端串联一个匹配电感,利用LC谐振把方波整形为近似正弦波,同时借谐振升压效应获得更高的驱动电压。
2.2 电源与驱动电路的设计要点
整个供电链路是:单节锂电池3.7V,经过MT3608升压到12V,作为半桥电路的母线电压。之所以要升压,是因为雾化片在谐振工作时要获得几十V级别的驱动电压,直接3.7V驱动功率不够。MT3608是常见的升压芯片,价格便宜、外围简单,最大输出电流够用,几千伏开关噪声做好滤波就行。
半桥驱动我用EG2131,这是专门驱动半桥NMOS的芯片,自带自举电路,逻辑输入直接兼容3.3V的STM32输出。两个NMOS选的是低压大电流的型号,比如常用的AO4404或者SI2302,导通电阻低、栅极电荷小,100多kHz的开关频率下表现很稳定。半桥中点到雾化片之间串一个匹配电感,电感值需要和雾化片参数匹配。以一个108kHz雾化片为例,静态电容约3000pF,串联电感取几十到一百多微亨,具体值用示波器看电流波形微调。
2.3 电流采样与反馈电路
扫频必须知道每个频率下的驱动电流,所以采样电路是原理图里最关键的一环。我在半桥低边和地之间串了一个0.1Ω的无感采样电阻,雾化片电流流过时产生压降,这个信号经过运放放大后再做峰值检波,变成直流电平送给STM32的ADC。
具体电路:采样电阻两端的差分信号先经过一颗通用运放(比如LMV358)放大20倍左右,然后是经典的二极管峰值检波,用1N4148配合RC网络,检波输出接ADC引脚。这里有一个设计细节需要注意,检波RC的时间常数不能太大也不能太小。太大,扫频时频率切换后峰值电压建立慢,扫频速度被迫放慢;太小,输出纹波大,ADC读到的数值跳动厉害。实测下来,R取10kΩ、C取47nF,时间常数约0.5ms,扫频驻留时间3ms,稳定度能兼顾。
如果要做更高精度的方案,可以在电流信号上叠加一个比较器电路,把电流波形整形成方波,再和驱动方波做相位比较。谐振时电流和电压同相位,相位差最小。这个方案比幅值法更灵敏,因为谐振点附近电流幅值变化比较平缓,而相位变化非常陡峭,但电路复杂度也要高一些。对于普通的雾化器控制,幅值法已经足够。
3. 扫频软件设计与核心实现
3.1 粗扫加细扫的两段式策略
在软件上,我采用"粗扫找区间、细扫定精度、运行期微调"的三步策略。原因很实际:如果全程用小步进扫描,扫一次全频段要好几十毫秒到上百毫秒,上电体验很差,而且扫频期间雾化片处于反复变频的状态,雾化量忽大忽小。如果只用大步进,峰值有可能直接漏过去。
所以第一步是粗扫:从起始频率到终止频率,用500Hz步进快速扫一遍。比如标称108kHz的雾化片,我设定扫描范围100kHz到120kHz,粗扫大约40个点。每个频点驻留3ms,整个粗扫约120ms。这个过程记录每个频点的幅值,找到幅值最大的频点后,把它的前后各几kHz作为细扫区间。第二步细扫:在这个小范围内用100Hz步进扫描,精确定位峰值。整个扫频过程不超过半秒,用户几乎感知不到。
3.2 峰值判定与防误判处理
扫频过程中最头疼的问题就是误判峰值。雾化片在全频段内的幅值曲线并不是一条干净的抛物线,有时候在非谐振位置也会出现局部凸起,尤其是低频段可能存在谐波响应。如果软件只找全段最大值,可能锁定到一个假峰上,雾化片根本不工作。
我的处理方式有两个。第一是加阈值,所有频点的幅值必须大于最高值的某个比例才作为候选峰值,比如60%,低于这个阈值的局部凸起直接忽略。第二是看峰的形状,真正的谐振峰左右两侧会比较陡,而假峰往往又矮又宽。这个判定逻辑不复杂但很有效:记录候选峰顶以及左右各5个点的幅值,计算左右斜率,如果两侧都有明显的回落趋势,才确认为谐振峰。实测用这个逻辑,误锁率降到了接近零。
3.3 核心扫频代码实现
直接放出工程里比较核心的几个函数。首先是PWM频率设置,STM32F103的TIM1工作在72MHz,通过修改自动重载寄存器ARR来改变频率:
#define PWM_PSC 0 // 预分频为0,计数频率72MHz void set_pwm_freq(uint32_t freq_hz) { uint32_t arr = (72000000UL / (PWM_PSC + 1)) / freq_hz - 1; TIM1->ARR = arr; // 占空比在初始化时已设定,这里只改频率 }然后是单次全频段扫描,返回最佳频率点:
uint32_t freq_scan(uint32_t f_start, uint32_t f_end, uint32_t step) { uint32_t best_freq = f_start; uint16_t best_amp = 0; for (uint32_t f = f_start; f <= f_end; f += step) { set_pwm_freq(f); delay_ms(3); // 等待输出稳定和峰值检波建立 uint16_t amp = read_peak_adc(); // 读取峰值检波后的ADC值 if (amp > best_amp) { best_amp = amp; best_freq = f; } } return best_freq; }锁定后的运行期微调用的是爬山法思路。每隔一段时间,在锁定频率的左右两边各试探一下,哪边幅值大就往哪边移动:
uint32_t fine_tune(uint32_t base_freq, uint16_t cur_amp) { uint32_t freq_up = base_freq + 100; uint32_t freq_down = base_freq - 100; set_pwm_freq(freq_up); delay_ms(3); uint16_t amp_up = read_peak_adc(); set_pwm_freq(freq_down); delay_ms(3); uint16_t amp_down = read_peak_adc(); if (amp_up > amp_down && amp_up > cur_amp) { return freq_up; } else if (amp_down > amp_up && amp_down > cur_amp) { return freq_down; } else { return base_freq; // 当前位置就是峰值,不动 } }主流程里,上电先执行freq_scan做粗扫加细扫,锁频后开雾化,主循环里每30秒调用一次fine_tune做微调。这套逻辑虽然简单,但在实际产品上跑下来的表现很稳定。100Hz的微调步进配合3ms驻留时间,整个过程对雾化的连续性影响可以忽略。
4. 实测问题与排查心得
4.1 扫频锁错峰,雾化片不工作
我调试过程中遇到最多的现象就是扫频结束后锁到假峰。表现很典型:串口打印扫频曲线,能看到在110kHz左右有个很窄的峰,但锁到这个频率后雾化片就是不喷雾,电流也偏小。这类峰通常是驱动电路的谐波响应或者雾化片某个寄生模式,不是真正的谐振点。
排查下来,最有效的办法就是限制扫描区间。如果标称频率是108kHz,就没必要把扫描范围扩大得太大,100~120kHz已经留足了余量。另外要配合我之前提到的阈值和峰形判断逻辑。还有一个调试技巧:把扫频曲线通过串口导出,在电脑上画出来人工看一眼。一眼就能看出哪个是真峰,哪个是假的,比对着寄存器猜效率高太多了。
4.2 MOS管发烫,效率急剧下降
有段时间板子跑起来不到一分钟,MOS管就烫得不敢摸,电流也偏大。第一反应是频率不对,但看扫频结果又正常。后来用示波器抓半桥中点波形,发现上下管的导通出现了明显重叠,也就是直通。
问题出在死区时间配置上。TIM1输出互补PWM时,必须在BDTR寄存器里配置好死区时间,否则上下两个MOS管在开关切换瞬间会同时导通,母线直接被短路。死区时间是越小越好,太小又起不到保护作用,需要平衡。我最终设定的是500ns左右,在108kHz这个频段下,这个值既能防止直通,又不会明显影响输出波形质量。
4.3 ADC采样值跳动剧烈,扫频曲线不平滑
如果峰值检波输出的直流纹波太大,ADC读数就会在相邻两个频点之间来回跳动,导致扫频算法误判。这个问题的根源通常是检波RC参数和扫频驻留时间不匹配,或者PCB布局上采样电路离开关节点太近。
处理办法有三个:把检波RC的电容稍微加大一点,滤波更充分;ADC读值连续采8次取平均,软件上做个简单的滑动滤波;还有就是PCB布板时,采样电阻和运放尽量远离半桥的开关节点和电感,避免干扰耦合进来。这三个措施加完,扫频曲线平滑了很多,峰值也变得非常清晰。
4.4 升压电路带载能力不足
还有一次故障是扫频过程正常,但一进入持续雾化模式,电压就掉得很厉害,雾量也明显变差。排查后发现是MT3608升压电路的带载能力不够,电感选型偏小。
在12V输出、几百mA电流需求下,升压电感建议选22uH左右的功率电感,额定电流要留1.5倍以上余量。同时要注意反馈电阻分压的精度,输出电压偏差会直接影响雾化片的驱动功率。实测把电感换大之后,满载时电压跌落从2V多降到了0.3V以内,雾化量稳定很多。这个问题的隐蔽性在于,扫频时雾化片是短时间变频工作,平均功率不大,升压电路还能勉强撑住;持续雾化时功率上去了,短板才暴露。
5. 这套方案的可扩展方向
自动扫频这套框架不只是能用在小加湿器上,稍微改动就能移植到别的场景。比如医用雾化器对雾粒直径有严格要求,而雾粒直径和驱动频率直接相关,把扫频目标从"找最大电流"改成"锁定额定频率附近的可用范围",再加上闭环控制,就能兼顾雾化效率和粒径指标。再比如实验室用的超声波清洗设备,谐振跟踪的方案几乎一模一样,只需要把功率等级和驱动拓扑从半桥换成全桥。
另外一个可以做的优化是加水位检测联动。雾化片无水空振会迅速升温,甚至损坏压电陶瓷。当采样电流低于某个阈值持续一段时间,软件判定为缺水,自动停止驱动。这个功能在原型基础上只多几十行代码,但对产品可靠性提升非常明显,我已经集成到第二版的软件里了。
最后再分享一个我个人的经验:这套方案调试期最值钱的操作就是串口打印扫频曲线。把每个频点和对应的ADC值按行输出,再用串口助手或者脚本画成波形图,整个系统的状态一目了然。很多你以为玄学的问题,比如峰锁偏了、检波响应慢了、干扰太大了,看一眼曲线形状就能定位。先把"看得见"做到位,再去调算法,效率会高很多。
本文还有配套的精品资源,点击获取