问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

STM32控制5V继电器模块详解

创作时间:
作者:
@小白创作中心

STM32控制5V继电器模块详解

引用
CSDN
1.
https://m.blog.csdn.net/qq_44016222/article/details/142511973

继电器(Relay)是一种电子控制器件,具有控制系统(又称输入回路)和被控制系统(又称输出回路),通常应用于自动控制电路中。它实际上是用较小的电流去控制较大电流的一种"自动开关",在电路中起着自动调节、安全保护、转换电路等作用。

以下是继电器模块的参数:

  • 型号:SRD-05VDC-SL-C
  • 工作电压:5V
  • 最大负载:250V/10A
  • 触发电流:5mA
  • 尺寸:25mm×50mm×18.5mm

模块原理

引脚描述

引脚名称
描述
DC+
电源正极
DC-
电源负极
IN
控制信号
NO
常开接口
COM
公共接口
NC
常闭接口

工作原理

利用电磁效应,当线圈两端加以电压时,电磁铁会产生磁力,导致衔铁吸合,此时弹簧压缩,金属触点连接到常开的一侧。当线圈两端没有电压时,电磁吸力也随之消失,衔铁就会在弹簧的反作用下返回原来的位置,常闭的金属触点导通。

继电器的驱动电流大概是50mA,而STM32的引脚输出电流大概在8mA,如果直接用IO口控制,驱动电流太小,继电器不会闭合。而三极管的作用就是类似开关控制,通过控制三极管的基极电流可以让三极管工作在截止和饱和导通状态,从而控制继电器闭合和断开。

程序设计

使用STM32F103C8T6控制5V继电器模块完成吸合和断开的操作。具体引脚分配如下:

  • RELAY_IN:PA0
  • OLED_SCL:PB11
  • OLED_SDA:PB10

main.c文件

#include "stm32f10x.h"
#include "led.h"
#include "usart.h"
#include "delay.h"
#include "oled.h"
#include "relay.h"

int main(void)
{ 
  SystemInit(); // 配置系统时钟为72M
  delay_init(72);
  LED_Init();
  LED_On();
  RELAY_Init();
  USART1_Config(); // 串口初始化

  OLED_Init();
  printf("Start \n");
  delay_ms(1000);

  OLED_Clear();
  // 显示“继电器:”
  OLED_ShowChinese(0,0,0,16,1);
  OLED_ShowChinese(16,0,1,16,1);
  OLED_ShowChinese(32,0,2,16,1);
  OLED_ShowChar(48,0,':',16,1);
  while (1)
  {
    RELAY_ON;
    LED_On();
    OLED_ShowChinese(48,24,3,16,1); // 闭
    OLED_ShowChinese(64,24,4,16,1); // 合
    delay_ms(1000);

    RELAY_OFF;
    LED_Off();
    OLED_ShowChinese(48,24,5,16,1); // 断
    OLED_ShowChinese(64,24,6,16,1); // 开
    delay_ms(1000);
  }
}

relay.h文件

#ifndef __RELAY_H
#define __RELAY_H
#include "stm32f10x.h"
#include "delay.h"
#include "sys.h"

// 继电器 GPIO宏定义
#define RELAY_CLK RCC_APB2Periph_GPIOA
#define RELAY_GPIO_PIN GPIO_Pin_0
#define RELAY_GPIO_PROT GPIOA
#define RELAY_ON GPIO_SetBits(RELAY_GPIO_PROT,RELAY_GPIO_PIN)
#define RELAY_OFF GPIO_ResetBits(RELAY_GPIO_PROT,RELAY_GPIO_PIN)

void RELAY_Init(void);
#endif

relay.c文件

#include "relay.h"

void RELAY_Init(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;
  RCC_APB2PeriphClockCmd(RELAY_CLK, ENABLE); // 配置时钟

  GPIO_InitStructure.GPIO_Pin = RELAY_GPIO_PIN;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO_Init(RELAY_GPIO_PROT, &GPIO_InitStructure);
  RELAY_OFF;
}

实验效果

(此处应补充实验效果的具体描述,例如继电器控制LED灯的开关效果等)

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号