STM32读写AD7190称重ADC例程详解:寄存器配置与SPI时序实战
发布时间:2026/10/28 6:50:24 锦皓数字建站

简介面向STM32开发者及电子秤方案学习者的AD7190称重模块例程包以STM32F4为主控完整演示24位高精度ADC读写、称重数据采集、TFT液晶实时显示、按键清零与砝码校准等实用流程。源码包含AD7190驱动初始化、均值滤波、重量换算、LCD显示函数并有串口打印调试信息适合快速评估高精度称重模块或移植到自有项目的工程师参考。压缩包共667个文件、约7.46MB以C源码、头文件、启动汇编及IAR/Keil工程配置为主另含hex固件、烧录脚本与说明文档可直接打开工程编译下载也能借助串口助手观察传感器原始值与最终重量。已有1148人学习下载通过主循环代码可清晰掌握零点标定、20g砝码校准和比例系数计算的完整逻辑有效缩短从零调通AD7190的周期对学习高精度ADC应用和称重仪表开发很有参考价值。1. STM32 读写 AD7190一份能直接跑的称重模块例程到底值不值得下做称重、测力、压力变送这类项目很多人第一反应是 HX711便宜、资料多、几行代码就能出数。但一旦你遇到「需要同时保证高分辨率、低噪声、还能扛住工业环境温漂」的场景HX711 就明显不够看了。AD7190 是 ADI 推出的 24 位 Σ-Δ ADC内置可编程增益放大器噪声指标能做到微伏级配合称重传感器做电子秤、料斗秤、皮带秤都很常见。我这次拆的是一份 STM32 读写 AD7190 的例程源码包带液晶显示主控是 STM32F103 系列工程结构完整SPI 通信、寄存器配置、称重数据处理、LCD 显示都齐了适合正在调称重模块但卡在 AD7190 配置或 SPI 时序的人。这篇笔记会把寄存器怎么配、数据怎么读、液晶怎么刷、常见坑在哪全部过一遍。2. AD7190 的核心机制为什么它适合称重选型时关注哪几个参数2.1 24 位 Σ-Δ ADC 的工作原理与称重场景的匹配点AD7190 的工作机制和普通逐次逼近型 ADC 完全不同。它内部使用 Σ-Δ 调制器把输入信号转换成高速的 1-bit 比特流再经过数字滤波器抽取、降采样最终输出 24 位转换结果。这种结构的优势在于通过过采样和噪声整形把量化噪声推到高频段再用数字滤波器滤掉从而在低带宽信号比如称重传感器的直流信号上获得极高分辨率。在称重场景下传感器输出信号本身就非常微弱常见的称重传感器灵敏度是 2mV/V激励电压 5V 时满量程输出也才 10mV。要是直接用 16 位 ADC 去采样有效分辨率会被噪声吃掉一大截。AD7190 的优势体现在这几个地方24 位无失码这是标称的线性分辨率不是有效分辨率但配合 PGA 和滤波实际有效分辨率仍然能轻松做到 20 位以上。内置 PGA增益 1 到 128称重传感器输出信号微弱外部放大器会引入噪声和漂移AD7190 片上 PGA 直接解决了这个问题。可编程数字滤波器SINC3 或 SINC4 滤波器输出速率可以从 4.7Hz 到 4800Hz 之间选择。称重场景通常把输出速率放低换取更低的 RMS 噪声。内部失调校准和系统校准这是后续标定环节的关键片上寄存器 ADCO 和 ADCC 用来存校准结果。用这份源码之前我建议你先想清楚自己传感器的激励电压和灵敏度否则后面配增益和输出速率时容易凭感觉设最后读数稳定性和实际重量对不上。2.2 AD7190 关键寄存器速查配置寄存器、状态寄存器、数据寄存器AD7190 的寄存器访问通过 SPI 进行所有控制命令都从写入通信寄存器开始。通信寄存器是 8 位高 3 位是读/写标志位和寄存器选择位低 5 位是寄存器地址。每次访问任何寄存器第一步都是先写通信寄存器告诉芯片「接下来我要操作哪个寄存器」。寄存器地址位宽功能通信寄存器0x008 bit控制后续访问的寄存器选择、读写方向状态寄存器0x008 bit转换完成标志、错误标志、通道信息模式寄存器0x0224 bit输出速率、滤波方式、时钟源、校准控制配置寄存器0x0324 bitPGA 增益、通道选择、双极性/单极性、缓冲使能数据寄存器0x0424 bit最新一次转换结果失调寄存器0x0524 bit失调校准系数满量程寄存器0x0624 bit满量程校准系数配置寄存器里最常见的一组参数是通道选择 CH0/CH1、增益设置 PGA、双极性还是单极性、是否使能输入缓冲。称重传感器一般接在 AIN1/AIN2 或 AIN3/AIN4 上我用 AIN1/AIN2 时通道配置位 CH10、CH00。增益设置取决于传感器输出幅度2mV/V 灵敏度、5V 激励时满量程 10mV增益 128 时输入范围约 ±19.5mVAVDD5V余量够噪声也低。单极性称重场景建议把双极性位设成 0输出码字是单极性二进制补码处理起来更直接。模式寄存器里最重要的两个字段是 MD 位模式选择和 FS 位输出速率。FS 值决定内部主时钟分频比输出速率 主时钟 / (128 × FS)。主时钟 4.92MHz 时FS96 对应 400HzFS320 对应 120HzFS1023 对应 4.7Hz。称重静态测量优先选 10Hz 到 20Hz 输出速率动态测量比如分选秤再提速到 100Hz 以上。2.3 例程里的时钟与 SPI 参数是怎样设置的这份源码工程用的是 STM32F103SPI 接口为主机模式CPOL0、CPHA1即 SPI_MODE_1。SPI 时钟频率我拆包后看到主频 PCLK1 是 36MHzSPI1 的预分频配置成了 32 分频实际 SPI 时钟约 1.125MHz。AD7190 的 SCLK 最大支持 5MHz1.125MHz 离极限远时序余量大稳定性更好只是为了通信稳定性不必把 SPI 时钟推到极限。有些新手上来就把 SPI 配成 18MHz 分频结果读回来的数据时对时错大概率是时钟太快、走线又长导致的信号质量问题。引脚分配如下SCK 接到 PA5MOSI 接 PA7MISO 接 PA6片选 CS 接 PB12。注意 AD7190 的 DIN 在上升沿采集数据DOUT 在下降沿输出数据STM32 的 SPI 模式 1 和模式 0 都有人用但以我这边的实测模式 1CPOL0CPHA1最稳。提示AD7190 的 DOUT/RDY 引脚同时承担两个功能——数据准备好和 SPI 就绪握手。当 DOUT 拉低时表示转换完成、可以读数据在 SPI 通信期间它又作为 MISO 输出数据。写代码时注意区分这两种状态。3. SPI 读写时序与寄存器配置代码从初始化到读出转换结果3.1 AD7190 初始化流程的完整代码实现这份例程的初始化函数把 SPI 外设、GPIO 和 AD7190 的寄存器配置全部包在一个函数里我拆解一下核心代码// ad7190_init.c 部分核心代码 void AD7190_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; SPI_InitTypeDef SPI_InitStructure; // 使能 SPI1 和相关 GPIO 时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1 | RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB, ENABLE); // 配置 SPI 引脚: SCKPA5, MISOPA6, MOSIPA7, CSPB12 GPIO_InitStructure.GPIO_Pin GPIO_Pin_5 | GPIO_Pin_7; GPIO_InitStructure.GPIO_Mode GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed GPIO_Speed_50MHz; GPIO_Init(GPIOA, GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin GPIO_Pin_6; GPIO_InitStructure.GPIO_Mode GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOA, GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin GPIO_Pin_12; GPIO_InitStructure.GPIO_Mode GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed GPIO_Speed_50MHz; GPIO_Init(GPIOB, GPIO_InitStructure); // SPI 主机模式CPOL0, CPHA1, 8位数据帧 SPI_InitStructure.SPI_Direction SPI_Direction_2Lines_FullDuplex; SPI_InitStructure.SPI_Mode SPI_Mode_Master; SPI_InitStructure.SPI_DataSize SPI_DataSize_8b; SPI_InitStructure.SPI_CPOL SPI_CPOL_Low; SPI_InitStructure.SPI_CPHA SPI_CPHA_1Edge; // 对应 CPHA1 SPI_InitStructure.SPI_NSS SPI_NSS_Soft; SPI_InitStructure.SPI_BaudRatePrescaler SPI_BaudRatePrescaler_32; SPI_InitStructure.SPI_FirstBit SPI_FirstBit_MSB; SPI_Init(SPI1, SPI_InitStructure); SPI_Cmd(SPI1, ENABLE); // 复位 AD7190 AD7190_Reset(); // 配置配置寄存器: 通道 AIN1/AIN2, 增益 128, 双极性关闭 AD7190_WriteRegister(AD7190_REG_CONF, 0x000010); // 配置模式寄存器: 连续转换模式, 输出速率 10Hz AD7190_WriteRegister(AD7190_REG_MODE, 0x0003C0); }这段代码的逻辑很清晰先把 STM32 的 SPI 外设配好再对 AD7190 做一次复位然后依次写配置寄存器和模式寄存器。SPI_BaudRatePrescaler_32在 36MHz PCLK 下得到 1.125MHz 的 SCLK这个值针对较长杜邦线和面包板连接场景足够稳。AD7190_WriteRegister的第一个参数是寄存器地址第二个参数是 24 位寄存器值内部会自动补上通信寄存器的写命令。配置寄存器里0x000010的拆解Bit4 置 1 表示增益为 128通道选择位 Bit6/Bit7 都是 0选择 AIN1/AIN2。如果你用的是 AIN3/AIN4要把 Bit6 置 1改成0x000050。模式寄存器的0x0003C0表示 FS960对应 4.92MHz 主时钟下的输出速率为 10Hz。3.2 单次转换与连续转换数据读出的两种方式对比AD7190 支持单次转换模式和连续转换模式。单次转换模式下每次触发后芯片完成一次转换DOUT 拉低读取数据寄存器后回到待机状态适合低功耗电池供电场景。连续转换模式下芯片自动反复转换DOUT 每次转换完成后拉低读走数据后立即开始下一次转换适合称重仪表这类需要持续刷新读数的场景。例程里用的是连续转换模式代码实现如下// 读取 AD7190 转换结果 int32_t AD7190_ReadData(void) { uint8_t rx_buf[3]; int32_t result; // 等待 DOUT 拉低表示转换完成 while (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_14) SET); // 通过通信寄存器指向数据寄存器并执行读操作 AD7190_SelectRegister(AD7190_REG_DATA, 1); // 连续读 3 个字节MSB、MID、LSB rx_buf[0] AD7190_SPI_ReadByte(); rx_buf[1] AD7190_SPI_ReadByte(); rx_buf[2] AD7190_SPI_ReadByte(); // 组合成 24 位有符号数 result ((int32_t)rx_buf[0] 16) | ((int32_t)rx_buf[1] 8) | rx_buf[2]; // 如果是 24 位负数做符号扩展 if (result 0x800000) result | 0xFF000000; return result; }这段代码里最关键的是 while 等待 DOUT 拉低这保证了读出的数据一定是最新转换完成的而不是读到了上一次的旧数据。AD7190_SelectRegister函数会先写通信寄存器让后续的 SPI 通信指向数据寄存器并设置为读方向。组合数据时注意rx_buf[0]是最高字节rx_buf[2]是最低字节顺序不能搞反。最后做了符号扩展因为 AD7190 的双极性输出是二进制补码格式不扩展的话负数会变成一个很大的正数后面算重量会出错。单次转换和连续转换的切换点在于模式寄存器的 MD 位单次转换是 MD001连续转换是 MD000。如果你的产品需要低功耗待机建议用单次转换如果一直上电显示重量连续转换更省心。例程里默认连续转换但代码注释里保留了单次转换的配置写法可以直接切换寄存器值。3.3 写寄存器与读寄存器的底层 SPI 封装函数AD7190 的所有寄存器操作都基于一个核心函数通过通信寄存器指定目标寄存器和操作方向。例程里封装了几个底层函数逻辑比较规范// 写寄存器通用函数 void AD7190_WriteRegister(uint8_t reg_addr, uint32_t reg_data) { uint8_t cmd 0; // 组装通信寄存器写命令: 最高位写标志置0, 低5位是寄存器地址 cmd (reg_addr 0x0F) | 0x00; // 发送通信寄存器命令 AD7190_CS_LOW(); AD7190_SPI_WriteByte(cmd); // 发送 24 位寄存器数据高字节在前 AD7190_SPI_WriteByte((reg_data 16) 0xFF); AD7190_SPI_WriteByte((reg_data 8) 0xFF); AD7190_SPI_WriteByte(reg_data 0xFF); AD7190_CS_HIGH(); } // 读寄存器通用函数 uint32_t AD7190_ReadRegister(uint8_t reg_addr) { uint8_t rx_buf[3] {0, 0, 0}; uint32_t reg_data 0; uint8_t cmd 0; // 组装通信寄存器读命令: 最高位写标志置1, 低5位是寄存器地址 cmd (reg_addr 0x0F) | 0x80; AD7190_CS_LOW(); AD7190_SPI_WriteByte(cmd); rx_buf[0] AD7190_SPI_ReadByte(); rx_buf[1] AD7190_SPI_ReadByte(); rx_buf[2] AD7190_SPI_ReadByte(); AD7190_CS_HIGH(); reg_data ((uint32_t)rx_buf[0] 16) | ((uint32_t)rx_buf[1] 8) | rx_buf[2]; return reg_data; }这里有个细节要注意通信寄存器本身也是寄存器地址是 0x00所以在组装读写命令时reg_addr 0x0F取的是目标寄存器的低 4 位地址最高位是读写标志位。写寄存器时最高位为 0读寄存器时最高位为 1。不要搞混。CS 引脚的拉低和拉高包裹了整个通信过程这样才能保证在 SPI 总线上多个设备的情况下AD7190 只响应属于自己的命令。我在实测中还遇到过一个问题如果 CS 拉低和第一个字节发送之间没有间隔有时会触发 AD7190 的误操作。所以代码里拉低 CS 后我会加一个微秒级延时再发数据。4. 称重数据的工程化处理滤波、去皮与液晶显示联动4.1 软件滤波策略为什么称重数据必须过一道均值或滑动平均AD7190 是 24 位 ADC即使硬件滤波已经把噪声压到很低读出原始码值仍然会有微小的跳动。直接把这个跳动的码值换算成重量显示在液晶上显示值最后一位会不停地跳。工业称重仪表允许的显示跳动是有限的所以软件滤波不是可选项而是必选项。例程里使用的是滑动平均滤波维护一个固定长度的环形缓冲区每来一个新采样值就替换掉最旧的一个然后求平均。这个方案比简单算术平均好在哪简单算术平均要等一批数据采集完才输出一次刷新率低滑动平均每次新数据到达都能马上更新输出刷新率不变只是平滑度由窗口长度控制。// 滑动平均滤波实现 #define FILTER_LENGTH 8 uint32_t filter_buf[FILTER_LENGTH]; uint8_t filter_index 0; uint64_t filter_sum 0; uint32_t AD7190_FilterSample(uint32_t new_sample) { // 减去最旧的值 filter_sum - filter_buf[filter_index]; // 存入新值 filter_buf[filter_index] new_sample; filter_sum new_sample; // 更新环形索引 filter_index (filter_index 1) % FILTER_LENGTH; // 返回平均值 return (uint32_t)(filter_sum / FILTER_LENGTH); }窗口长度FILTER_LENGTH的取值要权衡实时性和平滑度。称重场景下输出速率 10Hz 时8 个点的窗口对应 0.8 秒的平滑时间开机或者放货时显示值大约 0.8 秒稳定下来这个体感是可以接受的。如果把窗口加到 32 个点稳定时间变成 3.2 秒放货后等半天才稳定客户体验就差了。如果输出速率提到 100Hz窗口 16 个点也才 0.16 秒实时性完全没问题平滑度还更好。所以窗口长度不是拍脑袋定的要结合输出速率和现场对实时性的要求来选。filter_sum用uint64_t是为了防止累加溢出。24 位 ADC 码值最大约 1600 万8 个点累加最大约 1.28 亿用 uint32_t 也够但窗口如果加到 64 个点uint32_t就会溢出uint64_t一劳永逸。这是代码里一个容易被忽略的细节改窗口长度时记得检查累加变量类型。4.2 去皮和零点标定的实现逻辑称重系统有两个核心校准量零点和满量程。硬件电路、传感器、AD7190 各自都有失调和增益误差如果直接拿原始码值换算重量零点输出不一定对应 0kg满量程输出也不一定对应额定重量。去皮Tare解决的是零点和容器皮重问题满量程标定解决的是斜率问题。去皮逻辑在例程里的实现思路是按下去皮按键时把当前滤波后的码值记录为tare_offset后续所有显示重量都用当前码值减去这个偏移量再换算。这样做的好处是不需要修改 AD7190 的硬件失调校准寄存器软件层面实现起来更灵活随时可以重新去皮。uint32_t raw_value; uint32_t filtered_value; int32_t tare_offset 0; // 按下去皮键 if (Key_Tare_Pressed()) { tare_offset filtered_value; // 记录当前码值作为去皮基准 } // 计算净重码值 int32_t net_value (int32_t)filtered_value - tare_offset; // 换算成实际重量: 使用标定斜率 float weight (float)net_value * scale_factor;scale_factor的确定方法在秤台上放一个已知重量的标准砝码比如 10kg读取去皮后的净重码值net_value_std那么scale_factor 10.0 / net_value_std。注意这里的scale_factor是每个码字对应的重量单位是 kg/LSB也可以用倒数表示每 kg 的码字数看个人习惯。标定砝码要尽量接近满量程比如满量程 30kg 的秤用 20kg 或 25kg 砝码标定比用 5kg 砝码标定精度更高因为更大的信号对应更大的码值区间标定斜率的相对误差被摊薄了。这里有个项目里常踩的细节去皮后如果换了传感器或者更换了机械结构标定的scale_factor必须重新标定不能复用旧值。很多现场问题最后查出来都是设备维修后没做标定显示重量偏差很大。4.3 LCD 显示驱动的衔接方式例程里液晶驱动用的是 ILI9341 或类似控制器显示重量值的核心其实就是把浮点数转成字符串再更新显示区域。STM32F103 没有硬件浮点单元浮点数运算虽然也能跑但频繁的浮点转字符串会占用 CPU 时间。如果系统里还有按键扫描、通信、滤波这些任务建议把重量换算成整数显示。// 整数显示方式: 保留一位小数 int32_t weight_x10 (int32_t)(weight * 10.0f); // 重量扩大10倍保留1位小数 char display_buf[16]; sprintf(display_buf, %ld.%d kg, weight_x10 / 10, abs(weight_x10 % 10)); LCD_ShowString(60, 80, display_buf);这样做的好处是避免浮点数转字符串的开销显示精度也不丢。weight_x10的数据类型要是有符号的否则负重量比如去皮后秤台上物体被拿走显示时会出现异常。LCD 上显示重量值的刷新频率不用和 AD7190 输出速率完全一致一般 5Hz 到 10Hz 刷新显示就够了人眼看不出来延迟反而能滤掉一部分视觉上的跳变感。5. 避坑与排查SPI 读不到数、码值跳变、显示异常5.1 SPI 读出的数据一直是 0xFFFFFF现象程序跑起来后通过调试器或者串口打印读到的转换结果发现数据寄存器读出来一直是 0xFFFFFF 或者 0x000000怎么改都不变。原因这个问题可以分为两类。第一类是 SPI 时序完全不对AD7190 根本没有响应读出的是 MISO 引脚悬浮电平。第二类是 AD7190 的通信寄存器指向错误数据寄存器读到的不是真正的转换结果而是恒定的复位值。解决先查 SPI 模式是不是 CPOL0、CPHA1。很多 STM32 的标准库例程默认是 CPHA0也就是模式 0AD7190 对时序很敏感模式不对会导致第一个字节的采集沿错位。再确认 CS 引脚在通信期间有没有保持低电平如果用 GPIO 模拟 CS检查初始电平和释放电平是否反了。我遇到过 CS 初始化为高电平但复用功能把它拉低的情况排查方法是把 CS 单独拉高量一下引脚电平。如果以上都没问题用逻辑分析仪抓 SPI 波形看 MOSI 上发送的通信寄存器命令帧是不是符合 AD7190 的协议格式比如第一个字节应该是 0x80 表示读数据寄存器。5.2 转换结果的最后几位在不停跳动现象滤波前的原始码值低 2 到 3 位在跳滤波后还是能看到显示值偶尔跳一个字。原因这是 Σ-Δ ADC 的正常现象。即使 AD7190 本身噪声很低传感器供电纹波、布线间的串扰、电源噪声都会耦合到输入端。直接把输出速率拉高比如设到 4800Hz噪声会显著增加低几位跳动更明显。解决先把输出速率降到 10Hz 或 4.7Hz观察噪声是否改善。如果仍然跳动检查传感器激励电压是不是干净的线性电源或 LDO不要用开关电源直接供电。输入端并联一个 100nF 的滤波电容到 AIN1/AIN2 之间对高频噪声有衰减作用。还有一个容易被忽略的点——AD7190 的 REF 引脚。称重场景一般用外部基准电压如果 REF 引脚上的电压有纹波会直接调制到转换结果里。REF 引脚对地并联 10μF 钽电容加 0.1μF 陶瓷电容是常见做法。5.3 液晶显示的重量值突然跳变一个固定值现象设备运行一段时间后显示重量突然不是连续变化而是直接跳变一个固定数量级比如从 10kg 直接跳到 10.1kg 或者 9.9kg之后又恢复正常。原因排查时重点检查数据寄存器读取过程中有没有错过 DOUT 的下降沿。AD7190 在连续转换模式下如果 MCU 没有及时读取数据新的转换结果会覆盖掉旧的你读到的数据可能是新旧混叠。另外 SPI 时钟线上的毛刺也可能导致读回的数据帧错位。解决确保读完一个数据后下一次 DOUT 拉低之前不会插入其他 SPI 通信操作。比如 LCD 刷新如果和 AD7190 读数据共用 SPI 总线要保证一次 AD7190 的读操作不会被 LCD 命令打断。如果是独立 SPI 总线可以在读数据前加一条指令让状态寄存器的 RDY 位作为辅助判断——先读状态寄存器确认 RDY0再读数据寄存器双保险。5.4 去皮后零点从 0 开始漂移现象去皮后重量显示为 0但过几分钟慢慢变成 0.01kg、0.02kg甚至更大。原因传感器温漂和 AD7190 内部失调温漂叠加的结果。温度变化导致传感器桥臂电阻变化输出零点会漂。这不是软件能完全解决的问题但可以通过定时自动零点跟踪来缓解。称重行业的标准做法是满量程的百分比阈值比如小于满量程 2% 的负载时动态修正零点偏移。解决在程序里加一个判断——如果去皮后的净重码值小于设定阈值比如 2% 满量程对应码值就每隔一定时间把这个码值作为新的零漂补偿叠加到tare_offset上。这样轻微的温度漂移会被软件实时吞掉。注意阈值的设定不要太大否则真实的小重量加载会被误判为零漂导致显示重量丢失。6. 现场标定技巧用最小二乘拟合提升 AD7190 称重全量程精度如果只是简单做一次满量程标定就交付你会发现中间段重量显示有偏差。这是因为称重传感器本身存在非线性出厂曲线不是一条完美直线。工业现场的常规做法是多点标定配合最小二乘拟合把传感器的非线性误差分摊掉。以 30kg 量程的秤为例我一般会准备 5kg、10kg、15kg、20kg、25kg 五个砝码采集五点数据做线性回归拟合出更准确的scale_factor和零点截距。拟合过程用 PC 端工具做一次再把拟合参数固化到 STM32 里。小技巧是把scale_factor拆成整数部分和小数部分分别存储避免浮点数精度损失。如果不用最小二乘退一步的工程近似是用两点标定但前提是传感器线性度足够好且量程使用范围避开非线性区域。对于分选秤、配料秤这些需要全量程精度的设备多点拟合几乎是必须的。验证标定效果的方法也很简单先在空秤去皮显示 0然后依次放上 5kg、10kg、20kg 砝码记录每个点的显示值偏差。偏差 显示重量 - 实际重量/ 满量程 × 100%如果你的系统要求 0.1% 精度每个点的偏差绝对值都要小于 0.03kg。如果某个点的偏差明显偏大检查该重量段是不是有机械卡滞或者传感器过载保护装置接触异常。从那以后我每次交付称重项目都强制走一遍全量程五点标定和偏差记录流程虽然前期多花半小时但现场验收基本一遍过不会出现中间段不准被客户拉着反复调的尴尬。希望这篇拆解能帮你在 AD7190 调通的路上少走几步弯路。本文还有配套的精品资源点击获取
锦
锦皓数字建站
深耕本土企业品牌数字化升级,专注原创端正雅致商务官网,从视觉设计到稳定运维全程保驾护航。