首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

一篇文章教会你继电器模块原理及使用,附STM32代码示例

  • 25-02-17 08:21
  • 3172
  • 12508
blog.csdn.net

目录

一、继电器介绍:

二、继电器使用说明:

(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)继电器控制代码:

  1. #include "stm32f10x.h" // Device header
  2. void Relay_Init(void){
  3. // 使能GPIOB端口的时钟
  4. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
  5. // 定义GPIO初始化结构体
  6. GPIO_InitTypeDef GPIO_InitStructure;
  7. // 设置GPIOB引脚1为推挽输出模式,速度为50MHz
  8. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  9. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
  10. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  11. GPIO_Init(GPIOB, &GPIO_InitStructure);
  12. // 将GPIOB的第1引脚设置为高电平,停止导通,继电器设置为低电平触发
  13. GPIO_SetBits(GPIOB, GPIO_Pin_1);
  14. }
  15. void Buzzer_ON(void){
  16. // 将GPIOB的第1引脚设置为低电平
  17. GPIO_ResetBits(GPIOB, GPIO_Pin_1);
  18. }
  19. void Buzzer_OFF(void){//关闭蜂鸣器
  20. // 将GPIOB的第1引脚设置为高电平
  21. GPIO_SetBits(GPIOB, GPIO_Pin_1);
  22. }

Relay_Init函数首先使能GPIOB端口的时钟,然后配置GPIOB的第1引脚为推挽输出模式,速度为50MHz,用于控制继电器。初始化后,该引脚被设置为高电平,以确保继电器在默认状态下不导通(继电器是低电平触发)。Buzzer_ON函数通过将GPIOB的第1引脚设置为低电平来激活蜂鸣器,而Buzzer_OFF函数则通过设置引脚为高电平来关闭蜂鸣器。这样设计允许通过改变GPIO引脚的电平状态来控制蜂鸣器的开关,实现声音报警或提示功能。 

(2)按键控制代码:

  1. #include "stm32f10x.h" // 包含STM32F10x系列微控制器的头文件
  2. #include "Delay.h" // 包含延迟函数的头文件
  3. // 按键初始化函数
  4. void Key_Init(void)
  5. {
  6. // 使能GPIOB端口的时钟
  7. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
  8. // 定义GPIO初始化结构体
  9. GPIO_InitTypeDef GPIO_InitStructure;
  10. // 设置GPIOB引脚12和13为上拉输入模式,速度为50MHz
  11. GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; // 即内部上拉输入模式
  12. GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_12;
  13. GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  14. // 初始化GPIOB
  15. GPIO_Init(GPIOB, &GPIO_InitStructure);
  16. }
  17. // 获取按键编号的函数
  18. uint8_t Key_GetNum(void)
  19. {
  20. uint8_t KeyNum = 0; // 定义按键编号变量,并初始化为0
  21. // 检测GPIOB的第13引脚是否被按下
  22. if (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_13) == 0)
  23. {
  24. Delay_ms(20); // 等待20毫秒以消除按键抖动
  25. // 再次检查以确认按键确实被按下
  26. while (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_13) == 0);
  27. Delay_ms(20); // 等待20毫秒以消除按键抖动
  28. KeyNum = 1; // 设置按键编号为1
  29. }
  30. // 检测GPIOB的第12引脚是否被按下
  31. if (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_12) == 0)
  32. {
  33. Delay_ms(20); // 等待20毫秒以消除按键抖动
  34. // 再次检查以确认按键确实被按下
  35. while (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_12) == 0);
  36. Delay_ms(20); // 等待20毫秒以消除按键抖动
  37. KeyNum = 2; // 设置按键编号为2
  38. }
  39. return KeyNum; // 返回按键编号
  40. }

通过Key_Init函数初始化GPIOB端口的第12和13引脚为上拉输入模式,用于检测按键状态。在Key_GetNum函数中,程序通过检测这两个引脚的电平变化来判断是否有按键被按下,并通过延时函数Delay_ms消除按键抖动的影响。当检测到按键按下时,程序会再次检查以确认按键状态,并根据按下的按键编号设置KeyNum变量,最后返回按键编号。 

(3)main函数:

  1. #include "stm32f10x.h"
  2. #include "Delay.h"
  3. #include "Key.h"
  4. #include "Relay.h"
  5. uint8_t KeyNum; // 定义按键编号变量
  6. int main(void) // 主函数入口
  7. {
  8. Relay_Init(); // 初始化蜂鸣器
  9. Key_Init(); // 初始化按键
  10. while (1) // 主循环
  11. {
  12. KeyNum = Key_GetNum(); // 调用按键检测函数,获取按键编号
  13. if (KeyNum == 1) // 如果检测到按键1被按下
  14. {
  15. Buzzer_ON(); // 打开蜂鸣器
  16. }
  17. if (KeyNum == 2) // 如果检测到按键2被按下
  18. {
  19. Buzzer_OFF(); // 关闭蜂鸣器
  20. }
  21. }
  22. }

在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
INPB1
NCNC
COMGND(蜂鸣器低电平触发)
NO蜂鸣器I/O口
蜂鸣器
VCC5V
I/O继电器NO常开接口
GNDGND
按键
KEY1PB13
KEY2PB12

四、代码下载:

通过网盘分享的文件:31-继电器控制蜂鸣器
链接: https://pan.baidu.com/s/1_HvI57duzuiyVw6uGq_OFA?pwd=ger8 提取码: ger8

注:本文转载自blog.csdn.net的The_xzs的文章"https://blog.csdn.net/The_xz/article/details/144915333"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2491) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

124
嵌入式
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top