一篇文章教会你继电器模块原理及使用,附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

物联沃分享整理
物联沃-IOTWORD物联网 » 一篇文章教会你继电器模块原理及使用,附STM32代码示例

发表回复