凌晨两点,手里这杯凉透的咖啡已经结了一层膜。
桌上散落着各种元件,焊锡味混着松香,有点呛人,但闻着踏实。
很多人问我,现在淘宝买个现成的模块几块钱,何必这么折腾?
我说,因为那是“死”的,你做出来的才是“活”的。
今天不扯那些高大上的理论,就聊聊我这次设计制作数字电压表的过程,全是干货,也有全是坑。
刚开始,我脑子一热,想上Arduino。
觉得库函数多,代码好抄。
结果呢?
精度根本不够看。
电压波动在0.01V左右晃悠,测个电池还行,测个稳压电源就歇菜。
这时候我才意识到,想要高精度的设计制作数字电压表,硬件选型是命门。
我换成了STM32,外加一个高精度的ADC芯片,比如ADS1115。
这玩意儿自带16位分辨率,噪声控制得比我的心态还稳。
布线的时候,千万别嫌麻烦。
模拟地和数字地,必须单点接地。
我一开始图省事,直接连在一起,结果屏幕上的数字跳得跟心电图似的,吓得我以为主板烧了。
后来老老实实分开走线,中间用磁珠或者0欧电阻连起来,世界瞬间清净。
还有,参考电压源是关键。
别用板载的LDO,那个温漂太厉害。
我淘了一个REF5025,2.5V的基准电压源,温度系数极低。
虽然贵了点,几十块钱一个,但为了那0.1%的精度,值。
代码方面,别指望现成的能直接用。
滤波算法得自己写。
简单的滑动平均滤波根本不够,我用了卡尔曼滤波的简化版。
虽然计算量大,STM32F103跑起来有点吃力,偶尔会卡顿,但数据平滑多了。
这里有个小插曲,我在调试中断服务程序的时候,把全局变量没加volatile修饰。
导致编译器优化后,变量值死活不更新。
查了两天bug,头发都掉了一把。
这种低级错误,新手最容易犯,我也没幸免。
显示屏我选了0.96寸的OLED,I2C接口,接线简单。
但要注意,I2C的时钟线必须加上拉电阻,10K左右。
我一开始没加,屏幕花屏,闪得眼晕。
加上电阻后,字迹清晰锐利,看着就舒服。
外壳我用了3D打印,PLA材料。
设计的时候预留了散热孔,虽然功耗不高,但心里踏实。
按键用了轻触开关,手感一般,但便宜耐用。
组装的时候,螺丝别拧太紧,塑料件容易裂。
我有一颗螺丝直接拧滑丝了,最后用AB胶固定的,有点丑,但能凑合用。
整体成本算下来,大概150块左右。
比买那种工业级的便宜多了,而且功能还能自定义。
比如我想加个历史数据记录,或者蓝牙上传,改代码就行。
这就是DIY的乐趣,它不是冷冰冰的商品,它是你的一部分。
当然,这个过程并不轻松。
焊点虚焊、代码Bug、元件炸裂,都是家常便饭。
但当你第一次看到屏幕上稳定显示3.300V的时候,那种成就感,买十个现成的都换不来。
如果你也想尝试,记住几点:
第一,原理图要画清楚,别靠记忆。
第二,调试要分模块,先测电源,再测ADC,最后测显示。
第三,别怕犯错,每一个Bug都是你进阶的台阶。
这次设计制作数字电压表的经历,让我对模拟电路有了更深的理解。
以前觉得模拟电路玄学,现在知道,只要尊重物理规律,它其实很讲道理。
别嫌麻烦,别怕出错。
动手做,才是检验真理的唯一标准。
哪怕最后做出来的东西,只能测个大概,那也是你亲手创造的。
这种粗糙的真实感,是任何完美商品都给不了的。
好了,我要去补觉了。
明天还得去实验室,看看新到的示波器探头,顺带再优化一下滤波算法。
毕竟,路还长着呢。
希望这篇碎碎念,能给你一点启发。
哪怕只是让你决定扔掉那个几块钱的模块,自己买块板子试试,也算没白写。
加油吧,创客们。
哪怕手脏点,累点,心里是亮的。