当前位置: 代码迷 >> 综合 >> PWR-电源管理系统概述-STM32F4
  详细解决方案

PWR-电源管理系统概述-STM32F4

热度:84   发布时间:2023-12-15 23:04:04.0

使用芯片===>STM32F429IGT6

(制作不易,希望大佬能给个赞支持下小丁)


目录

一、电源管理简介

1、上电复位(POR)/掉电复位(PDR)

2、欠压复位(BOR)

3、可编程电压监控器(PVD)

2、STM32电源简介

1、电池备份域

2、调压器电路

3、独立A/D转换器电源以及参考电压。

3、电源监控(PVD)实验

4、实验代码

1、main.c

2、PVD.c

3、PVD.h

5、实验结果

6、结束语


一、电源管理简介

为什么要进行电源管理?

①、保持电路的正常运行,像51单片机是没有电源管理的,32单片机是具备的,有电源管理的好处为,当遇到突然断电时,像51单片机并不知道程序运行到了那里,如果有电源管理,可以在断电前将数据进行保存,保证在通电后重要数据不受干扰。

②、在特定时间实现低功耗模式。像现在的手表等等的,都要求低功耗,保证续航更久等等。

1、上电复位(POR)/掉电复位(PDR)

①、由上图可得,当VDD/DDA的电压低于阈值VPDR/VPOR时,器件会保持复位状态。

②、VDD:0~~VPOR(典型值1.72V):为上电复位。

③、VDD持续上升时间:VPOR~~正常运行电压(水平电压) 

④、正常运行状态:正常运行电压(水平电压) 

⑤、下降至VPDR(典型值1.68V):掉电复位

2、欠压复位(BOR)

①、上电期间,欠压复位 (BOR) 将使器件保持复位状态,直到电源电压达到指定的 VBOR 阈值,电路器件才正常工作。

②、VBOR 通过器件选项字节进行配置。BOR 默认为关闭。可以选择 4 个 VBOR 阈值。

       BOR 关闭 (VBOR0):1.80 V 到 2.10 V 电压范围的复位阈值级别

       BOR 级别 1 (VBOR1):2.10 V 到 2.40 V 电压范围的复位阈值级别

       BOR 级别 2 (VBOR2):2.40 V 到 2.70 V 电压范围的复位阈值级别

       BOR 级别 3 (VBOR3):2.70 V 到 3.60 V 电压范围的复位阈值级别

 ③、当电源电压 (VDD) 降至所选 VBOR 阈值以下时,将使器件复位。

④、通过对器件选项字节进行编程可以禁止 BOR。要禁止 BOR 功能,VDD 必须高于 VBOR0,以 启动器件选项字节编程序列。那么就只能由 PDR 监测掉电过程。

⑤、BOR 阈值滞回电压约为 100 mV(电源电压的上升沿与下降沿之间)。

3、可编程电压监控器(PVD)

①、使能了PVD(PWR_CR寄存器PVDE位)之后,可以使用PVD监视电源,并将其与PWR_CR寄存器中的PLS[2:0]位所选的阈值进行比较。PWR_CSR寄存器中提供了PVDO标志,用于指示VDD是大于还是小于阈值。该事件内部连接到EXTI线16,如果通过EXTI寄存器使能,则可以产生中断。当VDD降至PVD阈值以下或者升至阈值以上,可以产生PVD中断,具体取决EXTI线16上升沿/下降沿配置。该功能用处之一就是在中断服务程序中执行紧急关闭系统的任务。

也就是当电压低到设置值时,会触发中断,在中断中可以将重要数据进行保存,保证重要数据不受到伤害。

 ②、电源控制寄存器PWR_CR

③、HAL库操作函数(stm32fXxx_hal_pwr.c中):

void HAL_PWR_ConfigPVD(PWR_PVDTypeDef *sConfigPVD);  //配置PVD参数:阈值级别和中断触发方式void HAL_PWR_EnablePVD(void);//使能PVD void HAL_PWR_DisablePVD(void);//失能PVD void HAL_PWR_PVD_IRQHandler(void); void HAL_PWR_PVDCallback(void);

2、STM32电源简介

STM32电源可以分为三个部分:电池备份域、调压器电路、独立A/D转换器电源以及参考电压。

1、电池备份域

VBAT引脚一般连接一个纽扣电池。 在VDD关闭后可以为RTC,备份寄存器,备份RAM,LSE等供电。

后备电源经常是3V,当VDD电源大于3V时,单片机使用VDD供电,当电源低于3V时,单片机使用VBAT后备电源供电。

2、调压器电路

调压器为备份域及待机电路以外的所有数字电路供电。调压器输出电压为1.2V(M4/M7)或者1.8V(M3)。

重要的作用就是实现低功耗。

调压器是那种工作模式:

       ①运行模式:1.2/1.8V域全功率运行;

       ②停止模式:1.2/1.8V域低功率运行,1.2V区域所有时钟关闭,相应外设停止工作,保留内核寄存器以及SRAM内容;

       ③待机模式:1.2/1.8V域断电,内核寄存器以及SRAM内容均丢失,备份区域的寄存器以及SRAM不受影响。

3、独立A/D转换器电源以及参考电压。

 为了提高转换精度,ADC配有独立电源,可以单独滤波并屏蔽PCB上的噪音。

      ①ADC电源电压从单独的VDDA引脚输入。

      ②VSSA引脚提供独立的电源接地链接。

为了确保测量电压时具有更高的精度,用户在VREF上链接单独的ADC外部参考电压输入。VREF介于1.8V和VDDA之间。


3、电源监控(PVD)实验

通过改变电源电压的大小,使电源监控PVD工作发生中断,中断事件为向串口发送一句  “没电了”。

触发中断的方式是供电电压低于2.9V。

因为没有可调节电源,于是使用开关,也就是直接给电路断电,断电的过程电路电压也是逐渐降低的,于是是可以出发中断的。


4、实验代码

1、main.c

/**************************************************************************
**作者:        小丁工程               
**时间:        2021.01.17
***************************************************************************/
#include "sys.h"//---------------------主函数-------------------------------------------------
int main(void)
{HAL_Init();//========================初始化HAL库   Stm32_Clock_Init(360,25,2,8);//======设置时钟,180Mhzdelay_init(180);//===================初始化延时函数uart_init(115200);//=================初始化串口函数PVD_Config();//======================初始化电源控制函数while(1){			//delay_ms(1000);}
}
//---------------------end-----------------------------------------------------

2、PVD.c

#include "PVD.h"PWR_PVDTypeDef pvd_config;//定义句柄void PVD_Config(void)初始化
{__HAL_RCC_PWR_CLK_ENABLE();  //初始化时钟pvd_config.PVDLevel=PWR_PVDLEVEL_7;pvd_config.Mode=PWR_PVD_MODE_IT_RISING_FALLING;	HAL_PWR_ConfigPVD(&pvd_config);HAL_PWR_EnablePVD(); //使能HAL_NVIC_EnableIRQ(PVD_IRQn);				//使能pvd中断通道HAL_NVIC_SetPriority(PVD_IRQn,0,0);			//抢占优先级0,子优先级0}void PVD_IRQHandler (void)//中断函数
{HAL_PWR_PVD_IRQHandler();
}void HAL_PWR_PVDCallback(void)//中断回调函数{printf("没电了");}

3、PVD.h

#ifndef _PVD_H
#define _PVD_H
#include "sys.h"void PVD_Config(void);
void PVD_IRQHandler (void);
void HAL_PWR_PVDCallback(void);#endif

5、实验结果

在给电路板断电时,向串口成功发送了 “没电了”。

 


6、结束语

对于一些重要数据,断电前进行保存还是非常重要的,希望能帮助到你。

(例程及相关资料参考于-->原子光盘,侵删)