这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » DIY与开源设计 » 电子DIY » Let'sDo第4期【液体流量检测仪】06过程贴:使用按键控制抽水泵的动作

共1条 1/1 1 跳转至

Let'sDo第4期【液体流量检测仪】06过程贴:使用按键控制抽水泵的动作

菜鸟
2025-01-18 22:26:07     打赏

今天和大家分享一下的继电器控制抽水泵通断任务的实现过程;

任务说明:使用用继电器控制抽水泵,继电器在不通电或者没导通情况下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口如下所示:

1.png

如上图所示:板载使用的按键为PC13引脚,况且外部已经安装了4.7K的上拉电阻,我们只需要配置成外部中断模式,然后检测低电平就可以;

拓展一下:中断的知识分享:

STM32的每个IO都可以作为外部中断输入。STM32的中断控制器支持19个外部中断/事件请求:

线0~15:对应外部IO口的输入中断。

线16:连接到PVD输出。

线17:连接到RTC闹钟事件。

线18:连接到USB唤醒事件。

Stm 32的中断配置方式:每个外部中断线可以独立的配置触发方式(上升沿,下降沿或者双边沿触发),触发/屏蔽,专用的状态位。

软件使用中断的编写思路:

软件配置步骤:

初始化IO口为输入。

开启IO口复用时钟。

设置IO口与中断线的映射关系。 

初始化线上中断,设置触发条件等。

配置中断分组(NVIC),并使能中断。

编写中断服务函数。 清除中断标志位

三:cube软件配置如下所示:

2.png

中断13的配置图如下所示:

3.png

同之前定时器、IIC、串口操作一样,需要配置一下中断的优先级;当然最重要的配置中断13线的优先级,并开启中断,如下所示:

4.png

这里继电器的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);
  }
}

五:实物演示如下:

123 00_00_00-00_00_30.gif

如上图所示:在按下继电器时,可以看到继电器板上的LED亮灭,任务继电器控制抽水泵通断任务完成;





关键词: 水泵     动作     继电器     中断    

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]