今天和大家分享一下的继电器控制抽水泵通断任务的实现过程;
任务说明:使用用继电器控制抽水泵,继电器在不通电或者没导通情况下COM端默认打到NC即相通,继电器开关导通后COM和NO打通,COM和NC断开。
一:本次活动中继电器使用的资料如下:
介绍
DFRobot单继电器阻止了电子模块的数量。它可以用于交互式项目。此继电器屏采用欧姆龙G5LA高品质继电器。它还可以用于控制照明、电气和其他设备。模块化设计使其易于扩展与Arduino董事会(不包括)。继电器输出状态由发光二极管表示。可以通过数字10端口进行控制,如电磁阀、灯具、电机等高电流或高压设备。
规范
类型:数字
单继电器板
额定直流:10A(NO) 5A(NC)
最大开关电压:150VAC 24VDC
数字接口
控制信号:TTL电平额定负载: 8A150VAC(无) 10A24VDC(无),5A250VAC(无/无) 5A24VDC(无/无)
最大开关功率: AC1200VA DC240W(无) AC625VA DC120W(无)
最快动作时间:10毫秒模块
引脚定义:引脚1-控制端,引脚2-电源(VCC),引脚3-接地
如资料所示:该模块的动作时间最快为10MS,所以我们在控制该继电器时候,为了延长继电器的使用寿命,控制的时候周期设置的大一些,防止继电器没有正常动作从而影响判断;
二:软件编写流程:
这里我们可以参考控制LED灯闪烁的任务进行编写,这里我增加一个按键控制的功能,当每次按下继电器时,动作取反;使用单片机的外部中断完成继电器的动作;
查看一下板载按键使用的IO口如下所示:
如上图所示:板载使用的按键为PC13引脚,况且外部已经安装了4.7K的上拉电阻,我们只需要配置成外部中断模式,然后检测低电平就可以;
拓展一下:中断的知识分享:
STM32的每个IO都可以作为外部中断输入。STM32的中断控制器支持19个外部中断/事件请求:
线0~15:对应外部IO口的输入中断。
线16:连接到PVD输出。
线17:连接到RTC闹钟事件。
线18:连接到USB唤醒事件。
Stm 32的中断配置方式:每个外部中断线可以独立的配置触发方式(上升沿,下降沿或者双边沿触发),触发/屏蔽,专用的状态位。
软件使用中断的编写思路:
软件配置步骤:
初始化IO口为输入。
开启IO口复用时钟。
设置IO口与中断线的映射关系。
初始化线上中断,设置触发条件等。
配置中断分组(NVIC),并使能中断。
编写中断服务函数。 清除中断标志位
三:cube软件配置如下所示:
中断13的配置图如下所示:
同之前定时器、IIC、串口操作一样,需要配置一下中断的优先级;当然最重要的配置中断13线的优先级,并开启中断,如下所示:
这里继电器的IO口使用PB13,设置参考LED的配置即可,这里不做过多的分享
四:软件代码编写:
4.1 GPIO口的初始化
/*Configure GPIO pin : PC13 */ GPIO_InitStruct.Pin = GPIO_PIN_13; GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING; GPIO_InitStruct.Pull = GPIO_PULLUP; HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); /*Configure GPIO pin : PA5 */ GPIO_InitStruct.Pin = GPIO_PIN_5; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); /*Configure GPIO pin : PB13 */ GPIO_InitStruct.Pin = GPIO_PIN_13; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); /*Configure GPIO pin : PC10 */ GPIO_InitStruct.Pin = GPIO_PIN_10; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_PULLUP; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); /* EXTI interrupt init*/ HAL_NVIC_SetPriority(EXTI15_10_IRQn, 3, 0); HAL_NVIC_EnableIRQ(EXTI15_10_IRQn);
4.2 在中断函数,对继电器的IO口进行操作:
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) { if (GPIO_Pin == GPIO_PIN_13) { HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_10); } }
五:实物演示如下:
如上图所示:在按下继电器时,可以看到继电器板上的LED亮灭,任务继电器控制抽水泵通断任务完成;