一篇文章教会你继电器模块原理及使用,附STM32代码示例
目录
一、继电器介绍:
二、继电器使用说明:
(1)继电器的工作原理:
(2)继电器的接线端子:
(3)继电器控制:
(4)继电器原理图:
三、代码示例:
(1)继电器控制代码:
(2)按键控制代码:
(3)main函数:
(4)接线图:
四、代码下载:
一、继电器介绍:
继电器模块是一种利用电磁原理控制电路通断的电子器件。它通过低压信号控制高压电路,实现自动调节、隔离和安全保护。直流继电器模块的五个引脚中,两个用于控制线圈,其余三个分别连接常开端、常闭端和公共端,以实现电路的自动切换。简而言之,继电器模块就是一个可以用低压信号控制高压电路的自动开关。
二、继电器使用说明:
(1)继电器的工作原理:
当低压电源(控制电路)导通时,电磁铁产生磁力,吸引衔铁,使得触点闭合,从而使得高压电源(工作电路)形成回路并导通。
当低压电源断开时,电磁铁失去磁力,弹簧将衔铁拉回原位,触点断开,高压电源的回路被切断,工作电路断开。
(2)继电器的接线端子:
常闭触点(NC):在继电器未激活时,这个触点与公共触点相连。
公共触点(COM):这是继电器的中心触点,它在继电器激活时会与常开触点相连。
常开触点(NO):在继电器未激活时,这个触点与公共触点断开,激活后与公共触点相连。
(3)继电器控制:
输入(IN):当控制信号从输入端IN1发出低电平信号时,这将触发光耦合器U1的内部LED发光(以低电平触发为例)。
常闭(NC):在继电器未激活的状态下,常闭触点(NC)与公共触点(COM)相连,形成闭合回路。
公共(COM):公共触点(COM)是继电器内部的一个中心连接点,它在继电器激活时会与常开触点(NO)相连。
常开(NO):在继电器未激活的状态下,常开触点(NO)与公共触点(COM)断开,没有形成闭合回路。
(4)继电器原理图:
当IN1接收到低电平信号时,光耦合器U1导通,使得三极管T1导通,继电器K1的线圈得电,继电器触点闭合,从而控制高压电路的通断。(该原理图为低电平触发,无选择端)
原理图中IN1作为控制电路的输入端,接收外部控制信号。当IN1为低电平时,通过限流电阻R1点亮LED1,指示信号状态,同时激活光耦合器U1,实现电气隔离并导通其输出端。接着,电流通过基极电阻R2流入NPN型三极管T1的基极,使其导通。这导致继电器K1的线圈通电,产生磁场,吸引衔铁,闭合触点。继电器触点P1包括常闭触点(1脚)、公共触点(2脚)和常开触点(3脚),控制高压电路的通断。二极管D1用于保护电路,防止反向电动势损坏三极管。整个电路由电源VCC和GND供电,连接器P3用于连接外部信号和电源。
三、代码示例:
(1)继电器控制代码:
#include "stm32f10x.h" // Device header
void Relay_Init(void){
// 使能GPIOB端口的时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
// 定义GPIO初始化结构体
GPIO_InitTypeDef GPIO_InitStructure;
// 设置GPIOB引脚1为推挽输出模式,速度为50MHz
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
// 将GPIOB的第1引脚设置为高电平,停止导通,继电器设置为低电平触发
GPIO_SetBits(GPIOB, GPIO_Pin_1);
}
void Buzzer_ON(void){
// 将GPIOB的第1引脚设置为低电平
GPIO_ResetBits(GPIOB, GPIO_Pin_1);
}
void Buzzer_OFF(void){//关闭蜂鸣器
// 将GPIOB的第1引脚设置为高电平
GPIO_SetBits(GPIOB, GPIO_Pin_1);
}
Relay_Init
函数首先使能GPIOB端口的时钟,然后配置GPIOB的第1引脚为推挽输出模式,速度为50MHz,用于控制继电器。初始化后,该引脚被设置为高电平,以确保继电器在默认状态下不导通(继电器是低电平触发)。Buzzer_ON
函数通过将GPIOB的第1引脚设置为低电平来激活蜂鸣器,而Buzzer_OFF
函数则通过设置引脚为高电平来关闭蜂鸣器。这样设计允许通过改变GPIO引脚的电平状态来控制蜂鸣器的开关,实现声音报警或提示功能。
(2)按键控制代码:
#include "stm32f10x.h" // 包含STM32F10x系列微控制器的头文件
#include "Delay.h" // 包含延迟函数的头文件
// 按键初始化函数
void Key_Init(void)
{
// 使能GPIOB端口的时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
// 定义GPIO初始化结构体
GPIO_InitTypeDef GPIO_InitStructure;
// 设置GPIOB引脚12和13为上拉输入模式,速度为50MHz
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; // 即内部上拉输入模式
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_12;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
// 初始化GPIOB
GPIO_Init(GPIOB, &GPIO_InitStructure);
}
// 获取按键编号的函数
uint8_t Key_GetNum(void)
{
uint8_t KeyNum = 0; // 定义按键编号变量,并初始化为0
// 检测GPIOB的第13引脚是否被按下
if (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_13) == 0)
{
Delay_ms(20); // 等待20毫秒以消除按键抖动
// 再次检查以确认按键确实被按下
while (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_13) == 0);
Delay_ms(20); // 等待20毫秒以消除按键抖动
KeyNum = 1; // 设置按键编号为1
}
// 检测GPIOB的第12引脚是否被按下
if (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_12) == 0)
{
Delay_ms(20); // 等待20毫秒以消除按键抖动
// 再次检查以确认按键确实被按下
while (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_12) == 0);
Delay_ms(20); // 等待20毫秒以消除按键抖动
KeyNum = 2; // 设置按键编号为2
}
return KeyNum; // 返回按键编号
}
通过Key_Init
函数初始化GPIOB端口的第12和13引脚为上拉输入模式,用于检测按键状态。在Key_GetNum
函数中,程序通过检测这两个引脚的电平变化来判断是否有按键被按下,并通过延时函数Delay_ms
消除按键抖动的影响。当检测到按键按下时,程序会再次检查以确认按键状态,并根据按下的按键编号设置KeyNum
变量,最后返回按键编号。
(3)main函数:
#include "stm32f10x.h"
#include "Delay.h"
#include "Key.h"
#include "Relay.h"
uint8_t KeyNum; // 定义按键编号变量
int main(void) // 主函数入口
{
Relay_Init(); // 初始化蜂鸣器
Key_Init(); // 初始化按键
while (1) // 主循环
{
KeyNum = Key_GetNum(); // 调用按键检测函数,获取按键编号
if (KeyNum == 1) // 如果检测到按键1被按下
{
Buzzer_ON(); // 打开蜂鸣器
}
if (KeyNum == 2) // 如果检测到按键2被按下
{
Buzzer_OFF(); // 关闭蜂鸣器
}
}
}
在main
函数中,程序首先调用Relay_Init
来初始化蜂鸣器,设置GPIOB的第1引脚用于控制继电器触发。接着,调用Key_Init
来初始化按键,配置GPIOB的第12和13引脚为上拉输入模式,用于检测按键状态。程序进入一个无限循环,不断检测按键状态。通过调用Key_GetNum
函数,程序获取当前被按下的按键编号。如果检测到按键1被按下,Buzzer_ON
函数被调用,使GPIOB的第1引脚输出低电平,从而激活蜂鸣器。如果检测到按键2被按下,Buzzer_OFF
函数被调用,使GPIOB的第1引脚输出高电平,关闭蜂鸣器。
(4)接线图:
继电器接线 | |
DC+ | 3.3V |
DC- | GND |
IN | PB1 |
NC | NC |
COM | GND(蜂鸣器低电平触发) |
NO | 蜂鸣器I/O口 |
蜂鸣器 | |
VCC | 5V |
I/O | 继电器NO常开接口 |
GND | GND |
按键 | |
KEY1 | PB13 |
KEY2 | PB12 |
四、代码下载:
通过网盘分享的文件:31-继电器控制蜂鸣器
链接: https://pan.baidu.com/s/1_HvI57duzuiyVw6uGq_OFA?pwd=ger8 提取码: ger8
作者:The_xzs