技术文档

霍尔传感单片机 霍尔传感器的工作原理及应用案例

小编 2024-10-06 技术文档 23 0

霍尔传感器的工作原理及应用案例

霍尔传感器是根据霍尔效应制作的一种磁场传感器。霍尔效应是磁电效应的一种,这一现象是霍尔(A.H.Hall,1855—1938)于1879年在研究金属的导电机构时发现的。后来发现半导体、导电流体等也有这种效应,而

半导体的霍尔效应比金属强得多,利用这现象制成的各种霍尔元件,广泛地应用于工业自动化技术、检测技术及信息处理等方面。

霍尔传感器的工作原理

磁场中有一个霍尔半导体片,恒定电流I从A到B通过该片。在洛仑兹力的作用下,I的电子流在通过霍尔半导体时向一侧偏移,使该片在CD方向上产生电位差,这就是所谓的霍尔电压。

霍尔电压随磁场强度的变化而变化,磁场越强,电压越高,磁场越弱,电压越低, 霍尔电压值很小,通常只有几个毫伏,但经集成电路中的放大器放大,就能使该电压放大到足以输出较强的信号。若使霍尔集成电路起传感作用,需要用机械的方法来改变磁感应强度。

关于霍尔效应

由霍尔效应的原理知,霍尔电势的大小取决于:Rh为霍尔常数,它与半导体材质有关;I为霍尔元件的偏置电流;B为磁场强度;d为半导体材料的厚度。对于一个给定的霍尔器件,当偏置电流 I 固定时,UH将完全取决于被测的磁场强度B。

一个霍尔元件一般有四个引出端子,其中两根是霍尔元件的偏置电流 I 的输入端,另两根是霍尔电压的输出端。如果两输出端构成外回路,就会产生霍尔电流。一般地说,偏置电流的设定通常由外部的基准电压源给出;若精度要求高,则基准电压源均用恒流源取代。为了达到高的灵敏度,有的霍尔元件的传感面上装有高导磁系数的镀膜合金;这类传感器的霍尔电势较大,但在0.05T左右出现饱和,仅适用在低量限、小量程下使用。

在半导体薄片两端通以控制电流I,并在薄片的垂直方向施加磁感应强度为B的匀强磁场,则在垂直于电流和磁场的方向上,将产生电势差为UH的霍尔电压。

霍尔传感器应用案例

霍尔传感器应用于出租车计价器

霍尔传感器在出租车计价器上的应用:通过安装在车轮上的霍尔传感器检测到的信号,送到单片机,经处理计算,送给显示单元,这样便完成了里程计算。 检测原理,内部采用外部中断0,车轮每转一圈(设车轮的周长是1m),霍尔开关就检测并输出信号,引起单片机的中断,对脉冲计数,当计数达到1000次时,也就是1km,单片机就控制将金额自动增加。每当霍尔传感器输出一个低电平信号就使单片机中断一次,当里程计数器对里程脉冲计满1000次时,就有程序将当前总额累加,使微机进入里程计数中断服务程序中。在该程序中,需要完成当前行驶里程数和总额的累加操作,并将结果存入里程和总额寄存器中。

霍尔传感器技术应用于汽车工业    

霍尔传感器技术在汽车工业中有着广泛的应用,包括动力、车身控制、牵引力控制以及防抱死制动系统。 为了满足不同系统的需要,霍尔传感器有开关式、模拟式和数字式传感器三种形式。 霍尔传感器可以采用金属和半导体等制成,效应质量的改变取决于导体的材料,材料会直接影响流过传感器的正离子和电子。

制造霍尔元件时,汽车工业通常使用三种半导体材料,即砷化镓、锑化铟以及砷化铟。 最常用的半导体材料当属砷化铟。霍尔传感器的形式决定了放大电路的不同,其输出要适应所控制的装置。这个输出可能是模拟式,如加速位置传感器或节气门位置传感器,也可能是数字式。如曲轴或凸轮轴位置传感器。当霍尔元件用于模拟式传感器时,这个传感器可以用于空调系统中的温度表或动力控制系统中的节气门位置传感器。霍尔元件与微分放大器连接,放大器与NPN晶体管连接。磁铁固定在旋转轴上,轴在旋转时,霍尔元件上的磁场加强。其产生的霍尔电压与磁场强度成比例。

当霍尔元件用于数字信号时,例如曲轴位置传感器、凸轮轴位置传感器或车速传感器,必须首先改变电路。 霍尔元件与微分放大器连接,微分放大器与施密特触发器连接。在这种配置中。传感器输出一个开或关的信号。在多数汽车电路中,霍尔传感器是电流吸收器或者使信号电路接地。要完成这项工作,需要一个NPN晶体管与施密特触发器的输出连接。磁场穿过霍尔元件,一个触发器轮上的叶片在磁场和霍尔元件之间通过。

我爱方案网是一个电子方案开发供应链平台,提供从找方案到研发采购的全链条服务。找方案,上我爱方案网!在方案超市找到合适的方案就可以直接买,没有找到就到快包定制开发。我爱方案网积累了一大批方案商和企业开发资源,能提供标准的模块和核心板以及定制开发服务,按要求交付PCBA、整机产品、软件或IoT系统。更多信息,敬请访问http://www.52solution.com

项目实战:51单片机霍尔自行车里程测速仪设计项目 原理图 程序

最近后台有小伙伴私信我说,我讲得都太基础了,有没有做过单片机霍尔传感器测速度相关的项目,我现在就把以前做的一个单片机霍尔自行车里程测速仪项目分享给大家。

这个也是我以前做过的一个项目,现在拿出来分享给大家,大家不用觉得难,不过就是硬件做基础,然后用软件代码去控制而已,只要按照教程一步步来做你就会发现其实很简单。

好了,针对此项目下面有几点说明

1、单片机是通用的无论51还是52、无论stc还是at都一样,引脚功能都一样。

程序也是一样的。

2、原理图中的.ddb、.Bkp等格式是要用protel打开的,没有软件的不要紧,

3、程序中的.c文件可以用记事本(文本文档)打开,就是程序了。其他的是写程序是自动生成的,没什么用的。

4、可以按照正面布局,不要按照实物的背面焊接,要按照原理图焊接。

数码管脚位排布说明:

正面朝自己,秒点在下,左下为1脚,逆时针排布,左上为最后一个脚!请坛友焊接前弄清脚位排布再焊接!祝你们成功!

废话不多说,直接上实物图:

霍尔自行车测速电路原理图:

元器件列表

单片机霍尔自行车里程测速仪参考源程序:

//说明1:P00—P07:a-----dp P27—P24:com1-----com4 P34切换显示 P32—INT0 一个磁钢

//说明2:此程序针对车轮周长为207cm,其他型号周长,可改变参数就行

//说明3:数码管从左至右 高------低

#include<reg51.h>

#include"juxun001.h"

//主函数=====================

void main()

{

time0_int0_init();//定时器0和外部中断0的初始化

while(!TR0) //上电一直未切割时就显示 0.0.0.0

{

init_display();

}

while(1)

{

if(!change)//按下切换按键显示里程

{

delay1m(5);

if(!change)

{

flag = ~flag;

}

while(!change);

}

}

}

//==定时器0中断函数

void time0_interrupt()interrupt 1

{

TL0 = (65536 - 5000) % 256;// 12M晶振,5ms定时

TH0 = (65536 - 5000) / 256;

display_function();

time_counter++;

time_counter8++;

if(time_counter8 >= 1600)//大于8s没切割,车子视为停下了,速度为:0,但里程还记着

{

time_counter8 = 0;

speed = 0;//速度为 0

point1 = 0;

buf1[3] = speed%10;buf1[2] = speed/10%10;

buf1[1] = speed/100%10;buf1[0] = speed/1000%10;

}

}

//==========外部中断0中断函数=

void int0_interrupt()interrupt 0

{

external_counter++;

if(external_counter ==1 )TR0 = ~TR0;//第一次切割打开定时器0

if(external_counter == 65535)external_counter = 0;

time_counter8 = 0; //只要8秒内有切割,车子就仍在运行

if(external_counter % 2 == 0)//切割2次 更新下速度

{ //*5是因为中断一次是5MS

if(flag10){speed =((ulong)(36000)*zhouchang)/(time_counter * 5);flag1=1;}

else if(flag11){speed =((ulong)(36000)2zhouchang)/(time_counter * 5);}//速度:单位为 m/h ,*1000的目的是不出现浮点数

if((speed >= 100)&&(speed < 1000)) //100 ---- 1000 3位整数

{

point1 = 1;buf1[3] = speed%10;buf1[2] = speed/10%10;

buf1[1] = speed/100%10;buf1[0] = 0;}

else if((speed >= 1000)&&(speed < 10000)) //1000 ---- 10000 4位整数

{

point1 = 1;speed = (uint)speed;

buf1[3] = speed%10;buf1[2] = speed/10%10;

buf1[1] = speed/100%10;buf1[0] = speed/1000%10;}

else if((speed >= 10000)&&(speed < 100000)) //10000 ----- 100000 5位整数

{

point1 = 2;

buf1[3] = speed/10%10;buf1[2] = speed/100%10;

buf1[1] = speed/1000%10;buf1[0] = speed/10000%10;}

else if((speed >= 100000)&&(speed < 1000000)) //100000 ------ 1000000 6位整数

{

point1 = 3;

buf1[3] = speed/100%10;buf1[2] = speed/1000%10;

buf1[1] = speed/10000%10;buf1[0] = speed/100000%10;}

time_counter = 0;

}

if(external_counter % 8 == 0)//每切割8次 更新下里程

{

s = (ulong)external_counter * zhouchang; //里程:单位为 cm

if((s >= 1000)&&(s < 10000))

{

point2 = 1; // 0.012 001212

buf2[3] = s/100%10;buf2[2] = s/1000%10;

buf2[1] = 0;buf2[0] = 0;}// 4位整数

else if((s >= 10000)&&(s < 100000))

{

point2 = 1;

buf2[3] = s/100%10;buf2[2] = s/1000%10;

buf2[1] = s/10000%10;buf2[0] = 0;}// 5位整数 0.123 012345

else if((s >= 100000)&&(s < 1000000))

{

point2 = 1;

buf2[3] = s/100%10;buf2[2] = s/1000%10;

buf2[1] = s/10000%10;buf2[0] = s/100000%10;} // 6位整数 1.234 1234 56

else if((s >= 1000000)&&(s < 10000000))

{

point2 = 2;

buf2[3] = s/1000%10;buf2[2] = s/10000%10;

buf2[1] = s/100000%10;buf2[0] = s/1000000%10;}// 7位整数 1234 567

else if((s >= 10000000)&&(s < 100000000))

{

point2 = 3;

buf2[3] = s/10000%10;buf2[2] = s/100000%10;

buf2[1] = s/1000000%10;buf2[0] = s/10000000%10;} // 8位整数 1234 5678

}

}

//==========开电源就显示的数据,初始显示速度

void init_display()

{

uchar i;

for(i = 0;i < 4;i++)

{

wei = bitcode[num - 1];

led = display1[buf1[num–]];

delay1m(4);

if(num == 0)num = 4;

}

}

//==显示函数=

void display_function()

{

if(flag == 0)//显示速度

{

switch(point1)

{

case 0:wei = bitcode[num-1];led = display1[buf1[num-1]];num–;break;//速度显示 0

case 1:if(num == 1){ wei = bitcode[num-1];led = 0x7f&display1[buf1[num-1]];num–;}

else { wei = bitcode[num-1];led = display1[buf1[num-1]];num–;}break;//最高位小数点亮

case 2:if(num == 2){ wei = bitcode[num-1];led = 0x7f&display1[buf1[num-1]];num–;}

else { wei = bitcode[num-1];led = display1[buf1[num-1]];num–;}break;//第二高位小数点亮

case 3:if(num == 3){ wei = bitcode[num-1];led = 0x7f&display1[buf1[num-1]];num–;}

else { wei = bitcode[num-1];led = display1[buf1[num-1]];num–;}break;//第三高位小数点亮

default:break;

}

if(num == 0)num = 4;

}

else if(flag == 1)//显示里程

{

switch(point2)

{

case 0:wei = bitcode[num-1];led = display1[buf2[num-1]];num–;break;//里程显示 0

case 1:if(num == 1){ wei = bitcode[num-1];led = 0x7f&display1[buf2[num-1]];num–;}

else { wei = bitcode[num-1];led = display1[buf2[num-1]];num–;}break;//最高位小数点亮

case 2:if(num == 2){ wei = bitcode[num-1];led = 0x7f&display1[buf2[num-1]];num–;}

else { wei = bitcode[num-1];led = display1[buf2[num-1]];num–;}break;//第二高位小数点亮

case 3:if(num == 3){ wei = bitcode[num-1];led = 0x7f&display1[buf2[num-1]];num–;}

else { wei = bitcode[num-1];led = display1[buf2[num-1]];num–;}break;//第三高位小数点亮

default:break;

}

if(num == 0)num = 4;

}

}

//=================定时器0和外部中断0的初始化函数=

void time0_int0_init()

{

TMOD |= 0x01;

TMOD &= 0xfd;//定时器0工作于方式1

TL0 = (65536 - 5000) % 256;//12M晶振,5ms定时

TH0 = (65536 - 5000) / 256;

IT0 = 1;//外部中断0,负跳变触发方式

TR0 = 0;

ET0 = 1;

EX0 = 1;

EA = 1;

}

//==========ms 级延时函数=

void delay1m(uchar x)

{

uchar i,j;

for(i=0;i<x;i++) //连数x次,约 x ms

for(j=0;j<120;j++); //数120 次,约1 ms

}

好了,以上就是这个项目的全部内容了。

最后,如果有什么意见或者建议欢迎您留言给我,让我们共同学习一起进步,鉴于无法上传附件,如果需要完整代码或设计文件,请留言或私信我,看到后会第一时间回复。

谢谢!

相关问答

霍尔传感 器该怎么连接 单片机 ?

第一接的管脚是你程序控制的你不把程序贴上来没人知道霍尔元件其他的管脚就是电源和地线第二一般测转速是在电机上加个小轮子磁铁放在小轮子的边缘...

3144 霍尔传感 器怎么用,引脚怎么接 单片机 ,外部中断怎么写,求大神带?

中断设置成负跳变触发,引脚的话,信号接外部中断,如果电源和单片机电源共地,中断设置成负跳变触发,引脚的话,信号接外部中断,如果电源和单片机电源共地,

霍尔传感 器测速直流电机时,三个引脚该怎么接线?

他由启动电阻和工作电阻俩部分线圈组成一根接火线,一根接零线,还有一根通过电容和火线相连接的而一般我们看到的直流电机只有俩个线那是因为电容已经接好了...

哪种压力表中可以安装 霍尔 片?

HLGK-Y100系列数显电接点压力表是利用指针式压力表的测量原理,配用霍尔传感器作为测压元件、单片机控制的在线测量仪表。它从根本上克服了指针式电接点压力表...

STM32 单片机 怎么检测0-24电压和电流?

24V可以比例衰减,电流的话需要先通过电阻或者霍尔传感器转成电压,再采样。24V可以比例衰减,电流的话需要先通过电阻或者霍尔传感器转成电压,再采样。

STM32 单片机 怎么检测0-24电压和电流 - 147****2216 的回答 -...

电压缩小到0-3.3v范围内采集,然后用32通过一定比例再计算出实际电压扩展资料:单片机应用范围电路板单片机渗透到我们生活的各个领域,几乎很难找到哪...

空调 单片机 控制原理?

空调的室内风机电机是反馈试调速电机,控制那3根线是连接单片机的,是转速信号,一般是霍尔原件,供电是连接电源,用可控硅调速。原理是这样的:电机启动后单...

单片机 功率控制原理?

单片机测量功率就是要测量电流和电压。首先测量电压,如果是直流低电压,直接用电阻分压检测模拟电压就可以测出来电压,也可以采用高精度的电压检测芯片检测电...

STM32 单片机 怎么检测0-24电压和电流 - p4qG1InlW 的回答 - 懂得

电压缩小到0-3.3v范围内采集,然后用32通过一定比例再计算出实际电压扩展资料:单片机应用范围电路板单片机渗透到我们生活的各个领域,几乎很难找到哪...

基于89c51 单片机 的功率测量,怎么做?

51单片机测量功率,实际是将功率转化为测量负载的电压与电流,再根据公式P=UI,即功率等于电压*电流,计算出功率。直流电源功率测量:(1)电压采样,设计相应...51单...

猜你喜欢