
继电器相当于开关,单片机通过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。建议用高电平触发,因为后面在选供电电压时会有多一种选择。
我也不明白是我调试的器件原因,还是什么?很奇葩。以下这句话和我的测试结果也有点不一样。可能是接触不良吧。


有两根一黑一红的电线,接通直流电源正负极就可以工作。

在接线这里,自己还是忘记了,让主控板与电源板共地,浪费时间去找原因。不共地,数据线怎么传输数据啊!!
代码很容易,就像控制led灯一样的原理,通过控制32单片机的引脚电平的高低来控制继电器的启闭,进而控制电磁铁。采用了正点原子的代码——KEY实验,所以其实只有WKUP_PRESS控制继电器,其他是控制led。
当然也出现了许多问题。
比如这个:

(1)、烧录器选错了,改正如下图:


(2)、由于是复制了KEY实验的代码文件夹,导致路径错误

(3)、由于是复制了KEY实验的代码文件夹,导致文件夹名称改变

.map文档是包含的,一定要把KEY.map改为ELECTROMAGNET.map,其他的话就不太明白了,反正现在是能烧入代码了。方法:把KEY的有关文档全部删掉,编译一次,根据错误提示来改就行。不过这样子做,会keil5会把烧录器改为第一项,办法参考上面的(1)问题。
#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);
}
}
#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拉低
}
#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
Unity自动旋转动画1.开门需要门把手先动,门再动2.关门需要门先动,门把手再动3.中途播放过程中不可以再次进行操作觉得太复杂?查看我的文章开关门简易进阶版效果:如果这个门可以直接打开的话,就不需要放置"门把手"如果门把手还有钥匙需要旋转,那就可以把钥匙放在门把手的"门把手",理论上是可以无限套娃的可调整参数有:角度,反向,轴向,速度运行时点击Test进行测试自己写的代码比较垃圾,命名与结构比较拉,高手轻点喷,新手有类似的需求可以拿去做参考上代码usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;u
文章目录1.开发板选择*用到的资源2.串口通信(个人理解)3.代码分析(注释比较详细)1.主函数2.串口1配置3.串口2配置以及中断函数4.注意问题5.源码链接1.开发板选择我用的是STM32F103RCT6的板子,不过代码大概在F103系列的板子上都可以运行,我试过在野火103的霸道板上也可以,主要看一下串口对应的引脚一不一样就行了,不一样的就更改一下。*用到的资源keil5软件这里用到了两个串口资源,采集数据一个,串口通信一个,板子对应引脚如下:串口1,TX:PA9,RX:PA10串口2,TX:PA2,RX:PA32.串口通信(个人理解)我就从串口采集传感器数据这个过程说一下我自己的理解,
LL库和HAL库简介LL:Low-Layer,底层库HAL:HardwareAbstractionLayer,硬件抽象层库LL库和hal库对比,很精简,这实际上是一个精简的库。LL库的配置选择如下:在STM32CUBEMX中,点击菜单的“ProjectManager”–>“AdvancedSettings”,在下面的界面中选择“AdvancedSettings”,然后在每个模块后面选择使用的库总结:1、如果使用的MCU是小容量的,那么STM32CubeLL将是最佳选择;2、如果结合可移植性和优化,使用STM32CubeHAL并使用特定的优化实现替换一些调用,可保持最大的可移植性。另外HAL和L
我想在我的VPS上运行几个(超过2个)基于Rack的微型应用程序,而VPS已经运行了一个大型Rails应用程序。Rails应用程序使用传统的Unicorn和nginx组合,它需要我VPS上的大部分RAM。我尝试为每个应用程序添加类似的Unicorn配置,这让我得出结论,RAM不足。所以我的问题是:是否可以设置一个小型内存节省服务器,让我可以同时运行多个Sinatra应用程序?更新:以防万一,我不太关心性能。这些应用并非旨在执行任何严肃的工作。更新2:基于与Nginx共享的套接字的方法优于使用端口的方法。谢谢! 最佳答案 我对这个问题
本文代码使用HAL库。文章目录前言一、MCP4017的重要特性二、MCP4017计算RBW阻值三、MCP4017地址四、MCP4017读写函数五、CubeMX创建工程(利用ADC测量MCP4017电压)、对应代码:总结前言一、MCP4017的重要特性蓝桥杯板子上的是MCP4017T-104ELT,如图1。MCP4017是一个可编程电阻,通过写入的数值可以改变电阻的大小。重点在于6引脚(W),5引脚(B
STM32OTA应用开发——通过USB实现OTA升级目录STM32OTA应用开发——通过USB实现OTA升级前言1环境搭建2功能描述3BootLoader的制作4APP的制作5烧录下载配置6运行测试结束语前言什么是OTA?百度百科:空中下载技术(Over-the-AirTechnology;OTA),是通过移动通信的空中接口实现对移动终端设备及SIM卡数据进行远程管理的技术。经过公网多年的应用与发展,已十分成熟,网络运营商通过OTA技术实现SIM卡远程管理,还能提供移动化的新业务下载功能。实际上,现在我们所说的OTA比百度百科的定义还要更广泛,OTA的形式已经不再局限于手机和SIM卡,只要涉及
文章目录1简介2绪论2.1课题背景与目的3系统设计详细设计描述3.2硬件部分温度测量电路其他电路部分3.3软件部分主程序子系统程序温湿度程序流程键盘显示子程序3.4实现效果3.5部分相关代码4最后1简介Hi,大家好,这里是丹成学长,今天向大家介绍一个单片机项目基于单片机的智能温控农业大棚系统大家可用于课程设计或毕业设计单片机-嵌入式毕设选题大全及项目分享:https://blog.csdn.net/m0_71572576/article/details/1254090522绪论2.1课题背景与目的近年来我国的温室控制取得了长足的进步,首先在温室群控制方面,进行了初步的探索和理论研究,其次在温室
解析数据 进入阿里云的IOTStdio,点击新建项目。 新建项目后点击新建Web应用。名称 应用名称随便填写 创建完成后我们进入应用。 在左侧组件处拖入一个指示灯和一个开关。 点击指示灯组件,点击配置数据源 选择我们的产品、数据、和属性。 我们还可以配置开和关的显示颜色。 点击按钮,配置交互动作。 选择设备和属性,设置值位置点击数据来源,选择组件值 配置完成后进入预览,点击按钮,在esp8266就会收到来自平台的json格式的数据,MCU端需要做的就是解析来自平台的数据,进而达到控制下
目录前言一、定时器部分和按键部分二、PWM调速三、电机驱动部分三、编码器接口部分(测速)四.主函数总结推荐STM32学习课程:[6-8]编码器接口测速_哔哩哔哩_bilibili[6-8]编码器接口测速是STM32入门教程-2022持续更新中的第20集视频,该合集共计30集,视频收藏或关注UP主,及时了解更多相关视频内容。https://www.bilibili.com/video/BV1th411z7sn/?p=20&spm_id_from=pageDriver&vd_source=ed36b2700bbc2bac7746c270bc391540OLED显示屏代码
文章目录1.I2C与SPI通信协议对比2.四脚OLED与六脚OLED3.I2C驱动OLED显示oled.h&oled.c:汉字取模&oledfont.h:main.c显示示例:连线方法:4.SPI驱动OLED显示1.I2C与SPI通信协议对比I2C(Inter-IntegratedCircuit)SPI(SerialPeripheralInterface)传输方式半双工全双工传输速度低速,100Kbps----4Mbps高速,30Mbps以上几线制4线制:VCC,GND,SCL,SDA6/7线制:VCC,GND,SCLK(D0),MOSI(D1/SDA),DC,CS/SS主从模式多主机总线,通