国产risc-v微控制器读取干簧管传感器
本帖最后由 dirtwillfly 于 2025-6-22 13:46 编辑1. 使用的软硬件
1.1 开发环境
1)RT-Thread Studio
1.2 硬件
1)干簧管传感器模块1块
2)HPM5361EVK 1块
3)杜邦线 若干
2. 干簧管传感器
2.1 原理介绍
干簧管是一个电子开关,也叫磁簧开关(Reed Switch),是一个通过所施加的磁场操作的电开关。当没有外部磁场时,两个金属片由于间隔仅几个微米而不接触,干簧管处于断开状态。当外部磁场(如永久磁铁或电磁线圈)靠近时,磁场在两个金属片端点位置附近产生不同极性,使得金属片磁化。随着磁力的增加,当磁力超过金属片本身的弹力时,两个金属片会吸合导通电路。当外部磁场远离时,金属片逐渐退磁,由于金属片自身的弹力,触点分开,电路断开。
2.2 干簧管传感器模块电路
从电路图可以了解到,模块的信号输出为IO输出,且有上拉电阻,平时干簧管无触发时为高电平,有触发时为低电平。
本帖最后由 dirtwillfly 于 2025-6-22 13:15 编辑
3. 使用的hpm5361 硬件资源
在开发板上,使用GPIO29作为干簧管IO信号的采集引脚。
即PB11
本帖最后由 dirtwillfly 于 2025-6-22 13:46 编辑
4. hpm5361软件部分
在app_reed_switch.c文件内:
使用#include包含相关的头文件
#include <rtthread.h>
#include <rtdevice.h>
#include "app_reed_switch.h"
#include <drv_gpio.h>
#include <hpm_soc.h>
使用宏定义获取PB11对应的pin:
#define REED_SWITCH_PINGET_PIN(B, 11)
初始化gpio,这里配置io为输入模式,配置了中断为下降沿触发,以及触发时的回调函数为reed_switch_irq() ,并使能了中断。
//reed_switch GPIO初始化
void reed_switch_init(void)
{
rt_pin_mode(REED_SWITCH_PIN, PIN_MODE_INPUT);
rt_pin_attach_irq(REED_SWITCH_PIN, PIN_IRQ_MODE_FALLING, reed_switch_irq, RT_NULL);
rt_pin_irq_enable(REED_SWITCH_PIN, PIN_IRQ_ENABLE);
}
中断回调函数:
//中断回调函数
void reed_switch_irq(void *parameter)
{
rt_kprintf("reed switch is triggered\n");
}
在在app_reed_switch.h文件内:
#ifndef APPLICATIONS_APP_REED_SWITCH_H_
#define APPLICATIONS_APP_REED_SWITCH_H_
void reed_switch_init(void);
#endif /* APPLICATIONS_APP_REED_SWITCH_H_ */
最后,在main函数,先添加上包含app_reed_switch.h头文件:
#include "app_reed_switch.h"然后在main函数中调用reed_switch_init()
5. 效果
当干簧管传感器模块靠近磁铁时,串口就会打印相应信息。
页:
[1]