MM32 电源管理

  • MindMotion
  • LV4工程师
  • |      2017-11-16 15:47:50
  • 浏览量 875
  • 回复:2
来源 灵动MM32 在应用开发中,通常需要考虑当系统供电电压下降或掉电突发状况时,需对控制系统加以保护,防止出现意外,故在程序中需要加入对系统电压的监控。当供电电压降低到某一电压值时,需要系统进入特别保护状态,执行紧急关闭任务:对系统的一些数据保存起来,同时对外设进行相应的保护操作。 MM32L0系列产品的工作电压(VDD)为 2.0V ~ 5.5V。通过内置的电压调节器提供所需的 1.5V 电源 注: VDDA 和 VSSA 必须分别连到 VDD和 VSS。 MM32L0系列产品内部有一个完整的上电复位(POR)和掉电复位(PDR)电路,当供电电压达到 2.0V 时系统才能正常工作。 当 VDD/VDDA 低于指定的限位电压 VPOR/VPDR时,系统保持为复位状态,而无需外部复位电路。 POR = Power On Reset 上电复位;PDR = Power DownReset 掉电复位 POR的功能是在VDD电压由低向高上升越过规定的阀值之前,保持芯片复位,当越过这个阀值后的一小段时间后(图中的"滞后时间"或表中的"复位迟滞"),结束复位并取复位向量,开始执行指令。当VDD上升越过POR阀值时,内部并不马上结束复位,而是等待一小段时间(Reset temporization)。Reset temporization是为了等待供电电压能够升高到最低可靠工作电压以上,我们看到POR阀值典型值只有1.656V(参考MM32 DS手册表内嵌复位和电源控制模块特性),低于数据手册中给出的最低可靠工作电压2.0V,所以这个滞后时间是十分必要的,如果供电电压上升缓慢,尤其是从1.8V升到2.0V以上超过1~2.5ms,则很可能造成上电复位后MCU不能正常工作的情况。 PDR功能是在VDD电压由高向低下降越过规定的阀值后,将在芯片内部产生复位。 MM32内部自带PVD功能,用于对MCU供电电压VDD进行监控。通过电源控制寄存器中的PLS位来设定监控电压的阀值,通过对外部电压进行比较来监控电源。当条件触发,需要系统进入特别保护状态,执行紧急关闭任务:对系统的一些数据保存起来,同时对外设进行相应的保护操作。 用户可以利用 PVD 对 VDD电压与电源控制寄存器(PWR_CTRL)中的PLS位进行比较来监控电源,这几位选择监控电压的阀值。 PVD = Programmable Votage Detector 可编程电压监测器,它的作用是监视供电电压,在供电电压下降到给定的阀值以下时,产生一个中断,通知软件做紧急处理。 PLS位用于选择PVD监控电源的电压阀值:0000:1.8V 0101:3.3V 1010:4.8V0001:2.1V 0110:3.6V 0010:2.4V 0111:3.9V0011:2.7V 1000:4.2V 0100:3.0V 1001:4.5V 电源控制/状态寄存器(PWR_CSTA)中的 PVDO 标志用来表明 VDD是高于还是低于 PVD 的电压阀值。该事件在内部连接到外部中断的第 16线,如果该中断在外部中断寄存器中是使能的,该事件就会产生中断。当 VDD下降到 PVD 阀值以下和(或)当 VDD 上升到 PVD 阀值之上时,根据外部中断第 16 线的上升/下降边沿触发设置,就会产生 PVD 中断。例如,这一特性可用于用于执行紧急关闭任务。 一、库函数操作流程(中断方式): 1)、电源接口时钟使能 RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR,ENABLE);2)、PWR_PVDLevelConfig(PWR_PVDLevel_4V2); // 设定监控阀值3)、PWR_PVDCmd(ENABLE); // 使能PVD4)、EXTI_ClearITPendingBit(EXTI_Line16);//清中断5)、EXTI_InitStructure.EXTI_Line = EXTI_Line16; // PVD连接到中断线16上6)、EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; //使用中断模式7)、EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising_Falling;//表示电压上升或下降越过设定阀值时都产生中断8)、EXTI_InitStructure.EXTI_LineCmd = ENABLE; // 使能中断线9)、EXTI_Init(&EXTI_InitStructure); // 初始化 EXTI_InitStructure.EXTI_Trigger的赋值可选项:EXTI_Trigger_Rising---表示电压从高下降到低于设定阀值时产生中断;EXTI_Trigger_Falling---表示电压从低上升到高于设定阀值时产生中断;EXTI_Trigger_Rising_Falling---表示电压上升或下降越过设定阀值时都产生中断。 10)、中断优先级配置 NVIC_InitStructure.NVIC_IRQChannel =PVD_IRQn; NVIC_InitStructure.NVIC_IRQChannelPriority =0; NVIC_InitStructure.NVIC_IRQChannelCmd =ENABLE; NVIC_Init(&NVIC_InitStructure); 2、当工作电压低于设定阀值时,将产生PVD中断,在中断程序中进行相应的处理:void PVD_IRQHandler(void){if( RESET !=EXTI_GetITStatus(EXTI_Line16)){ EXTI_ClearITPendingBit(EXTI_Line16); …… // 用户添加紧急处理代码处WriteToBackupReg(0x3210);//往BKP寄存器里面存数据}} 在测试的例程中,配置的PVD工作方式为中断上升和下降沿触发,当VDD高于预设PVD阈值或者低于阈值而产生边沿触发时,都会形成一次PVD中断,然后读取PWR_CSRPVDO标志位检查是低电压提醒还是高电压提醒,以此来达到监控MCU供电情况的目的。二、寄存器操作流程(查询方式): 1)、电源接口时钟使能RCC->APB1ENR |= 0x10000000;2)、设置阈值电压,电源电压检测器(PVD)使能PWR->CR =0x1010; //电压检测阈值=4.2v,PVDE=1使能3)、等待PVDO输出状态if((PWR->CSR&0x0004) !=0) { SCB->AIRCR =0x05fa0004;//软件复位 } else { WriteToBackupReg(0x3210);//往BKP寄存器里面存数据 return; }小结:1、 MM32L0系列产品 PVD所对应的时钟挂在APB1上,在使用PVD功能时需要使能PWR时钟。2、 使用寄存器配置如何判断掉电过程还是还是上电过程? 可以根据电源控制/状态寄存器PWR_CSR)的PVDO位来判断,PVDO10表示上电过程,从01表示掉电过程,用户可以根据该位来判断是需要上电复位还是掉电复位。
  • 0
  • 收藏
  • 举报
  • 分享
我来回复

登录后可评论,请 登录注册

所有回答 数量:1
玉儿99 2017-11-17
刚好想要了解这方面的内容,灵动微有很多电源管理的芯片吗?请推荐几款
0   回复
举报
发布
MindMotion 回复 2017-11-21
具体情况您可以与我们的销售联系(Sales@MindMotion.com.cn),谢谢!
0   回复
举报
x
收藏成功!点击 我的收藏 查看收藏的全部帖子