跳转至内容
  • 版块
  • 最新
  • 标签
  • 热门
折叠
品牌标识

YunTu Forum

YTMicro.com
  1. 主页
  2. Discussion & Question
  3. YTM32B1H系列
  4. ADC采样不准

ADC采样不准

已定时 已固定 已锁定 已移动 未解决 YTM32B1H系列
3 帖子 3 发布者 65 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • xiepenghanX 离线
    xiepenghanX 离线
    xiepenghan
    编写于 最后由 编辑
    #1

    目前情况为:对于ADC0分配了三个通道 ADC1分配了一个通道,其中ADC0的ADC_INPUTCHAN_EXT25和ADC1的ADC_INPUTCHAN_EXT21是不准确(前者偏差0.7v,后者偏差0.4v),ADC0的ADC_INPUTCHAN_EXT14和ADC_INPUTCHAN_EXT19是准确的
    具体配置如下:

    const adc_converter_config_t adc_config0={
        .clockDivider=0,
        .startTime=12,
        .sampleTime=16,
        .overrunMode=false,
        .autoOffEnable=false,
        .waitEnable=false,
        .trigger=ADC_TRIGGER_SOFTWARE,
        .align=ADC_ALIGN_RIGHT,
        .resolution=ADC_RESOLUTION_12BIT,
        .dmaWaterMark=0,
        .dmaEnable=false,
        .sequenceConfig={
            .sequenceMode=ADC_CONV_STEP,
            .sequenceIntEnable=true,
            .convIntEnable=false,
            .readyIntEnable=false,
            .ovrunIntEnable=false,
            .sampIntEnable=false,
            .channels={
                ADC_INPUTCHAN_EXT14,
                ADC_INPUTCHAN_EXT19,
                ADC_INPUTCHAN_EXT25,
            },
            .totalChannels=3,
        },
        .adcCompareCnt=0,
    };
    
    const adc_converter_config_t adc_config1={
        .clockDivider=0,
        .startTime=12,
        .sampleTime=16,
        .overrunMode=false,
        .autoOffEnable=false,
        .waitEnable=false,
        .trigger=ADC_TRIGGER_SOFTWARE,
        .align=ADC_ALIGN_RIGHT,
        .resolution=ADC_RESOLUTION_12BIT,
        .dmaWaterMark=0,
        .dmaEnable=false,
        .sequenceConfig={
            .sequenceMode=ADC_CONV_STEP,
            .sequenceIntEnable=true,
            .convIntEnable=false,
            .readyIntEnable=false,
            .ovrunIntEnable=false,
            .sampIntEnable=false,
            .channels={
                ADC_INPUTCHAN_EXT21,
            },
            .totalChannels=1,
        },
        .adcCompareCnt=0,
    };
    
    /* ADC0通道配置数组 - 单通道独立配置 */
    const adc_sequence_config_t adc0_ChnConfigArray[8] = {
        /* 通道0: PTC_16 -> ADC0_S14 -> EXT14 (ON_AD功能) */
        {
            .sequenceIntEnable  = false,
            .convIntEnable      = false,
            .readyIntEnable     = false,
            .ovrunIntEnable     = false,
            .sampIntEnable      = false,
            .sequenceMode       = ADC_CONV_STEP,
            .channels           = { ADC_INPUTCHAN_EXT14 },
            .totalChannels      = 1,
        },
        /* 通道1: PTB_22 -> ADC0_S19 -> EXT19 (ACC_AD功能) */
        {
            .sequenceIntEnable  = false,
            .convIntEnable      = false,
            .readyIntEnable     = false,
            .ovrunIntEnable     = false,
            .sampIntEnable      = false,
            .sequenceMode       = ADC_CONV_STEP,
            .channels           = { ADC_INPUTCHAN_EXT19 },
            .totalChannels      = 1,
        },
        /* 通道2: PTB_9 -> ADC0_S25 -> EXT25 (备用) */
        {
            .sequenceIntEnable  = false,
            .convIntEnable      = false,
            .readyIntEnable     = false,
            .ovrunIntEnable     = false,
            .sampIntEnable      = false,
            .sequenceMode       = ADC_CONV_STEP,
            .channels           = { ADC_INPUTCHAN_EXT25 },
            .totalChannels      = 1,
        },
        // /* 通道3-7: 备用通道 */
        // { .sequenceIntEnable=false, .convIntEnable=false, .readyIntEnable=false, .ovrunIntEnable=false, .sampIntEnable=false, .sequenceMode=ADC_CONV_STEP, .channels={ ADC_INPUTCHAN_EXT0 }, .totalChannels=1 },
        // { .sequenceIntEnable=false, .convIntEnable=false, .readyIntEnable=false, .ovrunIntEnable=false, .sampIntEnable=false, .sequenceMode=ADC_CONV_STEP, .channels={ ADC_INPUTCHAN_EXT0 }, .totalChannels=1 },
        // { .sequenceIntEnable=false, .convIntEnable=false, .readyIntEnable=false, .ovrunIntEnable=false, .sampIntEnable=false, .sequenceMode=ADC_CONV_STEP, .channels={ ADC_INPUTCHAN_EXT0 }, .totalChannels=1 },
        // { .sequenceIntEnable=false, .convIntEnable=false, .readyIntEnable=false, .ovrunIntEnable=false, .sampIntEnable=false, .sequenceMode=ADC_CONV_STEP, .channels={ ADC_INPUTCHAN_EXT0 }, .totalChannels=1 },
        // { .sequenceIntEnable=false, .convIntEnable=false, .readyIntEnable=false, .ovrunIntEnable=false, .sampIntEnable=false, .sequenceMode=ADC_CONV_STEP, .channels={ ADC_INPUTCHAN_EXT0 }, .totalChannels=1 },
        // { .sequenceIntEnable=false, .convIntEnable=false, .readyIntEnable=false, .ovrunIntEnable=false, .sampIntEnable=false, .sequenceMode=ADC_CONV_STEP, .channels={ ADC_INPUTCHAN_EXT0 }, .totalChannels=1 },
        // { .sequenceIntEnable=false, .convIntEnable=false, .readyIntEnable=false, .ovrunIntEnable=false, .sampIntEnable=false, .sequenceMode=ADC_CONV_STEP, .channels={ ADC_INPUTCHAN_EXT0 }, .totalChannels=1 },
    };
    
    /* ADC1通道配置数组 - 顺序与adc_config1的channels列表保持一致 */
    const adc_sequence_config_t adc1_ChnConfigArray[8] = {
        /* 通道0: PTD_27 -> ADC1_S21 -> EXT21 (5V_AD功能) */
        {
            .sequenceIntEnable  = false,
            .convIntEnable      = false,
            .readyIntEnable     = false,
            .ovrunIntEnable     = false,
            .sampIntEnable      = false,
            .sequenceMode       = ADC_CONV_STEP,
            .channels           = { ADC_INPUTCHAN_EXT21 },
            .totalChannels      = 1,
        },
        // /* 通道1-4: 原INPUT1~4通道,已停用 */
        // { .sequenceIntEnable=false, .convIntEnable=false, .readyIntEnable=false, .ovrunIntEnable=false, .sampIntEnable=false, .sequenceMode=ADC_CONV_STEP, .channels={ ADC_INPUTCHAN_EXT0 }, .totalChannels=1 },
        // { .sequenceIntEnable=false, .convIntEnable=false, .readyIntEnable=false, .ovrunIntEnable=false, .sampIntEnable=false, .sequenceMode=ADC_CONV_STEP, .channels={ ADC_INPUTCHAN_EXT0 }, .totalChannels=1 },
        // { .sequenceIntEnable=false, .convIntEnable=false, .readyIntEnable=false, .ovrunIntEnable=false, .sampIntEnable=false, .sequenceMode=ADC_CONV_STEP, .channels={ ADC_INPUTCHAN_EXT0 }, .totalChannels=1 },
        // { .sequenceIntEnable=false, .convIntEnable=false, .readyIntEnable=false, .ovrunIntEnable=false, .sampIntEnable=false, .sequenceMode=ADC_CONV_STEP, .channels={ ADC_INPUTCHAN_EXT0 }, .totalChannels=1 },
        // { .sequenceIntEnable=false, .convIntEnable=false, .readyIntEnable=false, .ovrunIntEnable=false, .sampIntEnable=false, .sequenceMode=ADC_CONV_STEP, .channels={ ADC_INPUTCHAN_EXT0 }, .totalChannels=1 },
        // /* 通道5-7: 备用通道 */
        // { .sequenceIntEnable=false, .convIntEnable=false, .readyIntEnable=false, .ovrunIntEnable=false, .sampIntEnable=false, .sequenceMode=ADC_CONV_STEP, .channels={ ADC_INPUTCHAN_EXT0 }, .totalChannels=1 },
        // { .sequenceIntEnable=false, .convIntEnable=false, .readyIntEnable=false, .ovrunIntEnable=false, .sampIntEnable=false, .sequenceMode=ADC_CONV_STEP, .channels={ ADC_INPUTCHAN_EXT0 }, .totalChannels=1 },
        // { .sequenceIntEnable=false, .convIntEnable=false, .readyIntEnable=false, .ovrunIntEnable=false, .sampIntEnable=false, .sequenceMode=ADC_CONV_STEP, .channels={ ADC_INPUTCHAN_EXT0 }, .totalChannels=1 },
    };
    

    调用情况如下

    int16_t HAL_ADC_GetValue(uint32_t instance, uint8_t chn)
    {
    	uint32_t convtime = 0;
        uint16_t value;
    	/* 根据ADC实例选择对应的配置数组 */
    	const adc_sequence_config_t *chnConfig;
    	if (instance == INST_ADC0) {
    		chnConfig = &adc0_ChnConfigArray[chn];
    	} else if (instance == INST_ADC1) {
    		chnConfig = &adc1_ChnConfigArray[chn];
    	} else {
    		return -1;  // 无效的ADC实例
    	}
    	ADC_DRV_ConfigSequence(instance, chnConfig);
    	ADC_DRV_Start(instance);
    	while(!ADC_DRV_GetEndOfSequenceFlag(instance))
    	{
            /* AD值采集超时,避免死循环等待 */
    		if (++convtime >= ADC_TIMEOUT) {
                return -1;
    		}
    	}
        ADC_DRV_ClearEoseqFlagCmd(instance);
        value =  ADC_DRV_ReadFIFO(instance);
        return value;
    }
    

    打印出来的FIFO如下图 ADC0和ADC1是准确的 ADC3和ADC4分别有0.7v和0.4v的偏差
    34b52204-55ef-449c-a1a1-588615b85d60-image.png

    1 条回复 最后回复
    0
    • 李富贵李 离线
      李富贵李 离线
      李富贵 YunTu
      编写于 最后由 编辑
      #2

      参考下36页[E600002]YTM32B1HA0_Errata_Sheet_v1.6.pdf

      1 条回复 最后回复
      0
      • yangkeY 离线
        yangkeY 离线
        yangke YunTu
        编写于 最后由 编辑
        #3

        可以参考这份帖子做一些检查:https://forum.ytmicro.com/topic/444/adc采样漂移或不准问题排查方法?_=1787729289090

        1 条回复 最后回复
        0

      • 云途开发生态介绍

        快速上手云途开发生态

      • 云途论坛规则/Yuntu Forum Rules

        发帖前请查看

      • YT CONFIG TOOL调查问卷

        帮助改进和优化YT CONFIG TOOL,有机会抽取YTM32B1ME0 EVB哦...

      • can
        28
        demo
        26
        uds
        14
        lin stack
        13
        fbl
        6
        md14
        6
        yt-link
        6
        adc模块
        4
        Online Users
        swordsS
        swords
        WRW
        WR
        lvttL
        lvtt
        • 登录

        • 登录或注册以进行搜索。
        • 第一个帖子
          最后一个帖子
        0
        • 版块
        • 最新
        • 标签
        • 热门