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

YunTu Forum

YTMicro.com
  1. 主页
  2. Discussion & Question
  3. YTM32B1M系列
  4. YTM32B1ME05 ADC不稳问题

YTM32B1ME05 ADC不稳问题

已定时 已固定 已锁定 已移动 YTM32B1M系列
16 帖子 4 发布者 266 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • OliverChenO 离线
    OliverChenO 离线
    OliverChen
    回复了WR 最后由 编辑
    #4

    WR 如果有错位的情况,直接丢弃吗?为啥会出现这种情况?

    1 条回复 最后回复
    0
    • quanfengQ 离线
      quanfengQ 离线
      quanfeng YunTu
      编写于 最后由 编辑
      #5

      您可以在官网上下载 ME05 的应用审查清单,有 ADC FIFO 错乱的说明和规避方案

      9935bfff-e812-4ad3-8747-6d0f27a05214-image.png

      image.png

      ADC FIFO 错乱帖子链接如下:
      https://forum.ytmicro.com/topic/1058/md1_adc测试到fifo错位问题

      OliverChenO 2 条回复 最后回复
      0
      • OliverChenO 离线
        OliverChenO 离线
        OliverChen
        回复了quanfeng 最后由 编辑
        #6

        quanfeng 我使用的硬件触发,然后只打开了EOS中断,在中断中执行,也会出现这种情况吗?

        1 条回复 最后回复
        0
        • OliverChenO 离线
          OliverChenO 离线
          OliverChen
          编写于 最后由 编辑
          #7

          在ADC中断中每次读8次FIFO可以解决

          1 条回复 最后回复
          0
          • OliverChenO 离线
            OliverChenO 离线
            OliverChen
            回复了quanfeng 最后由 编辑
            #8

            quanfeng 忘记说了,下午重新验证了下,发现并没有通道错位情况,数据还是一样波动比较大。

            代码如下:

            /**
             * @brief ADC0 interrupt handler
             * @return none
             */
            void ADC0_IRQHandler(void)
            {
                uint32_t adcSampleSum = 0U;
                uint8_t expectedChannel = adcInst[UserAdcParams.pwmIndex][1];
                uint8_t validCnt = 0U;
            
                ADC_DRV_ClearEoseqFlagCmd(0);
                adcSampleSum = 0U;
            
            	for(uint8_t readCnt = 0U; readCnt < 8U; readCnt++) {
                    adcSampleResult[readCnt].u32DualWord = ADC0->FIFO;
                    if(readCnt < 4U)
                    {
                        if(adcSampleResult[readCnt].parts.u16ChnIndex == expectedChannel) {
                            adcSampleSum += adcSampleResult[readCnt].parts.u16ChnResult;
                            validCnt++;
                        } else {
                            misMatchFlag = true;
                        }
                    }
            
                }
            
                if (validCnt > 0U) {
                    updateAdcResult((uint16_t)(adcSampleSum / validCnt));
                } else {
                    updateAdcResult(0x8000);
                }
            
                
                if(adcSampleResult[4].parts.u16ChnIndex == ADC_INPUTCHAN_EXT17) {
                    UserAdcParams.boardSupplyVolt.rawAdcValue = adcSampleResult[4].parts.u16ChnResult;
                }else{
                    misMatchFlag = true;
                }
                if(adcSampleResult[5].parts.u16ChnIndex == ADC_INPUTCHAN_EXT18) {
                    UserAdcParams.ledSupplyVolt.rawAdcValue = adcSampleResult[5].parts.u16ChnResult;
                }else{
                    misMatchFlag = true;
                }
            }
            
            /**
             * @brief ADC1 interrupt handler
             * @return none
             */
            void ADC1_IRQHandler(void)
            {
                uint32_t adcSampleSum = 0U;
                uint8_t expectedChannel = adcInst[UserAdcParams.pwmIndex][1];
                uint8_t validCnt = 0U;
            
                ADC_DRV_ClearEoseqFlagCmd(1);
                for(uint8_t readCnt = 0U; readCnt < 8U; readCnt++) {
                    adcSampleResult[readCnt].u32DualWord = ADC1->FIFO;
                    if(readCnt < 4U){
                        if(adcSampleResult[readCnt].parts.u16ChnIndex == expectedChannel) {
                            adcSampleSum += adcSampleResult[readCnt].parts.u16ChnResult;
                            validCnt++;
                        } else {
                            misMatchFlag = true;
                        } 
                    }
                }
                if (validCnt > 0U) {
                    updateAdcResult((uint16_t)(adcSampleSum / validCnt));
                } else {
                    updateAdcResult(0x8000);
                }
            }
            
            

            进不到misMatchFlag 为true情况,采集到的数据波动比较大。
            b128dfb3-a1d3-4a43-bd30-8404cc65697f-image.png

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

              ADC 的配置是什么,贴一个

              OliverChenO 1 条回复 最后回复
              0
              • OliverChenO 离线
                OliverChenO 离线
                OliverChen
                回复了Diga 最后由 编辑
                #10

                Diga

                ADC0

                4fc6015a-c393-44d1-ae03-ea88a09ca89a-image.png

                ADC1

                fd74665d-107a-4261-bf91-188362449f62-image.png

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

                  先这样试试,你把俩序列的所有通道配成同一个,然后切换配置的时候不要修改通道,只切换 Trigger,看一下结果

                  OliverChenO 1 条回复 最后回复
                  0
                  • OliverChenO 离线
                    OliverChenO 离线
                    OliverChen
                    回复了Diga 最后由 编辑
                    #12

                    Diga

                    ADC0配置:

                    272a9caa-ba0c-4dec-83e0-d88d87a64219-image.png

                    ADC1配置

                    5e668428-4f6e-483d-9d8c-bdad26673548-image.png


                    代码

                    void user_adc_start_conversion(void)
                    {
                    	tmu_target_module_t targetModule = TMU_TARGET_MODULE_ADC1_EXT_TRIG;
                    	
                    	/* Configure ADC channel selection based on PWM index */
                    	if(adcInst[UserAdcParams.pwmIndex][0] == ADC1_INST) {
                    //		ADC1->CHSEL[0] = adcInst[UserAdcParams.pwmIndex][1];
                    //        ADC1->CHSEL[1] = adcInst[UserAdcParams.pwmIndex][1];
                    //        ADC1->CHSEL[2] = adcInst[UserAdcParams.pwmIndex][1];
                    //        ADC1->CHSEL[3] = adcInst[UserAdcParams.pwmIndex][1];
                    		targetModule = TMU_TARGET_MODULE_ADC1_EXT_TRIG;
                    	} else {
                    //		ADC0->CHSEL[0] = adcInst[UserAdcParams.pwmIndex][1];
                    //        ADC0->CHSEL[1] = adcInst[UserAdcParams.pwmIndex][1];
                    //        ADC0->CHSEL[2] = adcInst[UserAdcParams.pwmIndex][1];
                    //        ADC0->CHSEL[3] = adcInst[UserAdcParams.pwmIndex][1];
                    		targetModule = TMU_TARGET_MODULE_ADC0_EXT_TRIG;
                    	}
                    	
                    	/* Update TMU target module directly without reinitializing entire TMU
                    	 * This is more efficient than TMU_DRV_Init which resets all target modules
                    	 */
                        TMU->MUX[3] = 0;
                        TMU->MUX[4] = 0;
                        TMU_SetTrigSourceForTargetModule(TMU, TMU_TRIG_SOURCE_eTMR0_EXT_TRIG, targetModule);
                    }
                    
                    

                    结果如下
                    a69d9aba-5bfe-4fd4-9713-74c0a8eb7de2-image.png

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

                      你的这个结果是什么意思?ADC0 的 CH11?or ADC1 的 CH17?或者两者都有?
                      另外这两个通道的理想结果应该是多少

                      OliverChenO 1 条回复 最后回复
                      0
                      • OliverChenO 离线
                        OliverChenO 离线
                        OliverChen
                        回复了Diga 最后由 编辑
                        #14

                        Diga 不好意思,两者都有,所以看起来波动很大,这里我重新测了下,不切换的情况下很稳定上边这个是ADC1下边是ADC0,基本误差不差10

                        40b7e59b-6adf-4cb5-9c15-e1de134f3104-image.png

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

                          看起来你上一张图的下限 2900 应该是 ADC0 CH11 的结果,上限 3281 应该是 ADC1 CH17 的结果。那这两个通道的电压不一样,采样的结果不一样,不是一件正常的事嘛?

                          要证明在跳,得把两个结果区分出来

                          OliverChenO 1 条回复 最后回复
                          0
                          • OliverChenO 离线
                            OliverChenO 离线
                            OliverChen
                            回复了Diga 最后由 编辑
                            #16

                            Diga 理解你的意思了,我再试试

                            1 条回复 最后回复
                            0

                          • 云途开发生态介绍

                            快速上手云途开发生态

                          • 云途论坛规则/Yuntu Forum Rules

                            发帖前请查看

                          • YT CONFIG TOOL调查问卷

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

                          • can
                            22
                            demo
                            20
                            uds
                            13
                            lin stack
                            11
                            md14
                            6
                            fbl
                            5
                            yt-link
                            5
                            adc模块
                            4
                            Online Users
                            orangejayccO
                            orangejaycc
                            WRW
                            WR
                            LlllllL
                            Llllll
                            • 登录

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