继电器,一种常见的电控制装置,其应用几乎无处不在。在家庭生活,继电器被广泛应用于照明系统、电视机、空调等电器设备的控制;在工业领域,它们用于控制电机、泵站、生产线等高功率设备的运行;继电器还在通信网络、交通系统以及医疗设备中发挥着重要作用。
不仅如此,继电器也是学习其他电子原理和技术的入门工具。通过理解继电器的工作原理和使用方法,你将为更深入地探索电子世界打下坚实基础。
所以,如果你还是一枚小白,不必担心!继电器是一个很好的起点,可以帮助你逐步了解电子领域的基础概念和应用。相信我,一旦你掌握了继电器的奥秘,你将获得打开通向电子世界更大门的钥匙!
1. 源码下载及前置阅读
本文所涉及的源码及安装包如下(由于平台限制,请点击以下链接阅读原文下载):
继电器模块详解 | 良许嵌入式www.lxlinux.net/e/stm32/relay-tutorial.html往期教程,有兴趣的小伙伴可以看看。
- 零基础快速上手STM32开发(手把手保姆级教程):
- 万字猛文:MQTT原理及案例:
- 如何快速成为点灯大师?:
2. 继电器介绍
继电器,可以被形象地比作一个开关,就像电灯开关一样,按下,电路闭合,电路通,灯亮;再按下,电路断开,电路不通,灯灭。它能够通过控制小电流来打开或关闭大电流电路,实现电路的控制和信号的传递。不过,与普通的物理开关相比,继电器具有更高的可靠性和灵活性,能够应对复杂的电路控制需求。
3. 继电器工作原理
当继电器的电磁线圈通电时,产生的磁场会引起机械部件的运动,从而改变触点的状态,触点可以是常闭或常开。
继电器原理示意图如下:
当信号电源断开,线圈两端没有施加电压,线圈没有产生磁力,衔铁在弹簧拉力下不接触触点,工作电路不连通,负载电器不工作。
当信号电源闭合,线圈两端施加电压,线圈产生磁力把衔铁往下拉,衔铁接触触点,工作电路连通,负载电器工作。
继电器的控制电路与工作电路是隔离的,这种切换状态的能力使得继电器能够控制高电压、大电流电路的开关操作。
4. 型号介绍
我们常见的继电器型号按照两方面分类:电压和路数。
1. 以电压分类:
根据控制电路的工作电压来分类,如 5V、12V、24V 等继电器。
- 5V 继电器:通常在低电压应用中使用,如微控制器或单片机系统。
- 12V 继电器:广泛应用于汽车电子、家用电器和工业自动化等领域。
- 24V 继电器:常见于工业自动化和建筑控制系统等高电压应用。
2. 以路数分类:
按路数可分为 1/2/4/8 等路数,就像一板电灯开关上可以有 1/2/4/8 个开关,每个开关可以控制各自的电灯开关。8 路继电器就可以控制 8 个电路的开关。
5. 工作参数及引脚介绍
以下是常见继电器的工作参数,不过大家做项目前还是要按照商家详情页的挑选合适的,毕竟每个厂家会有些不同。
有些继电器可通过跳线设置高电平/低电平触发,跳线与 L 短接时为低电平触发,跳线与 H 短接时为高电平触发。
接线如下:
- 输入部分:
- 输出部分:
以下三个引脚,COM 一定要接,NO 和 NC 二选一。
6. 编程实战
6.1 通信示意图
我们的实现目标是由 STM32 控制继电器闭合与松开,让 LED 的红灯亮灭。
6.2 硬件连接
本教程使用的硬件如下:
- 单片机:STM32F103C8T6
- 继电器:5V 一路继电器
- 小灯:三色 LED 灯模块
- 电池
- 烧录器:ST-LINK V2
烧录的时候接线如下表,如果不会烧录的话可以看我之前的文章 STM32下载程序的五种方法:https://www.lxlinux.net/e/stm32/five-ways-to-flash-program-to-stm32.html 。
接好如下图:
6.3 继电器代码
代码很简单,就是初始化一个引脚,连接继电器的 IN:高电平,继电器吸合,LED 亮;低电平,继电器悬空,LED 灭。
#include "sys.h"
#include "usart.h"
#include "delay.h"
//继电器控制LED引脚定义
#define LED_CLK() __HAL_RCC_GPIOB_CLK_ENABLE()
#define LED_GPIO GPIOB
#define LED_PIN GPIO_PIN_8
void led_init(void); /* LED初始化函数声明 */
int main(void)
{
HAL_Init(); /* 初始化HAL库 */
sys_stm32_clock_init(RCC_PLL_MUL9); /* 设置时钟, 72Mhz */
delay_init(72); /* 延时初始化 */
led_init(); /* LED初始化 */
while(1)
{
HAL_GPIO_WritePin(LED_GPIO,LED_PIN,GPIO_PIN_SET); //继电器吸合,LED亮
delay_ms(1000);
HAL_GPIO_WritePin(LED_GPIO,LED_PIN,GPIO_PIN_RESET); //继电器悬空,LED灭
delay_ms(1000);
}
}
/**
* @brief 初始化LED相关IO口, 并使能时钟
* @param 无
* @retval 无
*/
void led_init(void)
{
GPIO_InitTypeDef gpio_initstruct;
LED_CLK(); /* IO口时钟使能 */
gpio_initstruct.Pin = LED_PIN; /* LED0引脚 */
gpio_initstruct.Mode = GPIO_MODE_OUTPUT_PP; /* 推挽输出 */
gpio_initstruct.Pull = GPIO_PULLUP; /* 上拉 */
gpio_initstruct.Speed = GPIO_SPEED_FREQ_HIGH; /* 高速 */
HAL_GPIO_Init(LED_GPIO, &gpio_initstruct); /* 初始化LED0引脚 */
}
6.4 效果展示
继电器「啪嗒」吸合,红灯亮;继电器「啪嗒」松开,红灯灭,如此循环。