☰
基于STM32与HX711的智能体重秤:从原理图到低功耗实现
2026/10/13 5:27:17 网站建设 项目流程

STM32 智能体重秤是一个非常典型也特别适合练手的嵌入式小项目。它把传感器采集、信号调理、ADC 读取、数据处理、人机交互和低功耗管理全都串了起来,真正做到了“麻雀虽小五脏俱全”。我手上这套开源工程包含完整源码、原理图和 Proteus 仿真工程,主控是 STM32F103C8T6,搭配电阻应变式称重传感器、HX711 专用计量 ADC 和 OLED 显示屏。它能解决的核心问题,是把传感器输出的微小模拟信号变成屏幕上稳定可信的公斤数,同时兼顾省电和日常使用体验。对正在学 STM32 的朋友来说,它是一个能直接上手的完整案例;对有量产想法的创客来说,这套工程也可以作为硬件和软件的基础。

1. 项目设计与方案拆解

1.1 核心链路选型:为什么是 HX711 而不是内置 ADC

体重秤本质上做的事情并不复杂:把人的体重变成应变片的电阻变化,再变成电压信号,最后变成屏幕上的一个数字。难点不在“称重”这个动作,而在模拟信号太微弱、太容易受干扰,以及怎么把随机漂移和噪声压到人能接受的程度。所以主控选型反而是最简单的环节,信号链路才是这个项目的重头戏。

我打开这套开源工程时的第一反应是器件选型很稳。主控用 STM32F103C8T6,这颗芯片在开发板和小家电里都非常常见,便宜、资料多、性能完全够用。传感器用的是电阻应变式称重传感器,也就是俗称的 Load Cell,而不是那种几块钱一片的薄膜压力传感器。后者阻值随压力变化,线性度和温漂都比较差,做触摸感应还可以,但要稳定复现“昨天 65.3、今天 65.3”这种精度根本不现实。应变式传感器输出的是毫伏级差分信号,必须搭配专用 ADC 来放大和采样。

很多人会问:为什么不用 STM32 自带的 ADC?道理很简单,STM32F103 内置 12 位 ADC,量程对应 3.3V,而称重传感器满量程输出往往只有 10mV 上下,即便内部有缩放也远远不够,更不用说内置 ADC 的参考电压容易受电源波动影响。HX711 是专为桥式传感器设计的 24 位 Sigma-Delta ADC,内部集成可编程增益放大器,默认增益 128 倍,还自带稳压输出,把“微伏级信号到数字量”的活一步干完。拿万用表测电阻和拿普通电压表测电阻,精度和稳定性完全不在一个档次,HX711 和 STM32 内置 ADC 的对比也是这个道理。

选 HX711 还有一层现实考虑:它和主控之间是纯数字接口,只需要 DOUT 和 SCK 两根线,时序简单到可以用 GPIO 翻转模拟,不需要 SPI 或 I2C 外设,代码移植性极好。对学习嵌入式的人来说,这个项目能让你把一个完整的“模拟前端加数字读回加数据处理”流程走一遍,比单纯跑一个点灯工程有价值得多。

1.2 系统模块划分与整体工作流程

整个项目按功能可以切成四个模块:信号采集、主控处理、人机交互、电源管理。信号采集模块由称重传感器和 HX711 组成;主控模块负责驱动 HX711、读取原始码、零点校正、线性标定、数字滤波;人机交互包含 OLED 显示、独立按键和蜂鸣器;电源管理保证整机可以用电池工作,并且一段时间无人使用后自动进入低功耗状态。

写代码时不要一上来就堆功能,先把工作流程理清楚。系统上电后先做硬件初始化,包括 GPIO、I2C、OLED 和 HX711,然后进入称量主循环:读取 HX711 原始码,减去零点偏移,除以标定系数,得到重量值;对连续几次的重量值做滤波;判断重量是否稳定;稳定后刷新 OLED 并触发蜂鸣器提示;同时监听按键,执行去皮、开关机等操作。

这套流程再往后才谈得上低功耗。如果不做状态管理,代码很容易变成“一直采样、一直刷新、一直亮屏”的死循环,电池很快就没了。开源工程里的做法是在主循环里加一个节拍控制,显示每几百毫秒才刷新一次,按键用状态机处理,无操作时经过延迟判断再进入休眠。后面我会把每一段的实现细节都拆开讲。

2. 原理图解析:信号流向决定成败

2.1 HX711 前端电路与传感器接线

HX711 模块的外围电路看起来简单,但很多人打板后焊出来就是读数乱飞或者干脆卡死,问题往往出在最基础的接线上。称重传感器常见是四线制:红色为激励正 E+,黑色为激励负 E-,绿色为信号正 A+,白色为信号负 A-。接到 HX711 时,E+、E- 接激励线,A+、A- 接信号线。信号极性不能接反,如果 A+ 和 A- 接反,读出来会是一个很大的负数,后面所有处理逻辑都会变得别扭。

HX711 芯片内部带有稳压输出,很多现成的模块还做了两级电源设计,外部可以直接给 5V,板上通过 LDO 给模拟部分供电。如果是自己画原理图,至少要做三件事:在 AVDD 和 VCC 引脚旁边各放一颗 10uF 电解电容加一颗 0.1uF 陶瓷电容,给电源做高频滤波;传感器供电的走线尽量短、尽量粗,不要和数字信号线平行走;AGND 和 DGND 在芯片下方一点单点汇合,避免数字噪声通过地线叠进模拟信号。

STM32 这一侧只需要接 DOUT 和 SCK 两根线。上电顺序也值得注意:HX711 需要先上电稳定,再被主控用 SCK 时钟唤醒,如果一上电就疯狂发脉冲,有可能丢失状态。代码里一般会在初始化时先把 SCK 拉低一段时间,再发送 25 个脉冲,让芯片进入已知状态。

2.2 STM32 最小系统与 SWD 调试接口

原理图上除了 HX711,剩下就是典型的 STM32 最小系统。8MHz 外部晶振配两个 22pF 负载电容,复位脚接一个 100nF 电容到地,BOOT0 和 BOOT1 都通过 10kΩ 电阻拉到地,保证从 Flash 启动。每个 VDD 和 VSS 对都要就近放一颗 100nF 去耦电容,这个绝对别省,很多奇怪的随机复位都是因为供电管脚附近没有足够滤波。

下载调试接口直接用 SWD 四线:SWDIO、SWCLK、GND、3V3。对比 JTAG,SWD 占用的引脚少得多,对这个小项目来说完全够用。有的开源板还会加一颗复位按键,调试时方便,量产时可以去掉。如果你用的是现成的 STM32F103C8T6 最小系统板,这部分可以不重复画,直接把板子的引脚和 HX711 模块、OLED 模块飞线相连即可。

2.3 OLED、按键和电源网络的细节考量

OLED 如果是 0.91 寸 I2C 屏,原理图上就是四根线:VCC、GND、SCL、SDA。I2C 总线上最好接 4.7kΩ 上拉电阻到 3.3V,因为 SSD1306 驱动的 SDA 是开漏输出,没有上拉是不会工作的。如果手里是 7 针 SPI 版 OLED,那就要接 6 根信号线,代码也要换成 SPI 驱动,引脚复用关系完全不同。所以先确认屏幕是 I2C 还是 SPI,再去看原理图和代码,不要想当然。

按键电路可以用 GPIO 内部上拉加按键下拉到地的方式,也可以用外部上拉再接一个 100nF 电容滤除抖动。这个项目里按键还同时接到 EXTI 外部中断引脚,这样休眠时按键可以将芯片唤醒。这里要分清两个概念:按键消抖是在代码里做的,等电平稳定后再执行动作;而 EXTI 中断只是负责把芯片叫醒,不是替你做按键逻辑。

电源网络是另一个容易翻车的地方。如果使用 3.7V 锂电池,需要一颗低压差 LDO 输出 3.3V,而不是直接用 AMS1117-3.3,因为 AMS1117 压差太高,电池电压掉到 3.5V 以下时输出就开始不稳定。如果用 USB 5V 供电,AMS1117 没问题。如果还需要给 HX711 提供稳定激励,很多现成模块内部会有 VAVDD 稳压结构,板上看着要求输入 5V,实际芯片模拟电压由模块内部处理,输入 3.3V 也经常能工作,但前提是模块上的 LDO 满足低压差条件。自己画板时,把 HX711 的模拟电源和主控数字电源分开滤波,能明显降低数据跳变概率。

3. 代码实现:从原始码到稳定重量的完整链路

3.1 HX711 驱动的底层时序与超时保护

HX711 的工作时序可以简化成三步:等 DOUT、移出 24 位、补第 25 个脉冲。DOUT 在转换完成前是高电平,转换完成后被拉低,微控制器看到下降沿后开始给 SCK 发时钟脉冲。每个 SCK 上升沿,芯片把当前位从最高位开始送到 DOUT 上,24 个时钟把 24 位数据全部移出,再多给一个时钟脉冲,芯片会设置下一次转换的增益,默认一个脉冲表示通道 A 增益 128 倍。

HX711 的 24 位输出是二进制补码,正常空载时读到的是一堆中间值。算重量时不需要管这个补码的绝对值有多大,只需要关心它相对空载的差值。这里给一个简单但稳定的驱动写法,核心宏需要根据你的引脚定义自行修改:

// 等待 DOUT 拉低,超时返回异常 uint8_t HX711_IsReady(void) { uint16_t timeout = 10000; while (HX711_DOUT_READ() == 1) { if (--timeout == 0) return 0; } return 1; } uint32_t HX711_Read(void) { uint32_t data = 0; if (!HX711_IsReady()) return 0xFFFFFFFF; for (uint8_t i = 0; i < 24; i++) { HX711_SCK_SET(); delay_us(2); data = (data << 1) | HX711_DOUT_READ(); HX711_SCK_CLR(); delay_us(2); } // 第 25 个脉冲,选择通道 A 增益 128 HX711_SCK_SET(); delay_us(2); HX711_SCK_CLR(); delay_us(2); return data; }

这里有两个容易踩的坑。第一,SCK 高电平持续时间不要太短,HX711 对高低电平有最小保持时间要求,1 到 2 微秒在 72MHz 主频下足够。第二,读 DOUT 的时机必须在 SCK 上升沿之后、下一个上升沿之前,所以你看到代码里严格按“置高 SCK、延时、读引脚、拉低 SCK、延时”的顺序执行,顺序不能反过来。我的建议是把读取封装成函数,不要在业务代码里直接操作 GPIO,否则后期换引脚要改一大堆地方。

3.2 零点偏移、量程系数与标定流程

拿到原始码之后,下一步不是直接换算成公斤,而是先解决两个问题:零点和增益。不同传感器、不同供电电压下,空载原始码差别可能很大,同一颗传感器在不同温度下的空载码也会缓慢漂移。解决零点的方法是开机后先采样一段时间,取平均值作为 offset。增益问题靠量程系数解决:放一个已知重量的砝码,记录原始码和 offset 的差值,用差值除以砝码质量,得到单位千克对应的原始码数量,之后实时采样值减去 offset 再除以 scale,就得到公斤数。

标定逻辑本身不复杂,关键是样本要取准。空载时不要只采一次,最好连续采 10 到 20 次,去掉最大值和最小值后再平均。放砝码时也要等读数稳定再记录,不然标出来的系数天生就带偏差。下面这段代码演示了最经典的“先去皮再计算”流程:

static int32_t offset = 0; static float scale = 0.0f; // 开机去皮:空载采样 20 次取平均 void HX711_Tare(void) { int32_t sum = 0; for (uint8_t i = 0; i < 20; i++) { uint32_t raw = HX711_Read(); if (raw != 0xFFFFFFFF) sum += (int32_t)raw; delay_ms(10); } offset = sum / 20; } // 放上砝码后调用,m 是砝码质量,单位 kg void HX711_Calibrate(float m) { int32_t sum = 0; for (uint8_t i = 0; i < 10; i++) { uint32_t raw = HX711_Read(); if (raw != 0xFFFFFFFF) sum += (int32_t)raw; delay_ms(20); } scale = ((float)(sum / 10 - offset)) / m; } float HX711_GetWeight(void) { uint32_t raw = HX711_Read(); if (raw == 0xFFFFFFFF) return -1.0f; float kg = (float)((int32_t)raw - offset) / scale; if (kg < 0.05f) kg = 0.0f; return kg; }

实际工程里 offset 和 scale 应该保存到非易失存储,否则每次开机都要重新标定。可以写到 STM32 内部 Flash 的一个扇区,也可以外挂 EEPROM。我的习惯是定义一个结构体,把 offset、scale、标定日期和版本号一起存进去,读取时检查校验和,避免了用户换电池后体重秤彻底归零的尴尬情况。

3.3 数字滤波与稳定判定逻辑

即便 HX711 是 24 位 ADC,原始码依然会跳,主要来源是传感器机械噪声、电源纹波和外界电磁干扰。处理办法是两层滤波:第一层用去极值平均滤波,取 5 到 9 个样本去掉最大最小再平均,能有效干掉毛刺;第二层用移动平均,窗口设在 5 到 10 个周期,让显示值平滑变化。两层叠加后,采样率设置在 10SPS,最终显示的刷新率大约每秒 2 次,数字既不跳也不拖泥带水。

稳定判定是体重秤体验的关键。很多新手把滤波后的重量直接每隔 100ms 刷到屏幕上,结果人站上去的瞬间数字从 0 跳到 70 又回落到 65,观感很差。更成熟的做法是维护一个最近 N 次滤波值的窗口,当最大值减最小值小于某个阈值,比如 0.2kg,就认为体重稳定,此时才把重量锁存到显示变量,同时让蜂鸣器响一声提示测量完成。之后人轻微晃动,只要不超阈值,显示就不会乱变。阈值要根据传感器噪声水平调整,业余制作取 0.2kg 比较宽松,系统做得好可以压到 0.05kg。

移动平均的简单实现如下,在调用时注意传入的是已经减去 offset 并除以 scale 后的重量值:

#define AVG_BUF_SIZE 8 static float avg_buf[AVG_BUF_SIZE]; static uint8_t avg_idx = 0; float MovingAverage(float new_val) { avg_buf[avg_idx] = new_val; avg_idx = (avg_idx + 1) % AVG_BUF_SIZE; float sum = 0; for (uint8_t i = 0; i < AVG_BUF_SIZE; i++) { sum += avg_buf[i]; } return sum / AVG_BUF_SIZE; }

如果嫌每次都重新累加太浪费,可以用环形缓冲维护一个总和,减去旧值、加上新值,效率更高。不过在这个项目里采样率本来就不高,简单写法完全够用。

3.4 显示刷新、按键状态机和低功耗联动

显示刷新不需要太频繁。人眼看数字,每秒刷新 2 到 4 次就够,频繁刷 OLED 不仅耗电,还会让屏幕闪烁。把显示刷新放进主循环里的节拍控制,每 300ms 更新一次时间、重量、单位即可。

按键处理不要用 while 等待松手的阻塞写法。用一个状态机:检测到按下、延时消抖、确认有效后置标志位;主循环看到标志位再执行去皮或者开关机动作。开关键和去皮键要分开逻辑,短按去皮,长按开关机。在量程状态时,按键还要能唤醒休眠,所以该项目把按键接到 EXTI 外部中断上。

低功耗逻辑要跟称重状态机配合。我习惯维护四个状态:待机、称量、稳定、休眠。待机时屏幕熄灭,只有按键中断能唤醒;称量或稳定状态下,如果连续 10 秒没有重量变化,自动切到休眠。进入休眠前调用 OLED 关显示指令,把所有 GPIO 配置成低功耗状态,比如高阻输入或固定电平,然后执行 STOP 模式。唤醒后必须做一次完整的 HX711 重新初始化,因为芯片可能在 STOP 期间丢失同步,否则首次读取会返回异常值。

4. 仿真环境:在 Proteus 里把整套逻辑跑通

4.1 Proteus 工程建立与烧录配置

如果你手头还没有实体硬件,仿真就是最友好的验证方式。Proteus 建立 STM32 工程时,先新建项目,在芯片选择里找 STM32F103C8 或相近型号,然后按原理图的引脚定义摆放外设:HX711、OLED、按键、指示灯。重点是把电源网络和地网络接对,否则仿真时经常出现逻辑正常但屏幕不亮的怪问题。

编译时先在 MDK 工程里把目标芯片改成对应型号,打开 Options for Target,在 Output 页勾选 Create HEX File。编译通过后,在 Proteus 里双击 STM32 单片机,把 Program File 指向刚才生成的 .hex 文件,设置外部晶振频率为 8MHz,然后点击运行。Proteus 里没有真实传感器,重量变化怎么办?如果你的版本元件库里有 HX711 模型,可以直接连接虚拟的应变桥;如果找不到 HX711,更通用的做法是用两个电位器搭一个模拟差分桥路,接到 HX711 的 A+ 和 A- 上,仿真时调节电位器阻值,就相当于在给传感器加载重量。

4.2 虚拟外设的观测与调试手段

仿真过程中最值得看的是 HX711 的时序。在 Proteus 里把虚拟示波器接到 SCK 和 DOUT 上,运行后你能清楚看到 SCK 发出 25 个脉冲,DOUT 在每个脉冲上输出高低电平。如果 DOUT 一直没有下降沿,说明 HX711 模型没有正确工作,优先检查接线和上电顺序。OLED 如果显示乱码,多半是 I2C 地址不对或者 SCL、SDA 接反了,这时可以用虚拟 I2C 调试器抓总线数据。

另外建议在工程里加一个 UART 打印口,通过虚拟终端观察重量数据。这个习惯在实物调试时也很有用,很多问题是靠串口日志定位的,而不是靠看屏幕。仿真时可以用虚拟电位器模拟从 0kg 到 80kg 的变化,再结合代码里的标定流程,看一下读数是否稳定、去皮是否生效、蜂鸣器是否在稳定后才触发。

4.3 仿真与实物的核心差异

仿真能验证逻辑,但仿真不能完全替代硬件验证。Proteus 里的传感器模型是理想化的,没有机械振动,没有温度漂移,也没有电源纹波。你在仿真里把滤波调得很好,到实物上可能还是一串乱跳的数字。仿真最大的价值在于帮你把代码逻辑、按键状态机、显示刷新和低功耗切换这些“数字部分”先调通,而模拟噪声、接地、器件一致性这些问题必须靠实物来解决。

所以拿到开源工程后,我建议的路线是:先跑仿真,把工程里每个功能都触发一遍,确保自己理解了代码逻辑;再买齐核心器件,按原理图在面包板或洞洞板上焊接;最后把实物调通后,再决定要不要画 PCB 打样。这个顺序能让你少走很多弯路。

5. 常见故障排查手册:从读数飘到不开机

5.1 数据显示跳变与零点漂移的根源

数据跳变是最常见的问题,也是体重秤项目里最容易让人失去耐心的地方。检查顺序一般是:电源是否干净,传感器是否固定可靠,接线是否过长,滤波是否过少。HX711 的 AVDD 如果直接并在不稳定的 5V 上,原始码每分钟都能漂出好几个档位。我的处理办法是在 HX711 电源入口加一颗 470uF 大电容,再并联 0.1uF 陶瓷电容,效果立竿见影。

零点漂移和温度、机械形变都有关系。传感器本身受温度影响比较明显,同一颗传感器在室温 20 度和 35 度下空载读数可能差几十个码,换算成重量可能差 0.1kg 到 0.3kg。解决方法是把零点校准做成开机自动执行,并且支持用户通过按键手动去皮。如果长期不用,最好每次开机都重新去皮,不要用上次保存的 offset 硬算。

5.2 HX711 不吐数据或读数恒定异常

DOUT 一直为高是整个项目最让人头疼的问题之一。先查接线:DOUT 是否接到了正确的 GPIO,SCK 是否也在 GPIO 上,两根线有没有接反。如果 SCK 和 DOUT 在程序里被配置成推挽输出,DOUT 引脚会一直读到高电平。HX711 数据手册上 DOUT 是推挽输出,但在模块上可能加了限流电阻,还是要确保引脚配置成输入模式,并加上拉。

上电顺序也是排查重点。如果 HX711 和主控同时上电,有时芯片状态不确定,DOUT 不会自动产生下降沿。初始化代码里先把 SCK 拉低几百毫秒,再发送 25 个脉冲,让芯片复位到已知状态。另外,使用现成模块时,有些模块的 E+ 和 E- 标注和传感器颜色不匹配,接反之后 DOUT 可能一直输出满量程值,表现为读数恒定且不随负载变化。

5.3 仿真正常但实物翻车的几类差异

有些同学在 Proteus 里跑得好好的,一到实物就各种问题。差异主要集中在三块:电源噪声、机械安装、器件离散性。仿真里没有直流电源波纹,也没有电磁干扰,所以你的滤除算法看着很完美,到实物里 HG 上一切都变了。建议实物阶段先不要上滤波,直接看原始码,确认原始码的噪声水平和漂移趋势,再决定滤波参数。

机械安装也容易被忽视。称重传感器需要一段自由的“应变区”,如果四个角都锁死,读数会非常奇怪。正确做法是传感器一端固定在底座,另一端通过弹性结构承载秤面,受力时传感器能发生形变。锁传感器螺丝的力矩也要一致,过紧或过松都会改变零点。如果在实物阶段读到的重量和实际重量误差很大,先检查传感器是否处于自由的机械状态,再重新做一次完整标定。

5.4 低功耗唤醒失败和 OLED 黑屏

进入 STOP 模式后按键唤醒失败的常见原因是 EXTI 中断配置不对,或者唤醒后没有重新初始化系统时钟。STM32F103 从 STOP 模式唤醒后,默认回到内部时钟,如果主程序还按外部 8MHz 晶振的延时去跑,所有时序都会慢半拍。正确做法是在唤醒后先重新配置时钟,再重新初始化 I2C 和 HX711。

OLED 黑屏要看是不是进入休眠前把显示关了,但唤醒后没有执行重新初始化命令。SSD1306 进入休眠或者关显示后,必须重新发送初始化序列,屏幕才会恢复。还有一点,I2C 总线在低功耗模式前处于忙状态,唤醒后如果不清总线,屏幕会一直不响应。给屏幕供电的 3.3V 如果和主控是同一路电源,休眠时没有切断屏幕电源,单纯靠关显示指令省不了多少电。

6. 开源工程的落地与二次开发方向

6.1 从仿真到实物的移植路线

如果你决定从仿真走向实物,第一步是准备好核心物料清单:STM32F103C8T6 最小系统板或自制最小系统、HX711 模块、称重传感器、OLED 屏幕、按键、蜂鸣器、锂电池和充电模块。用面包板搭电路时,注意 HX711 模块到传感器之间的连线尽量短,电源线用粗一点的跳线,GND 用单点汇聚,避免形成多地环路。

焊接顺序也有讲究。先焊最小系统和下载接口,确认能通过 SWD 连接;然后点亮 OLED,跑一个 I2C 扫描程序,确认地址;再接按键,验证中断唤醒和消抖;最后再接 HX711 和传感器。不要把全部模块一起焊完再上电,否则出了问题很难定位。每加一个模块,都先把对应的独立测试程序跑通,再挂到主程序上。

6.2 工程目录与代码结构参考

开源资料包里一般会有三个目录:原理图、仿真、源码。源码部分建议按功能拆文件:HX711 驱动单独一个文件,滤波算法单独一个文件,显示和按键各占一块,主循环只负责状态调度。这样往后加功能不会把 main.c 变成一坨几千行的面条代码。

代码结构可以参考下面的方式:bsp_hx711.c、bsp_oled.c、bsp_key.c、app_weight.c、app_power.c、main.c。app_weight 里放滤波、去皮、稳定判断逻辑;app_power 里放状态机、休眠和唤醒流程。这种分法对后期维护特别重要,调标定参数时你不会想在一大堆按键逻辑里翻代码。

6.3 可扩展玩法:蓝牙上报、历史记录和云同步

这套工程最直接的扩展方向是加无线上报。在 UART 上接一个蓝牙模块,把重量、稳定标志、时间戳打包成固定格式发送,手机端用一个串口助手就能先看到数据。更进一步可以接 WiFi 模块,把数据上报到服务器或公共物联网平台,实现家庭健康数据记录。扩展时要注意电源余量,WiFi 模块瞬间电流很大,不能直接用 3.3V LDO 拖着跑,要单独设计电源开关,只在发送数据时开启。

另一个有意思的扩展是温度补偿。在靠近传感器的地方放一颗温度传感器,每隔一段时间采集温度并修正 offset,可以明显改善早晚温差带来的零点漂移。算法上可以先用简单线性补偿,再根据实测数据拟合多项式。给体重秤加个 EEPROM 保存历史记录,每次测量后自动存一条,配合按键翻页查看,也算是不错的小升级。

最后再分享一个我实际测试中的体会:标定一定要用大砝码,不要只靠一瓶 500ml 的水。体重秤的满量程一般 50kg 到 100kg,标定点的重量最好覆盖你日常使用的范围,比如用一个 20kg 的哑铃片再组合其他重物。还有,别急着在搭好面包板的当天就把滤波参数调到最平滑,先跑一晚上,观察不同温度、不同供电电压下的原始码变化,再反过来调整算法。这样你不会被“白天正常晚上飘”之类的问题折磨太久。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询