Sam131208 发表于 2024-4-10 11:53

HC32L136 使用ADC测量AVCC/3电压时,电流异常

本帖最后由 Sam131208 于 2024-4-10 12:02 编辑

   HC32L136使用ADC时,测量AVCC电压,选择AdcAVccdiv3Input 通道, 睡眠电流为11uA.改为AdcExInputCH10 通道测试,睡眠电流为3uA.   请问使用AdcAVccdiv3Input 通道时,如何正确进入睡眠?

void adc_start(void){
      stc_adc_cfg_t        stcAdcCfg;

                ///< 开启ADC/BGR 外设时钟
                Sysctrl_SetPeripheralGate(SysctrlPeripheralAdcBgr, TRUE);
                Bgr_BgrEnable();      ///< 开启BGR

                DDL_ZERO_STRUCT(stcAdcCfg);
                ///< ADC 初始化配置
                stcAdcCfg.enAdcMode         = AdcSglMode;               ///<采样模式-单次
                stcAdcCfg.enAdcClkDiv       = AdcMskClkDiv2;            ///<采样分频-1
                stcAdcCfg.enAdcSampCycleSel = AdcMskSampCycle12Clk;   ///<采样周期数-12
                stcAdcCfg.enAdcRefVolSel    = AdcMskRefVolSelInBgr2p5;///<参考电压选择-内部2.5V
                stcAdcCfg.enAdcOpBuf      = AdcMskBufDisable;         ///<OP BUF配置-关
                stcAdcCfg.enInRef         = AdcMskInRefEnable;      ///<内部参考电压使能-开
                stcAdcCfg.enAdcAlign      = AdcAlignRight;            ///<转换结果对齐方式-右
                Adc_Init(&stcAdcCfg);

      ///< ADC 中断使能
      Adc_EnableIrq();
      EnableNvic(ADC_IRQn, IrqLevel3, TRUE);

                ///< ADC 采样通道配置
                Adc_CfgSglChannel(AdcAVccdiv3Input);    //AdcExInputCH10, AdcAVccdiv3Input

                ///< 启动单次转换采样
                Adc_SGL_Start();
}

void Adc_IRQHandler(void)
{
    if(TRUE == Adc_GetIrqStatus(AdcMskIrqSgl))
    {
      Adc_ClrIrqStatus(AdcMskIrqSgl);       ///< 清除中断标志位
      mSensor.value = Adc_GetSglResult();   ///< 获取采样值
      Adc_SGL_Stop();                     ///< ADC 单次转换停止
                Adc_Disable();
                Bgr_BgrDisable();
      Sysctrl_SetPeripheralGate(SysctrlPeripheralAdcBgr, FALSE);
    }
}

804879880 发表于 2024-4-10 15:27

若休眠前没有将adc的部分设置下,会发现休眠功耗非常高。

      M0P_ADC->CR0|=0xFFFFF7FF;
      
或许每个人的情况不同,但我的确实是调用这3个会降低休眠的功耗。

重点是同样是上面部分,其实就是将上面开启的enAdcOpBuf关了,但是往往很多人会忘了,这个若不关的话,休眠功耗会增加个十几ua

Sam131208 发表于 2024-4-10 16:41

可能是内部的硬件连接问题, 在关闭ADC前,把通道改为其它通道,为了避免未知的麻烦,设置为内部温度传感器通道。睡眠电流掉到3uA.
...
Adc_SGL_Stop();
Adc_CfgSglChannel(AdcAiTsInput);
Adc_Disable();
...

xch 发表于 2024-4-10 16:57

分压电阻漏电

yang377156216 发表于 2024-4-11 11:06

///< 关闭 PLL
    M0P_SYSCTRL->SYSCTRL2 = 0x5A5A;
    M0P_SYSCTRL->SYSCTRL2 = 0xA5A5;
    M0P_SYSCTRL->SYSCTRL0_f.PLL_EN = FALSE;
    ///< 关闭 BGR
    M0P_SYSCTRL->PERI_CLKEN0_f.ADC = TRUE;
    M0P_BGR->CR_f.BGR_EN = FALSE;
    M0P_SYSCTRL->PERI_CLKEN0_f.ADC = FALSE;
可能需要注意,关闭 PLL/BGR/ADC 的正确姿势。
页: [1]
查看完整版本: HC32L136 使用ADC测量AVCC/3电压时,电流异常