完善资料让更多小伙伴认识你,还能领取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) |
|
|
|
只有小组成员才能发言,加入小组>>
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
529 浏览 2 评论
551 浏览 2 评论
信号发生器产生的正弦频率信号,用定时器进行捕获,当幅值低于3V后为什么MCU就无法捕获到了?
209 浏览 2 评论
876 浏览 2 评论
编码器模式下,中断内访问其他定时器cnt值,会导致进入中断次数丢失的原因?
859 浏览 2 评论
1331浏览 9评论
STM32出现error downloading following files怎么解决?
29浏览 3评论
stm32f103的RST复位后PWM就停止输出了,为什么?
37浏览 3评论
STM32G0空闲中断异常,且DMA接收不到数据是怎么回事?
25浏览 3评论
STM32F103用Timer3TRGO通道触发ADC,ADC在三路输出PWM高电平中间点采样,如何配置?
15浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-3-29 14:35 , Processed in 1.111041 second(s), Total 74, Slave 58 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 深圳华秋电子有限公司
电子发烧友 (电路图) 粤公网安备 44030402000349 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号