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

YunTu Forum

YTMicro.com
  1. 主页
  2. Discussion & Question
  3. YTM32B1L系列
  4. [YT32B1LE05]采样ADC DMA的方式获取ADC数据,其ADC值出现了4095的情况

[YT32B1LE05]采样ADC DMA的方式获取ADC数据,其ADC值出现了4095的情况

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

    d4c93724-b65f-4c4e-98b7-305f16458a2e-image.png
    1b20ec19-5666-4c76-82eb-fbde5dca87ba-image.png
    59d1132c-208b-465d-b291-64654fb68925-image.png
    f35afc05-2b74-45ad-b91d-2c2cea2fe853-image.png
    f1af2ca8-b226-465a-8061-b3602e9508ac-image.png

    无论是单个通道还是多个通道,在某个时候采集的ADC值出现了4095的情况,怎么处理?谢谢~

    1 条回复 最后回复
    0
    • ryw3509R 离线
      ryw3509R 离线
      ryw3509
      写于 最后由 编辑
      #2

      在1ms的定时任务中加入了:
      ADC_DRV_Start(ADC_INST);

      在10ms的定时任务获取ADC的值并打印出来。

      1 条回复 最后回复
      0
      • ryw3509R 离线
        ryw3509R 离线
        ryw3509
        写于 最后由 编辑
        #3

        /* adc_config0 */
        const adc_converter_config_t adc_config0={
        .clockDivider=0,
        .startTime=32,
        .sampleTime=5,
        .overrunMode=false,
        .autoOffEnable=false,
        .waitEnable=false,
        .trigger=ADC_TRIGGER_SOFTWARE,
        .align=ADC_ALIGN_RIGHT,
        .resolution=ADC_RESOLUTION_12BIT,
        .dmaWaterMark=2,
        .dmaEnable=true,
        .sequenceConfig={
        .sequenceMode=ADC_CONV_LOOP,
        .sequenceIntEnable=true,
        .convIntEnable=false,
        .readyIntEnable=false,
        .ovrunIntEnable=false,
        .sampIntEnable=false,
        .channels={
        ADC_INPUTCHAN_EXT2,
        ADC_INPUTCHAN_EXT4,
        ADC_INPUTCHAN_EXT5,
        },
        .totalChannels=3,
        },
        .compareConfig={
        .compareEnable=false,
        .compareAllChannelEnable=false,

            .compHigh=4095,
            .compLow=0,
            .compIntEnable=false,
        },
        

        };

        1 条回复 最后回复
        0
        • ryw3509R 离线
          ryw3509R 离线
          ryw3509
          写于 最后由 编辑
          #4

          ADC_Init接口函数:

          ADC_DRV_ConfigConverter(0,&adc_config0);
          DMA_DRV_Init(&dmaState,&dmaController_InitConfig,dmaChnState,dmaChnConfigArray,NUM_OF_CONFIGURED_DMA_CHANNEL);

          /* Initiate DMA Loop Transfer */
          adcTransferConfig.srcAddr = (uint32_t)&ADC0->FIFO;
          adcTransferConfig.destAddr = (uint32_t)&g_adc_result[0U];

          DMA_DRV_ConfigLoopTransfer(0U, &adcTransferConfig);
          DMA_DRV_StartChannel(0U);

          1 条回复 最后回复
          0
          • ryw3509R 离线
            ryw3509R 离线
            ryw3509
            写于 最后由 编辑
            #5

            const dma_channel_config_t dma_config0 = {
            .virtChnConfig=0,
            .source=DMA_REQ_ADC0,
            .callback=NULL,
            .callbackParam=NULL,
            };

            const dma_channel_config_t *const dmaChnConfigArray[NUM_OF_CONFIGURED_DMA_CHANNEL] = {
            &dma_config0,
            };

            const dma_user_config_t dmaController_InitConfig = {
            .haltOnError = false
            };

            dma_chn_state_t dma_config0_State;

            dma_chn_state_t *const dmaChnState[NUM_OF_CONFIGURED_DMA_CHANNEL]={
            &dma_config0_State,
            };

            dma_state_t dmaState;

            dma_loop_transfer_config_t adcTransferConfigLoopConfig = {
            .triggerLoopIterationCount=10,
            .srcOffsetEnable=false,
            .dstOffsetEnable=true,
            .triggerLoopOffset=-16,
            .transferLoopChnLinkEnable=false,
            .transferLoopChnLinkNumber=0,
            .triggerLoopChnLinkEnable=false,
            .triggerLoopChnLinkNumber=0,
            };

            dma_transfer_config_t adcTransferConfig = {
            .srcAddr=(uint32_t)0,
            .destAddr=(uint32_t)0,
            .srcOffset=0,
            .destOffset=0x02U,
            .srcTransferSize=DMA_TRANSFER_SIZE_2B,
            .destTransferSize=DMA_TRANSFER_SIZE_2B,
            .srcModulo=DMA_MODULO_OFF,
            .destModulo=DMA_MODULO_OFF,
            .transferLoopByteCount=16,
            .srcLastAddrAdjust=0,
            .destLastAddrAdjust=-16,
            .interruptEnable=false,
            .loopTransferConfig=&adcTransferConfigLoopConfig,
            };

            1 条回复 最后回复
            -1
            • DigaD 离线
              DigaD 离线
              Diga
              写于 最后由 编辑
              #6

              配置截图跟生成代码不太一致,DMA 的 watermark 应该设置为 1

              ryw3509R 1 条回复 最后回复
              0
              • ryw3509R 离线
                ryw3509R 离线
                ryw3509
                在 回复了 Diga 最后由 编辑
                #7

                Diga 你好,你说的配置和截图不一致,我这里截图和配置是复制的时候手误造成的,按照截图所述配置ADC0_SE2和ADC0_SE4,其.dmaWaterMark=1,这个应该是没有问题的。

                无论是单通道还是多通道采样,都出现了adc值为4095的现象。

                还请协助给看下问题的排查方向,谢谢~

                1 条回复 最后回复
                0
                • DigaD 离线
                  DigaD 离线
                  Diga
                  写于 最后由 编辑
                  #8

                  可以开一下 AWDG 的中断,当转换出来的结果为 0xFFF时,进入中断,看一下当前 ADC 的状态。不过怀疑可能是读空值,即当 ADC FIFO 为空时,仍去读取 ADC FIFO 值。
                  另外可以参考下这个
                  https://forum.ytmicro.com/topic/444/adc采样漂移或不准问题排查方法

                  1 条回复 最后回复
                  0

                • 云途论坛规则/Yuntu Forum Rules

                  发帖前请查看

                • YCT离线License申请流程

                  帮助没办法联网的电脑使用YCT

                • YT CONFIG TOOL调查问卷

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

                • demo
                  12
                  can
                  9
                  lin stack
                  6
                  yt-link
                  5
                  vscode
                  3
                  adc模块
                  2
                  i2c
                  2
                  uuid
                  2
                  Online Users
                  jankyJ
                  janky
                  kasselK
                  kassel
                  YTCQ_shejiwangY
                  YTCQ_shejiwang
                  DavidBLD
                  DavidBL
                  • 登录

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