STM32F407控制微型推拉式电磁铁(通过继电器) 您所在的位置:网站首页 门禁电磁铁接线图 STM32F407控制微型推拉式电磁铁(通过继电器)

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

2024-06-16 12:16| 来源: 网络整理| 查看: 265

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


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有