完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
1、实物图
2、继电器是什么 3、手动开关 4、继电器开关 当2个XQ引脚通电时,(电磁感应定律)电磁铁会产生磁,从而吸附上面的衔铁向下,下面的CK常开电路导通。 单片机可以直接驱动2个XQ引脚(单片机输出的电流较小),也可以借助驱动电路(ULN2003或者三极管)来驱动XQ引脚,经过ULN2003可以输出较大的电流。 5、原理图 2个XQ引脚接在P26端子上,然后连接ULN2003,输出到继电器J1、J2上。 注意:通过ULN2003的电平会取反(输入为0则输出为1,输入为1则输出为0) 继电器一个XQ引脚接高电平5V,一个XQ引脚接J1/J2,当J1为低电平时继电器1导通,J2为低电平时继电器2导通,并且导通时对应LED会点亮。还有三个输出引脚,对应继电器上的1A(开关柄),1B(常闭),1C(常开)。 对继电器的控制变成了对IO口电平的控制,输出高电平(ULN2003会翻转电平输出低电平)即可打开继电器,同理,输出低电平即关闭继电器。 6、程序设计 main函数 #include "stm32f10x.h" #include "sys.h" #include "delay.h" #include "touch_key.h" #include "relay.h" int main (void) { RCC_Configuration(); //系统时钟初始化 TOUCH_KEY_Init();//触摸按键初始化 RELAY_Init();//继电器初始化 while(1) { if(!GPIO_ReadInputDataBit(TOUCH_KEYPORT,TOUCH_KEY_A))RELAY_1(1); //当按键A按下时继电器1标志置位 if(!GPIO_ReadInputDataBit(TOUCH_KEYPORT,TOUCH_KEY_B))RELAY_1(0); //当按键B按下时继电器1标志置位 if(!GPIO_ReadInputDataBit(TOUCH_KEYPORT,TOUCH_KEY_C))RELAY_2(1); //当按键C按下时继电器2标志置位 if(!GPIO_ReadInputDataBit(TOUCH_KEYPORT,TOUCH_KEY_D))RELAY_2(0); //当按键D按下时继电器2标志置位 } } relay.c函数 /* 注意: 本程序所占用的GPIO接口PA13、PA14上电后为JTAG功能, 需要在RCC程序里启动AFIO时钟,再在RELAY_Init函数里加入: GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE); // 改变指定管脚的映射,完全禁用JTAG+SW-DP才能将JATG接口重定义为GPIO */ #include "relay.h" //继电器的接口初始化 void RELAY_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC | RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOE, ENABLE); //APB2外设时钟使能 RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);//启动AFIO重映射功能时钟 GPIO_InitStructure.GPIO_Pin = RELAY1 | RELAY2; //选择端口号(0~15或all) GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //选择IO接口工作方式 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //设置IO接口速度(2/10/50MHz) GPIO_Init(RELAYPORT, &GPIO_InitStructure); //必须禁用JTAG功能才能做GPIO使用 GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE);// 改变指定管脚的映射,完全禁用JTAG+SW-DP GPIO_ResetBits(RELAYPORT,RELAY1 | RELAY2); //都为低电平(0) 初始为关继电器 } //继电器的控制程序(c=0继电器放开,c=1继电器吸合) void RELAY_1(u8 c) { GPIO_WriteBit(RELAYPORT,RELAY1,(BitAction)(c));//通过参数值写入接口 } //继电器的控制程序(c=0继电器放开,c=1继电器吸合) void RELAY_2(u8 c) { GPIO_WriteBit(RELAYPORT,RELAY2,(BitAction)(c));//通过参数值写入接口 } relay.h文件 #ifndef __RELAY_H #define __RELAY_H #include "sys.h" #define RELAYPORT GPIOA //定义IO接口 #define RELAY1 GPIO_Pin_14 //定义IO接口 #define RELAY2 GPIO_Pin_13 //定义IO接口 void RELAY_Init(void);//继电器初始化 void RELAY_1(u8 c);//继电器控制1 void RELAY_2(u8 c);//继电器控制2 #endif 注意:控制继电器的两个引脚与JTAG复用了,且上电默认为JTAG模式,如果需要做GPIO使用,则需要将其重映射为GPIO,调用GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable, ENABLE) |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1771 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1619 浏览 1 评论
1070 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
724 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1673 浏览 2 评论
1936浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
729浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
569浏览 3评论
594浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
552浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 18:00 , Processed in 1.084699 second(s), Total 79, Slave 62 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号