【普中Hi3861开发攻略--基于鸿蒙OS】-- 第 14 章 继电器实验
本章我们通过另外一个实验来讲述单片机 IO 口的输出。通过单片机的一个 IO 口控制板载继电器,实现继电器的开和断控制。
(1)实验平台:
普中Hi3861鸿蒙物联网WIFI套件https://item.taobao.com/item.htm?id=829136021914(2)资料下载:普中科技-各型号产品资料下载链接
前面章节我们已经介绍了使用 IO 口输出高低电平,本章我们通过另外一个实验来讲述单片机 IO 口的输出。通过单片机的一个 IO 口控制板载继电器,实现继电器的开和断控制。本章分为如下几部分内容:
14.1 实验介绍
14.1.1 实验简介
继电器是一种电子控制器件,相当于一个开关,接在任意线上,断开状态下线就断开,没导通,闭合状态下线就接在一起,导通。通常使用继电器可实现小电流控制大电流,或者低压控制高压等设备。比如芯片的GPIO 输出电平是3.3V,要控制 24V 或者 220V 高压设备,可选择继电器。 继电器接线示意图如下所示:
继电器接线示意图如下所示:
默认情况下,常闭触点和公共触点是导通连接在一起的,当继电器工作后,公共触点和常闭触点就断开,然后常开触点和公共触点导通连接在一起,这就像开关一样。
14.1.2 实验目的
继电器吸合一段时间后断开。
14.1.3 GPIO 函数使用
参考 LED 实验章节。
14.2 硬件设计
本实验使用到硬件资源如下:
(1)继电器模块
(2)Hi3861 GPIO
继电器模块电路如下所示:
由图可知,P1 端子的 RELAY 脚为继电器控制端,要使继电器工作,只需给端子的RELAY脚输出一个高电平,因此可使用导线将芯片的IO口与P1端子的RELAY脚连接,通过 GPIO 输出高电平即可,若要继电器不工作,则输出低电平。P2端子为继电器接线端子,COM 为公共触点、NO 为常开触点、NC 为常闭触点。
14.3 软件设计
将前面章节创建好的工程模板,复制一份,重命名为10_relay,如下所示:
然后在如下路径下新建 bsp_led.c 和 bsp_led.h 文件:
(1)修改 demo 文件夹下的 BUILD.gn 文件,如下所示:
(2)添加工程编译文件路径,如下所示
(3)修改 bsp_relay.c 文件,代码如下:
/**
****************************************************************************************************
* @file bsp_relay.c
* @author 普中科技
* @version V1.0
* @date 2024-06-05
* @brief 继电器实验
* @license Copyright (c) 2024-2034, 深圳市普中科技有限公司
****************************************************************************************************
* @attention
*
* 实验平台:普中-Hi3861
* 在线视频:https://space.bilibili.com/2146492485
* 公司网址:www.prechin.cn
* 购买地址:
*
*/
#include "bsp_relay.h"
//继电器初始化
void relay_init(void)
{
hi_gpio_init(); // GPIO初始化
hi_io_set_pull(RELAY_PIN, HI_IO_PULL_DOWN); // 设置GPIO下拉
hi_io_set_func(RELAY_PIN, RELAY_GPIO_FUN); // 设置IO为GPIO功能
hi_gpio_set_dir(RELAY_PIN, HI_GPIO_DIR_OUT); // 设置GPIO为输出模式
}
(4)修改 bsp_relay.h 文件,代码如下:
/**
****************************************************************************************************
* @file bsp_relay.h
* @author 普中科技
* @version V1.0
* @date 2024-06-05
* @brief 继电器实验
* @license Copyright (c) 2024-2034, 深圳市普中科技有限公司
****************************************************************************************************
* @attention
*
* 实验平台:普中-Hi3861
* 在线视频:https://space.bilibili.com/2146492485
* 公司网址:www.prechin.cn
* 购买地址:
*
*/
#ifndef BSP_RELAY_H
#define BSP_RELAY_H
#include "cmsis_os2.h"
#include "hi_io.h"
#include "hi_gpio.h"
//管脚定义
#define RELAY_PIN HI_IO_NAME_GPIO_14
#define RELAY_GPIO_FUN HI_IO_FUNC_GPIO_14_GPIO
#define RELAY(a) hi_gpio_set_ouput_val(RELAY_PIN,a)
//函数声明
void relay_init(void);
#endif
(5)修改 template.c 文件,代码如下:
/**
****************************************************************************************************
* @file template.c
* @author 普中科技
* @version V1.0
* @date 2024-06-05
* @brief 继电器实验
* @license Copyright (c) 2024-2034, 深圳市普中科技有限公司
****************************************************************************************************
* @attention
*
* 实验平台:普中-Hi3861
* 在线视频:https://space.bilibili.com/2146492485
* 公司网址:www.prechin.cn
* 购买地址:
*
****************************************************************************************************
* 实验现象:继电器通电一段时间后断开
*
****************************************************************************************************
*/
#include <stdio.h>
#include <unistd.h>
#include "ohos_init.h"
#include "cmsis_os2.h"
#include "bsp_relay.h"
//继电器任务
osThreadId_t RELAY_Task_ID; //任务ID
void RELAY_Task(void)
{
relay_init();//继电器初始化
RELAY(1);//继电器吸合
sleep(3);//延时3S
RELAY(0);//继电器断开
while (1)
{
usleep(10*1000);
}
}
//继电器任务创建
void relay_task_create(void)
{
osThreadAttr_t taskOptions;
taskOptions.name = "RELAYTask"; // 任务的名字
taskOptions.attr_bits = 0; // 属性位
taskOptions.cb_mem = NULL; // 堆空间地址
taskOptions.cb_size = 0; // 堆空间大小
taskOptions.stack_mem = NULL; // 栈空间地址
taskOptions.stack_size = 1024; // 栈空间大小 单位:字节
taskOptions.priority = osPriorityNormal; // 任务的优先级
RELAY_Task_ID = osThreadNew((osThreadFunc_t)RELAY_Task, NULL, &taskOptions); // 创建任务1
if (RELAY_Task_ID != NULL)
{
printf("ID = %d, Create RELAY_Task_ID is OK!\n", RELAY_Task_ID);
}
}
/**
* @description: 初始化并创建任务
* @param {*}
* @return {*}
*/
static void template_demo(void)
{
printf("普中-Hi3861开发板--继电器实验\r\n");
relay_task_create();//继电器任务
}
SYS_RUN(template_demo);
14.4 实验现象
下载程序前,按照如下接线:
将程序下载到开发板内(可参考“2.2.5 程序下载运行”章节),打开串口调试助手“\5--开发工具\4-串口调试助手\UartAssist.exe”,波特率设置为115200,实验现象:继电器吸合一段时间后断开。
更多推荐
所有评论(0)