网站建设的基本教程,学电商,做的精美的门户网站推荐,东莞营销型高端网站建设1、继电器 继电器相当于开关#xff0c;单片机通过io口高低电平的控制来控制继电器的开闭。采用继电器的好处除了能够用低电压控制高电压#xff08;如32单片机控制220V的电压#xff09;外#xff0c;还可以防止电流反冲#xff0c;弄烧单片机。 本文采用3.3v的电磁铁单片机通过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(); //初始化与按键连接的硬件接口LED00; //先点亮红灯ELECTROMAGNET0; //电磁铁高电平触发,先拉低电平while(1){keyKEY_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时钟//初始化电磁铁对应引脚GPIOC0GPIO_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;//100MHzGPIO_InitStructure.GPIO_PuPd GPIO_PuPd_DOWN;//下拉GPIO_Init(GPIOC, GPIO_InitStructure);//初始化GPIOGPIO_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