外设模块学习(17)——5V继电器模块(STM32)

目录

引言

1、继电器模块介绍

2、相关参数

3、硬件构成

[3.1 继电器结构](#3.1 继电器结构)

[3.2 外部电路](#3.2 外部电路)

[3.3 原理图](#3.3 原理图)

4、引脚定义及功能

5、参考代码

[5.1 relay.h](#5.1 relay.h)

[5.2 relay.c](#5.2 relay.c)

[5.3 main.c](#5.3 main.c)

6、总结


引言

本次,我们介绍另一种模块------继电器模块,这个想必大家应该都了解过,毕竟初中物理都学过这玩意,当然可能就是不太记得了,本次介绍的继电器模块如下图所示。

那么本次,我们就来学这个可以用"小电流控制大电流"的继电器模块,通过单片机利用5V电压控制继电器的打开与闭合,接下来我们来介绍5V继电器模块相关内容及使用方法。


1、继电器模块介绍

继电器是一种常见的电控制装置 ,其本质上就是用较小的电流去控制较大电流 的一种**"自动开关"**,因此一般在电路中起着自动调节、安全保护、转换电路等作用,并且实际初中时期学习的继电器介绍印象最深的就可以更安全地控制高压设备。常见的继电器模块有5V、9V、12V、24V等电压版本。

继电器应用非常广泛。在家庭生活,继电器被广泛应用于照明系统、电视机、空调等电器设备的控制;在工业领域,它们用于控制电机、泵站、生产线等高功率设备的运行;继电器还在通信网络、交通系统以及医疗设备中发挥着重要作用。


2、相关参数

|------|------------------|
| 型号 | SRD-05VDC-SL-C |
| 工作电压 | 5V |
| 工作电流 | 65mA |
| 最大负载 | 250V/10A |
| 触发电流 | 2mA |
| 尺寸 | 43mm×17mm×18.5mm |
| 净重 | 15g |


3、硬件构成

本次介绍的5V继电器模块主要由继电器本身和相关电路构成,下面注意介绍,当然主要还是介绍继电器内部结构以及相关原理。

3.1 继电器结构

一般的继电器结构都比较类似,即有绕有线圈的电磁铁、衔铁、弹簧以及多个金属触点构成,模型图如下图所示。

相信大家看见这张图以后应该会有所印象,毕竟初中物理介绍继电器原理时与该图就非常类似了。也就是说,继电器的基本原理即:给电磁铁上绕的线圈两端通电后利用电磁效应会产生一定的吸力,使得电磁铁上方的衔铁被吸拉下来进而使中间的金属触点与触点C连通,相反,在没有给线圈两端通电时,衔铁杆受弹簧的拉力使得金属触点B常与触点A连通,这就是继电器的基本工作原理。

(1)其中我们常常把中间的触点B称为公共端(COM);

(2)未通电时公共端常与上方的触点A连通,故一般我们将触点A称为常闭端;

(3)同理下方的触点C仅在通电时会与公共端接通,因此常常称之为常开端。

在实际生活中,人们常常会借助这个原理,去利用较小的电流接通线圈,从而实现对连接在常开端的高压电路的启停控制,避免直接接触高压线路,减少安全隐患。


那么,我们接着将上述图进一步抽象,就会得到下面的继电器模型

当继电器线圈两端无电压或电压供电不足时,继电器的公共端与常闭端接通,如下图所示;

当继电器线圈两端的电压大小达到吸合电压(也就是吸下衔铁所需要提供给线圈的电压)时,继电器的公共端与常开端接通,如下图所示;

当继电器的公共端接交流火线或直流正极、常开端或常闭端接负载以及交流零线或直流负极时,若继电器开关闭合,则负载两端有电压并正常工作,反之开关断开后则不工作。如下图所示

而本次的继电器模块的供给电压一般为5V左右即可达到吸合电压。

3.2 外部电路

该继电器模块还有一部分电路,如下图所示,其中包含了三极管电路以及电源指示灯以及开关指示灯。

之所以还需要增加三极管,是因为单片机(如STM32)输出的电流一般为8mA左右,而5V继电器工作电压一般在50mA上下,所以需要增加三极管提高STM32输入给继电器的电流,便于驱动继电器正常工作

同时,模块上还增加了俩LED。用于提示继电器是否正常工作(红色LED) 了,以及继电器的开关状态(绿色LED)

3.3 原理图


4、引脚定义及功能

对于单片机与继电器接线方式,如下图所示

而另一边的常开、公共端以及常闭端的连接在前面详细说过了,也就是可以接交流负载或直流负载,这里就不再赘述。

|----------|------------------------|
| 引脚名称 | 描述 |
| VCC | 电源正极,+5V |
| GND | 电源负极,接地 |
| IN | 控制信号,接通常开端的电平信号 |
| 常开(NO) | 常开接口,一般接负载和交流零线 / 直流负极 |
| 公共端(COM) | 公共接口,一般接交流火线 / 直流正极 |
| 常闭(NC) | 常闭接口,一般接负载和交流零线 / 直流负极 |

需要注意的是,常开/常闭/公共端接的直流交流电压电流大小务必遵循相应继电器的电气特性描述,避免损坏继电器。


5、参考代码

接下来,根据其原理基于STM32 给出参考测试代码,该代码基于寄存器方式进行编写 ,当然由于传感器原理比较简单,因此逻辑应该容易理解。其中本次介绍的继电器是低电平触发,也就是向IN引脚输入低电平会闭合继电器开关,触发方式可询问购买厂家或参考相关资料。

5.1 relay.h

cpp 复制代码
/*
 * @Descripttion: 5V继电器驱动文件(.h)
 * @Author: JaRyon
 * @version: 
 * @Date: 2025-11-04 16:08:27
 */
#ifndef __RELAY_H
#define __RELAY_H

#include "stm32f10x.h"

/**
 * 继电器引脚接线
 * 
 * VCC  --->  5V
 * GND  --->  GND
 * IN   --->  PA0
 * 
 * 由低电平触发
 */

void Relay_Init(void);
void Relay_On(void);
void Relay_Off(void);

#endif /* __RELAY_H */
/*** (C) COPYRIGHT 2025 END OF FILE ***/
 

5.2 relay.c

cpp 复制代码
/*
 * @Descripttion: 5V继电器驱动文件(.c)
 * @Author: JaRyon
 * @version: 
 * @Date: 2025-11-04 16:08:19
 */
#include "relay.h"

/**
 * @brief      继电器输入端口初始化
 * @param      void 无
 * @return     void
 * @example    Relay_Init();
 * @attention  
 */
void Relay_Init(void)
{
    // 1. 时钟配置
    RCC->APB2ENR |= RCC_APB2ENR_IOPAEN;
    // 2. 端口配置 PA0 通用推挽输出
    GPIOA->CRL |= GPIO_CRL_MODE0;
    GPIOA->CRL &= ~GPIO_CRL_CNF0;
    // 3. 默认拉高,常闭
    GPIOA->BSRR |= GPIO_BSRR_BS0;
}

/**
 * @brief      继电器开启(置常开)
 * @param      void 无
 * @return     void
 * @example    Relay_On();
 * @attention  这是低电平触发,若为高电平触发则改为拉高IN对应端口
 */
void Relay_On(void)
{
    GPIOA->BRR |= GPIO_BRR_BR0;
}

/**
 * @brief      继电器关闭(置常闭)
 * @param      void 无
 * @return     void
 * @example    Relay_Off();
 * @attention  
 */
void Relay_Off(void)
{
    GPIOA->BSRR |= GPIO_BSRR_BS0;
}

5.3 main.c

测试程序逻辑很简单,即每1s切换一次继电器开关闭合状态,并在OLED 屏幕上显示当前状态。

cpp 复制代码
/**
 * @Descripttion: 5V低电平触发继电器测试程序
 * @Author: JaRyon
 * @version:
 * @Date: 2025-11-04 16:40:40
 */

#include "stm32f10x.h"
#include <string.h>
#include "Systick.h"
#include "oled.h"
#include "LED.h"
#include "relay.h"

int main(void)
{
	char *str = "OFF";

	// 初始化
	Systick_Init();
	OLED_Init();
	OLED_ClearAll();
	Relay_Init();

	while (1)
	{
		OLED_ClearAll();
		Relay_On();
		str = "ON";
		OLED_ShowString(63 - 8 * strlen(str) / 2, 27, str, 8);
		OLED_Update();
		Delay_ms(1000);

		OLED_ClearAll();
		Relay_Off();
		str = "OFF";
		OLED_ShowString(63 - 8 * strlen(str) / 2, 27, str, 8);
		OLED_Update();
		Delay_ms(1000);
	}
}

6、总结

本文介绍了5V继电器模块的基本原理及应用方法。文章讲解了继电器结构(电磁铁、衔铁、弹簧、触点)和工作原理(常开端/常闭端切换),同时介绍了外部电路设计(含三极管放大驱动电流和状态指示灯),给出了与STM32连接的引脚定义及参考代码(包含初始化、开关控制的寄存器方式实现)。最后展示了一个简单测试程序,实现继电器每秒切换一次状态并在OLED显示。


以上便是本次文章的所有内容,欢迎各位朋友在评论区讨论,本人也是一名初学小白,愿大家共同努力,一起进步吧!

鉴于笔者能力有限,难免出现一些纰漏和不足,望大家在评论区批评指正,谢谢!

相关推荐
GilgameshJSS2 小时前
STM32H743-ARM例程40-U_DISK_IAP
c语言·arm开发·stm32·单片机·嵌入式硬件
一个数据大开发2 小时前
【零基础一站式指南】Conda 学习环境准备与 Jupyter/PyCharm 完全配置
学习·jupyter·conda
hazy1k4 小时前
51单片机基础-GPIO结构详解
stm32·单片机·嵌入式硬件·51单片机
集和诚JHCTECH4 小时前
专为严苛环境而生:高防护等级工业防水平板WPPC-H1520T(P)
人工智能·嵌入式硬件·平板
m0_748248024 小时前
C++与C#布尔类型深度解析:从语言设计到跨平台互操作
c++·stm32·c#
lingggggaaaa4 小时前
小迪安全v2023学习笔记(一百四十五讲)—— Webshell篇&魔改冰蝎&打乱特征指纹&新增加密协议&过后门查杀&过流量识别
笔记·学习·安全·魔改冰蝎·免杀对抗·免杀技术
云山工作室4 小时前
基于协同过滤算法的话剧购票系统(论文+源码)
单片机·物联网·毕业设计·课程设计·毕设
落羽的落羽5 小时前
【C++】现代C++的新特性constexpr,及其在C++14、C++17、C++20中的进化
linux·c++·人工智能·学习·机器学习·c++20·c++40周年
小苏兮5 小时前
【把Linux“聊”明白】编译器gcc/g++与调试器gdb/cgdb:从编译原理到高效调试
java·linux·运维·学习·1024程序员节