1. 项目概述与核心价值在精密测量和数据采集领域比如我们做的高精度振动分析、多通道声学检测或者精密电源监控系统数据的绝对准确性和通道间的时间一致性是灵魂。你可能会遇到这样的困扰单个ADC模数转换器测出来的电压值总觉得和万用表对不上存在一个固定的微小偏差或者当你用多个ADC同时采集多路信号时发现各通道数据在时间上对不齐存在微小的相位差导致后续的频谱分析或相关计算完全失真。这些问题本质上可以归结为两个核心挑战系统误差和同步时序。系统误差就像是ADC的“出厂性格”每个芯片由于内部模拟电路的细微差异即使在输入为零时也可能输出一个非零的代码偏移误差或者对满量程信号的放大倍数存在微小偏差增益误差。对于ADS127L01这类24位高精度Δ-Σ ADC其理论分辨率高达1/16,777,216任何微小的固有误差都会被这个极高的分辨率放大导致测量结果偏离真实值。因此系统校准就是通过软件配置给ADC注入一个“修正值”从根本上修正其偏移和增益使其输出无限逼近物理真实值。这是获得可信数据的基石。而多设备同步则是解决“同时性”问题的关键。在需要捕捉多路信号瞬时关系的场景下比如三相电的功率分析、麦克风阵列的声源定位如果每个ADC的采样时钟和启动时刻存在哪怕纳秒级的偏差都会在频域引入不可接受的相位误差。ADS127L01提供了灵活的SPI和帧同步Frame-Sync接口并支持级联Cascaded和菊花链Daisy-Chain两种拓扑让多个ADC能像一个整体一样工作共享时钟和触发信号确保所有通道在同一时刻进行采样转换。本文将以TI的ADS127L01为蓝本抛开数据手册的碎片化描述结合我实际在工业传感项目中的调试经验深入拆解如何通过寄存器精准完成系统级校准以及如何根据你的系统需求引脚数量、数据吞吐率、布线复杂度选择和实现最合适的同步方案。我会把手册里没写的调试细节、寄存器配置的“坑”、以及同步时序的边界条件都讲清楚让你不仅能看懂更能直接动手实现一个稳定可靠的高精度多通道采集系统。2. 系统校准从原理到寄存器实操校准的目的是建立一个数学模型将ADC输出的原始代码Code映射到真实的输入电压Vin。这个模型通常是一个线性方程Vin Gain * Code Offset。ADC的固有误差就体现在Gain和Offset这两个参数偏离了理想值。系统校准就是通过写入校准系数让ADC内部在输出最终结果前自动完成这个修正计算。2.1 校准寄存器深度解析ADS127L01提供了两组独立的校准寄存器系统偏移校准寄存器OFC0, OFC1, OFC2和系统增益校准寄存器FSC0, FSC1。理解它们的格式和计算方式是正确校准的前提。2.1.1 偏移校准寄存器OFC偏移误差是指当输入电压为0时ADC输出的代码值。理想情况下应为0。OFC寄存器用于补偿这个误差。寄存器结构这是一个24位3字节的有符号二进制补码寄存器。OFC0是低字节LSBOFC2是高字节MSB。修正原理ADC内部执行Code_corrected Code_raw OFC。如果你测得当输入短路0V时ADC平均输出代码为100假设那么你就需要写入OFC -100使得修正后的代码为0。计算与写入偏移校准值通常通过测量得到。将ADC输入端接至系统地或共模电压采集大量样本例如4096个并求平均得到偏移代码Code_offset。OFC值即为-Code_offset。注意Code_offset是24位有符号数需要转换为二进制补码后拆分写入三个寄存器。实操心得测量Code_offset时务必确保前端运放已上电且稳定外部噪声尽可能小。建议在ADC的最终工作温度下进行测量因为偏移可能随温度漂移。写入OFC值后再次测量验证理论上输出应在0附近随机分布。2.1.2 增益校准寄存器FSC增益误差是指ADC实际传输曲线的斜率与理想斜率的偏差。FSC寄存器用于微调这个斜率。寄存器结构这是一个16位2字节的寄存器。FSC0是低字节FSC1是高字节。其复位值不是0而是0x8000FSC10x80 FSC00x00这代表增益修正系数为1.0。修正原理增益修正公式为Code_corrected Code_raw * (FSC / 32768)。这里32768是2^15。当FSC32768即0x8000时系数为1不进行修正。计算与写入增益校准需要一个精确的满量程或接近满量程参考电压源。施加一个已知的精确电压V_ref例如正负2.4V差分测量ADC输出的平均代码Code_ref。理想情况下Code_ideal V_ref / LSB其中LSB (Vrefp - Vrefn) / 2^23对于±Vref范围。则增益误差系数Gain_error Code_ideal / Code_ref。最终需要写入的FSC值为FSC round(Gain_error * 32768)。计算结果需限制在0x0000到0xFFFF之间。注意事项增益校准必须在偏移校准之后进行。因为偏移误差会影响满量程点的测量。正确的流程是先完成偏移校准并写入OFC然后再进行增益校准测量和计算。FSC的默认值0x8000是一个安全的起点如果你的参考电压源精度不够高贸然修改FSC反而可能引入更大误差。2.2 校准流程实战与避坑指南纸上谈兵终觉浅下面是一个经过验证的校准流程附上关键代码片段以SPI接口为例和避坑点。步骤一硬件准备与环境稳定将ADC的模拟输入引脚AINP, AINN通过一个低热电势的短路器连接至模拟地AGND。确保你的PCB布局良好模拟地平面干净。为ADC和前端驱动电路提供稳定、低噪声的电源。上电后等待至少100ms让所有电路特别是参考电压源和运放达到热稳定。配置ADC进入正常工作模式例如高分辨率模式OSR128。步骤二偏移校准测量与写入// 伪代码读取偏移代码并计算OFC值 int32_t read_adc_average(void) { int32_t sum 0; for(int i0; i4096; i) { while(!is_drdy_low()); // 等待DRDY变低数据就绪 sum read_adc_data(); // 读取24位ADC数据转换为有符号32位整数 } return sum / 4096; } void perform_offset_calibration(void) { int32_t offset_code read_adc_average(); // 测量偏移代码 int32_t ofc_value -offset_code; // 计算OFC值 // 将24位有符号数转换为三个字节注意二进制补码处理 uint8_t ofc0 (uint8_t)(ofc_value 0xFF); uint8_t ofc1 (uint8_t)((ofc_value 8) 0xFF); uint8_t ofc2 (uint8_t)((ofc_value 16) 0xFF); // 通过SPI写入寄存器 地址: 0x02, 0x03, 0x04 write_register(0x02, ofc0); write_register(0x03, ofc1); write_register(0x04, ofc2); printf(偏移校准完成。测量偏移: %ld, 写入OFC: 0x%02X%02X%02X\r\n, offset_code, ofc2, ofc1, ofc0); }避坑点read_adc_data()函数需要正确处理24位有符号数据。ADS127L01输出的是二进制补码。如果你的MCU SPI接口读取的是24位数据需要将其符号扩展到32位再进行运算。步骤三增益校准测量与写入移除输入短路器连接一个高精度、低噪声的电压源到ADC输入端。电压值建议在正负90%满量程左右例如对于±2.5V参考使用2.25V差分输入。记录这个精确电压值V_actual。采集大量样本计算平均输出代码Code_actual。计算理想代码Code_ideal (V_actual / (Vref * 2)) * (2^23)。这里Vref是差分参考电压如2.5V2^23是24位有符号数的正半程范围。计算增益误差和FSC值gain_error (float)Code_ideal / (float)Code_actualfsc_value (int32_t)(gain_error * 32768.0f 0.5f) 确保fsc_value在0到65535之间。拆分并写入FSC寄存器地址0x05 0x06。// 伪代码计算并写入FSC void perform_gain_calibration(float v_actual, float vref) { int32_t code_actual read_adc_average(); // 测量施加已知电压后的代码 float code_ideal (v_actual / (vref * 2.0f)) * 8388608.0f; // 2^23 8388608 float gain_error code_ideal / (float)code_actual; uint16_t fsc_value (uint16_t)(gain_error * 32768.0f 0.5f); // 四舍五入 uint8_t fsc0 (uint8_t)(fsc_value 0xFF); uint8_t fsc1 (uint8_t)((fsc_value 8) 0xFF); write_register(0x05, fsc0); write_register(0x06, fsc1); printf(增益校准完成。实际代码: %ld, 理想代码: %.1f, 增益误差: %.6f, 写入FSC: 0x%04X\r\n, code_actual, code_ideal, gain_error, fsc_value); }核心技巧增益校准对参考电压Vref的精度极其敏感。务必使用比系统目标精度高一个数量级的基准源。例如如果你的系统要求0.1%的精度那么用于校准的电压源和基准源精度最好达到0.01%或更高。校准后可以用几个不同的已知电压点如零点、半量程、负半量程进行验证绘制误差曲线评估线性度。3. 多设备同步配置拓扑、时序与实战选择当单个ADC通道不够用时同步多个ADC就成为了必然。ADS127L01的灵活性体现在它支持两种接口模式SPI/Frame-Sync和两种连接拓扑级联/菊花链但这恰恰也是容易让人困惑的地方。我的建议是先根据你的主控MCU/FPGA的接口资源和时序控制能力选定接口模式再根据PCB布线和数据读取策略选择拓扑。3.1 接口模式抉择SPI vs. 帧同步SPI接口模式工作方式这是最通用的模式与绝大多数MCU的SPI外设兼容。主机通过CS片选信号选择设备通过SCLK时钟线逐位读取数据。数据就绪信号是DRDY低电平有效。优点兼容性极广控制逻辑简单。每个ADC有独立的DOUT线时可以实现真正的并行读取速度最快。缺点同步多个设备时需要更多的GPIO来控制CS线级联时或者需要复杂的菊花链数据重组逻辑。适用场景通道数不多如2-4个MCU有充足GPIO和SPI接口追求最简单直接的实现。帧同步接口模式工作方式此模式专为同步系统设计。它引入了一个FSYNC信号来标记一个数据帧的开始。所有ADC在FSYNC边沿同步开始输出数据。设备可以配置为主模式产生FSYNC或从模式接收FSYNC。优点同步精度高所有ADC由同一个FSYNC信号对齐几乎消除了设备间采样启动的时间抖动。菊花链配置下节省主机输入引脚。缺点需要主机支持或能产生FSYNC信号通常用定时器或GPIO模拟。数据读取时序要求严格。适用场景多通道同步采集如4通道以上对通道间相位一致性要求极高的应用如功率分析、波束成形。经验之谈如果你的应用对通道间延迟Skew要求是纳秒级帧同步模式是唯一选择。SPI模式下即使用同一个CS信号同时选中所有ADC由于芯片内部信号路径的微小差异各ADC数据输出的启动时刻仍有不确定的延迟。而帧同步模式通过一个硬连线信号确保了所有ADC内部采样时钟的严格对齐。3.2 连接拓扑详解级联 vs. 菊花链选定了接口模式接下来看如何连接多个ADC芯片。3.2.1 级联配置级联的核心思想是总线共享片选独立。所有ADC的时钟CLK、数据时钟SCLK、数据输入DIN 如果使用共享同一条线。但每个ADC的片选CS SPI模式或数据输出DOUT 帧同步从模式连接到主机独立的引脚上。SPI模式下的级联连接所有ADC的SCLK、DIN、CLK并联。每个ADC的CS连接主机独立的GPIO。所有ADC的DRDY并联只需监控一个。DOUT线有两种接法1各自独立每个ADC的DOUT接主机不同的MISO引脚可实现并行读取速度最快但占用主机引脚多。2共享总线所有DOUT并联依靠CS信号切换哪个ADC占用总线节省引脚但需要主机在单个DRDY周期内快速切换CS并读取所有设备对SCLK频率要求高。时序关键公式手册中的公式(9)Number of Devices ≤ (tDATA – tCSDO – tCSDOZ) / (n × tSCLK)就是为共享DOUT总线场景准备的。tDATA是数据输出周期1/数据率tCSDO和tCSDOZ是CS到输出有效和失效的时间n是位数24或32tSCLK是SCLK周期。这个公式决定了在下一个DRDY到来前你的SCLK能多快读完所有设备的数据。帧同步模式下的级联连接所有ADC的CLK、SCLK、DIN、FSYNC并联。一个ADC配置为主模式产生FSYNC其余为从模式。每个从设备的DOUT连接到主机独立的引脚。CS引脚全部接地。优势这是实现高精度同步最推荐的硬件连接方式。主设备产生的FSYNC确保所有从设备同步开始转换和输出。主机可以并行读取所有DOUT线上的数据吞吐率高同步性能最好。3.2.2 菊花链配置菊花链的核心思想是数据串行化节省主机输入引脚。后一级设备的数据通过前一级设备“透传”给主机。工作原理设备0的DOUT接主机MISO。设备1的DOUT接设备0的DAISYIN。设备0的DAISYIN接地如果是链尾。主机发送的SCLK时钟会先将设备1的数据移入设备0紧接着设备0的数据跟在后面最终在设备0的DOUT引脚上形成一串长的、连续的数据流包含了链上所有设备的数据。SPI模式菊花链所有设备CS并联。主机在CS有效后连续读取n * 链上设备数个时钟的数据。例如两个24位ADC需要连续读48个SCLK位。帧同步从模式菊花链连接类似但使用FSYNC而非CS。同样FSYNC信号启动后主机需要连续读取所有设备的数据。优点极大节省主机输入引脚只需一个MISO。布线简单。缺点数据读取是串行的总读取时间变长对SCLK频率要求更高公式(11)。数据重组稍复杂需要在软件或FPGA逻辑中将一长串比特流按设备顺序切分。此外帧同步主模式不支持菊花链。3.3 同步触发START与RESET/PWDN引脚的使用让多个ADC同时开始采样的动作称为同步触发。ADS127L01提供了两个引脚START引脚拉高START引脚ADC会在固定的延迟后具体延迟取决于数据率模式开始第一次转换。它不会复位寄存器。适用于需要保持当前校准和配置的周期性同步启动。RESET/PWDN引脚拉低再拉高此引脚会执行一个完整的硬件复位将所有寄存器恢复为默认值注意这会清空你写入的OFC和FSC校准值。复位后也有一个固定延迟才开始转换。这是最彻底、最推荐的同步方法特别是对于帧同步主模式因为它能确保主从设备的数字接口状态完全对齐。致命陷阱如果你使用RESET/PWDN进行同步必须在每次复位后重新通过SPI配置所有寄存器包括写入你宝贵的校准系数一个常见的做法是将校准系数存储在MCU的Flash中每次上电或同步复位后先进行基础配置然后立即通过SPI写入校准寄存器。4. 同步系统硬件设计与时序考量理论懂了落到PCB设计和代码上才是真功夫。这里分享一个我设计的4通道同步采集模块的实战方案采用帧同步主从级联拓扑因为它提供了最佳的同步性能和数据吞吐率平衡。4.1 硬件连接图与物料选择主控 (STM32H7) | |-- GPIO/SPI1_MOSI ---- DIN (所有ADC) |-- SPI1_SCLK --------- SCLK (所有ADC) |-- GPIO/TIM_CH ------ FSYNC (ADC0 主模式) | | | -- FSYNC (ADC1-3 从模式) | |-- SPI1_MISO1 ------ DOUT0 (ADC0) |-- SPI1_MISO2 ------ DOUT1 (ADC1) |-- SPI2_MISO1 ------ DOUT2 (ADC2) |-- SPI2_MISO2 ------ DOUT3 (ADC3) | |-- 高精度有源晶振 ---- CLK (所有ADC) |-- GPIO ------------ START/RESET (所有ADC并联用于全局同步)ADC配置ADC0的FORMAT引脚接高帧同步模式FSMODE引脚接高主模式。ADC1-3的FORMAT接高FSMODE接低从模式。所有ADC的CS引脚接地。时钟使用一个低抖动、高精度的有源晶振如SiTime的SiT8208为所有ADC提供CLK。必须确保所有ADC的CLK来自同一个物理时钟源走线等长以避免时钟偏斜Skew引入的同步误差。前端驱动根据信号带宽和精度要求选择运放。对于音频范围20kHz的中等精度应用THS4531A是低功耗好选择。对于更高带宽或要求超低噪声的应用THS4551或THS4541是更好的选择但需注意其更高的功耗和稳定性设计需加串联电阻RFLT。4.2 关键时序与软件驱动实现在帧同步主模式下ADC0内部产生FSYNC信号。主机需要在FSYNC有效边沿根据配置是上升沿或下降沿后启动SCLK时钟来读取数据。数据在SCLK的下降沿更新上升沿稳定主机应在SCLK上升沿采样DOUT数据。// 伪代码使用STM32 HAL库和DMA读取4个级联ADC帧同步模式 // 假设使用SPI1和SPI2均配置为16位数据帧只读模式CPOL0 CPHA1模式1 // FSYNC由一个定时器如TIM1的PWM输出产生频率等于数据输出率。 void adc_sync_system_init(void) { // 1. 配置所有ADC的寄存器通过DIN在系统初始化时进行一次 // 注意从设备也需要配置但需在主设备产生FSYNC前完成。 configure_adc_registers(ADC0_ADDR, params); // 主设备 configure_adc_registers(ADC1_ADDR, params); // 从设备1 // ... 配置其他从设备 // 2. 启动产生FSYNC的定时器主设备自动开始转换 HAL_TIM_PWM_Start(htim1, TIM_CHANNEL_1); // 3. 为每个SPI接口启动DMA接收目标缓冲区为uint16_t数组 // 每个ADC一次输出24位数据但我们用16位SPI帧所以需要2次传输读一个设备。 // 4个设备一次完整的帧需要读取 4 * 2 8 个16位数据。 uint16_t rx_buf_spi1[4]; // SPI1读两个设备ADC0, ADC1各占2个16位 uint16_t rx_buf_spi2[4]; // SPI2读两个设备ADC2, ADC3 HAL_SPI_Receive_DMA(hspi1, (uint8_t*)rx_buf_spi1, 4); HAL_SPI_Receive_DMA(hspi2, (uint8_t*)rx_buf_spi2, 4); // 4. 在FSYNC中断或定时器更新中断中触发SPI传输。 // 将FSYNC PWM输出与SPI的NSS引脚软件控制关联在FSYNC边沿拉低NSS启动SPI接收。 } // DMA接收完成中断服务程序 void spi_rx_dma_complete_callback(SPI_HandleTypeDef *hspi) { if(hspi hspi1) { // 处理SPI1数据重组ADC0和ADC1的24位数据 int32_t adc0_data ((int32_t)rx_buf_spi1[0] 16) | (int32_t)rx_buf_spi1[1]; int32_t adc1_data ((int32_t)rx_buf_spi1[2] 16) | (int32_t)rx_buf_spi1[3]; adc0_data (adc0_data 8) 8; // 符号扩展24位到32位 adc1_data (adc1_data 8) 8; // 应用校准 adc0_data apply_calibration(adc0_data, calib_params[0]); adc1_data apply_calibration(adc1_data, calib_params[1]); // 送入数据处理队列... } // ... 类似处理SPI2数据 }时序设计要点SCLK频率必须满足公式(10)。假设数据率f_DATA为100kSPS则t_DATA 10us。读取一个24位数据需要至少24个SCLK周期。对于4个设备级联独立读取我们需要在10us内完成4次24位读取即96个SCLK周期。因此t_SCLK 10us / 96 ≈ 104ns即SCLK频率需大于9.6MHz。留有余量通常选择15-20MHz。FSYNC宽度FSYNC脉冲的宽度需要至少覆盖主机读取所有数据的时间。在级联独立读取架构下由于FSYNC启动后主机立即并行读取只要读取时间小于t_DATA即可。但在菊花链中FSYNC需要保持高电平直到整个链的数据读完。DMA使用强烈建议使用DMA来搬运SPI数据避免因中断延迟导致数据丢失。将SPI和FSYNC定时器联动可以实现无CPU干预的连续高速数据流采集。5. 常见问题、调试技巧与实测数据解读即使设计再仔细调试阶段也总会遇到问题。下面是我在多个项目中总结的“踩坑”实录和解决方法。5.1 校准后性能未改善或更差现象写入OFC/FSC后测量误差反而变大或者噪声增加。排查参考电压质量用示波器AC耦合档观察REFP和REFN引脚上的噪声。如果存在高频毛刺或电源纹波会直接影响增益校准的准确性和最终SNR。确保参考电压驱动电路如REF6025的旁路电容0.1μF和10μF尽可能靠近ADC引脚。输入信号源阻抗校准和测量时信号源或短路器的阻抗必须极低。高阻抗会与ADC的采样电容~8pF形成低通滤波导致信号建立不充分尤其在较高输入频率时会产生增益误差和失真。校准时应使用低阻抗电压源。寄存器写入错误用SPI回读OFC和FSC寄存器确认写入的值是否正确。注意SPI的读写时序特别是CS的建立和保持时间。温度漂移校准时的环境温度与实际工作温度差异过大。关键参数如Vref、运放偏移会随温度变化。对于宽温范围应用可能需要分段温度校准或选择低温漂元件。5.2 多设备同步时数据错位或抖动现象各通道数据在时间上看起来有固定偏移或随机抖动。排查时钟同源性用示波器测量每个ADC的CLK引脚检查时钟边沿是否对齐。如果使用缓冲器分发时钟要选择低偏斜Low Skew的型号。走线长度差异也会导致时钟延迟不同。FSYNC/START信号抖动如果使用GPIO产生同步信号确保该GPIO的中断优先级最高且软件延迟可控。更好的方法是使用定时器的PWM输出直接产生FSYNC这是最稳定的方式。电源噪声耦合数字电源DVDD的噪声通过地平面耦合到模拟部分可能干扰ADC内部的精密时序。确保模拟地和数字地单点连接并在每个ADC的电源引脚处使用充分的去耦电容如10μF钽电容并联0.1μF陶瓷电容。菊花链数据重组错误在菊花链模式下数据是串行输出的。务必确认你的读取逻辑和SCLK脉冲数量完全匹配。一个快速验证方法先将所有ADC输入接地读取菊花链数据。因为偏移未校准每个ADC的输出应是一个固定的非零值。检查重组后的数据看是否每个通道都读到了这个预期的固定值且顺序正确。5.3 高频率输入信号下SNR下降或出现杂散现象输入信号频率升高后信噪比急剧下降或者FFT频谱上出现非谐波杂散。排查抗混叠滤波器AAF失效这是最常见的原因。回顾图112ADC在f_MOD/2和f_DATA/2处存在混叠带。如果你的输入信号或前端电路噪声含有接近这些频率的成分就会混叠到基带。解决方案确保你设计的前端RC低通滤波器的-3dB截止频率f_c远低于f_DATA/2并且在f_MOD/2处有足够的衰减通常需要40dB。使用更高阶的滤波器如二阶Sallen-Key或更低的电阻/更大的电容。调制器饱和参考表31。如果输入信号中含有较大的、频率在数百kHz以上的成分可能是开关电源噪声或数字时钟耦合即使其幅度在直流满量程以下也可能导致Δ-Σ调制器内部饱和产生大量带内噪声。解决方案在ADC输入端并联一个高质量的C0G/NP0差分电容CDIFF建议值1nF~10nF它作为电荷库能有效吸收采样瞬态电流并辅助高频滤波。前端运放稳定性驱动容性负载ADC输入电容CDIFF可能导致运放振荡。务必使用TINA-TI或类似工具仿真你设计的运放电路检查相位裕度是否大于45度。在运放输出和ADC输入之间串联一个小电阻RFLT 10-100Ω是提高稳定性的有效手段但需权衡其对失真度的影响。5.4 实测数据解读表下表是我在一个8通道、16.384MHz调制时钟、OSR128数据率128kSPS的ADS127L01系统上校准前后测得的一些典型性能数据供大家参考测试条件校准前偏移误差 (LSB)校准后偏移误差 (LSB)校准前增益误差 (%)校准后增益误差 (%)信噪比 SNR (dB)备注输入短路 25°C125 ~ 180-2 ~ 2N/AN/A118.5 (典型)偏移被有效消除1kHz, -0.5dBFS 正弦波N/AN/A0.15 ~ 0.25 ±0.02117.8增益线性度大幅改善10kHz, -0.5dBFS 正弦波N/AN/AN/AN/A117.0高频性能略有下降通道间延迟 (同步模式)N/AN/AN/AN/A 5 ns (RMS)帧同步主从级联测得从数据可以看出系统校准将直流偏移误差从上百LSB降低到了个位数LSB级别增益误差从千分之几优化到了万分之几。而通过帧同步实现的通道间延迟极小完全满足大多数精密同步采集应用的需求。整个调试过程从寄存器配置的位操作到同步时序的纳秒级把控再到对抗模拟电路的各种“玄学”噪声每一步都需要耐心和细致的测量。希望这份融合了数据手册精华和实战血泪经验的详解能帮你绕过那些我曾经踩过的坑更高效地构建出稳定、精准的数据采集系统。