[牛人杂谈] M261的主电源切换方法

[复制链接]
705|6
 楼主| 734774645 发表于 2020-2-20 18:26 | 显示全部楼层 |阅读模式
120855e4e5d911633d.png
469485e4e5d9eb2b3e.png
在手册360页有提到选择位的寄存器位置。
然后查看头文件,找到DCDC关键字。
184275e4e5ded34f05.png
  1. /*---------------------------------------------------------------------------------------------------------*/
  2. /*  PLCTL constant definitions. (Write-Protection Register)                                                */
  3. /*---------------------------------------------------------------------------------------------------------*/
  4. #define SYS_PLCTL_PLSEL_PL0     (0x0UL<<SYS_PLCTL_PLSEL_Pos)   /*!< Set power level to power level 0 */
  5. #define SYS_PLCTL_PLSEL_PL1     (0x1UL<<SYS_PLCTL_PLSEL_Pos)   /*!< Set power level to power level 1 */
  6. #define SYS_PLCTL_MVRS_LDO      (0x0UL<<SYS_PLCTL_MVRS_Pos)    /*!< Set main voltage regulator type to LDO */
  7. #define SYS_PLCTL_MVRS_DCDC     (0x1UL<<SYS_PLCTL_MVRS_Pos)    /*!< Set main voltage regulator type to DCDC */
然后找对应的.c
806105e4e5e1b13126.png
  1. /**
  2.   * [url=home.php?mod=space&uid=247401]@brief[/url]      Set Main Voltage Regulator Type
  3.   * @param[in]  u32PowerRegulator is main voltage regulator type. Including :
  4.   *             - \ref SYS_PLCTL_MVRS_LDO
  5.   *             - \ref SYS_PLCTL_MVRS_DCDC
  6.   * @retval     0  main voltage regulator type setting is not finished
  7.   * @retval     1  main voltage regulator type setting is finished
  8.   * [url=home.php?mod=space&uid=1543424]@Details[/url]    This function set main voltage regulator type.
  9.   *             The main voltage regulator type setting to DCDC cannot finished if the inductor is not detected.
  10.   *             The register write-protection function should be disabled before using this function.
  11.   */
  12. uint32_t SYS_SetPowerRegulator(uint32_t u32PowerRegulator)
  13. {
  14.     int32_t i32TimeOutCnt = 400;
  15.     uint32_t u32Ret = 1U;
  16.     uint32_t u32PowerRegStatus;

  17.     /* Get main voltage regulator type status */
  18.     u32PowerRegStatus = SYS->PLSTS & SYS_PLSTS_CURMVR_Msk;

  19.     /* Set main voltage regulator type */
  20.     if((u32PowerRegulator == SYS_PLCTL_MVRS_DCDC) && (u32PowerRegStatus == SYS_PLSTS_CURMVR_LDO))
  21.     {

  22.         /* Set main voltage regulator type to DCDC if status is LDO */
  23.         SYS->PLCTL |= SYS_PLCTL_MVRS_Msk;

  24.         /* Wait induction detection and main voltage regulator type change ready */
  25.         while((SYS->PLSTS & SYS_PLSTS_CURMVR_Msk) != SYS_PLSTS_CURMVR_DCDC)
  26.         {
  27.             if(i32TimeOutCnt-- <= 0)
  28.             {
  29.                 u32Ret = 0U;    /* Main voltage regulator type change time-out */
  30.                 break;
  31.             }
  32.         }

  33.     }
  34.     else if(u32PowerRegulator == SYS_PLCTL_MVRS_LDO)
  35.     {

  36.         /* Set main voltage regulator type to LDO if status is DCDC */
  37.         SYS->PLCTL &= (~SYS_PLCTL_MVRS_Msk);

  38.         /* Wait main voltage regulator type change ready */
  39.         while((SYS->PLSTS & SYS_PLSTS_CURMVR_Msk) != SYS_PLSTS_CURMVR_LDO)
  40.         {
  41.             if(i32TimeOutCnt-- <= 0)
  42.             {
  43.                 u32Ret = 0U;    /* Main voltage regulator type change time-out */
  44.                 break;
  45.             }
  46.         }

  47.     }

  48.     /* Clear main voltage regulator type change error flag */
  49.     if(SYS->PLSTS & SYS_PLSTS_MVRCERR_Msk)
  50.     {
  51.         SYS->PLSTS = SYS_PLSTS_MVRCERR_Msk;
  52.         u32Ret = 0U;
  53.     }

  54.     return u32Ret;
  55. }


 楼主| 734774645 发表于 2020-2-20 18:27 | 显示全部楼层
这样就可以在LDO和DCDC之间选择了,可以降低功耗。
 楼主| 734774645 发表于 2020-2-20 18:28 | 显示全部楼层
Regarding the power consumption of the NuMicro® M261/M262/M263 series, 97 μA/MHz (LDO mode) and 45 μA/MHz (DC-DC mode) in normal run mode, 2.8 μA in Standby Power-down mode, and less than 2μA in Deep Power-down mode without VBAT. It’s low power, wide supply voltage and fast wake-up features make it suitable for battery-powered IoT applications.
nbiot 发表于 2020-2-20 20:09 | 显示全部楼层
我分别运行了下面和代码,延时30秒后测电流,运行时电流2.5ma,掉电后差不多0.7ma,几乎相同呀,看资料不是区别差不多2倍吗?什么原因呀?
       
SYS_SetPowerRegulator(SYS_PLCTL_MVRS_LDO);

SYS_SetPowerRegulator(SYS_PLCTL_MVRS_DCDC);
643757107 发表于 2020-2-20 22:49 | 显示全部楼层
nbiot 发表于 2020-2-20 20:09
我分别运行了下面和代码,延时30秒后测电流,运行时电流2.5ma,掉电后差不多0.7ma,几乎相同呀,看资料不是 ...

45 μA/MHz

你的是多少MHz速度
643757107 发表于 2020-2-20 22:49 | 显示全部楼层
掉电不彻底?
nbiot 发表于 2020-2-21 11:08 | 显示全部楼层
您需要登录后才可以回帖 登录 | 注册

本版积分规则

211

主题

3588

帖子

15

粉丝
快速回复 在线客服 返回列表 返回顶部