矿石收音机论坛

 找回密码
 加入会员

QQ登录

只需一步,快速开始

搜索
查看: 22956|回复: 38

弄了个STM32的ADC程序,感觉精度还挺好,这个可以用来做万用表不?

[复制链接]
     
发表于 2019-7-6 00:52:31 | 显示全部楼层 |阅读模式
这两天测试了一下STM32F030F4的ADC,感觉精度还可以。
它的ADC只有12位,我做了非常简单的超采样,滤波和校准。大概能达到16位精度的样子。
没做其它任何特殊的处理,就一个裸板+飞线,干扰还是有点大。但就这样读数还是可以精确到小数点后4位。
基本上和我的万用表大差不差的。以万用表为基准来看,误差小于2mV, 约0.05%

测试视频点下面的链接:
http://player.youku.com/embed/XNDI2MDM2NzI0OA==

但有一个问题,当电压降到0.125V时,读数出现了跳变,大概在0.1v~0.125v之间,读数整整少了0.1v。也不知道是什么毛病。

不知道用这个做个万用表怎么样?才1块多的芯片,还是物有所值的。

评分

1

查看全部评分

     
发表于 2019-7-7 22:21:34 | 显示全部楼层
peiguoqing 发表于 2019-7-7 20:59
请问:ADS1232接成万用表,怎么连接呢?我实际说的就是这个意思。
需要测量正负双向电压的。 ...

ICL7106 的 V- 接到哪里呢,接到电池的负极。可是如果有一个待测电路它的 GND 也接到电池负极,你还能测这个电路的负电压(比电池负极电压更低)么? 燃鹅,平常你用的万用表,电池在表内部,你的待测电路不可能接到电池上,也就是说待测电路和万用表的电池(电源)是无关的。

这种情况叫做“浮置”。

当你把表笔搭上待测电路后,待测电路和万用表的黑表笔建立一个“参考”,这个参考的位置,以 ICL7106 为例,是一个比正电源(电池正极)低 2.8V 的位置,它由 ICL7106 内部的电路产生,并输出到 COMMON 引脚,然后(作为电压表和电流表时)接到(Vin Lo 和)黑表笔上。所以,输入万用表的电压,是以这一点为参考的,因此低于它的电压可以被合法输入,因为它比正电源低 2.8V,但对 9V 电池来说,它还是比负电源高很多。
cr11052.png

那么如果是 ADS1232 呢?很简单哪,你把它的 VCC 看作是 7106 的正电源,把它的 GND 看作是 7106 的负电源就可以啦 不过 1232 并未给出一个内部驱动的 COMMON,那么怎么办?自己产生呗,最简单的就是用一对等值电阻从电源或基准分压,得到 COMMON,然后把 Vin Lo 接到这里,那么 Vin Hi 就可以以它为 0V,输入正负电压了。

如图,这是我在“简易 6.5DMM”帖子里做的荔枝,ADS1232 的 IN LO 接到 5V 基准电压由一对等值电阻分压得到的 2.5V 上,因此可以输入正负 2.5V 电压
ads1232_t301.png

cr2010.jpg

输入正 1V
cr2024.jpg

交换红黑表笔
cr2025.jpg

测量电阻
cr2014.jpg

cr2013.jpg

评分

1

查看全部评分

回复 支持 1 反对 0

使用道具 举报

     
发表于 2019-7-6 06:14:56 | 显示全部楼层
既然你问了就明确的告诉你"不行",因为你说的东西只能满足一个电压表,那么还有电流电阻电容这些东西呢,万用表并不是你想的那么简单,真想玩玩就先做一个单纯的电压表试试手.
回复 支持 0 反对 1

使用道具 举报

     
发表于 2019-7-6 03:02:03 | 显示全部楼层
我看了视频,在 0.125V 附近那个要么是板子线没接触好,要么是你程序里有隐藏的 BUG,
不然这个绝对不应该是硬件的毛病,建议在附近多测测看。

ADC 本来就是很准的,跳 1LSB 的话也就几个 mv 的差距,更何况有超采样,
基本上噪声都用来提升分辨率了。
回复 支持 反对

使用道具 举报

     
发表于 2019-7-6 06:20:29 | 显示全部楼层
很不错,不过,这个是分正负极的,接反了就不灵了。
另,很想知道LZ实现超采样的原理,可否简单说明一下呢?
回复 支持 反对

使用道具 举报

     
发表于 2019-7-6 08:05:08 | 显示全部楼层
12位, 4096级,如果基准电压没问题, 理想的话相当于3999的表, 4位半达不到
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2019-7-7 00:43:25 | 显示全部楼层
t3486784401 发表于 2019-7-6 03:02
我看了视频,在 0.125V 附近那个要么是板子线没接触好,要么是你程序里有隐藏的 BUG,
不然这个绝对不应该 ...

关于显示跳动的问题,确实是个BUG,我的浮点数转换逻辑有点问题。
没做超采样之前,数据跳动很大的,也许是我的测试方法不对吧。
反正我用内部14MHz的时钟做ADC,跳动非常大,改用外部晶振就要好很多。
而且STM32的ADC精度达不到1LSB这么高,按手册上说的,各类误差可以达到+/-4LSB。不知道它不同类型的错误会不会累加,如果要累加,那误差更大。
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2019-7-7 00:44:03 | 显示全部楼层
z1980823 发表于 2019-7-6 06:14
既然你问了就明确的告诉你"不行",因为你说的东西只能满足一个电压表,那么还有电流电阻电容这些东西呢,万用 ...

嗯,直接用它当万用表当然不行,我是说“做”一个万用表...
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2019-7-7 00:52:56 | 显示全部楼层
peiguoqing 发表于 2019-7-6 06:20
很不错,不过,这个是分正负极的,接反了就不灵了。
另,很想知道LZ实现超采样的原理,可否简单说明一下呢 ...

是分正负极。但我是这么想的,它有一堆ADC通道,一路采集正值,一路采集负值的,由程序自动切换显示。电压、电流分别用不同的通道,还能同时计算功率

超采样其实很简单,无非就是多取一些采样点,根据多个采样点的值计算出一个“准确值”。我现在做的是90倍超采样加中值/均值过滤,理论上可以提升90倍的精度,实际上估计有20倍的精度提升。不过超采样也不是万能的,基本上很难再提升了。200倍超采样出来的数据不会变得更好。
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2019-7-7 01:08:42 | 显示全部楼层
iffi123 发表于 2019-7-6 08:05
12位, 4096级,如果基准电压没问题, 理想的话相当于3999的表, 4位半达不到

1块多的MCU哪有什么基准,只有一个内部参考电压可以用,连外部参考电压的引脚都没有。不过这个型号挺好,有工厂校准数据,用校准数据计算出来的参考电压还不错。

4位半的表,只是表的显示范围,与精度无关。比显示范围,那它肯定比不过我自己写的程序。我专门去查了我的表的说明书,电压精度是0.05%,2v量程也就是+/-1mV的样子。感觉和我程序的精度差不多啊。
回复 支持 反对

使用道具 举报

     
发表于 2019-7-7 05:55:06 | 显示全部楼层
本帖最后由 iffi123 于 2019-7-7 05:59 编辑

你校准了量程高端,但低端的误差大很多 低端离3位半还差点

12位adc,是做不到4位半的精度,不管你怎么滤波, 所以小数点后第4位是没用的

万用表的精度在整个量程都能保证的,不是某些点
回复 支持 反对

使用道具 举报

     
发表于 2019-7-7 08:34:58 | 显示全部楼层
scu319hy 发表于 2019-7-7 00:52
是分正负极。但我是这么想的,它有一堆ADC通道,一路采集正值,一路采集负值的,由程序自动切换显示。电 ...

建议LZ搞搞电子台秤的adc,有24位精度,就是需要桥式输入,不知怎么改成常规万用表模式。
回复 支持 反对

使用道具 举报

     
发表于 2019-7-7 13:22:39 | 显示全部楼层
stm8做的两用表,电压电流采集USB充电器电压电流卖的挺开的,楼主不知道而已。至于为什么一只没进入万用表领域?自己琢磨吧,琢磨不清爽就做一个卖一卖看看有没人要。
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2019-7-7 15:30:01 | 显示全部楼层
iffi123 发表于 2019-7-7 05:55
你校准了量程高端,但低端的误差大很多 低端离3位半还差点

12位adc,是做不到4位半的精度,不管你怎么滤 ...

视频里的测量结果只是对参考电压做了校准,所以高端准一点,低端差一些。
后来我又加了三次线性修正,现在基本上可以做到高低端一致的0.5mV左右的误差了。不过我手上也没有高标准的基准,就一台万用表,也校准不到多精确,而且我只是随便玩一下这个芯片,这个芯片存储也不够用,所以更高级的优化也懒得做了。虽然12位再优化也不可能变成24位,但提升成15~16位还是有可能的。对比我手上另外两台三位半的表,这个ADC程序的结果要准确得多。那两台表与我这台4位半的表误差有20mV以上。
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2019-7-7 15:42:00 | 显示全部楼层
bis 发表于 2019-7-7 13:22
stm8做的两用表,电压电流采集USB充电器电压电流卖的挺开的,楼主不知道而已。至于为什么一只没进入万用表 ...

我不清楚为什么大家不用stm32来做万用表,也许是因为开发成本比较高吧,毕竟低端表的现成方案一大把。而且,做台20块的4位半表,怕是大家也不敢相信啊。有的时候人就是这么怪。我不是做电子产品,如果哪天我真有能力做台万用表了,估计也也不会选我现在用的芯片(stm32f030f4p6), 前几天看了一下stm32f373,带有16位的adc,还有12位5Msps的高速adc,还带可编程放大器,比030适合做万用表,改天弄来玩一下
回复 支持 反对

使用道具 举报

     
发表于 2019-7-7 15:47:47 | 显示全部楼层
本帖最后由 量子隧道 于 2019-7-7 15:57 编辑
iffi123 发表于 2019-7-6 08:05
12位, 4096级,如果基准电压没问题, 理想的话相当于3999的表, 4位半达不到


有一种方法叫做:
“over sampling and averaging”或“over sampling and decimation”。
大概意思就是:
1,给被测信号加一个与被测信号无关,略等于ADC LSB的噪音。白噪音就很好。
2,多次取样并平均。
可以突破ADC分辨率。代价是等效采样率的下降。对于用高速ADC采样慢信号的场合,很有用。
大概可以用N次过取样,将精度提高 根号N 倍。
我曾经用这种技术,用10bit ADC,4096倍过取样,达到了16bit的有效分辨率。
https://www.silabs.com/documents ... ion-notes/an118.pdf
当然,决定ADC精度的不止分辨率这一个参数。还有其它参数,比如积分非线性,这个是没法用过取样来补偿的。只能用校准等手段去除。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 加入会员

本版积分规则

小黑屋|手机版|矿石收音机 ( 蒙ICP备05000029号-1 )

蒙公网安备 15040402000005号

GMT+8, 2024-5-11 09:40

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表