STM32F407控制微型推拉式电磁铁(通过继电器)

1、继电器

在这里插入图片描述
继电器相当于开关,单片机通过io口高低电平的控制来控制继电器的开闭。采用继电器的好处除了能够用低电压控制高电压(如32单片机控制220V的电压)外,还可以防止电流反冲,弄烧单片机。
本文采用3.3v的电磁铁,明明可以直接接在单片机的io口上,像led那样使用,为什么还要继电器?就是防止电流反冲。
在这里插入图片描述
如何接线?
在这里插入图片描述
在这里插入图片描述
如果不明白,NC、NO什么意思,建议用万用表测一下,以防万一。

NO(英文normal open缩写)为常开触点
NC(英文normal close缩写)为常闭触点(实际继电器上会以NC NO为标注) 。
常开触点NO:就是在线圈通电时处于闭合状态,在线圈断电时处于断开状态。
常闭触点NC:就是在线圈断电时处于闭合状态,在线圈通电时处于断开状态。
在这里插入图片描述

关于继电器的高电平触发还是低电平触发?还是接5V还是3.3V?
先看这张我统计的表
在这里插入图片描述
给继电器供电无论3.3V、5V,高电平触发都达到效果,而低电平就不太好。而32单片机的数据脚的高电平是3.3V。建议用高电平触发,因为后面在选供电电压时会有多一种选择。
我也不明白是我调试的器件原因,还是什么?很奇葩。以下这句话和我的测试结果也有点不一样。可能是接触不良吧。
在这里插入图片描述

2、电磁铁

在这里插入图片描述
有两根一黑一红的电线,接通直流电源正负极就可以工作。

3、实物

在这里插入图片描述
在接线这里,自己还是忘记了,让主控板与电源板共地,浪费时间去找原因。不共地,数据线怎么传输数据啊!!

4、代码

代码很容易,就像控制led灯一样的原理,通过控制32单片机的引脚电平的高低来控制继电器的启闭,进而控制电磁铁。采用了正点原子的代码——KEY实验,所以其实只有WKUP_PRESS控制继电器,其他是控制led。

当然也出现了许多问题。
比如这个:在这里插入图片描述
在这里插入图片描述

(1)、烧录器选错了,改正如下图:
在这里插入图片描述
在这里插入图片描述
(2)、由于是复制了KEY实验的代码文件夹,导致路径错误
在这里插入图片描述
(3)、由于是复制了KEY实验的代码文件夹,导致文件夹名称改变
在这里插入图片描述
.map文档是包含的,一定要把KEY.map改为ELECTROMAGNET.map,其他的话就不太明白了,反正现在是能烧入代码了。方法:把KEY的有关文档全部删掉,编译一次,根据错误提示来改就行。不过这样子做,会keil5会把烧录器改为第一项,办法参考上面的(1)问题。

main.c

#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "electromagnet.h"
#include "key.h"


//ALIENTEK 探索者STM32F407开发板 实验3
//按键输入实验-库函数版本 
//技术支持:www.openedv.com
//淘宝店铺:http://eboard.taobao.com
//广州市星翼电子科技有限公司    
//作者:正点原子 @ALIENTEK 


int main(void)
{ 
 
  u8 key;           //保存键值
	delay_init(168);  //初始化延时函数
	LED_Init();				//初始化LED端口 
	ELECTROMAGNET_Init();//初始化ELECTROMAGNET端口
	KEY_Init();       //初始化与按键连接的硬件接口
	LED0=0;				  	//先点亮红灯
	ELECTROMAGNET=0;  //电磁铁高电平触发,先拉低电平
	while(1)
	{
		key=KEY_Scan(0);		//得到键值
	   	if(key)
		{						   
			switch(key)
			{				 
				case WKUP_PRES:	//控制电磁铁
					ELECTROMAGNET=!ELECTROMAGNET;
					break;
				case KEY0_PRES:	//控制LED0翻转
					LED0=!LED0;
					break;
				case KEY1_PRES:	//控制LED1翻转	 
					LED1=!LED1;
					break;
				case KEY2_PRES:	//同时控制LED0,LED1翻转 
					LED0=!LED0;
					LED1=!LED1;
					break;
			}
		}else delay_ms(10); 
	}

}

electromagnet.c

#include "electromagnet.h" 
//	 
//本程序只供学习使用,未经作者许可,不得用于其它任何用途
//ALIENTEK STM32F407开发板
//蜂鸣器驱动代码	   
//正点原子@ALIENTEK
//技术论坛:www.openedv.com
//创建日期:2014/5/3
//版本:V1.0
//版权所有,盗版必究。
//Copyright(C) 广州市星翼电子科技有限公司 2014-2024
//All rights reserved									  
// 	 

//初始化PC0为输出口		    
//BEEP IO初始化
void ELECTROMAGNET_Init(void)
{   
  GPIO_InitTypeDef  GPIO_InitStructure;

  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOC, ENABLE);//使能GPIOC时钟
  
  //初始化电磁铁对应引脚GPIOC0
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;//普通输出模式
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽输出
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHz
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN;//下拉
  GPIO_Init(GPIOC, &GPIO_InitStructure);//初始化GPIO
	
  GPIO_ResetBits(GPIOC,GPIO_Pin_0);  //电磁铁对应引脚GPIOC0拉低
}

electromagnet.h

#ifndef __ELECTROMAGNET_H	 
#define __ELECTROMAGNET_H	 
#include "sys.h" 
//	 
//本程序只供学习使用,未经作者许可,不得用于其它任何用途
//ALIENTEK STM32F407开发板
//蜂鸣器驱动代码	   
//正点原子@ALIENTEK
//技术论坛:www.openedv.com
//创建日期:2014/5/3
//版本:V1.0
//版权所有,盗版必究。
//Copyright(C) 广州市星翼电子科技有限公司 2014-2024
//All rights reserved									  
// 

#define ELECTROMAGNET PCout(0)	// 电磁铁控制IO 

void ELECTROMAGNET_Init(void);//初始化		 				    
#endif

引用\[1\]: 继电器可以通过单片机的IO口高低电平来控制其开闭状态。使用继电器的好处是可以用低电压控制高电压,并且可以防止电流反冲。即使电磁铁的工作电压为3.3V,也可以直接接在单片机的IO口上,像LED一样使用。但为了防止电流反冲,使用继电器是更安全的选择。\[1\] 引用\[2\]: 关于继电器的触发方,无论是使用3.3V还是5V供电,高电平触发都可以达到效果,而低电平触发效果不太好。32单片机的数据脚的高电平是3.3V,因此建议使用高电平触发。\[2\] 引用\[3\]: 继电器上的触点通常标注为NO(常开触点)和NC(常闭触点)。常开触点在线圈通电时处于闭合状态,在线圈断电时处于断开状态。常闭触点则相反,在线圈断电时处于闭合状态,在线圈通电时处于断开状态。\[3\] 要实现贯穿推拉电磁铁的匀速运动,可以通过以下步骤实现: 1. 首先,将电磁铁的线圈连接到继电器的触点上。如果需要推动电磁铁,可以将电磁铁的一个极性连接到继电器的常开触点(NO),另一个极性连接到继电器的公共端子(COM)。 2. 然后,将继电器控制端口连接到单片机的IO口。根据继电器的触发方(高电平触发或低电平触发),将IO口设置为相应的高或低电平来触发继电器的动作。 3. 当单片机输出相应的电平信号时,继电器将吸合,使电磁铁通电,从而产生磁场。这将导致电磁铁的推动部分(如铁芯)向一个方向运动。 4. 当单片机停止输出电平信号时,继电器释放,电磁铁断电,磁场消失。这将导致电磁铁的推动部分返回原来的位置。 5. 通过控制单片机输出电平信号的时间和频率,可以实现电磁铁的匀速运动。 需要注意的是,具体的接线方控制逻辑可能会因电磁铁继电器的型号而有所不同。因此,在实际操作中,建议参考电磁铁继电器的规格说明书,并使用万用表进行测试,以确保正确的接线和操作。 #### 引用[.reference_title] - *1* *2* *3* [STM32F407控制微型推拉电磁铁(通过继电器)](https://blog.csdn.net/m0_48808835/article/details/129769887)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值