news 2026/11/5 5:03:45

ADS122U04+PIC18F57K42高精度温度采集方案详解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
ADS122U04+PIC18F57K42高精度温度采集方案详解

做工业采集或者楼宇自控的人,大概率都经历过这种憋屈事:传感器明明选的是 PT100,信号调理也做了,最后整机温度误差却从 ±1°C 漂到 ±3°C,甲方一句“你这数据不靠谱”,前期所有工作直接归零。前年我接手一块 HVAC 温度采集板,客户要求把管道温度精度从 ±1°C 提到 ±0.2°C 量级,原板用 MCU 内置 12 位 ADC 加 NTC,怎么折腾都压不下来。后来我把模拟前端换成了 TI 的 24 位 ADC——ADS122U04IPWR,主控用 Microchip 的 PIC18F57K42,重新搭了一套能同时支持 PT100、热电偶和 NTC 的采集方案,才算把这个坑彻底填平。

这篇文章会把这套方案完整拆开讲:为什么温度采集必须外置 24 位 ADC,ADS122U04 和 PIC18F57K42 怎么分工,硬件接线和电源处理怎么做,固件里 UART 命令流和温度换算算法怎么实现,最后再聊聊工业现场和 HVAC 项目里实测踩过的几个大坑。如果你正在做温度采集板、楼宇自控控制器,或者只是想搞明白这类高精度测温的完整链路,这篇可以直接当参考设计用。

1. 为什么温度采集要外置 24 位 ADC:从内置 12 位 ADC 的账面数据说起

1.1 PT100 在 0°C 附近的信号到底有多微弱

很多人对温度信号微弱程度的理解是停留在口头上的,我习惯直接算账。

PT100 在 0°C 时的标称电阻是 100Ω,灵敏度约为 0.385Ω/°C。如果我们用 500µA 的激励电流给 PT100 供电,那么温度每变化 1°C,在采样电阻上产生的电压变化是:

ΔV = 0.385Ω × 500µA = 192.5µV

而一片常规 MCU 内置 12 位 ADC,参考电压按 5V 算,一个 LSB 对应的电压是:

ΔV = 5V / 4096 = 1.22mV

看到问题了吗?PT100 变化 1°C 只有 192.5µV 的电压变化,还不够 12 位 ADC 一个最低位的六分之一。换句话说,用 12 位 ADC 测 PT100,理论上来讲连 1°C 的区分度都做不到,除非把激励电流拉到 30mA 以上。但 PT100 在 30mA 下的自热功率接近 100mW,电阻会明显漂移,这基本是自杀式设计。

外置 24 位 ADC 的情况就完全不同了。ADS122U04 在增益为 1 时,一个 LSB 的理论电压是:

ΔV = 2.048V / 2^23 = 244nV

如果打开内部 PGA 设为 128 倍增益,理想情况下一个 LSB 只有不到 2nV。实际有效分辨率会被噪声限制,但即便按保守的 0.4µV 有效噪声来算,折算成 PT100 的温度分辨率也有 0.002°C 左右。这就是为什么温度采集这种看似简单的应用,往往必须动用 24 位 ADC。

1.2 ADS122U04 和 PIC18F57K42 各自该干什么

ADS122U04IPWR 我直接说结论:它就是一颗为温度测量量身定做的单芯片模拟前端。

  • 24 位 Δ-Σ ADC,内置可编程增益放大器(PGA,1~128 倍)
  • 两个可配置 IDAC 恒流源,用于给 RTD 和热敏电阻提供激励
  • 内置温度传感器,可以直接做热电偶冷端补偿
  • 内置 2.048V 基准,也可以使用外部精密基准
  • 支持 50/60Hz 工频抑制
  • 最关键的是它带 UART 接口,MCU 通过两线串口就能读数据,不需要像传统 SPI 接口那样死磕时序

PIC18F57K42 在这里的角色是系统主控。它是一颗 8 位低功耗 MCU,主频最高 64MHz,带多个 UART、SPI、I2C 和 12 位内置 ADC,还有可配置逻辑单元这些 CIP 外设。在温度采集板里,PIC18F57K42 负责系统时序管理、协议栈(比如后来给客户加的 Modbus RTU 从站)、报警输出和显示逻辑。至于为什么不用一颗带内置高精度 ADC 的 MCU 全搞定,因为市面上 8 位 MCU 很难有真正的 24 位 ADC,即使有,模拟前端和激励源也需要外置,成本并不比 ADS122U04 加 MCU 的方案低,而且灵活性差很多。

1.3 工业和 HVAC 场景对温度传感器的选型前提

ADS122U04IPWR 这个芯片在工业和 HVAC 两个场景里都能用,但传感器选型的出发点完全不一样。

HVAC 场景主要测管道空气温度和环境温度,量程一般在 -40°C 到 120°C 之间,精度要求常见是 ±0.5°C,而且成本敏感。PT1000 或者 PT100 在短距离布线下表现稳定,热响应也比热电偶更均匀。工程上有些低成本方案会用 NTC,但 NTC 的阻温曲线非线性严重、批次一致性差,长期稳定性也不如铂电阻,所以我在大多数精度有要求的项目里还是优先 PT100。

工业场景就复杂了。很多现场传感器和采集板之间的距离动辄几十米,周围有变频器、电机、大电流电缆,电磁干扰非常强。这种情况下 K 型热电偶和三线制/四线制 PT100 是绝对的主流。热电偶测量范围宽、探头小、响应快,还不需要激励电流;PT100 则适合需要长期稳定和高精度的关键测点。ADS122U04 的好处是这几个都能接:热电偶走内部基准和高增益,RTD 走 IDAC 激励和比率测量,NTC 也可以走恒流源单端输入。一块板子兼容多种传感器,对产品化来说省了很大工作量。

2. 硬件搭建:ADS122U04IPWR 的引脚级连接与电源/参考处理

2.1 TSSOP-16 封装的小系统与外围电路

ADS122U04IPWR 的后缀含义值得说明一下:I 代表工业温度等级(-40°C 到 125°C),PW 代表 TSSOP-16 封装,R 是卷带包装。它在小信号处理上的优势很突出,但外围电路做不好也会毁掉这一切。

我先说电源。AVDD 和 DVDD 需要分开处理,AVDD 是模拟核心供电,对噪声极其敏感,我强烈建议用低噪声 LDO 供电,不要直接把开关电源输出怼上去。DVDD 是数字接口供电,可以与 MCU 共用 3.3V。实际电路里我在 AVDD 和 DVDD 之间串了一个磁珠做高频隔离,每个电源引脚旁边都放了 1µF 和 0.1µF 电容并联去耦,且电容必须紧贴引脚放置。

再说参考电压。ADS122U04 支持内部 2.048V 基准,但如果要最高精度,我建议外部基准电阻方案。做法是:将精密参考电阻放在 REFP0 和 REFN0 之间,IDAC 电流同时流过参考电阻和 RTD,这样 ADC 输出就只跟电阻比值有关,跟电流源的绝对精度无关,这种比率测量是 RTD 高精度的关键。

2.2 三线制 PT100 的 IDAC 与基准电阻接法

三线制 PT100 是为了抵消导线电阻引入的误差,ADS122U04 的两个 IDAC 刚好派上用场。我把测量链路的逻辑讲清楚。

假设使用 500µA 的 IDAC1 电流,电流路径是这样的:从 IDAC1 流出,经过参考电阻 RREF,再经过三线制 PT100 的其中一根导线进入 RTD,从 RTD 另一根导线回到 AIN 引脚,最后通过 AIN 输入结构回到地。关键是参考电压取自 RREF 两端,而输入电压取自 RTD 两端,二者使用的是同一个电流,所以:

R_RTD / R_REF = ADC_Code / 2^23

也就是说,ADC 最终输出的是 RTD 和参考电阻的比值,电流源的绝对精度、温度漂移都被抵消掉了,这是比率测量的核心优势。

三线制的难点在于那根“第三条线”。实际电路中,第三根线接到另一个激励电流源 IDAC2,通过调节 IDAC2 和 IDAC1 的电流比,可以把导线上的压降误差抵消到最小。如果你做四线制 PT100,那更简单,两根线走激励,两根线走采样,采样回路几乎没有电流,导线电阻对精度的影响可以忽略。四线制成本高一些,但精度和稳定性是最佳的。

这里有一个非常容易踩的坑:IDAC 输出是有电压余量限制的。如果 AVDD=3.3V,参考电阻选了 2kΩ,RTD 在高温段电阻达到 300Ω 左右,那么 1mA 电流在整条链路上产生的压降接近 2.3V,此时 AVDD 减去这个电压后余量已经很小,PGA 输入可能就饱满了。我后来在 3.3V 供电下改用 500µA 激励,并把参考电阻调整为 1.2kΩ,才保证了整个 -40°C 到 200°C 量程内都不会碰到输出饱和。

2.3 热电偶输入电路与冷端测温的硬件基础

热电偶的输出电压更小。K 型热电偶在常温附近的灵敏度大约是 41µV/°C,所以必须启用 PGA 的高增益档位。ADS122U04 的 PGA 最高可以到 128 倍,此时 24 位 ADC 的理论分辨率足够覆盖热电偶的应用。

热电偶的输入电路我做了一个简单的射频低通滤波器:在 AINx 和 AINy 引脚各串一个 100Ω 电阻,再分别放一个 10nF 电容到 AGND。这个滤波器的截止频率大约在 160kHz,主要用来滤除长线引入的高频干扰,不是为了滤工频。工频 50/60Hz 干扰交给 ADC 内部的数字滤波器处理,效果比模拟滤波器干净得多。

冷端补偿在这一步要做的事情很明确:热电偶测到的电压是热端和冷端的温差电压,不是绝对温度。ADS122U04 内置了芯片温度传感器,它检测的是芯片附近也就是接线端子处的温度,也就是冷端温度。这块传感器数据也是通过寄存器读出来的,只需要在软件里把它参与补偿运算就行了,硬件上不需要额外的冷端温度传感器探头。如果你对冷端精度要求特别高,比如想达到 ±0.2°C 整机精度,可以考虑在端子附近放一颗小封装 PT100 或者数字温度传感器做二次补偿,但大多数工业应用用芯片内置传感器就够了。

3. 固件驱动:UART 命令流与 PIC18F57K42 的接收状态机

3.1 ADS122U04 的 UART 通信模型

ADS122U04 最讨喜的地方就是把 SPI 换成了 UART,MCU 不用跟时钟线较劲,也不用担心 SPI 模式配置错了读出来全是 0xFF。它的通信模型很简单:MCU 是主机,ADC 是从机,ADC 转换完成后通过数据就绪信号通知 MCU,MCU 再发命令读取转换结果。

芯片上电后第一件事是复位,让它进入确定的初始状态。然后依次写入配置寄存器,把输入多路复用器、PGA 增益、IDAC 电流、基准源、数据速率这些参数配置好。配置寄存器是通过 WREG 命令写进去的,每条命令由命令字节和若干数据字节组成。

我习惯把命令封装成宏,方便后期维护。伪代码里我会这样声明:

// 注意:以下命令码只是示意,不同版本必须按数据手册命令表核对 #define ADS_RESET 0x06 #define ADS_START 0x08 #define ADS_RDATA 0x10 #define ADS_WREG 0x40 #define ADS_RREG 0x20

写固件的重点不是背命令码,而是建立一套清晰的状态机。我的流程是:复位 -> 等待上电稳定 -> 写配置 -> 循环 { 等待 DRDY 信号 -> 发 RDATA 命令 -> 读取 3 个数据字节 -> 可选的 CRC 校验 -> 处理数据 }。

3.2 PIC18F57K42 的 EUSART 初始化

PIC18F57K42 的串口模块叫 EUSART,初始化其实不复杂。下面这段是我用 XC8 写的初始化代码,主时钟 32MHz,波特率 115200:

void uart1_init(void) { // 引脚复用配置:根据实际 PCB 连接选择 UART1 的 RX/TX 引脚 // 一般通过 PPS 寄存器把 RXPPS/TXPPS 映射到对应引脚 uint16_t brg; brg = (uint16_t)(F_OSC / (16ul * 115200) - 1); SP1BRGL = (uint8_t)(brg & 0xFF); SP1BRGH = (uint8_t)(brg >> 8); BAUD1CON0bits.BRGS = 1; // 高分辨率波特率模式 RC1STAbits.SPEN = 1; // 使能串口 RC1STAbits.CREN = 1; // 使能接收 TX1STAbits.TXEN = 1; // 使能发送 PIE1bits.RC1IE = 1; // 接收中断使能 }

这里有一段来自实际项目的提醒:32MHz 时钟下,115200 波特率算出来的分频器值是 16.36,取整 16 对应的实际波特率是 113636,误差约 1.4%。UART 协议一般允许 ±2% 的误差,所以能工作,但如果你有多块板子或者线缆较长,建议用 MCC(MPLAB Code Configurator)自动生成精确的波特率配置,或者把系统时钟调到能被 115200 整除的频率。温度采集这种长期运行的系统,通信可靠性是第一位的,没必要在这种细节上省。

3.3 数据读取与 CRC 校验

ADC 转换完成后,DRDY 信号会给出指示,MCU 可以通过外部中断或者轮询引脚来感知。我实际项目里用的是引脚中断,因为轮询会白白占用 CPU,而且温度采集系统往往还要同时跑 Modbus 协议和显示刷新,不能因为读数据卡了主循环。

收到 DRDY 通知后,MCU 发送 RDATA 命令,然后从串口接收 3 个字节的转换结果。如果使能了 CRC 校验功能,还会多一个 CRC 字节。CRC 的作用是检验这一帧数据在传输过程中有没有被干扰,在工业现场尤其重要。一次典型的 UART 信息帧像这样:

// 伪代码:读取转换结果帧 void ads_read_data(void) { uint8_t frame[4]; ads_uart_send(ADS_RDATA); ads_uart_receive(frame, 4); // 3 字节数据 + 1 字节 CRC int32_t raw = (int32_t)((frame[0] << 16) | (frame[1] << 8) | frame[2]); if (raw & 0x800000) { raw |= 0xFF000000; // 24 位补码转 32 位有符号数 } // 这里做 CRC 校验,不一致则丢弃这一帧 if (ads_crc_check(frame) == true) { process_temperature(raw); } }

24 位补码转成有符号数这步不能省,因为热电偶在测量负温度时输出的是负电压,ADC 会给出负数码值,如果直接把 3 个字节拼成 int32 不做符号扩展,低温段的计算就全错了。

3.4 配置寄存器与 PGA/IDAC 的联动设置

ADS122U04 的寄存器配置属于那种“看着简单、实际要不断查手册”的环节。我在固件里会维护一个配置数组,每个字节对应一个寄存器,然后一次性写完:

// 示例:RTD 模式下的配置填写 uint8_t adsConfig[8]; adsConfig[0] = 0x00; // 输入多路复用 + PGA 增益,实际 bit 位按手册填写 adsConfig[1] = 0x10; // 数据速率、滤波模式等 adsConfig[2] = 0x01; // IDAC1 电流档位,例如 500uA adsConfig[3] = 0x55; // IDAC1 输出通道、IDAC2 电流档位 // 其余寄存器按传感器类型和量程配置

虽然具体 bit 我不会在这里一个个默写,但有一个配置逻辑必须强调:IDAC 的电流档位、PGA 增益、参考源选择这三者必须联动,因为它们共同决定了 ADC 的满量程电压范围。如果 PGA 增益设得太高,而 IDAC 电流和参考电阻又带来了很大的输入电压,ADC 就会饱和;反过来如果 PGA 增益太低,小信号的有效分辨率又不够。我的经验是先根据量程上限计算最大输入电压,再反推 PGA 和 IDAC 档位,最后再设参考源,这样才能保证整个量程内的线性度。

4. 从 ADC 码到工程温度:RTD 比率计算与热电偶冷端补偿

4.1 PT100 的电阻反算与温度线性化

拿到 24 位 ADC 的原始码值之后,第一步是反算电阻。这里用的是比率测量原理,公式非常简洁:

R_RTD = R_REF × ADC_Code / 2^23

代码实现也很直接:

#define REF_RESISTOR 1000.0f // 参考电阻实际阻值 float rtd_resistance(int32_t code) { return REF_RESISTOR * (float)code / 8388608.0f; }

得到电阻后,查表或者用多项式都能求出温度。工业上 PT100 常用 IEC 751 的公式,0°C 以上简化为:

R(T) = R0 × (1 + A×T + B×T^2)

其中 A=3.9083e-3,B=-5.775e-7。注意这个公式没有三次项,0°C 以下才需要加上 C 系数,所以一套严谨的测温程序通常会判断温度范围再选择不同的反算方式。

实际工程中我推荐用牛顿迭代法反解温度,因为公式简单、收敛快,还不用维护大表:

float pt100_to_temperature(float r) { float t = (r - 100.0f) / 0.385f; // 线性近似作为初始值 for (int i = 0; i < 4; i++) { float r_calc = 100.0f * (1.0f + PTA * t + PTB * t * t); float deriv = 100.0f * (PTA + 2.0f * PTB * t); t -= (r_calc - r) / deriv; } return t; }

四到五次迭代就能收敛到 0.01°C 以内,运行在 PIC18F57K42 这种 8 位 MCU 上也毫无压力。如果要覆盖 -200°C 到 850°C 的完整量程,就需要把 C 系数和分段处理加进去,原理是一样的。

4.2 热电偶的冷端补偿计算和查表

热电偶的处理路线和 RTD 完全不同,关键在冷端补偿。ADS122U04 内部温度传感器读出来的是芯片附近也就是冷端温度,补偿分三步:

  1. 把冷端温度换算成对应的热电偶热电势,得到 Vcold;
  2. 把 ADC 测量的热电势加上 Vcold,得到真实热端电压 Vhot;
  3. 用 Vhot 反查热电偶分度表,得到被测点的真实温度。

伪代码逻辑如下:

float measure_tc_temperature(int32_t adc_code) { float v_measured = (float)adc_code * VREF_FS / 8388608.0f / PGA_GAIN; float t_cold = ads122u04_internal_temp(); // 读内部温度传感器 // 查 NIST 分度表:温度 -> 热电势 float v_cold = tc_emf_from_temp(t_cold, TC_TYPE_K); // 补偿后的热端电压 float v_hot = v_measured + v_cold; // 反查分度表:热电势 -> 温度 return tc_temp_from_emf(v_hot, TC_TYPE_K); }

这里的核心是查表或者多项式。手头没有巨大存储空间的 MCU,我通常用稀疏表加线性插值,K 型热电偶每隔 10°C 建一个表,然后两点间线性插值,精度可以做到 ±0.3°C 以内,而且占用的 Flash 非常少。如果使用的是 NIST 多项式系数,精度会更高,但代码长度会明显上升,在 8 位 MCU 上需要权衡。

4.3 数据平滑与滤波器选择

24 位 ADC 的原始数据如果直接拿去显示或者送给 PID 控制器,会发现即使是稳定温度源,最后一位也会有几位噪声跳动。这不是芯片的问题,而是热噪声和参考源噪声的客观存在。实际项目中我做两级处理:先做异常值剔除,再做滑动平均。

异常值剔除很简单:连续采 5 个点,去掉最大最小,剩下 3 个取平均。这套逻辑对工业现场偶发的尖峰干扰特别有效。

float filter_median_avg(float values[5]) { // 5 点排序取中间 3 点平均,代码略 }

滑动平均的窗口我一般取 8~16,视响应速度要求调整。HVAC 管道温度的响应本来就慢,窗口取大一点没关系,能换来平滑的曲线。如果是快速变化的工艺温度,窗口不宜超过 8,否则动态响应会被拖慢,系统调节裕量会变小。

要注意的是,ADS122U04 内部本身就有数字滤波器,数据速率越低滤波越强。如果把它与外部滑动平均叠加起来,等效时间常数可能从几毫秒变成几秒,这一点在系统联调时要心里有数,不要等控温曲线震荡了才反过来查原因。

5. 实测与排障:工业现场和 HVAC 项目里的那些坑

5.1 地环路:屏蔽层两端的接法决定成败

第一次去现场调试时,传感器装在一个变频器柜旁边,我把屏敝线两端都接地了,结果读回来的温度波动能达到十几度。后来排查了很久才发现是地环路:屏蔽层在传感器端和采集板端都接了地,两端的接地点电位不同,形成了地环路电流,这个电流直接耦合进了热电偶的毫伏信号。

正确的做法是屏蔽层只在单端接地,通常选在采集板这一端接地更稳妥。对于较长的工业信号线,还要注意信号线和电缆屏蔽层不能共用一根地线,否则干扰会通过公共阻抗窜进来。这个问题在实验室里很难复现,到了现场分分钟翻车,我有一次调了一天,最后就是用钳流表测得屏蔽层对地环流才锁定的问题。

5.2 IDAC 激励电流设置:自热与满量程的矛盾

IDAC 电流选多大,直接决定了系统的功耗、自热误差和抗干扰能力,而且这几个指标是互相打架的。

我以 PT100 为例列过一张实际对比表:

激励电流0°C 输入电压200°C 输入电压自热功率 (200°C)适用场景
250µA25mV78mV0.02mW高精度静态测量
500µA50mV156mV0.08mW通用测温
1mA100mV312mV0.32mW抗干扰、长线传输

自热功率看起来都很小,但如果环境风速低、探头安装环境导热差,这零点几毫瓦也足以让探头比被测介质温度偏高零点几度。我的工程准则是:能用 500µA 的场合绝不上 1mA,只有线缆很长、现场干扰很强,才考虑加大电流换取更高的信噪比。

5.3 测温结果校验:和标准表比对的三步法

不管软件写得再漂亮,最终都要靠实际标定数据说话。我在项目里用恒温槽配合二等标准铂电阻温度计,对被试系统做了 0°C、25°C、80°C、120°C 四个点的比对。步骤很简单:

  1. 把标准铂电阻和被测 PT100 放入同一个恒温槽,稳定 30 分钟;
  2. 用标准表读取真值,同时记录采集板读到的温度;
  3. 每个点重复 3 次,计算偏差和重复性。

实测数据大致是:0°C 偏差 -0.03°C,25°C 偏差 +0.02°C,80°C 偏差 +0.05°C,120°C 偏差 +0.12°C。这个误差里有相当一部分来自参考电阻的温度系数,所以如果项目指标要求更高,参考电阻一定要用 ±5ppm 甚至 ±2ppm 的金属箔电阻,花在上面的钱比折腾软件值多了。

至于 K 型热电偶,实测效果在 100°C 到 300°C 区间内大约能做到 ±0.6°C,主要误差来源是热电偶丝材本身的均匀性以及冷端温度补偿的误差。ADS122U04 内置温度传感器做冷端补偿,对大部分工业应用足够了,但如果你需要追求 0.1°C 级别的热电偶测量,就要在冷端放独立的精密测温元件做二次校验。

最后再分享一点个人心得。这套方案做完之后,我最大的感受是:高精度温度测量里,芯片选型只是第一步,PCB 布局、电源处理、参考电阻选材、接地和屏蔽这些东西合起来才决定了最终那 0.1°C 能不能保住。ADS122U04 和 PIC18F57K42 的组合胜在把模拟前端和数字处理分得很清楚——前端负责把毫伏级信号变成稳定准确的数字码,MCU 负责把数字码变成可靠的工程温度,谁也别跟谁抢活干。如果你现在正在做类似的东西,我建议你先把这一堆原理吃透,再照着自己的传感器类型一门心思去调参数,比上来就堆代码改寄存器要好用得多。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/11/5 5:03:06

STM32搭配24位ADC:单线UART与比例式测量的高精度温度采集方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/11/5 5:03:05

ADS122U04与STM32F756ZG高精度温度采集系统设计实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/11/5 5:02:45

S7-200 SMART PLC实现Modbus RTU总线数据侦听与故障诊断

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/11/5 5:02:28

工业级温度采集系统:ADS122U04IPWR+PIC32MZ硬核设计指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/11/5 5:01:58

UART接口24位ADC ADS122U04与STM32L4的高精度HVAC测温实现

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/11/5 5:01:31

QNX内存分析利器pmap:从原理到实战排查内存泄漏与碎片

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华