Chen_blue7 发表于 2023-4-18 17:40:27

ADC采集多路电压问题

现在我使用STC8A8K64D4,同时采集15路的电压,但是采集信号是方波信号。



在只使用一个通道采集时,可以确保每次都能采集到最低点和最高点,采集正常,如下图

但是多通道采集的时候,总是没法采集到


使用的例程是移植STC8H的03案例


下面是AD的配置参数代码

/******************* AD配置函数 *******************/
void        ADC_config(void)
{
        ADC_InitTypeDef                ADC_InitStructure;                //结构定义
        ADC_InitStructure.ADC_SMPduty   = 15;                //ADC 模拟信号采样时间控制, 0~31(注意: SMPDUTY 一定不能设置小于 10)
        ADC_InitStructure.ADC_CsSetup   = 0;                //ADC 通道选择时间控制 0(默认),1
        ADC_InitStructure.ADC_CsHold    = 1;                //ADC 通道选择保持时间控制 0,1(默认),2,3
        ADC_InitStructure.ADC_Speed   = ADC_SPEED_2X1T;                //设置 ADC 工作时钟频率        ADC_SPEED_2X1T~ADC_SPEED_2X16T
        ADC_InitStructure.ADC_Power   = ENABLE;                                //ADC功率允许/关闭        ENABLE,DISABLE
        ADC_InitStructure.ADC_AdjResult = ADC_RIGHT_JUSTIFIED;        //ADC结果调整,        ADC_LEFT_JUSTIFIED,ADC_RIGHT_JUSTIFIED
        ADC_InitStructure.ADC_Priority    = Priority_0;                        //指定中断优先级(低到高) Priority_0,Priority_1,Priority_2,Priority_3
        ADC_InitStructure.ADC_Interrupt = DISABLE;                        //中断允许        ENABLE,DISABLE
        ADC_Inilize(&ADC_InitStructure);                                        //初始化
        ADC_PowerControl(ENABLE);                                                        //单独的ADC电源操作函数, ENABLE或DISABLE
}


请问有什么方法解决吗

乘风飞扬 发表于 2023-4-18 18:22:06

多通道轮询采样时建议降低采样频率,将通道选择时间、保持时间、采样时间控制等调大试试。
另外,切换通道后可先读一次并丢弃结果, 让内部的采样电容的电压等于输入值。

神农鼎 发表于 2023-4-18 19:38:37

采样时间要够,你将采样时间先设置到最大
===另外你原理图的PDF发上来

Chen_blue7 发表于 2023-4-19 15:04:39

乘风飞扬 发表于 2023-4-18 18:22
多通道轮询采样时建议降低采样频率,将通道选择时间、保持时间、采样时间控制等调大试试。
另外,切换通道 ...

感谢,切换通道后丢弃一次结果,采集正常

Chen_blue7 发表于 2023-4-19 15:05:40

神农鼎 发表于 2023-4-18 19:38
采样时间要够,你将采样时间先设置到最大
===另外你原理图的PDF发上来

已解决,感谢答复,在采样时间加到最大后,每次轮询通道都丢第一次结果,采集正常

神农鼎 发表于 2023-4-19 17:41:00

采样时间要够,你将采样时间如已设置到最大,你还要丢1次数据?????????????????????
===那你电路严重不合理
===另外你实际焊接的原理图的PDF不发上来,谁能发现你错在哪

我是不认可 多采样/转换N次,丢N次,当延长采样时间的

神农鼎 发表于 2023-4-19 17:42:44

采样实际 就是 【外面1个等效电容】 通过1个【等效电阻】 和【内部的采样电容】互相充放电

借用下面这个夸张的示意图,手头没合适的图:
C24是MCU内部的ADC采样保持电容/17pF;
R110是MCU的内部通道等效电阻,可能是 700欧 + 200欧的MCU内部走线电阻
C25是外部输入信号源;
C24和C25如采样时间不够/就是互相充放电时间不够,
那内外2个电容的电位还没相等,你就关闭采样进行转换,那转换出来的值就不是外部C25的电位,
而只是和C25不等的C24当时的电位 !!! 当然就不是外部的电位了
减小外部 C25和R108, 缩短充放电时间
https://www.stcaimcu.com/data/attachment/forum/202303/08/145425xkmtkkzp6tzgkx0x.png

梁工 发表于 2023-4-27 15:24:16

楼主能否说明你这15路方波的频率?
假设方波频率最高为fmax,而采样速度至少要2倍,连续采15路,则采样速度至少为 fmax * 2*15=fmax *30,即至少使用方波频率的30倍以上(实际4倍频60倍以上更好)。

独风轻扬 发表于 2024-5-7 22:16:58

我碰到的问题是,设置采集ADC_CH2和ADC_CH3,电源加到ADC_CH2,数值没有变化,加到ADC_CH3,CH2和CH3的值都有变化,一个是2.5V,一个是3.3V,目前还没有解决....有经验的大神麻烦知道下?

梁工 发表于 2024-5-9 10:09:17

独风轻扬 发表于 2024-5-7 22:16
我碰到的问题是,设置采集ADC_CH2和ADC_CH3,电源加到ADC_CH2,数值没有变化,加到ADC_CH3,CH2和CH3的值都有变 ...

先用官方的ADC测试下,串口返回结果。
页: [1]
查看完整版本: ADC采集多路电压问题