a3144
资料
a3144是一种开关型霍尔效应传感器,由下图所知,他有3个引脚,(从丝印正对来看)从左到右是VCC、GND和输出的型号引脚。
需要注意的是:这里的的VCC的范围在4.5到24V之间,输出的饱和电压虽然在400mv以下,但是经过我的实验,发现是可以被stm32单片机引脚的输入模式检测到的
使用方法(这里测速使用)
拿丝印方向正对 磁极的S极,会输出一个高电平
cubemx配置
开个定时器,配置1ms进中断
开个GPIO口为输入模式
风扇硬件安装以及代码
硬件部分
安装
在旋转轴两边各贴一个磁铁,对外的磁极为S极
硬件使用
a3144模块的丝印方向正对风扇
代码部分
a3144.c
#include "a3144.h"
#include "tim.h"
#define A3144_Port GPIOB
#define A3144_PIN GPIO_PIN_13
uint16_t cntFanSpeed = 0; // 风扇速度
uint16_t cntFanCnt = 0; // 风扇计数
// 转速计数
void CountFanSpeed(void)
{
static uint8_t Flip = 0;
if(Flip != HAL_GPIO_ReadPin(A3144_Port, A3144_PIN)) // 判断是否翻转
{
Flip = HAL_GPIO_ReadPin(A3144_Port, A3144_PIN);
cntFanCnt++;
}
}
// 获取转速
unsigned short int Get_FanSpeed(void)
{
static uint16_t beforeSpeed = 0, cntClear = 0;
cntClear++;
if(cntClear == 5) // 判断长时间为零,就是停转了
{
cntClear = 0;
beforeSpeed = 0;
}
if(cntFanSpeed != 0) // 若是当前转速有计,则获取最新速度
{
cntClear = 0;
beforeSpeed = cntFanSpeed;
cntFanSpeed = 0;
}
return beforeSpeed;
}
void a3144_Init(void)
{
HAL_TIM_Base_Start_IT(&htim3);
}
/*定时器中断*/
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
static uint16_t cnt1s = 0;
if(htim == &htim3)
{
CountFanSpeed(); // 判断翻转计算
cnt1s++;
if(cnt1s >= 1000) // 到达1s
{
cnt1s = 0;
cntFanSpeed = cntFanCnt/4;
cntFanCnt = 0;
}
}
}
a3144.h
#ifndef __A3144_H_
#define __A3144_H_
/* a3144初始化 */
void a3144_Init(void);
/* 读引脚电平 */
unsigned short int Get_FanSpeed(void);
#endif /* __A3144_H_ */
main.c
头文件
include "a3144.h"
include "U_Print.h" // 用户串口打印函数
初始化
a3144_Init();
循环中
U_Printf("Fan speed : %d\r\n", Get_FanSpeed());