STM32控制继电器的实现方法

STM32使用继电器

其实继电器简单来说就是一个开关,VCC表示电源正极、GND表示电源负极、IN表示信号输入脚,COM表示公共端,NC(normal close)表示常闭端,NO(normal open)表示常开端。一般情况下是常闭状态

引脚 解释
VCC 电源正极(多少V继电器就用多少V供电)
GND 电源负极
IN 信号输入脚(一般有低电平触发和高电平触发两种,如低电平触发IN口输入低电平时NO和COM导通)
NO 默认状态是和COM不导通
COM 不同状态下与NO、NC的导通状态不同
NC 默认状态和COM导通

img

有些厂家生产的5V继电器STM32的3V3或者5V都不一定能够驱动,所以买之前要去评论区看看。

注意:继电器的GND和单片机的GND需要共地,也可用同一电源来达到共地的效果。

两种工作模式:(以高电平触发为例)

  • 默认常开模式,信号触发时闭合
  • 使用NO和COM,把NO和COM当成一个开关设计一个电路,默认情况下NO和COM为打开状态,高电平触发时开关闭合。

    如果需要电平触发时用电器才工作可以使用这种模式。

  • 默认常闭模式,信号触发时断开
  • 使用NC和COM,把NC和COM当成一个开关设计一个电路,默认情况下NC和COM为闭合状态,高电平触发时开关打开。

    这种模式一般情况下用电器是正常在工作的,高电平触发时才停止。

    示例

    长时待机,信号触发启动

    继电器 STM32
    VCC(输入端) 3V3/5V
    GND(输入端) GND
    IN(输入端) GPIO
    NO(输出端) 连接供电VCC【VCC的大小和用电器有关】
    COM(输出端) 工作时NO和COM口导通,相当于COM为供电VCC
    NC(输出端)
  • 代码【使用GPIO输出高低电平就可以实现】
  • #include "stm32f10x.h"                  // Device header
    #include "relay.h"
    /*
       使用PA11进行输出
       | 继电器        | STM32   |
       | ------------- | ------- |
       | VCC(输入端) | 3V3     |
       | GND(输入端) | GND     |
       | IN(输入端)  | GPIO    |
       | NO(输出端)  | 供电VCC |
       | COM(输出端) | 输出GND |
       | NC(输出端)  |         |
    */
    
    #define Relay_PORT GPIOA
    #define Relay_PIN GPIO_Pin_11
    #define Relay_RCC RCC_APB2Periph_GPIOA
    
    void relay_init(void)
    {
       RCC_APB2PeriphClockCmd(Relay_RCC, ENABLE);
       GPIO_InitTypeDef GPIO_InitStructure;
       GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
       GPIO_InitStructure.GPIO_Pin = Relay_PIN;
       GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
       GPIO_Init(Relay_PORT, &GPIO_InitStructure);
       
       RCC_APB2PeriphClockCmd(Door_RCC, ENABLE);
       GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
       GPIO_InitStructure.GPIO_Pin = Door_PIN;
       GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
       GPIO_Init(Door_PORT, &GPIO_InitStructure);
    }
    
    // 高电平触发
    void relay_On(void) 
    {
       GPIO_SetBits(Relay_PORT, Relay_PIN);
    }
    
    void relay_Off(void) 
    {
       GPIO_ResetBits(Relay_PORT, Relay_PIN);
    }
    
    物联沃分享整理
    物联沃-IOTWORD物联网 » STM32控制继电器的实现方法

    发表评论