资讯详情

【STM32单片机】继电器控制电磁阀与行程(限位)开关的应用

STM32单片机高电平3.3V,电磁阀的工作电压通常为12V/24V,这意味着电磁阀需要由继电器控制。继电器的本质是 继电器是高电平触发还是低电平触发取决于上拉/下拉电阻。

限位开关类似于继电器,均为单刀双掷开关。作者设置为(当然也可以用低电平触发)。限位开关COM端连接单片机VCC,NC端连接单片机GND,NO端连接单片机引脚。未触发状态下COM端与NC当限位开关触发端连接时,由于COM端与NO端连接,引脚电平发生变化(低电平->高电平),读取电平变化后完成动作。 例如,作者配置了引脚PD一路控制继电器,PA0是限位开关COM端,通过PA控制0的引脚电平变化PD15引脚电平变化。

#include "gpio.h" void User_GPIO_Init(void) { 
             GPIO_InitTypeDef  gpio;   RCC_APB2PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);   //配置引脚 PA0   gpio.GPIO_Pin = GPIO_Pin_0;   gpio.GPIO_Speed=GPIO_Speed_50MHz;   gpio.GPIO_Mode = GPIO_Mode_IN; //注意设置上拉输入      gpio.GPIO_OType = GPIO_OType_PP;   GPIO_Init(GPIOA, &gpio);   GPIO_ResetBits(GPIOA,GPIO_Pin_0);   //如果设置为低电平触发,则必须将电平置高   //GPIO_SetBits(GPIOA,GPIO_Pin_0); }  //如果读到引脚变化(高电平触发)  if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)==1)  { 
           //PD15引脚一路控制继电器   GPIO_ResetBits(GPIOD,GPIO_Pin_15);///关闭电磁阀   delay_ms(10);  }  else   { 
          GPIO_SetBits(GPIOD,GPIO_Pin_15);//保持电磁阀打开 //或写成 GPIO_WriteBit(GPIOD,GPIO_Pin_15,(BitAction)!GPIO_ReadOutputDataBit(GPIOD,GPIO_Pin_15)));   delay_ms(10);  } 

当然,仅仅通过限位开关触发来控制电路是不够的。例如,限位开关触发后仍保持触发状态;遥控模式仍然可以通过切换完成一系列动作。

extern int flag;	//将标志位设置为全局变量,适合多线程使用
if(TelCtrlData.switch_r==2&&TelCtrlData.switch_l==2)
{ 
       
//只有满足限位开关触发并且为第一次触发才进行新的功能
	if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)==1&&flag==0)
	{ 
       	
		flag=1;//将标志位置1表明已进入功能一次
		GPIO_ResetBits(GPIOD,GPIO_Pin_15);
		OSTimeDly(10,OS_OPT_TIME_PERIODIC,&err);
	}
	else if(flag==1)//只要进入功能就一直保持状态(无论限位开关是否再次触发)
	{ 
       
		GPIO_ResetBits(GPIOD,GPIO_Pin_15);
		OSTimeDly(10,OS_OPT_TIME_PERIODIC,&err);
	}
	else //未触发时的状态
	{ 
       
		GPIO_SetBits(GPIOD,GPIO_Pin_15);
		OSTimeDly(10,OS_OPT_TIME_PERIODIC,&err);
	}
}
	else flag=0;	//切换遥控器模式时将flag置零,功能才得以重复使用

一位单片机爱好者

标签: 12v24v电磁继电器j电磁电器开关24v电磁继电器52阀继电器保持关闭

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台