打印
[应用相关]

如何利用STM8S单片机实现一键式的开关机功能

[复制链接]
828|20
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
开关机功能是使用电池供电系统的最基本功能。如果使用机械式开关(2段拨动开关,自开关等)等直接接通和切断电源,不说机械部件的可靠性,至少自动关机(一般在长时间不操作、电池电量低时需要自动关机)功能就比较难实现。所以电池供电系统一般采用按钮开关,用一个按钮配合软件实现按一次开机、再按一次关机的功能及自动关机的功能。

使用特权

评论回复
沙发
雨果喝水|  楼主 | 2020-10-25 23:53 | 只看该作者
这部分内容就讲述如何在上实现一键式的开关机功能。开关机功能要使用单片机的一个引脚(PD4)作为输入端,连接到按钮,接收按纽按下产生的电信号,然后再使用另一个引脚(PD3)作为输出端去驱动由三极管8550构成的一个电子开关实现对系统电源的控制。而STM8S单片机本身就直接接在电池上,利用单片机的停机模式,将单片机本身的电流降低到μA级,对电池的消耗就可以忽略不计了。

使用特权

评论回复
板凳
雨果喝水|  楼主 | 2020-10-25 23:54 | 只看该作者
1、电路设计

电路图如下,C1是STM8S单片机VCAP电容,保持内部1.8V电压的稳定,是STM8S单片机唯一必须接要的外部元件,选用容量为1μF的瓷片电容,而且从电路可靠性讲,这个电容越靠近单片机IC越好。

K1是按钮,一端接到单片机的PD4引脚上,另一端接地,这样按钮被按下就会产生一个低电平的脉冲。

Q1是三极管,通过发光二极管D1和限流电阻R1接到单片机的PD3上。这样当PD3输出低电平时,Q1导通,VCC上有电压,可以对系统供电,反之PD3输出高电平时,Q1截止VCC没有电压。

发光二极管D1还兼作电源指示灯的作用, Q1导通时发光反之不发光。

剩余的C2~C5都是电源退藕电容,用于消除电源上的干扰信号。P1、P2两个接线端分别接3.6V锂电池的正负极。

使用特权

评论回复
地板
雨果喝水|  楼主 | 2020-10-25 23:55 | 只看该作者

使用特权

评论回复
5
雨果喝水|  楼主 | 2020-10-25 23:55 | 只看该作者
2、软件设计

软件要实现的功能是,在PD4引脚上监控按钮按下产生的低电压脉冲信号,并根据这个信号来设置PD3引脚的输出电平去控制Q1的导通和截止,以及设置单片机自身的工作状态,以此实现对电源供电的控制。

1)引脚工作模式设置

使用特权

评论回复
6
雨果喝水|  楼主 | 2020-10-25 23:56 | 只看该作者
1)引脚工作模式设置

首先要做的,就是设置单片机引脚的工作模式,把PD4设置为输入模式,D3设置为输出模式。

在STM8S_StdPeriph_Lib库中,可以使用这个函数进行设置:

void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef GPIO_Pin, GPIO_Mode_TypeDef GPIO_Mode)

GPIOx是端口编号,取值有GPIOA、GPIOB、GPIOC、GPIOD,分别对应单片机的PAx、PBx、PCx、PDx端口,GPIO_Pin是引脚编号,取值有GPIO_PIN_1~GPIO_PIN_7,函数通过GPIOx和GPIO_Pin两个参数指定一个唯一的引脚。

使用特权

评论回复
7
雨果喝水|  楼主 | 2020-10-25 23:56 | 只看该作者
GPIO_Mode是工作模式了。表示输入模式的取值有四种,分别是要不要上拉,要不要中断的四种组合:

GPIO_MODE_IN_FL_NO_IT Input floating, no external interrupt

GPIO_MODE_IN_PU_NO_IT Input pull-up, no external interrupt

GPIO_MODE_IN_FL_IT Input floaTIng, external interrupt

GPIO_MODE_IN_PU_IT Input pull-up, external interrupt

要上拉的话,单片机内部会自动为引脚提供一个上拉电流,在没有外部输入的情况下,引脚就是高电平了。

使用特权

评论回复
8
雨果喝水|  楼主 | 2020-10-25 23:57 | 只看该作者
表示输出模式的取值有8种,分别是是否开漏输出、输出高低电平、是否高速输出的组合:

GPIO_MODE_OUT_OD_LOW_FAST Output open-drain, low level, 10MHz

GPIO_MODE_OUT_PP_LOW_FAST Output push-pull, low level, 10MHz

GPIO_MODE_OUT_OD_LOW_SLOW Output open-drain, low level, 2MHz

GPIO_MODE_OUT_PP_LOW_SLOW Output push-pull, low level, 2MHz

GPIO_MODE_OUT_OD_HIZ_FAST Output open-drain, high-impedance level,10MHz

GPIO_MODE_OUT_PP_HIGH_FAST Output push-pull, high level, 10MHz

GPIO_MODE_OUT_OD_HIZ_SLOW Output open-drain, high-impedance level, 2MHz

GPIO_MODE_OUT_PP_HIGH_SLOW Output push-pull, high level, 2MHz

使用特权

评论回复
9
mintspring| | 2020-10-25 23:57 | 只看该作者
通过中断进入超低功耗?

使用特权

评论回复
10
雨果喝水|  楼主 | 2020-10-25 23:57 | 只看该作者
在这个应用中,需要把PD4设置为带上拉(因为按钮未按下时要呈高电平)、有中断的输入模式。开机时,PD3要设置为低电平的输出模式(低电平才能让Q1导通)。关机时PD3要设置为不带上拉的输入模式,所以这部分代码要这样写:

GPIO_Init(GPIOD, GPIO_PIN_4, GPIO_MODE_IN_PU_IT); //PD4设置为带上拉、有中断的输入模式

GPIO_Init(GPIOD, GPIO_PIN_3, GPIO_MODE_OUT_PP_LOW_FAST); //开机时把PD3设置低电平的输入模

GPIO_Init(GPIOD, GPIO_PIN_3, GPIO_MODE_IN_FL_NO_IT);//关机时把PD3设置低电平的输入模式

使用特权

评论回复
11
雨果喝水|  楼主 | 2020-10-25 23:58 | 只看该作者
额外提一下,除了GPIO_Init函数可以设置引脚是输出高电平还是低电平,还可以用下面四个函数继续引脚的高低电平:

void GPIO_Write(GPIO_TypeDef* GPIOx, uint8_t PortVal) //输出PortVal指定的电平

void GPIO_WriteHigh(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef PortPins) //输出高电平

void GPIO_WriteLow(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef PortPins) //输出低电平

void GPIO_WriteReverse(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef PortPins) //高低电平翻转一次

使用特权

评论回复
12
雨果喝水|  楼主 | 2020-10-25 23:59 | 只看该作者
2)停机模式设置

STM8S单片机有停机模式,在停机模式下,单片机功耗降到最低,所有时钟停止工作,但可以保留RAM和寄存器的值,停机模式只能可以通过下面几种方式退出:

-外部中断(GPIO)

-CAN接收中断

-SPI传输结束

-I2C中断(从地址匹配)

-复位

通过执行HALT指令,也就是执行库函数的halt()函数进入停机模式。

使用特权

评论回复
13
海天鸿电子| | 2020-10-26 16:06 | 只看该作者
有没有St的单片机可以出货的

使用特权

评论回复
14
凯复Kane| | 2020-10-26 22:39 | 只看该作者
很详细 谢谢分享 stm8很少用到 买到会拿来试一试的

使用特权

评论回复
15
雨果喝水|  楼主 | 2020-10-26 23:23 | 只看该作者
mintspring 发表于 2020-10-25 23:57
通过中断进入超低功耗?

停机模式,在停机模式下,单片机功耗降到最低,所有时钟停止工作,但可以保留RAM和寄存器的值,停机模式只能可以通过下面几种方式退出:

-外部中断(GPIO)

-CAN接收中断

-SPI传输结束

-I2C中断(从地址匹配)

-复位

通过执行HALT指令,也就是执行库函数的halt()函数进入停机模式。

使用特权

评论回复
16
yzq13246068880| | 2020-11-3 09:58 | 只看该作者
功耗降到uA级?

使用特权

评论回复
17
wowu| | 2020-11-13 12:33 | 只看该作者
用硬件实现最可靠了

使用特权

评论回复
18
xiaoqizi| | 2020-11-13 12:35 | 只看该作者
哈哈  用软件的话 是不是就需要开启看门狗了啊

使用特权

评论回复
19
木木guainv| | 2020-11-13 12:37 | 只看该作者
仔细想来 还是硬件开发周期短

使用特权

评论回复
20
磨砂| | 2020-11-13 12:39 | 只看该作者
多种方式都可以试一试

使用特权

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

本版积分规则

86

主题

1165

帖子

0

粉丝