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

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 发布者 2.3k 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • 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
    • DigaD 离线
      DigaD 离线
      Diga
      写于 最后由 编辑
      #8

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

      1 条回复 最后回复
      -1
      • 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 条回复 最后回复
                    -1
                    • ,FrankieF Frankie 将这个主题转为问答主题
                    • ,FrankieF Frankie 将这个主题标记为已解决

                  • 云途开发生态介绍

                    快速上手云途开发生态

                  • 云途论坛规则/Yuntu Forum Rules

                    发帖前请查看

                  • YT CONFIG TOOL调查问卷

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

                  • can
                    25
                    demo
                    22
                    lin stack
                    13
                    uds
                    13
                    md14
                    6
                    yt-link
                    6
                    fbl
                    5
                    adc模块
                    4
                    Online Users
                    OliverChenO
                    OliverChen
                    • 登录

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