发作品签到
标准版

开机自动关机电路

工程标签

4.8k
0
0
0

简介

验证电路实现了按键开机,单片机控制关机功能。

简介:验证电路实现了按键开机,单片机控制关机功能。

开源协议

GPL 3.0

创建时间:2022-02-09 16:58:19更新时间:2022-02-17 14:14:49

描述

在本文中,我们将向您展示如何构建锁存电源开关电路,也称为自动断电电路。您可以使用此电路自动关闭 ESP32、ESP8266、Arduino 或任何其他微控制器。

该电路允许您在微控制器不执行任何任务时完全切断电源。换句话说,一旦微控制器完成执行任务,它就会通过软件自行关闭。这是使电池在您的电子项目中持续更长时间的好方法。

自动关机电路图

以下电路图显示了锁存电源开关电路(自动断电电路)图。

电源锁存电路原理图esp32 esp8266 arduino

右侧编号为 1、2 和 3 的端子应连接到您的微控制器板。

  • 引脚 1 连接到 5V。
  • 引脚 2可以连接到微控制器的任何数字引脚。在我们的示例中,我们将该引脚连接到 GPIO 5 / 数字 5。
  • 引脚 3 连接到 GND。

     

  • 自动关机电路的工作原理

    1)当您按下开关或闭合电路时,有电到达2N3904晶体管的基极。因此,2N3904 被拉低,将 MOSFET 的栅极 (G) 拉至 GND。

    2) P 沟道 MOSFET 在其栅极相对于源极为负时导通。当您按下按钮时,MOSFET 的栅极被拉至 GND,允许电流流向 VIN 引脚,这将为微控制器供电。只要 MOSFET 的栅极被拉至 GND,就会发生这种情况。3)为了在释放按钮后保持 MOSFET 的栅极拉至 GND,我们通过微控制器的 GPIO 发送一个 HIGH 信号。当我们发送一个 HIGH 信号时,有功率到达晶体管的基极。4) 因此,我们确保 MOSFET 的栅极被拉至 GND,电流流向 VIN 端子为我们的微控制器供电。5)当我们想要关闭电路时,我们只需将GPIO设置为LOW即可。发生这种情况时,没有功率到达晶体管的基极,因此 MOSFET 不会让电流流向 VIN 引脚,因此没有功耗。我对电路进行的微小改动,8CNk4GCI6PQ9lGTtautJrKQeNTcKJwu8VeYnxHTT.png
  • PCB
  • 6XFxawHwywBsUbyDxnI3B4NgNMaabQlDBdWGCXhp.png

     

  • 基于MounRiver Studio的测试代码
  • PA1控制GPIO引脚
  • PA0控制LED,指示单片机运行状态
  • /********************************** (C) COPYRIGHT *******************************
    * File Name          : main.c
    * Author             : WCH
    * Version            : V1.0.0
    * Date               : 2020/04/30
    * Description        : Main program body.
    *******************************************************************************/

    /*
     *@Note
     串口打印调试例程:
     USART1_Tx(PA9)。
     本例程演示使用 USART1(PA9) 作打印调试口输出。

    */

    #include "debug.h"


    /* Global typedef */
    #define    LED_ON GPIO_WriteBit(GPIOA, GPIO_Pin_0,0);
    #define    LED_OFF GPIO_WriteBit(GPIOA, GPIO_Pin_0,1);
    #define    POWER_ON GPIO_WriteBit(GPIOA, GPIO_Pin_1,1);
    #define    POWER_OFF GPIO_WriteBit(GPIOA, GPIO_Pin_1,0);
    /* Global define */

    /* Global Variable */

    /*********************************************************************
     * @fn      GPIO_Toggle_INIT
     *
     * @brief   Initializes GPIOA.0
     *
     * @return  none
     */
    void GPIO_Toggle_INIT(void)
    {
        GPIO_InitTypeDef GPIO_InitStructure = {0};

        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOA, &GPIO_InitStructure);
    }

    /*******************************************************************************
    * Function Name  : main
    * Description    : Main program.
    * Input          : None
    * Return         : None
    *******************************************************************************/
    int main(void)
    {
        u8 i = 0;
        u32  cnt=0,offPower;
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);


        Delay_Init();
        GPIO_Toggle_INIT();
        POWER_ON;
        USART_Printf_Init(115200);
        printf("SystemClk:%d\r\n",SystemCoreClock);

        printf("This is printf example\r\n");


    //     GPIO_WriteBit(GPIOA, GPIO_Pin_0,0);


            while(1)
            {
                POWER_ON;
                Delay_Ms(100);
                GPIO_WriteBit(GPIOA, GPIO_Pin_0, (i == 0) ? (i = Bit_SET) : (i = Bit_RESET));
               if(cnt==100)
                {
                   GPIO_WriteBit(GPIOA, GPIO_Pin_0,1);
                   POWER_OFF;
                   Delay_Ms(20);
                   cnt=0;
                }

               cnt++;

            }
    }

     

设计图

未生成预览图,请在编辑器重新保存一次

BOM

暂无BOM

附件

序号文件名称下载次数
暂无数据
克隆工程
添加到专辑
0
0
分享
侵权投诉

工程成员

评论

全部评论(1
按时间排序|按热度排序
粉丝0|获赞0
相关工程
暂无相关工程

底部导航