资讯动态

24V掉电检测电路设计:从分压运放到ADC采样与掉电保存

发布时间:2026/10/28 1:02:07 来源:尧图企业网站定制
1. 从一次半夜设备重启说起24V掉电检测到底在防什么做工业控制和嵌入式硬件的朋友大概都遇到过这种场景现场一台24V供电的设备白天跑得好好的到了晚上电网波动或者前级开关电源切换的瞬间设备莫名其妙重启了或者MCU里的参数丢了、Flash写坏了。你去查日志什么都查不到因为掉电那一瞬间MCU已经没电了根本没机会记录。这种问题排查起来极其痛苦因为它是偶发的、瞬态的示波器不盯着看根本抓不到。24V供电掉电检测电路要解决的就是这个问题。它的核心任务是在24V母线电压开始下降、但还没有低到MCU无法工作的那个时间窗口里尽早给MCU一个要断电了的信号让MCU有时间把关键数据写进EEPROM或Flash、安全关闭输出、保存运行状态。这个时间窗口可能只有几毫秒到几十毫秒取决于你电源的保持电容和负载电流。为什么是24V因为24V是工业现场最通用的直流母线电压之一PLC、传感器、电磁阀、伺服驱动器大量使用24V供电。而24V系统的一个特点是它通常由开关电源SMPS产生开关电源在输入断电后输出电容还能维持一段时间但这段余电时间是不确定的跟负载大小、电容容量、电源拓扑都有关系。所以不能靠等电源自己掉来触发保护必须主动检测、提前预警。这篇文章适合谁看如果你正在做STM32、GD32、S32K这类MCU的工业控制板需要设计掉电保护功能那这篇内容可以直接抄作业。如果你只是想了解ADC采样、运放电路、比较器这些基础模块怎么组合成一个实用功能也能从中拿到不少细节。我会从分压网络、运放调理、ADC采样、阈值判断、软件滤波到实际调试踩坑完整走一遍。2. 为什么不能直接用电阻分压进ADC24V到3.3V之间的信号调理逻辑很多人第一反应是24V掉电检测嘛两个电阻分压把24V降到3.3V以内直接接MCU的ADC引脚不就行了理论上没错但实际工程里这样做会踩一堆坑。这一章我们把为什么需要运放这件事讲透。2.1 纯电阻分压的三个致命问题先算一下分压比。假设MCU的ADC参考电压是3.3V24V满量程要降到3.0V左右留点余量分压比大概是3.0/24 1/8。选R17KR21K分压后24V对应3.0V。看起来很简单但问题在于第一输出阻抗太高。7K和1K并联后的等效输出阻抗约为875Ω。STM32的ADC采样保持电容大概是几pF级别采样开关导通电阻加上外部源阻抗会形成一个RC充电时间常数。如果源阻抗太大采样电容在采样窗口内充不满ADC读数就会偏低且不稳定。STM32的ADC手册一般建议源阻抗不超过几十kΩ但那是针对慢速采样的如果你要快速连续采样做掉电判断875Ω其实勉强能用但余量不大。第二没有缓冲负载会拉低电压。如果分压点还接到别的地方比如比较器输入或者另一个ADC通道负载效应会改变分压比。而且24V母线本身可能有纹波和噪声直接分压会把所有噪声都带进ADC。第三共模和地弹问题。工业现场的地不是理想地24V的地和MCU的地之间可能有压差。如果分压电阻直接跨接在24V和MCU地之间这个地压差会直接叠加到ADC输入上导致读数漂移。2.2 运放做缓冲和缩放LM358够不够用关键词里出现了LM358和NE5532这两个都是经典运放。LM358是双运放单电源供电价格便宜工业上大量使用。NE5532是低噪声双运放但它是为音频设计的单电源低压场景下不如LM358方便。对于24V掉电检测这种应用LM358基本够用但要注意几个参数。增益带宽积GBWLM358的GBW约1MHz。如果你只是做直流或低频缓冲1MHz绰绰有余。但如果你要在运放后面做低通滤波截止频率设到1kHz那GBW1MHz意味着在1kHz处开环增益还有1000倍闭环增益1倍时相位裕度足够不会振荡。压摆率Slew RateLM358的压摆率约0.3V/μs。掉电检测的信号变化其实很慢24V掉到0V可能需要几十毫秒折算下来电压变化率远小于0.3V/μs所以压摆率不是瓶颈。输入共模范围LM358的输入共模范围是Vcc-1.5V到Vcc1.5V单电源时也就是说如果运放供电是5V输入共模范围大概是0V到3.5V。如果你把24V分压到3V以内再进运放这个范围是满足的。但要注意LM358不是轨到轨输入输入接近0V时可能有问题所以分压后的信号最好保持在0.5V以上。输出摆幅LM358的输出也不能轨到轨输出高电平大概能到Vcc-1.5V。如果运放供电5V输出最高约3.5V接3.3V的ADC没问题但如果你要输出接近5V的信号就不行。2.3 单极信号差分输入把地弹和共模噪声干掉关键词里有个单极信号差分输入到运放这个思路很实用。工业现场的地噪声很大如果只用单端输入24V的地和MCU的地之间的压差会直接变成测量误差。差分输入可以把这个共模电压抑制掉。具体做法是用两个电阻分压一个从24V分到运放同相输入端一个从24V地分到运放反相输入端运放做差分放大。这样24V地相对于MCU地的波动就变成了共模信号被运放的共模抑制比CMRR压下去。LM358的CMRR大概70dB到80dB对于几十毫伏的地弹来说抑制后只剩几十微伏完全可以接受。不过差分输入有个代价需要匹配电阻。四个电阻的比值必须精确匹配否则CMRR会急剧下降。比如用1%精度的电阻CMRR可能只有40dB左右。如果要高CMRR得用0.1%的匹配电阻或者集成差分放大器。对于掉电检测这种应用40dB其实也够用了因为地弹本身不大。2.4 实际电路参数计算从24V到3.0V的完整链路假设我们采用分压运放缓冲的方案目标是把0到24V映射到0到3.0V给3.3V参考的ADC。分压比1/8运放做电压跟随器增益1倍。分压电阻选R130kΩR24.3kΩ分压比4.3/(304.3)0.125324V对应3.007V接近3.0V。为什么选30k和4.3k而不是7k和1k因为阻值大一点从24V母线抽取的电流小。24V/34.3kΩ≈0.7mA对24V母线几乎没影响。如果选7k和1k电流是3mA虽然也不大但多个检测点累积起来就不可忽略了。分压点的等效输出阻抗是30k并联4.3k约3.76kΩ。这个阻抗直接进ADC太高了所以加一级运放跟随器。运放输入阻抗极高LM358约10MΩ以上对分压点几乎不加载。运放输出阻抗极低闭环时几十毫欧可以直接驱动ADC采样电容。运放供电用5V单电源输出3.0V在LM358的输出范围内5V-1.5V3.5V3.0V小于3.5V没问题。但要注意如果24V掉到0V分压点也是0V运放输入0VLM358在单电源下输入0V时输出可能不准确会有一个几十毫伏的失调。对于掉电检测来说我们关心的是电压从24V下降的过程0V附近不关心所以这个失调可以忽略。3. ADC采样与阈值判断怎么在正确的时间点说要断电了信号调理好了接下来是MCU怎么读、怎么判断。这部分看起来简单但实际做起来有很多细节决定成败。3.1 ADC采样周期与触发方式的选择STM32的ADC采样时间是可以配置的从1.5个ADC时钟周期到239.5个周期不等。采样时间越长采样电容充电越充分读数越准但转换速度越慢。对于掉电检测我们不需要高速采样但需要稳定可靠的读数。假设ADC时钟是12MHz采样时间设为71.5个周期转换时间12.5个周期总转换时间84个周期约7μs。这个速度足够快因为掉电过程是毫秒级的。如果你用定时器触发ADC比如1ms触发一次那CPU负担极小。关键词里有tim触发adc和stm32 adc中断这两个可以结合使用。用TIM定时触发ADC转换转换完成后产生中断在中断里读取ADC值并做判断。这样采样周期精确不受主循环任务影响。但要注意如果主循环里有其他高优先级中断ADC中断可能被延迟导致采样点抖动。对于掉电检测抖动几微秒无所谓因为电压变化很慢。但如果你的系统对时间要求极严可以考虑用DMA搬运ADC数据减少中断开销。3.2 阈值设定不是拍脑袋定一个数掉电检测的阈值设定是个关键。设太高正常电压波动就误触发设太低等电压掉到阈值时MCU已经快没电了来不及保存数据。假设24V正常范围是24V±10%即21.6V到26.4V。那么阈值应该设在21.6V以下比如20V。20V对应分压后电压是20/82.5VADC读数12位3.3V参考是2.5/3.3*4095≈3102。所以阈值可以设为3100左右。但实际电网波动可能更大有些工业现场24V可能掉到18V甚至更低。所以阈值要留足余量。我一般建议阈值设在正常工作电压下限的85%到90%。如果24V系统最低工作电压是21.6V那阈值设在18V到19V比较安全。还有一个关键参数MCU的工作电压范围。STM32F103的工作电压是2.0V到3.6V但Flash写入需要至少2.7V不同型号不一样。所以从24V掉到MCU无法写Flash的那个点时间窗口是有限的。你需要计算24V母线电容C负载电流I从24V掉到18V的时间t C*(24-18)/I。假设C1000μFI100mAt1000μF*6V/100mA60ms。这60ms就是你的黄金时间。3.3 软件滤波C语言ADC值滤波函数的实际写法关键词里有c语言adc值滤波函数这个很实用。ADC读数一定有噪声直接拿单次采样做判断会误触发。常用的滤波方法有算术平均滤波连续采N次取平均。N一般取8到16。优点是简单缺点是响应慢。对于掉电检测响应慢是致命的因为掉电过程只有几十毫秒你采16次可能就花掉几毫秒。中值滤波连续采N次排序后取中间值。对脉冲噪声抑制好但计算量大且同样有延迟。滑动平均滤波维护一个环形缓冲区每次新采样替换最旧的值然后求平均。这样既有滤波效果又不会引入额外延迟每个采样周期输出一个滤波后的值。一阶低通滤波y α*x (1-α)*y_prevα是滤波系数。α越小滤波越强但响应越慢。对于掉电检测α可以取0.3到0.5兼顾滤波和响应。我实际用下来滑动平均加阈值判断最稳。具体做法维护一个长度为8的环形缓冲区每次ADC中断把新值放进去然后计算平均值。如果平均值连续3次低于阈值才认为真的掉电了。这样既能滤掉噪声又能防止单次误判。#define FILTER_LEN 8 #define THRESHOLD 3100 #define CONFIRM_CNT 3 static uint16_t adc_buf[FILTER_LEN]; static uint8_t adc_idx 0; static uint8_t low_cnt 0; uint8_t check_power_fail(uint16_t new_adc) { uint32_t sum 0; uint16_t avg; adc_buf[adc_idx] new_adc; adc_idx (adc_idx 1) % FILTER_LEN; for (int i 0; i FILTER_LEN; i) { sum adc_buf[i]; } avg sum / FILTER_LEN; if (avg THRESHOLD) { low_cnt; if (low_cnt CONFIRM_CNT) { return 1; // 确认掉电 } } else { low_cnt 0; } return 0; }这段代码里FILTER_LEN8CONFIRM_CNT3意味着需要连续3次滤波后的平均值低于阈值才触发。假设1ms采样一次那就是3ms确认时间。对于60ms的窗口来说3ms完全可以接受。3.4 中断优先级与掉电保存的时序配合一旦确认掉电MCU要立刻做几件事关闭输出、保存数据、进入安全状态。这些操作必须在电源彻底掉下去之前完成。所以掉电检测中断的优先级要设得足够高但不能高到影响ADC采样本身。我的做法是ADC中断优先级设为中等掉电判断放在主循环或者一个低优先级任务里。一旦确认掉电立刻置一个标志位然后在一个高优先级中断或者直接在主循环里执行保存操作。保存操作要尽量快只写最关键的数据不要写一大堆。如果数据量大可以考虑用DMA把数据搬到备份寄存器STM32的BKP寄存器或者用FRAM这种快速非易失存储器。EEPROM写入通常需要几毫秒Flash写入更慢所以要提前规划好写什么、写多少。4. 实测中的坑从误触发到不触发我踩过的那些雷这一章讲实际调试中遇到的问题。很多问题在理论设计时想不到只有上电测试才会暴露。4.1 上电瞬间的误触发电容充电导致的假掉电第一次测试就遇到了设备上电时MCU还没启动24V母线电容在充电电压从0慢慢升到24V。如果MCU启动快在电压还没升到阈值以上时就开始采样就会误判为掉电。解决方法有两个一是加一个上电延时MCU启动后先等100ms再开始掉电检测二是用滞回比较阈值设两个上升沿阈值和下降沿阈值不同。比如上升沿阈值设20V下降沿阈值设18V。这样上电时电压必须超过20V才认为正常正常后掉到18V以下才认为掉电。滞回比较在软件里实现很简单维护一个状态变量正常状态下用低阈值判断掉电状态下用高阈值判断。#define THRESHOLD_HIGH 3300 // 对应20V #define THRESHOLD_LOW 2900 // 对应18V static uint8_t power_state 0; // 0掉电, 1正常 void update_power_state(uint16_t adc_avg) { if (power_state 1) { if (adc_avg THRESHOLD_LOW) { power_state 0; // 触发掉电保存 } } else { if (adc_avg THRESHOLD_HIGH) { power_state 1; } } }4.2 运放振荡容性负载惹的祸LM358输出直接接ADC引脚ADC引脚有采样电容相当于一个容性负载。有些运放驱动容性负载会振荡输出波形上出现高频毛刺。我遇到过LM358输出接长线到ADC时线上出现几十MHz的振荡导致ADC读数乱跳。解决方法是在运放输出和ADC之间串一个小电阻比如100Ω然后再并一个100pF到地。这个电阻隔离了容性负载电容滤掉了高频噪声。但要注意电阻不能太大否则ADC采样电容充电时间变长影响精度。100Ω加上ADC内部采样开关电阻通常几kΩ总源阻抗还是可以接受的。4.3 地线处理单点接地不是万能的工业现场的地很脏24V地、MCU地、模拟地、数字地如果处理不好ADC读数会漂。我一开始把所有地都连在一起结果ADC读数随负载变化漂了几十LSB。后来改成单点接地模拟部分分压电阻、运放的地单独走最后在ADC芯片下方单点连接到数字地。24V地通过一个0Ω电阻或者磁珠连接到MCU地把高频噪声挡一挡。这样改完后ADC读数稳定多了。但单点接地也有代价如果地平面分割不好回流路径变长可能引入新的噪声。所以PCB布局时要小心模拟地和数字地不要交叉回流路径要短。4.4 阈值附近的抖动滞回不够大即使加了滞回如果滞回窗口太小电压在阈值附近波动时还是会反复触发。比如阈值18V滞回1V那17.5V到18.5V之间会抖动。如果24V母线本身纹波就有1V那就会频繁误触发。解决方法是加大滞回窗口或者加更长的确认时间。我一般把滞回窗口设在2V到3V确认时间设在5ms到10ms。这样即使有纹波也不会误触发。但滞回窗口太大也有问题如果电压真的掉电从24V掉到18V以下需要掉到滞回下限才触发可能浪费了几毫秒的宝贵时间。所以要在误触发和响应速度之间权衡。我的经验是如果24V纹波小于500mV滞回窗口1V就够了如果纹波大先解决纹波问题而不是一味加大滞回。5. 从比较器到MCU内部比较器另一种更快的掉电检测思路用ADC做掉电检测的好处是灵活阈值可以软件调整还能顺便监测电压值。但ADC采样和软件判断需要时间最快也要几十微秒。如果对响应速度要求极高可以考虑用硬件比较器。5.1 独立比较器方案LM393的用法LM393是双比较器开漏输出可以直接接MCU的外部中断引脚。把分压后的24V信号接到比较器同相输入端反相输入端接一个基准电压比如用TL431产生2.5V基准。当24V分压后低于2.5V时比较器输出翻转触发MCU中断。这个方案的响应速度是纳秒级的比ADC快几个数量级。而且不占用MCU的ADC资源。缺点是阈值由硬件电阻决定调整不方便。可以用数字电位器或者DAC来产生基准电压实现软件可调阈值。关键词里有mcu control dc-dc output voltage using feedback pin dac pwm i2c digital potentiometer这个思路也可以用在掉电检测上用MCU的DAC或者PWM加滤波产生基准电压接到比较器反相输入端这样阈值就可以软件调整了。5.2 STM32内部比较器省掉外部器件有些STM32型号内部集成了比较器比如STM32G4、STM32L4系列。内部比较器的输入可以选外部引脚也可以选内部基准。用内部比较器做掉电检测可以省掉外部LM393和基准源降低成本。但内部比较器的精度和速度通常不如外部专用比较器。STM32G4的内部比较器传播延迟大概几十纳秒精度受内部基准影响。对于掉电检测这种应用其实够用了。用内部比较器时可以把比较器输出连接到定时器的刹车输入或者外部中断实现快速响应。同时还可以用ADC监测电压值两者结合比较器负责快速触发ADC负责精确测量。5.3 两种方案的对比与选型建议对比项ADC方案比较器方案响应速度几十微秒到几毫秒纳秒级阈值灵活性软件可调非常灵活硬件决定调整麻烦成本占用ADC资源无额外器件需要比较器和基准源精度12位ADC精度高比较器精度一般复杂度软件滤波中等复杂度硬件设计简单直接适用场景需要监测电压值、阈值需调整只需快速触发、阈值固定我的建议是如果MCU有富余的ADC通道优先用ADC方案因为灵活。如果对响应速度要求极高或者ADC资源紧张用比较器方案。两者也可以结合比较器做快速触发ADC做电压监测和阈值确认。6. 关键器件选型与参数计算电阻、电容、运放怎么选这一章把选型相关的细节集中讲一下。很多新手在设计电路时不知道电阻选多大、电容选什么材质、运放选什么型号这里给出具体的计算方法和推荐值。6.1 分压电阻的计算与精度选择分压电阻的阻值计算前面已经讲了这里补充精度选择。分压比误差直接影响ADC读数误差。如果用1%精度的电阻分压比误差最大2%两个电阻误差叠加。对于12位ADC1LSB对应3.3V/4095≈0.8mV2%误差对应60mV约75LSB。这个误差对于掉电检测来说可以接受因为阈值判断有滞回窗口。但如果要精确测量24V电压值就需要更高精度的电阻比如0.1%。或者用软件校准在已知电压下测一次ADC读数算出校准系数后续测量都用这个系数修正。电阻的温度系数也要考虑。普通厚膜电阻的温度系数是100ppm/°C到200ppm/°C温度变化50°C时阻值变化0.5%到1%。对于工业环境温度变化可能很大所以最好选低温漂电阻比如25ppm/°C的薄膜电阻。6.2 滤波电容的材质与容值运放输出到ADC之间的滤波电容一般选100pF到1nF。材质选C0G或NP0这种电容温度稳定性好容值不随电压和温度变化。不要用X7R或Y5V它们的容值随电压变化很大会导致滤波效果不一致。分压点也可以加一个电容到地和分压电阻形成低通滤波。截止频率f1/(2πRC)R是分压点等效输出阻抗C是电容值。比如R3.76kΩC100nFf1/(2π3760100e-9)≈423Hz。这个截止频率可以滤掉高频噪声但对掉电检测的响应速度影响不大因为掉电信号是直流或低频。但要注意如果电容太大掉电时电容上的电荷会延缓电压下降导致检测延迟。所以电容不能太大100nF到1μF比较合适。6.3 运放选型LM358、NE5532还是其他LM358是最经济的选择单电源供电输入共模范围包含地输出摆幅够用。缺点是失调电压较大最大7mV温漂也大。但对于掉电检测这些都不重要。NE5532是低噪声运放但它是双电源设计的单电源低压下性能下降。而且NE5532的输入共模范围不包含负电源轨单电源使用时输入接近0V会有问题。所以不建议用NE5532做掉电检测。如果要求高精度可以用OPA333、MCP6001这类零漂移运放失调电压只有几微伏。但价格贵不少对于掉电检测有点浪费。如果运放供电是3.3V而不是5V要选轨到轨输入输出的运放比如MCP6001、TLV9001。LM358在3.3V供电时输出摆幅不够可能无法输出3.0V。6.4 基准电压源的选择如果用比较器方案需要基准电压源。TL431是最常用的可调基准精度0.5%到2%温度系数50ppm/°C。价格便宜但需要至少1mA的阴极电流才能正常工作。如果要求更高精度可以用REF3025、LM4040这类专用基准芯片精度0.1%温度系数更低。但价格贵一些。也可以用MCU的DAC输出作为基准但DAC的精度和稳定性不如专用基准。如果MCU供电本身在波动DAC输出也会波动导致阈值漂移。所以DAC做基准只适合对精度要求不高的场景。7. 软件层面的掉电保存策略写什么、写多快、怎么写掉电检测只是第一步检测到掉电后怎么保存数据才是最终目的。这一章讲软件层面的策略。7.1 保存哪些数据优先级排序掉电时时间宝贵不可能保存所有数据。必须提前规划好哪些数据最关键。一般分三个优先级最高优先级设备运行状态、关键参数、故障标志。这些数据丢失会导致设备行为异常必须保存。中等优先级累计运行时间、产量计数、校准系数。这些数据丢失影响不大但最好保存。低优先级日志、历史曲线、调试信息。这些数据可以丢弃或者只保存最近几条。我的做法是在RAM里维护一个结构体把所有需要保存的数据放在一起。掉电时一次性写入EEPROM或Flash。结构体大小控制在256字节以内这样写入时间可以控制在几毫秒。7.2 EEPROM与Flash的写入速度对比EEPROM写入速度通常比Flash快。以AT24C02为例页写入模式可以一次写8字节写入周期5ms。如果写256字节需要32页总共160ms太慢了。所以要用页写入加轮询的方式或者用FRAM。FRAM铁电存储器写入速度极快没有写入延迟可以像RAM一样直接写。但价格贵容量小。如果数据量不大几KB以内FRAM是最佳选择。Flash写入需要先擦除再写入擦除时间长几十毫秒所以不能掉电时擦除。必须提前擦好一个区域掉电时直接写。STM32的Flash可以按半字或字写入写入时间几十微秒。但Flash写入需要电压稳定如果电压已经掉到2.7V以下写入可能失败。所以我的建议是如果数据量小用FRAM如果数据量大用EEPROM加页写入如果用Flash必须提前擦除并且确保掉电时电压还在安全范围内。7.3 写入过程中的二次掉电保护最怕的情况是掉电时正在写EEPROM写到一半电彻底没了导致数据写坏。下次上电读出来是乱码。解决方法是用双备份加校验。把数据存两份每份带CRC校验。写入时先写第一份校验通过后再写第二份。读取时如果第一份校验失败读第二份。如果两份都失败用默认值。还有一种方法是日志式写入每次写入都追加到新的位置不覆盖旧数据。读取时找最新的有效记录。这样即使写入过程中掉电旧数据还在。但这种方法需要更大的存储空间且需要垃圾回收机制。对于掉电检测这种场景双备份加CRC就够用了。实现简单可靠性高。7.4 上电后的数据恢复与校验上电后MCU要先读取保存的数据校验CRC。如果校验通过恢复运行状态如果失败用默认值并记录一个故障标志。这里有个细节上电时电压可能还没稳定读取EEPROM可能出错。所以上电后要等电压稳定再读或者读多次取多数结果。我一般上电后延时100ms再读EEPROM并且读三次如果三次结果一致才采用。8. 调试与验证怎么确认掉电检测真的可靠设计完了怎么验证不能只靠理论计算必须实际测试。8.1 用可调电源模拟掉电最直接的测试方法用可调直流电源给24V母线供电然后突然关掉电源用示波器同时抓24V母线电压和MCU的掉电保存信号。看从电压开始下降到保存完成时间够不够。但可调电源的关断特性可能和实际开关电源不同。实际开关电源断电后输出电容放电曲线是指数下降的而可调电源关断可能更快或更慢。所以最好用实际的24V开关电源测试拔掉交流输入观察掉电过程。8.2 用示波器抓时序关键波形分析示波器要抓几个信号24V母线电压、运放输出电压、ADC中断信号、掉电保存信号。触发方式设为24V下降沿触发单次触发。从波形上可以看到24V开始下降经过分压和运放ADC读数下降软件判断触发保存。整个链路的时间延迟一目了然。如果保存完成时24V还在MCU工作电压以上说明设计合格。我实测下来从24V开始下降到触发保存延迟大概2ms到5ms取决于滤波参数。保存256字节到EEPROM需要10ms到20ms。总共15ms到25ms。如果24V母线电容是1000μF负载100mA从24V掉到18V有60ms那时间绰绰有余。8.3 反复上电断电测试验证可靠性单次测试通过不代表可靠。要做反复上电断电测试比如连续断电100次看是否每次都能正确保存。我一般做500次以上确保没有偶发失败。测试时要注意每次断电后要等电容完全放完电再上电否则可能测不到真正的掉电过程。可以在24V母线上并一个放电电阻加快放电。如果发现偶发失败要查原因是ADC读数抖动导致误判是EEPROM写入失败还是电源掉得太快用示波器抓失败那次的波形对比成功和失败的差异。8.4 温度与电压边界的测试工业设备要在宽温度范围内工作所以要在高低温下测试掉电检测。低温下电容容值变化、电阻阻值变化、运放失调变化都可能影响检测阈值。高温下EEPROM写入速度可能变慢。我一般做-40°C、25°C、85°C三个温度点的测试。如果条件有限至少做0°C和50°C。测试方法和常温一样看是否每次都能正确保存。电压边界测试把24V调到最低工作电压比如21.6V然后掉电看是否能检测到。再把24V调到最高工作电压26.4V掉电看是否误触发。确保在整个工作电压范围内都可靠。9. 一些容易被忽略的细节和我的个人经验最后分享几个细节都是实际项目中踩过坑才总结出来的。第一ADC参考电压的稳定性。如果MCU的ADC用VDDA做参考而VDDA又来自一个不稳定的LDO那ADC读数会随VDDA波动。掉电时VDDA可能先掉导致ADC读数偏低误判为掉电。所以最好用外部基准芯片或者确保VDDA在掉电时能维持到最后。第二运放供电的顺序。如果运放供电和MCU供电是分开的要注意上电顺序。如果运放先上电输出可能有一个高电平脉冲被MCU的ADC引脚看到可能误触发。可以在运放输出加一个钳位二极管防止电压超过VDDA0.3V。第三PCB布局。分压电阻和运放要靠近MCU的ADC引脚走线尽量短。分压点不要走长线否则容易引入噪声。模拟地和数字地要分开最后单点连接。第四软件看门狗。掉电保存过程中如果看门狗复位保存可能失败。所以在保存前要先喂狗或者暂时关闭看门狗。保存完成后再开启。第五多次掉电的累积效应。如果设备频繁掉电EEPROM会频繁写入寿命可能不够。EEPROM的写入寿命通常是100万次如果每天掉电100次能用27年。但如果每天掉电1000次只能用2.7年。所以如果掉电频繁要考虑用FRAM或者减少写入次数。第六掉电检测的阈值要留足余量。我一般把阈值设在正常工作电压下限的80%左右。比如24V系统最低工作电压21.6V阈值设在17V到18V。这样即使电网波动大也不会误触发。但也不能太低否则等电压掉到阈值时MCU已经快没电了。第七测试时要模拟真实负载。有些设备在轻载和重载下的掉电曲线完全不同。轻载时电容放电慢重载时放电快。所以要在最重负载下测试确保时间窗口够用。第八考虑电源反接和浪涌。工业现场可能有反接和浪涌分压电阻和运放输入要加保护。比如在分压点加一个TVS管钳位电压在ADC输入范围内。运放输入串一个电阻限流。这些细节看起来琐碎但每一个都可能决定掉电检测的成败。我在实际项目中因为忽略了运放供电顺序导致上电时误触发查了两天才找到原因。也因为EEPROM写入寿命问题把方案从EEPROM改成了FRAM。所以做硬件设计细节决定成败。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑