打印
[技术问答]

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

[复制链接]
1719|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Sam131208|  楼主 | 2024-4-10 11:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 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 | 只看该作者
分压电阻漏电

使用特权

评论回复
5
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 的正确姿势。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

29

主题

93

帖子

0

粉丝