浅析STM32之霍尔传感器模块
霍尔元件 霍尔元件是依据霍尔效应制做的一种电磁场感应器。霍尔效应是光电效用的一种,这一状况是霍尔元件(A.H.Hall,1855—1938)于1879年在科学研究金属材料的导电性组织时看到的。之后发觉半导体材料、导电性液体等也是有这类效用,而半导体材料的霍尔效应比金属材料强得多,运用这状况做成的各种各样霍尔传感器,普遍地运用于工控自动化技术性、无损检测技术及信息资源管理等层面。霍尔效应是科学研究半导体器件特性的主要方式。根据霍尔效应试验测量的霍尔系数,可以分辨半导体器件的导电性种类、自由电子浓度值及自由电子电子密度等关键主要参数。 原理 电磁场中有一个霍尔元件半导体材料片,恒定电流I从A到B根据此片。在洛仑兹力的效果下,I的电子流在根据霍尔元件半导体材料时往一侧偏位,使此片在CD方位上造成电势差,这就是所说的霍尔电压。 霍尔电压随磁化强度的变动而转变 ,电磁场越强,工作电压越高,电磁场越弱,工作电压越低,霍尔电压值不大,一般唯有好多个毫伏,但经集成电路芯片中的功率放大器变大,就能使该工作电压变大到足够輸出极强的数据信号。若使霍尔元件集成电路芯片起感测器功效,必须 用机械设备的办法来更改磁通量。下面的图一样的办法是用一个旋转的离心叶轮做为操纵磁通量的电源开关,当离心叶轮叶子处在磁石和霍尔元件集成电路芯片中间的磁密里时,电磁场偏移集成化片,霍尔电压消退。那样,霍尔元件集成电路芯片的输出电压的转变,就能表明出离心叶轮转动轴的某一部位,运用这一原理,可将霍尔元件集成电路芯片片要功效点火正时感应器。霍尔效应感应器归属于被动性感应器,它要有另加开关电源才可以工作中,这一特性使它能检验转速比低的运作状况。 霍尔效应 霍尔效应从其本质上讲是运作的自由电子在电磁场中受洛仑兹力功效造成的偏移。当自由电子(电子器件或空穴)被管束在液体原料中,这类偏移就致使在竖直电流量和磁场的方向上造成正负电荷的聚集,进而产生额外的横着静电场。针对图一所显示的半导体材料试件,若在X方位通以电流量Is,在Z方位加电磁场B,则在Y方位即试件A,A′电级两边就逐渐聚集异号正电荷而发生对应的额外静电场。静电场的偏向取决策于检测试样的电种类。显而易见,该静电场是阻拦自由电子再次向侧面偏位, 当自由电子受到的横着静电力eEH与洛仑兹力相同时,试品两边正电荷的累积就做到均衡,故有 ⑴ 在其中EH为霍尔元件静电场,V是自由电子在电流的方向上的均值飘移速率。设试件的宽为b,薄厚为d,自由电子浓度值为n,则 ⑵ 由⑴、⑵两式可获得 ⑶ 即霍尔电压VH(A、A′电级中间的工作电压)与ISB相乘正比例与样品薄厚d反比。比例系数 称之为霍尔系数,它是表明原材料霍尔效应高低的主要主要参数,只需测到 VH(伏)及其了解IIs(安)、B(高斯函数)和d(厘 米)可按住式测算RH(公分3/库伦) 归类 霍尔元件分成线形霍尔元件和电源开关型霍尔元件二种。 (一)电源开关型霍尔元件由稳压电源、霍尔传感器、差分放大器,斯密特触发器原理和輸出级构成,它輸出数据量。电源开关型霍尔元件也有一种独特的方式,称之为锁键型霍尔元件。 (二)线性型霍尔元件由霍尔传感器、线形放大仪和射极跟随器构成,它輸出模拟量输入。 线形霍尔元件又可分成开环增益式和闭环控制式。闭环控制式霍尔元件又被称为零磁通量霍尔元件。线形霍尔元件关键用以交直流电流和工作电压精确测量。。 电源开关型 如图所示4所显示,在其中Bnp为工作中点“开”的磁通量,BRP为释放出来点“关”的磁通量。当另加的磁通量超出姿势点Bnp时,感应器輸出低电频,当磁通量降至姿势点Bnp下列时,感应器輸出脉冲信号不会改变,一直要降至释放出来点BRP时,感应器才由低电频跃变成上拉电阻。Bnp与BRP中间的落后使电源开关姿势更加靠谱。 锁键型 如图所示5所显示,当磁通量超出姿势点Bnp时,感应器輸出由上拉电阻跃变成低电频,而在外面电磁场注销后,其輸出情况维持不会改变(即锁存情况),务必增加反方向磁通量做到BRP时,才可以使脉冲信号造成转变。 线性型 输出电压与另加磁化强度呈线性相关,如图所示3所显示,由此可见,在B1~B2的磁通量范畴内有不错的线性,磁通量超过此范畴的时候展现饱和。 开环增益式电流传感器 因为通电螺线管內部存有电磁场,其高低与输电线中的电流量正相关,故能够运用霍尔元件精确测量出电磁场,进而明确输电线中交流电的尺寸。运用这一基本原理能够设计方案做成霍尔元件电流传感器。其优势不是与被测电源电路产生电触碰,不危害被测电源电路,不耗费被测开关电源的输出功率,尤其适用于大电流量感测器。 霍尔元件电流传感器原理如图所示6所显示,规范圆形变压器铁芯有一个空缺,将霍尔元件插进空缺中,圆形上绕有电磁线圈,当交流电经过电感线圈时造成电磁场,则霍尔元件有讯号輸出。 闭环控制式电流传感器 磁均衡式电流传感器也叫霍尔元件闭环控制电流传感器,也称赔偿式感应器,即主控制回路被测电流量Ip在聚磁芯住所形成的电磁场根据一个初级线圈,电流量所造成的电磁场实现赔偿, 进而使霍尔元件元器件处在检验零磁通量的运行状态。 磁均衡式电流传感器的实际运行流程为:当主控制回路有一电流量根据时,在电线上形成的电磁场被聚磁芯集聚并磁感应到霍尔元件元器件上, 所造成的讯号輸出用以推动相对应的整流管并使其通断,进而得到一个赔偿电流量Is。 这一电流量再经过多匝绕阻造成电磁场 ,该电磁场与被测电流量形成的电磁场恰好反过来,因此赔偿了原本的电磁场, 使霍尔元件元器件的輸出慢慢减少。当与Ip与线圈匝数乘积 所造成的电磁场相同时,Is不会再提升,这时候的霍尔元件元器件起标示零磁通量的功效 ,这时还可以根据Is来均衡。被测电流量的一切变动都是会毁坏这一均衡。 一旦电磁场不平衡,霍尔元件元器件就会有数据信号輸出。经功率放大电路后,马上就会有对应的交流电穿过次级绕组以对失调的电磁场实现赔偿。从电磁场失调到再度均衡,需要的時间理论上不上1μs,这是一个稳定平衡的全过程。
试验前提条件
1、在开展文中流程前,请先阅读文章下列博闻:
暂未
2、在开展文中流程前,请先完成下列博闻:
暂未
五、基本知识
1、霍尔元件是啥?
答:霍尔元件是依据霍尔效应制做的一种电磁场感应器。
用磁石去挨近霍尔元件时,霍尔元件的脚位脉冲信号会发生转变。
2、霍尔元件关键用在哪儿?
答:霍尔元件可限速、记数、限位开关上。
举例说明限位开关作用:2个霍尔元件产生45°的交角,电动机边沿黏着一个磁石,一旦电动机旋转造成 磁石开启随意在其中一个霍尔元件,则STM32检验到开启后马上终止电动机,不可以再再次往此方位旋转。为此做到限定电动机旋转方向的功效。
3、文中采用的是啥霍尔元件控制模块?
答:
甜瓜买的霍尔元件控制模块一共有四个脚位,GND、VCC、D0、A0。
在其中只必须使用三根线,GND、VCC、D0。(A0不知道做啥用的,记数?)
操作方法:
1)5V供电系统。
2)用漏线联接D0和STM32的IO口(文中联接的是PA11)。
3)D0默认设置 是上拉电阻,但磁石的特殊一面(磁石另一面没用)去挨近霍尔元件控制模块时,D0会被降低。
4、霍尔元件与行程开关有什么不同?
答:
1)行程开关
①优势:无功能损耗。
②缺陷:易毁坏。
2)霍尔元件
①优势:不容易毁坏。
②缺陷:有功能损耗。
六、实验步骤
1、撰写并加上霍尔元件推动
1)撰写推动GUA_Hall_Sensor.c(储放在“……\HARDWARE”)
//******************************************************************************
//name: GUA_Hall_Sensor.c
//introduce: 霍尔元件推动
//author: 甜甜的大甜瓜
//email: 897503845@qq.com
//QQ group 甜瓜单片机设计之STM8/STM32(164311667)
//changetime: 2017.03.06
//******************************************************************************
#include “stm32f10x.h”
#include “GUA_Hall_Sensor.h”
/*********************宏定义************************/
//霍尔元件脚位
#define GUA_HALL_SENSOR_PORT GPIOA
#define GUA_HALL_SENSOR_PIN GPIO_Pin_11
//消抖总频次
#define GUA_HALL_SENSOR_DISAPPERAS_SHAKS_COUNT 500000
/*********************內部自变量************************/
staTIc GUA_U32 sGUA_Hall_Sensor_DisapperasShakes_IdleCount = 0; //消抖时的闲置情况计标值
staTIc GUA_U32 sGUA_Hall_Sensor_DisapperasShakes_TriggerCount = 0; //消抖时的开启情况计标值
/*********************內部涵数************************/
staTIc void GUA_Hall_Sensor_IO_Init(void);
//******************************************************************************
//name: GUA_Hall_Sensor_IO_Init
//introduce: 霍尔元件的IO复位
//parameter: none
//return: none
//author: 甜甜的大甜瓜
//email: 897503845@qq.com
//QQ group 甜瓜单片机设计之STM8/STM32(164311667)
//changeTIme: 2017.03.06
//******************************************************************************
static void GUA_Hall_Sensor_IO_Init(void)
{
//IO建筑结构
GPIO_InitTypeDef GPIO_InitStructure;
//数字时钟也就能
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
//霍尔元件IO配备
GPIO_InitStructure.GPIO_Pin = GUA_HALL_SENSOR_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Init(GUA_HALL_SENSOR_PORT, &GPIO_InitStructure);
}
//******************************************************************************
//name: GUA_Hall_Sensor_Check_Pin
//introduce: 霍尔元件检验开启情况
//parameter: none
//return: GUA_HALL_SENSOR_STATUS_IDLE or GUA_HALL_SENSOR_STATUS_TRIGGER
//author: 甜甜的大甜瓜
//email: 897503845@qq.com
//QQ group 甜瓜单片机设计之STM8/STM32(164311667)
//changetime: 2017.03.06
//******************************************************************************
GUA_U8 GUA_Hall_Sensor_Check_Pin(void)
{
//没开启
if(GPIO_ReadInputDataBit(GUA_HALL_SENSOR_PORT, GUA_HALL_SENSOR_PIN) == SET)
{
//记数
sGUA_Hall_Sensor_DisapperasShakes_IdleCount ;
sGUA_Hall_Sensor_DisapperasShakes_TriggerCount = 0;
//分辨记数是不是充足
if(sGUA_Hall_Sensor_DisapperasShakes_IdleCount 》= GUA_HALL_SENSOR_DISAPPERAS_SHAKS_COUNT)
{
return GUA_HALL_SENSOR_STATUS_IDLE;
}
}
//开启
else
{
//记数
sGUA_Hall_Sensor_DisapperasShakes_IdleCount = 0;
sGUA_Hall_Sensor_DisapperasShakes_TriggerCount ;
//分辨记数是不是充足
if(sGUA_Hall_Sensor_DisapperasShakes_TriggerCount 》= GUA_HALL_SENSOR_DISAPPERAS_SHAKS_COUNT)
{
return GUA_HALL_SENSOR_STATUS_TRIGGER;
}
}
return GUA_HALL_SENSOR_STATUS_DISAPPERAS_SHAKS;
}
//******************************************************************************
//name: GUA_Limit_Switch_Init
//introduce: 霍尔元件复位
//parameter: none
//return: none
//author: 甜甜的大甜瓜
//email: 897503845@qq.com
//QQ group 甜瓜单片机设计之STM8/STM32(164311667)
//changetime: 2017.03.06
//******************************************************************************
void GUA_Hall_Sensor_Init(void)
{
//复位IO
GUA_Hall_Sensor_IO_Init();
}
2)撰写推动库函数GUA_Hall_Sensor.h(储放在“……\HARDWARE”)
//******************************************************************************
//name: GUA_Hall_Sensor.h
//introduce: 霍尔元件推动的库函数
//author: 甜甜的大甜瓜
//email: 897503845@qq.com
//QQ group 甜瓜单片机设计之STM8/STM32(164311667)
//changetime: 2017.03.06
//******************************************************************************
#ifndef _GUA_HALL_SENSOR_H_
#define _GUA_HALL_SENSOR_H_
/*********************宏定义************************/
//种类宏
#ifndef GUA_U8
typedef unsigned char GUA_U8;
#endif
#ifndef GUA_8
typedef signed char GUA_8;
#endif
#ifndef GUA_U16
typedef unsigned short GUA_U16;
#endif
#ifndef GUA_16
typedef signed short GUA_16;
#endif
#ifndef GUA_U32
typedef unsigned long GUA_U32;
#endif
#ifndef GUA_32
typedef signed long GUA_32;
#endif
#ifndef GUA_U64
typedef unsigned long long GUA_U64;
#endif
#ifndef GUA_64
typedef signed long long GUA_64;
#endif
//霍尔元件的开启情况
#define GUA_HALL_SENSOR_STATUS_TRIGGER 0 //霍尔元件开启
#define GUA_HALL_SENSOR_STATUS_IDLE 1 //霍尔元件没开启
#define GUA_HALL_SENSOR_STATUS_DISAPPERAS_SHAKS 2 //霍尔元件消抖中
/*********************外界函数声明************************/
GUA_U8 GUA_Hall_Sensor_Check_Pin(void);
void GUA_Hall_Sensor_Init(void);
#endif
3)工程项目中加上GUA_Hall_Sensor.c
4)在MDK设定中加上串口驱动源代码途径
2、在网络层中启用
1)加上推动库函数(main.c中)
#include “GUA_Hall_Sensor.h”
2)加上推动复位编码(main.c的main函数中)
//霍尔元件复位
GUA_Hall_Sensor_Init();
3)加上测试程序
①写测试程序(main.c中)
static void GUA_Test(void)
{
U8 nGUA_Ret = 0;
U8 nGUA_Stop = 0;
while(1)
{
//检验霍尔元件当今情况
nGUA_Ret = GUA_Hall_Sensor_Check_Pin();
//检验到霍尔元件被开启
if(nGUA_Ret == GUA_HALL_SENSOR_STATUS_TRIGGER)
{
nGUA_Stop = 1;
}
}
②启用测试程序(main.c的main函数中)
//测试程序
GUA_Test();
七、常见问题
暂未。
八、试验結果
模拟仿真并设定中断点在测试程序的“nGUA_Stop = 1;”中,飞速运作。
用磁石去挨近控制模块上的霍尔元件集成ic,控制模块上的led被照亮表明开启,与此同时工程项目中消抖以后会终止在中断点处,表明检验到PA11处的霍尔元件开启造成 的低电频。