hdxet 发表于 2017-11-30 15:04:39

求助:STM32F407的ADC采样误差太大,如何解决?

本帖最后由 hdxet 于 2017-11-30 15:04 编辑

最近用STM32F407VET6做个试验,用到ADC采集电压信号,发现每次采集到的数据差值很大,给1.65V直流电压,采集数据在2000点附近,上下差100多点,甚至200多点, 感觉不对劲,以为是输入信号噪波大,于是给输入端口串电阻后加滤波电容,100uF的都试过,仍然是这样,然后把输入端直接接地,发现仍会有大幅波动,约一半采集的数据是0,其它的有几点的,也有10点、20点甚至40、50点出现,直接接到3.3V,也会有405x、406x的数据出现,然后把输入端口与103ZET6的板子并联,两块板子共用一个电源,一同采集同一个电压值,103采到的数很稳定,407就不行,怀疑片子有问题,找来一块STM32F407ZGT6的开发板,用同样的方式做试验,效果还是这样。
在网上查原因,只找到有人说参数设定会影响407的采样精度,于是在程序中将ADC的时钟、采样间隔、采样时间等都设到最慢,效果还是这样;采用定时器触发或软件触发、单次采样或连续采样、用不用DMA,效果还是一样;用不同的例程,参数设置也不同,结果没变化。
咨询开发板的客服工程师,得到的答复是407就这样,如果要求精度,只能外扩ADC。
再找到官方的应用笔记AN4073,没有找到答案,从应用笔记中看,407的采样精度还是很高的,绝大多数采样值应该都在正负3点到5点之内。
现在是百思不得其“姐”,作为一款很成熟的产品,ADC误差为何这么大?103的库中有ADC校准,407的没有,有说法是不需要校准,应用笔记中也没有说法,那么,真的是不需要吗?应用笔记中的数据是如何得到的呢?
折腾了很久,实在是无奈,只能请各位大侠相助了,看看能不能找到这个“姐”。

zpywz 发表于 2017-11-30 15:39:04

你没提你的参考电压,是不是忽略了这一块。还有AGND稳不稳。

hdxet 发表于 2017-11-30 16:40:33

参考电压就是VCC,有滤波,但即使参考电压不稳,端口接GND也不应该出好几十的点数,103接GND基本都是0,偶尔出个1或2。

lsfsxfljj 发表于 2017-11-30 16:54:57

103稳多了,407的AD是不好{:lol:}{:lol:}{:lol:}

modbus 发表于 2017-11-30 17:09:11

估计是哪地方没做好吧,我以前用过别人一个产品就是用407内部AD采集电压的,感觉也挺稳的

kdtcf 发表于 2017-11-30 21:25:48

楼主你这个不对,我也在用407,哪有你这么离谱,是不是你的电源或者基准有问题。
407采样时间加长会更稳定,通道切换后加延时,还有就是ADC时钟设置是否对

zhongguoren 发表于 2017-11-30 21:47:11

我用的F429也是这样,接地都可以读出0.5V来,真是无语!

hdxet 发表于 2017-11-30 22:08:57

谢谢各位,现在就是不知道问题出在哪里,输入端口接GND如果能稳定了,估计就差不多了,但是现在误差太大。
时钟2分频、4分频、8分频都一样,采样时间、间隔时间最快、最慢没什么差别,单通道采集和多通道采集也一样。{:dizzy:}{:dizzy:}

mangoes 发表于 2017-11-30 23:13:55

是不是开了SPI这类的高速外设?我有个项目遇到高速外设运行干扰ADC的情况,用的是407,改PCB,改软件,加电容,AVCC和VREF都用专门的参考原供电还是有,特征是SPI运行的时候模拟部分(时间有点久了不记得是AVCC,VREF还是AGND)会有SPI的电流噪声,后面查了芯片耦合出来的,采集直流的无跳动位只能做到9位.后面外挂AD7660就没问题了,无跳动位也能做到14.

desertsailor 发表于 2017-11-30 23:34:14

我用的误差很小

kdtcf 发表于 2017-12-1 07:42:38

zhongguoren 发表于 2017-11-30 21:47
我用的F429也是这样,接地都可以读出0.5V来,真是无语!

现在429可是50大洋的奢侈品哦,我得抽时间测试一下,最近还想用429呢。

hdxet 发表于 2017-12-1 08:04:24

desertsailor 发表于 2017-11-30 23:34
我用的误差很小

能不能看看您的配置程序?

hdxet 发表于 2017-12-1 08:56:59

mangoes 发表于 2017-11-30 23:13
是不是开了SPI这类的高速外设?我有个项目遇到高速外设运行干扰ADC的情况,用的是407,改PCB,改软件,加电容,AV ...

现在只开了ADC和GPIO的电源,其它都没开,情况依然是这样

pldjn 发表于 2017-12-1 09:01:43

mangoes 发表于 2017-11-30 23:13
是不是开了SPI这类的高速外设?我有个项目遇到高速外设运行干扰ADC的情况,用的是407,改PCB,改软件,加电容,AV ...

有没有替换AD7660的便宜点的AD芯片,我也在用这颗芯片?

mangoes 发表于 2017-12-1 13:33:47

pldjn 发表于 2017-12-1 09:01
有没有替换AD7660的便宜点的AD芯片,我也在用这颗芯片?

暂时没发现,若有发现通知一声{:lol:}

kdtcf 发表于 2017-12-1 13:40:38

pldjn 发表于 2017-12-1 09:01
有没有替换AD7660的便宜点的AD芯片,我也在用这颗芯片?

六七十块钱,8铜道同步采样,200K,这已经性价比超级高了。

hdxet 发表于 2017-12-4 08:00:15

难道这真的是无法解决的问题?感觉ST这么大的公司不会做出这么LOW的片子吧,到底哪里不对呢?{:sad:}

zchong 发表于 2017-12-4 09:24:19

pldjn 发表于 2017-12-1 09:01
有没有替换AD7660的便宜点的AD芯片,我也在用这颗芯片?

是AD7606吗?TI好像出了一款完全兼容AD7606的型号,据说能便宜点,你可以问问代理商

z123 发表于 2017-12-4 09:28:12

kdtcf 发表于 2017-12-1 13:40
六七十块钱,8铜道同步采样,200K,这已经性价比超级高了。

春风大神是不是混淆了7606和7660呀?7606才是8ch的,7660好像是1chde

z123 发表于 2017-12-4 09:28:36

本帖最后由 z123 于 2017-12-4 09:43 编辑

zchong 发表于 2017-12-4 09:24
是AD7606吗?TI好像出了一款完全兼容AD7606的型号,据说能便宜点,你可以问问代理商 ...

是么,请问是什么型号呢?


http://www.ti.com.cn/product/cn/ADS8588S,找到了,是这款



kdtcf 发表于 2017-12-4 10:40:11

z123 发表于 2017-12-4 09:28
春风大神是不是混淆了7606和7660呀?7606才是8ch的,7660好像是1chde

是我搞错了型号,应该是7606

hdxet 发表于 2017-12-6 08:25:15

楼歪了,扶正,继续求“姐”,难道真的无“姐”吗

光明星1号 发表于 2017-12-6 08:49:48

hdxet 发表于 2017-12-6 08:25
楼歪了,扶正,继续求“姐”,难道真的无“姐”吗

1.基准源滤波
2.电源滤波
3.远离晶振等
4.PCB布线很重要
5.接地的地也分的,你的地也可能串入了干扰
6.其他原因也很多,很难一一分析,再焊接一块板,看看是不是还是这么大。

光明星1号 发表于 2017-12-6 08:52:37

hdxet 发表于 2017-12-6 08:25
楼歪了,扶正,继续求“姐”,难道真的无“姐”吗

不好意思,刚看到你拿了一块开发板实验了,开发板一般浮动20-50 都算正常
建议你截图你的原理图,或者PCB的部分布线。

hdxet 发表于 2017-12-6 11:19:09

光明星1号 发表于 2017-12-6 08:49
1.基准源滤波
2.电源滤波
3.远离晶振等


非常感谢!
附图是我用的这块开发板电源部分的截图,3.3V另外还有电解电容滤波,我自己做的板子跟这个也差不多,只是没有那个10欧姆的R2,效果一样,您提到的几个问题也都有注意到,原来是用的103芯片,给直流就跳动几个点,现在是为了进行大量的函数运算改成407,外电路基本没变,给直流就跳动巨大。
现在把两块板子使用同一个电源,输入端口并联在一起试验,103依然很稳定,407跳动巨大。
原来有一块红牛的103开发板,试验效果也很好,输入口接地,基本都是0,很少会出现1或2,可是407的开发板和我自己做的板子都会出现好几十点的数据,输入端口接到3.3V,103基本都是4095,可407就会出现很多408X,偶尔会更低。
基于103的使用经验,想不到会出现这种情况,虽然可以用增加外置AD等其它方法解决,但总是想不明白为什么会这样,103的AD做的就很好,到几年后的407应该做的更好啊。

redroof 发表于 2017-12-6 11:28:18

光明星1号 发表于 2017-12-6 08:52
不好意思,刚看到你拿了一块开发板实验了,开发板一般浮动20-50 都算正常
建议你截图你的原理图,或者PCB ...

浮动20-50正常??
要是20位或者更高的AD,浮动这个数确实算正常
才12位的AD,跳动20个数也就是有效精度只剩8位不到了啊{:titter:}

Wisen 发表于 2017-12-6 17:18:30

103和407的功耗不一样,407电流要大些,3.3V如果不稳定啥情况都有可能

hit0577 发表于 2017-12-6 21:48:47

我也用407,也没有你这问题里这么夸张,采电压跟外部高精度电源对比,误差不大

arm 发表于 2017-12-6 21:54:57

把采样速度降低试试

fengxin32 发表于 2017-12-6 22:35:12

407采交流,拟合后RMS值能做到千分之五(调理到接近量程匹配)。
407的AD内阻较低,注意输入的调理。
另外用序列器做过采样效果很好。

raintoo 发表于 2017-12-7 01:36:54

依照我的看法,应该不是硬件上的问题,主要是和芯片的供电电压有关系,有可能芯片的供电电压小于所谓的参考电压基准。

hdxet 发表于 2017-12-7 07:59:17

Wisen 发表于 2017-12-6 17:18
103和407的功耗不一样,407电流要大些,3.3V如果不稳定啥情况都有可能

3.3V是5V、10W开关电源经1117降压的,1117前后都有滤波电容

hdxet 发表于 2017-12-7 08:01:39

hit0577 发表于 2017-12-6 21:48
我也用407,也没有你这问题里这么夸张,采电压跟外部高精度电源对比,误差不大 ...

您的407输入端口直接接地采出来的数是稳定的吗?能不能看看你ADC部分的配置程序?

hdxet 发表于 2017-12-7 08:02:51

arm 发表于 2017-12-6 21:54
把采样速度降低试试

ADC时钟、采样速度、采样间隔都调过,最快跟最慢没什么差别。

hdxet 发表于 2017-12-7 08:04:26

fengxin32 发表于 2017-12-6 22:35
407采交流,拟合后RMS值能做到千分之五(调理到接近量程匹配)。
407的AD内阻较低,注意输入的调理。
另外 ...

电路的输入都是有运费的,现在是直接将端口接地或接VCC都不稳

hdxet 发表于 2017-12-7 08:09:09

raintoo 发表于 2017-12-7 01:36
依照我的看法,应该不是硬件上的问题,主要是和芯片的供电电压有关系,有可能芯片的供电电压小于所谓的参考 ...

芯片供电和参考电压都是3.3V,103也是这么用,很稳定

光明星1号 发表于 2017-12-9 15:29:34

redroof 发表于 2017-12-6 11:28
浮动20-50正常??
要是20位或者更高的AD,浮动这个数确实算正常
才12位的AD,跳动20个数也就是有效精度 ...

我说的是开发板,一般我们自己做板子,会很好,但是STM32的AD应该都有1-2的跳动!

光明星1号 发表于 2017-12-9 15:36:35

hdxet 发表于 2017-12-7 08:09
芯片供电和参考电压都是3.3V,103也是这么用,很稳定

你把晶振接地,或者用4脚的本身带接地脚的晶振
你没有AGND ,起码AGND和GND之间用一个0欧姆电阻,我不知道你现在怎么铺地的,或者说有没有做成单点接地。
晶振是否远离ADC。
和什么VCC VDD无关 你的滤波电容一定要尽量靠近芯片,但从原理图看不出来,电源滤波采用R-C-R 比R-C要好!

liuqian 发表于 2017-12-9 20:20:30

改电池供电试试,先排除电源问题

hdxet 发表于 2017-12-11 08:54:05

谢谢两位,电池供电也试了,没变化。
地是大面积铺地,从来不把地分出AGND和DGND,关于接地的方式,在这里不想讨论,恐怕也讨论不出结果;至于其它硬件上常规的注意事项都有考虑,现在的问题主要是:同样的电路,同一个电源,接在一起的输入端口,103很稳定,407的结果就没法看,这是为什么呢?我们自己做的407板子和开发板的情况是一样的。

bird_W 发表于 2017-12-11 09:20:17

做个buff取均值吧舍弃误差大的数据

hdxet 发表于 2017-12-11 14:41:08

bird_W 发表于 2017-12-11 09:20
做个buff取均值吧舍弃误差大的数据

谢谢,我这个用途比较特殊,要求每秒采集5400点的三相交流信号,每一个点都进行函数计算,不能做平均,原来不算这么多点,所以103够用,采样精度也够了,现在103算不过来,才换成407,现在是计算时间够用,采样精度又太差,如果解决不了,只能换其它片子或外扩ADC。
现在就是纳闷,到底哪里出了问题呢?

tianbianren 发表于 2017-12-27 00:45:04

本帖最后由 tianbianren 于 2017-12-27 00:50 编辑

我用的hal库,DMA配置的时候,粗心把两个参数都配置成了“DMA_MDATAALIGN_HALFWORD”,出现过数值跳动200左右的问题,改过来就好了!!
就是这两句:
    hdma_adc1.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD;
    hdma_adc1.Init.MemDataAlignment = DMA_MDATAALIGN_HALFWORD;

在标准库里应该是这两个参数:
uint32_t DMA_PeripheralDataSize; /*!< Specifies the Peripheral data width.
                                        This parameter can be a value of @ref DMA_peripheral_data_size */

uint32_t DMA_MemoryDataSize;   /*!< Specifies the Memory data width.
                                        This parameter can be a value of @ref DMA_memory_data_size */
不知道,你是是不是这样??

hdxet 发表于 2017-12-29 10:42:32

tianbianren 发表于 2017-12-27 00:45
我用的hal库,DMA配置的时候,粗心把两个参数都配置成了“DMA_MDATAALIGN_HALFWORD”,出现过数值跳动200左 ...

谢谢,我程序中这个配置应该没有错,其它的会不会有问题?下面是DMA部分的配置

    DMA_InitStructure.DMA_Channel = DMA_Channel_0;      /*DMA通道0*/
    DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)0x40012308;/*外设地址*/
    DMA_InitStructure.DMA_Memory0BaseAddr    = (uint32_t)AdcValue;          /*存取器地址*/
    DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralToMemory;               /*方向从外设到内存*/
    DMA_InitStructure.DMA_BufferSize = 8;                                 /*数据传输的数量为1*/
    DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;      /*地址不增加*/
    DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;               /*地址增加*/
    DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Word;   /*数据长度 字*/
    DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Word;         /*数据长度 字*/
    DMA_InitStructure.DMA_Priority = DMA_Priority_High;                     /*高优先级*/
    DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;                         /*循环模式*/
    DMA_InitStructure.DMA_FIFOMode = DMA_FIFOMode_Disable;                  /*禁止FIFO*/
    DMA_InitStructure.DMA_FIFOThreshold = DMA_FIFOThreshold_HalfFull;       /*FIFO的值*/
    DMA_InitStructure.DMA_MemoryBurst = DMA_MemoryBurst_Single;             /*单次传输*/
    DMA_InitStructure.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;   /*单次传输*/
    DMA_Init(DMA2_Stream0, &DMA_InitStructure);          /**/
    DMA_ClearFlag(DMA2_Stream0, DMA_FLAG_TCIF0);         //传输完成
    DMA_ITConfig(DMA2_Stream0, DMA_IT_HT, ENABLE);   

    DMA_Cmd(DMA2_Stream0, ENABLE);                     //开启DMA传输

tianbianren 发表于 2017-12-29 12:43:29

本帖最后由 tianbianren 于 2017-12-29 12:50 编辑

hdxet 发表于 2017-12-29 10:42
谢谢,我程序中这个配置应该没有错,其它的会不会有问题?下面是DMA部分的配置

    DMA_InitStructure.D ...

你这个外设地址貌似不对,不知道你用的ADC123中哪一个,你只能是下列可能中的一个(我用的是407ZG的,不知道跟你的是否一样??):
ADC1: ((uint32_t)0x4001204C)
ADC2: ((uint32_t)0x4001214C)
ADC3: ((uint32_t)0x4001224C)
或者干脆这样写:
DMA_InitStructure.DMA_PeripheralBaseAddr = (u32)&ADC1->DR;       //ADC1->DR地址

hdxet 发表于 2017-12-29 15:44:54

tianbianren 发表于 2017-12-29 12:43
你这个外设地址貌似不对,不知道你用的ADC123中哪一个,你只能是下列可能中的一个(我用的是407ZG的,不 ...

你好,不是这个问题,这是双ADC同时工作的配置,如果配成0x4001204C,只有ADC1工作,但数据仍然跳动很大,与双ADC情况一样,配成其它数,也不能工作。

a136498491 发表于 2017-12-29 22:49:07

要不换个芯片试试。前面有遇到F030换个芯片就好了。遇到过RFID天线干扰ADC采集,即使接地,也是有50的读数。

yylwt 发表于 2017-12-29 23:17:22

我们用407片内ad做交流采样,每周波24点,每个点过采样32次做平均,计算结果跳变就是+—1个码,407的ad效果还是可以的。试试加片外基准,AGND直接接电源地,VCCA和vcc间加磁珠,其他就是硬件参考手册要求的注意事项了,运气好没碰到问题所以感觉挺简单。

hdxet 发表于 2017-12-30 07:58:24

a136498491 发表于 2017-12-29 22:49
要不换个芯片试试。前面有遇到F030换个芯片就好了。遇到过RFID天线干扰ADC采集,即使接地,也是有50的读数 ...

用自己做的板子试了感觉有问题,又用一块开发板试的,一个是VE,一个是ZG,都是一样的情况。

hdxet 发表于 2017-12-30 08:04:16

yylwt 发表于 2017-12-29 23:17
我们用407片内ad做交流采样,每周波24点,每个点过采样32次做平均,计算结果跳变就是+—1个码,407的ad效果 ...

我的这个应用要求快,不能平均。
硬件上该注意的都注意了,类似的电路,103很稳定,407就不行。
感觉还是软件配置的问题,又找不到原因,能分享一下您的配置程序吗?

yayagepei 发表于 2017-12-30 11:04:21

1、楼主可以先试着把基准源用个运放做个电压跟随,采集信号也做个电压跟随,然后调一下采样保持周期,应该就可以了

hdxet 发表于 2017-12-30 11:47:04

本帖最后由 hdxet 于 2017-12-30 11:48 编辑

yayagepei 发表于 2017-12-30 11:04
1、楼主可以先试着把基准源用个运放做个电压跟随,采集信号也做个电压跟随,然后调一下采样保持周期,应该 ...

基准接VCC,采集口接GND,读数都有四五十甚至更高,大约一半是0。

rom 发表于 2017-12-30 16:09:02

{:lol:}407的ART加速影响ADC,勘误里面有写

jiangchunbo065 发表于 2019-10-8 10:54:07

楼主解决了嘛

hdxet 发表于 2019-10-8 16:44:53

依然没有解决,所以现在需要ADC的项目还使用103

xfdr 发表于 2020-4-17 10:37:29

hdxet 发表于 2019-10-8 16:44
依然没有解决,所以现在需要ADC的项目还使用103

我也遇到了同样的问题,跳动真大
一个接地,一个接3.3V
ADC1 voltage = 0.000 V value = 0000
ADC1 voltage = 3.300 V value = 4095
ADC1 voltage = 0.034 V value = 0042
ADC1 voltage = 3.281 V value = 4072
ADC1 voltage = 0.010 V value = 0044
ADC1 voltage = 3.287 V value = 4079
ADC1 voltage = 0.038 V value = 0047
ADC1 voltage = 3.265 V value = 4076
ADC1 voltage = 0.026 V value = 0032
ADC1 voltage = 3.238 V value = 4018
ADC1 voltage = 0.015 V value = 0018
ADC1 voltage = 3.255 V value = 4071
ADC1 voltage = 0.001 V value = 0049
ADC1 voltage = 3.278 V value = 4068
ADC1 voltage = 0.004 V value = 0017
ADC1 voltage = 3.250 V value = 4033
ADC1 voltage = 0.018 V value = 0022
ADC1 voltage = 3.258 V value = 4043
ADC1 voltage = 0.037 V value = 0008
ADC1 voltage = 3.240 V value = 4021
ADC1 voltage = 0.031 V value = 0039
ADC1 voltage = 3.273 V value = 4066

xfdr 发表于 2020-4-17 11:27:31

rom 发表于 2017-12-30 16:09
407的ART加速影响ADC,勘误里面有写

这个问题如何解决?能关闭掉吗?

ibmx311 发表于 2020-4-25 11:00:06

实话说,你们贴的代码我一行都不看。你们都有什么条件测试adc啊。你输入的直流信号源的噪声和稳定度到底是怎样的,你电压基准到底是怎样的。你分压电阻到底是怎样的,在用单片机采样的过程中芯片是否没有风吹草动,那可是点个灯都有几万分之一的变化,啥没有就没有资格说别人的芯片不好。人家造芯片的难道会不清楚

redroof 发表于 2020-4-25 11:24:14

ibmx311 发表于 2020-4-25 11:00
实话说,你们贴的代码我一行都不看。你们都有什么条件测试adc啊。你输入的直流信号源的噪声和稳定度到底是 ...

老大,这就是个12位的内置AD而已,又不是什么高精度。随便弄个什么东西都够测它了。
确实精度很差,这是真的。我自己测过随便就会跳二三十个字,比103的AD差多了。
我用24位AD可以稳在18位,用18位的可以稳在16位。所以不用担心我画板子的能力。

redroof 发表于 2020-4-25 11:39:07

xfdr 发表于 2020-4-17 10:37
我也遇到了同样的问题,跳动真大
一个接地,一个接3.3V
ADC1 voltage = 0.000 V value = 0000


不大,哈哈,就是这个水平。
你自己采一大堆来滤波吧,反正这个AD很快。每一路采几十个点,滤一下,稳在千分之一还是没问题的。
103的AD是我见过的内置AD里面非常好的。407的反过来是非常差的。

z123 发表于 2020-4-25 12:09:21

rom 发表于 2017-12-30 16:09
407的ART加速影响ADC,勘误里面有写

x,这你都知道,厉害!

感觉这位老哥说的,估计就是原因所在了,知子莫若父,生产厂家出的勘误,应该是靠谱的。。。。

xml2028 发表于 2020-4-25 13:46:16

f4的adc都不行吗?

redroof 发表于 2020-4-25 13:48:23

xml2028 发表于 2020-4-25 13:46
f4的adc都不行吗?

不信的买个开发板试一下就行,很便宜的。

redroof 发表于 2020-4-25 13:59:19

z123 发表于 2020-4-25 12:09
x,这你都知道,厉害!

感觉这位老哥说的,估计就是原因所在了,知子莫若父,生产厂家出的勘误,应该是 ...

勘误表原本就是数据手册的一部分,每个做设计的人都应当看过手册加勘误表。
问题是关掉ART以后照样比103差,而且关掉ART会降低很多性能,有人测过差不多降一半吧。因为flash实际比cpu慢多了,ART相当于cache。
估计用407的人都是不在乎AD精度的,或者不知道103的AD相对而言那么好。。。

lee4diy 发表于 2020-4-25 14:02:08

redroof 发表于 2020-4-25 13:48
不信的买个开发板试一下就行,很便宜的。

官方板还是其他的板?

AlexYzhov 发表于 2020-4-25 14:17:51

PLL时钟质量对ADC的影响也很大。

rei1984 发表于 2020-4-25 14:22:58

肯定是官方板st discovery

redroof 发表于 2020-4-25 14:47:15

lee4diy 发表于 2020-4-25 14:02
官方板还是其他的板?

我认为常见的几家的开发板都行。这又不是什么很高级的东西,随便弄个就够了。

hdxet 发表于 2020-4-25 16:49:13

我这里并不是说F4的芯片如何不好,我也认为它不应该是这样的,只是遇到这种问题,希望找到解决方法。我能想到的方法都试过了,加速关掉与打开没发现区别,ADC的初始化各种参数都试过了,把系统时钟降到很低也不行。我的水平只能让103跳动在1-2个点,无法让它不跳动,当然是指单次采样值,不做滤波的情况下,但是407、405在几乎相同的设计中却有好几十点的跳动,开发板也是一样,无法理解,希望有经验的大神给指点指点,不胜感激

ibmx311 发表于 2020-4-25 21:08:16

试了一下H750,看看效果吧
链接:https://pan.baidu.com/s/1SaUQ4EHq_qnIo8MNbAtpTw
提取码:nvct

redroof 发表于 2020-4-25 21:10:09

hdxet 发表于 2020-4-25 16:49
我这里并不是说F4的芯片如何不好,我也认为它不应该是这样的,只是遇到这种问题,希望找到解决方法。我能想 ...

事实就是这样,很正确。
你能让103只跳一两个点,证明你的硬件做的ok,但是同样的用法在407上铁定是超过20个点。
将就用的方法就是多采一些自己软件滤波了。
单片机自带AD就是有好有差,不能不服啊,选了个差AD问有没有什么解决办法把它变好,肯定是没办法的。除非等ST重新设计。
最好的办法是别用它,或者是降低期望值,或者用之前先来这里问问别人的意见,再决定是不是一定要用这个片子。

ibmx311 发表于 2020-4-25 21:11:23

其实我搞不懂你们要干啥,要有精度就别快,要快就别要精度,又要快又要精度就拿钱来,这有什么可讨论的。我其实恨透了H750的破HAL库,那真是慢死了,但是要出个结果还是干了,之间喝了不知道多烧杯茶

scofiled 发表于 2020-4-25 21:15:34

407、405在几乎相同的设计中却有好几十点的跳动

redroof 发表于 2020-4-25 21:22:49

ibmx311 发表于 2020-4-25 21:11
其实我搞不懂你们要干啥,要有精度就别快,要快就别要精度,又要快又要精度就拿钱来,这有什么可讨论的。我 ...

我手机上没百度网盘,问一下您上面那个750实测的结果是怎么样的?
我相信您的结果应该够表示这个芯片自身的性能了

ibmx311 发表于 2020-4-25 21:25:28

redroof 发表于 2020-4-25 21:22
我手机上没百度网盘,问一下您上面那个750实测的结果是怎么样的?
我相信您的结果应该够表示这个芯片自身 ...

大约能做到25位吧

redroof 发表于 2020-4-25 21:29:30

ibmx311 发表于 2020-4-25 21:25
大约能做到25位吧

没搞错吧?
它标称只有16位而且16位状态下的性能并不好,只是快而已。

ibmx311 发表于 2020-4-25 21:35:37

有一种技术叫做过采样的,现在许多高分辨率的表也是8位高速adc做的。16位采集15000次做过采样足够了。其实做adc是模拟的,模拟电路本身没什么技术,就是堆钱堆器件,电阻动不动好几十一个,基准动不动就上百,运放也好几十块。电路虽然简单但是零件值钱

HZKJ 发表于 2020-4-25 21:39:02

ibmx311 发表于 2020-4-25 21:25
大约能做到25位吧

25bit??
过采样,让后使劲品均???

redroof 发表于 2020-4-25 21:50:35

ibmx311 发表于 2020-4-25 21:35
有一种技术叫做过采样的,现在许多高分辨率的表也是8位高速adc做的。16位采集15000次做过采样足够了。其实 ...

过采样也没这么过份的吧?提高个两三位还行,提高9位太夸张了。
而且芯片自身的INL限制应该是无法超越的啊。就算你稳定到25位,INL还是原来的,不知有没有15位。

ibmx311 发表于 2020-4-25 21:52:54

adc的实际用要看线性度,我也就试试,实际也不可能这么用

redroof 发表于 2020-4-25 22:04:06

ibmx311 发表于 2020-4-25 21:52
adc的实际用要看线性度,我也就试试,实际也不可能这么用

也就是说,不管三七二十一,强行平均15000次,证明用750的那个AD可以有办法稳在25位。哈哈
你的原始数据,单次的跳动量在多少个字呢?这个才是关键

ibmx311 发表于 2020-4-25 22:06:11

redroof 发表于 2020-4-25 22:04
也就是说,不管三七二十一,强行平均15000次,证明用750的那个AD可以有办法稳在25位。哈哈
你的原始数据 ...

全速13位

redroof 发表于 2020-4-25 22:11:44

本帖最后由 redroof 于 2020-4-25 22:31 编辑

ibmx311 发表于 2020-4-25 22:06
全速13位
那么厂家说明书里的标称值就没骗人。够了。

407说明书里的值现在还没改,我刚看了最新的datasheet,仍然写最大误差5个字。只是在勘误表里写了精度达不到标称值,然后勘误表又说详细内容参见某某AN文档,那个AN文档里终于列岀了真正的跳动值超过20个字{:titter:}感觉ST这么做不地道。折磨了一大堆不看完所有文档就动手做设计的人。。。

xml2028 发表于 2020-4-26 00:19:33

407的优势就是速度快,看来adc不行,要是h7有48腿或者64腿的就好了

flash3g 发表于 2020-4-26 01:09:48

xml2028 发表于 2020-4-26 00:19
407的优势就是速度快,看来adc不行,要是h7有48腿或者64腿的就好了

这么少脚点流水灯吗?

xml2028 发表于 2020-4-26 09:02:00

flash3g 发表于 2020-4-26 01:09
这么少脚点流水灯吗?

一些信号做数字信号处理,滤波等,反正没有液晶屏

ibmx311 发表于 2020-4-26 09:14:35

其实外挂的ADC很多,ad7705,ads1256,ads1259,都是不贵的选择,用的比较多的是国产的tm7705,简单便宜好用。通过压平均取得稳定的值并不是什么新鲜事情,你比如ads1256自己就可以把输出设置成每秒5次,这时候获得的电压值就非常稳定了。

ibmx311 发表于 2020-4-26 09:21:14

总之,ADC获得一定分辨率是不难的,难做到的是比较深入的研究和使用,比如说获得的值是否可用,线性如何这时候就需要大量的实验已经和高精度的仪表比对。3458A叫是德以后我就先后买过两台,其实测量结果真不一样,但平时也都是当6位半使用,确实比34401好用也稳定。随着各种仪器多起来,对于各种ADC的认识也就深了。你会深刻的理解到外挂adc随便就甩内置的好几条街,都已经使用内置了,就别有什么要求了

zirong0804 发表于 2020-4-26 12:55:20

hdxet 发表于 2020-4-25 16:49
我这里并不是说F4的芯片如何不好,我也认为它不应该是这样的,只是遇到这种问题,希望找到解决方法。我能想 ...

时隔2.5年,还能得到作者回复,这样帖子值得看看

redroof 发表于 2020-4-26 13:20:01

zirong0804 发表于 2020-4-26 12:55
时隔2.5年,还能得到作者回复,这样帖子值得看看

哈哈,楼主这么久了还不死心,非要我列岀厂家的文档告诉他真的就是芯片自己不行,不是他做的不对。
ST完全可以做岀一个很烂的AD,也敢把这样的东西量产。
相反103自带一个很好的AD反而是少见的情况。。。。
TI的模拟芯片水平比ST高多了,照样有做岀很烂的内置AD的情况,比如经典的2812 DSP,内置AD就很不准,哈哈,爱用不用,又没强迫你用,很多人都是外接一个高级AD的,不然它们的高级AD卖给谁。。。

轻风 发表于 2020-4-26 18:36:41

hdxet 发表于 2020-4-25 16:49
我这里并不是说F4的芯片如何不好,我也认为它不应该是这样的,只是遇到这种问题,希望找到解决方法。我能想 ...

10欧姆到Vdda的地方加个220uf的电解电容到地试试

redroof 发表于 2020-4-26 22:20:29

轻风 发表于 2020-4-26 18:36
10欧姆到Vdda的地方加个220uf的电解电容到地试试

加啥都没用。有用的话厂家写勘误表的时候早就写进去了,哈哈。
你不可能比厂家更知道该怎么做。
厂家已经弃疗了,那个AN里面在反复给你算用多少次平均可以把跳动降到什么程度,剩下多少采样率。。。
谁都知道多平均几次可以降低跳动啊。。。

ibmx311 发表于 2020-4-29 10:33:29

别的都不说你们找一个adc一秒钟出一百万个数据,然后非常稳,我觉得stm32 就已经做的很好了

ibmx311 发表于 2020-4-29 10:35:07

h750的adc我觉得还是满意的

trigrass12 发表于 2020-11-20 17:01:27

markoing......

Romate 发表于 2020-11-21 16:34:33

不要用开关电源试试 是不是进入地噪声了

hdxet 发表于 2020-11-21 17:02:55

Romate 发表于 2020-11-21 16:34
不要用开关电源试试 是不是进入地噪声了

用电池供电效果相同{:dizzy:} 没有连接任何外部设备,纯电池供电,专门写的程序,将输入端接地或接3.3V,12位采样,最慢的速度,误差超过100点亮灯,这个灯还是经常亮起

fengyunyu 发表于 2020-11-21 17:17:01

hdxet 发表于 2020-11-21 17:02
用电池供电效果相同 没有连接任何外部设备,纯电池供电,专门写的程序,将输入端接地或接3.3V, ...

看前面说20多点跳动,看来不止了

redroof 发表于 2020-11-21 19:15:45

fengyunyu 发表于 2020-11-21 17:17
看前面说20多点跳动,看来不止了

厂家写的勘误表里面很清楚啊,选型为什么不看勘误表呢?
人家已经告诉你了,我们的这个AD很差,你愿意用就用呗。不能赖人家。
虽然个人感觉ST这么做不够地道,不是直接在datasheet里写,而是专门弄了个文档来写这些。所以这个帖子里那么多人都没看到

风过不留痕z 发表于 2023-9-14 14:57:45

stm32H743的adc如何,有人测过吗
页: [1]
查看完整版本: 求助:STM32F407的ADC采样误差太大,如何解决?