1. 霍尔传感器在测量电机转速时,它如何与单片机连接啊 求个电路图 谢谢
2基于霍尔传感器的电机转速测量系统硬件设计
2.1电机转速测量系统的硬件电路设计
2.1.1总体硬件设计
使用单片机测量电机转速的基本结构如图2-1所示。该系统包括霍尔传感器、隔离整形电路、主CPU、显示电路、报警电路及电源等部分。
图2-1系统总体结构图
其测量过程是测量转速的霍尔传感器和电机机轴同轴连接,机轴每转一周,产生一定量的脉冲个数,由霍尔器件电路输出。经过电耦合器后,即经过隔离整形电路后,成为转数计数器的计数脉冲。同时霍尔传感器电路输出幅度为12V的脉冲经光电耦合后降为5V,保持同单片机AT89C51逻辑电平相一致,控制计数时间,即可实现计数器的计数值对应机轴的转速值。主CPU将该值数据处理后,在LCD液晶显示器上显示出来。一旦超速,CPU通过喇叭和转灯发出声、光报警信号。
1.传感器部分
主要分为两个部分。第一部分是利用霍尔器件将电机的转速转化为脉冲信号。霍尔测速模块由铁质的测速齿轮和带有霍尔元件的支架构成。测速齿轮如图2-2所示,齿轮厚度大约2mm,将其固定在待测电机的转轴上。将霍尔元件固定在距齿轮外圆1mm的探头上,霍尔元件的对面粘贴小磁钢,当测速齿轮的每个齿经过探头正前方时,改变了磁通密度,霍尔元件就输出一个脉冲信号。第二部分是使用六反相器和光耦,将传感器输出的信号进行整形隔离,减少计数的干扰。
测速齿轮霍尔元件
图2-2转速变换装置
2.处理器
采用AT89C51单片机作为系统的处理器。
3.显示部分
该部分有两个功能,在正常情况下,通过LCD液晶显示器显示当前的频率数值,当电机的转速超出一定的范围后,通过蜂鸣器进行报警。蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中作发声器件。
2.1.2系统电路设计
实际测量时,要把霍尔传感器固定在直流测速电机的底板上,与霍尔探头相对的电机的轴上固定着一片磁钢块,电机每转一周,霍尔传感器便发出一个脉冲信号,将此脉冲信号接到开发的多功能实验板上的P3.2[]上,设定T0定时,每分钟所计的进入P3.2的脉冲个数即为直流电机的转速。
由于在虚拟仿真电路图中,没有电机及传感器,所以就直接用一个脉冲信号代替,电路图如图2-3所示。
图2-3总体硬件电路图
2.2霍尔传感器测量电路设计
2.2.1霍尔元件
根据霍尔效应,人们用半导体材料制成的元件叫霍尔元件。它具有对磁场敏感、结构简单、体积小、频率响应宽、输出电压变化大和使用寿命长等优点,因此,在测量、自动化、计算机和信息技术等领域得到广泛的应用。
霍尔传感器A3144是AllegroMicroSystems公司生产的宽温、开关型霍尔效应传感器,其工作温度范围可达-40℃~150℃。它由电压调整电路、反相电源保护电路、霍尔元件、温度补偿电路、微信号放大器、施密特触发器和OC门输出极构成,通过使用上拉电阻可以将其输出接入CMOS逻辑电路。该芯片具有尺寸小、稳定性好、灵敏度高等特点,有两种封装形式,一种是3脚贴片微小型封装,后缀为“LH”;另一种是3脚直插式封装,后缀为“UA”[5]。
A3144E系列单极高温霍尔效应集成传感器是由稳压电源,霍尔电压发生器,差分放大器,施密特触发器和输出放大器组成的磁敏传感电路,其输入为磁感应强度,输出是一个数字电压讯号。它是一种单磁极工作的磁敏电路,适用于矩形或者柱形磁体下工作。可应用于汽车工业和军事工程中。
霍尔传感器的外形图和与磁场的作用关系如图2-4所示。磁场由磁钢提供,所以霍尔传感器和磁钢需要配对使用。
霍尔元件和磁钢管脚图
图2-4霍尔传感器的外形图
该霍尔传感器的接线图如图2-5所示。
图2-5霍尔传感器的接线图
2.2.2霍尔传感器测量原理
测量电机转速的第一步就是要将电机的转速表示为单片机可以识别的脉冲信号,从而进行脉冲计数。霍尔器件作为一种转速测量系统的传感器,它有结构牢固、体积小、重量轻、寿命长、安装方便等优点,因此选用霍尔传感器检测脉冲信号,其基本的测量原理如图2-6所示,当电机转动时,带动传感器运动,产生对应频率的脉冲信号,经过信号处理后输出到计数器或其他的脉冲计数装置,进行转速的测量[6]。
2. 锘轰簬51鍗旷墖链虹殑杞阃熸祴閲忚捐★纴绋嫔簭缂栧啓锛佺数璺浠跨湡锲
娴嬮噺杞阃燂纴浣跨敤鍏夌数浼犳劅鍣锛岃娴嬬数链哄甫锷ㄧ焊鐗囨棆杞锛屾垜浠鍦ㄧ焊鐗囦笂寮浜10灏忓瓟锛岀数链烘疮镞嬭浆涓锻ㄥ氨浼氢骇鐢10涓鑴夊啿锛屼骇鐢12涓鑴夊啿锛岃佹眰灏呜浆阃熷硷纸杞/鍒嗭级鏄剧ず鍦ㄦ暟镰佺′笂銆
瀹为獙绋嫔簭濡备笅锛
#include<REG52.H>
#defineucharunsignedchar
#defineuintunsignedint
#defineulongunsignedlong
#defineLED_DATP1
sbitLED_SEG0=P0^3;
sbitLED_SEG1=P0^2;
sbitLED_SEG2=P0^1;
sbitLED_SEG3=P0^0;
//sbitpin_SpeedSenser=P3^5;//鍏夌数浼犳劅鍣ㄤ俊鍙锋帴鍦═1涓
#defineTIME_CYLC100//12M鏅舵尟锛屽畾镞跺櫒10ms涓鏂涓娆鎴戜滑1绉掕$畻涓娆¤浆阃//1000ms/10ms=100
#definePLUS_PER10//镰佺洏镄勯娇鏁锛岃繖閲屽亣瀹氱爜鐩树笂链10涓榻匡纴鍗充紶镒熷櫒妫娴嫔埌10涓鑴夊啿锛岃や负1鍦
#defineK100.0//镙″嗳绯绘暟
unsignedcharcodetable[]=
{0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchardataDisbuf[4];//鏄剧ず缂揿啿鍖
uintTcounter=0;//镞堕棿璁℃暟鍣
bitFlag_Fresh=0;//鍒锋柊镙囧织
bitFlag_clac=0;//璁$畻杞阃熸爣蹇
bitFlag_Err=0;//瓒呴噺绋嬫爣蹇
//鍦ㄦ暟镰佺′笂鏄剧ず涓涓锲涗綅鏁
voidDisplayFresh();
//璁$畻杞阃燂纴骞舵妸缁撴灉鏀惧叆鏁扮爜绠$紦鍐插尯
voidClacSpeed();
//鍒濆嫔寲瀹氭椂鍣═0
voidinit_timer0();
//鍒濆嫔寲瀹氭椂鍣═1
voidinit_timer1();
//寤舵椂鍑芥暟
voidDelay(uintms);
voidit_timer0()interrupt1/*interruptaddressis0x000b*/
{
TF0=0;//d瀹氭椂鍣T0鐢ㄤ簬鏁扮爜绠$殑锷ㄦ佸埛鏂
//
TH0=0xC0;/*initvalues*/
TL0=0x00;
Flag_Fresh=1;
Tcounter++;
if(Tcounter>TIME_CYLC)
{Flag_clac=1;//锻ㄦ湡鍒帮纴璇ラ吨鏂拌$畻杞阃熶简
}
}
voidit_timer1()interrupt3/*interruptaddressis0x001b*/
{
TF1=0;//瀹氭椂鍣═1鐢ㄤ簬鍗曚綅镞堕棿鍐呮敹鍒扮殑鑴夊啿鏁
//瑕侀熷害涓嶆槸寰埚揩锛孴1姘歌繙涓崭细鐩婂
Flag_Err=1;//濡傛灉阃熷害寰堥珮锛屾垜浠搴旇冭槛鍙﹀栦竴绉嶆祴阃熸柟娉曪纴锛氲剦鍐插藉害绠楄浆阃
}
voidmain(void)
{
Disbuf[0]=0;//寮链烘椂锛屽埯濮嫔寲涓0000
Disbuf[1]=0;
Disbuf[2]=0;
Disbuf[3]=0;
init_timer0();
init_timer1();
while(1)
{
if(Flag_Fresh)
{Flag_Fresh=0;
DisplayFresh();//瀹氭椂鍒锋柊鏁扮爜绠℃樉绀
}
if(Flag_clac)
{Flag_clac=0;
ClacSpeed();//璁$畻杞阃燂纴骞舵妸缁撴灉鏀惧叆鏁扮爜绠$紦鍐插尯
Tcounter=0;//锻ㄦ湡瀹氭椂娓呴浂
TH1=TL1=0x00;//鑴夊啿璁℃暟娓呴浂
}
if(Flag_Err)//瓒呴噺绋嫔勭悊
{
//鏁扮爜绠℃樉绀哄瓧姣'EEEE'
Disbuf[0]=0x9e;//寮链烘椂锛屽埯濮嫔寲涓0000
Disbuf[1]=0x9e;
Disbuf[2]=0x9e;
Disbuf[3]=0x9e;
while(1)
{DisplayFresh();//涓嶅啀娴嬮绛夊緟澶崭綅i
}
}
}
}
//鍦ㄦ暟镰佺′笂鏄剧ず涓涓锲涗綅鏁
voidDisplayFresh()
{
P2|=0xF0;
LED_SEG0=0;
LED_DAT=table[Disbuf[0]];
Delay(1);
P2|=0xF0;
LED_SEG1=0;
LED_DAT=table[Disbuf[1]];
Delay(1);
P2|=0xF0;
LED_SEG2=0;
LED_DAT=table[Disbuf[2]];
Delay(1);
P2|=0xF0;
LED_SEG3=0;
LED_DAT=table[Disbuf[3]];
Delay(1);
P2|=0xF0;
}
//璁$畻杞阃燂纴骞舵妸缁撴灉鏀惧叆鏁扮爜绠$紦鍐插尯
voidClacSpeed()
{
uintspeed;
uintPlusCounter;
PlusCounter=TH1*256+TL1;
speed=K*(PlusCounter/PLUS_PER)/60;//K鏄镙″嗳绯绘暟锛屽傞熷害涓嶅嗳锛岃皟鑺侹镄勫ぇ灏
Disbuf[0]=(speed/1000)%10;
Disbuf[1]=(speed/100)%10;
Disbuf[2]=(speed/10)%10;
Disbuf[3]=speed%10;
}
//鍒濆嫔寲瀹氭椂鍣═0
voidinit_timer0()
{
TMOD&=0xf0;//瀹氭椂10姣绉/*Timer0mode1withsoftwaregate*/
TMOD|=0x01;/*GATE0=0;C/T0#=0;M10=0;M00=1;*/
TH0=0xC0;/*initvalues*/
TL0=0x00;
ET0=1;/*enabletimer0interrupt*/
EA=1;/*enableinterrupts*/
TR0=1;/*timer0run*/
}
//寤舵椂鍑芥暟
voidDelay(uintms)
{
uchari;
while(ms--)
for(i=0;i<100;i++);
}
//鍒濆嫔寲瀹氭椂鍣═1
voidinit_timer1()
{
TMOD&=0x0F;/*Counter1mode1withsoftwaregate*/
TMOD|=0x50;/*GATE0=0;C/T0#=1;M10=0;M00=1;*/
TH1=0x00;/*initvalues*/
TL1=0x00;
ET1=1;/*enabletimer1interrupt*/
EA=1;/*enableinterrupts*/
TR1=1;/*timer1run*/
}
3. 单片机pwm控制电机转速
单片机控制电机转速:
如果只有一个转向的话就比较容易了,如果要有正反两个转向,就需要一个H桥,并且两个I/O口输出高低电频控制。
比如用P1口的P1.0,P1.1,P1.2三个I/O口接按键,P3.4口接电频输出,编个定时程序及按键程序,如果是快(全速运行),那就P3.4口直接输出高电频“1”;中(50%),那就让P3.4口0—50ms输出高电频“1”,50ms—100ms输出低电频“0”,后面就一直以50ms进行一次取反;慢(就用10%吧),0—40ns输出高电频“1”,41ns—400ns输出低电频“0”,这样为一个周期,后面就一直循环吧。
如果按键P1.0按下,执行方式1,全速运行,否则以默认方式运行;按键P1.1按下,执行方式2,改变占空比,以50%的速度运行,否则,不作改变;按键P1.2按下,执行方式3,改变占空比,以10%的速度运行,否则,不作改变。
4. 51单片机控制电机转速
前天帮别人做了一个,还可以显示当前速度,和设置的速度, 4X4键盘(16个按键),设置速度可直接输入,有正转,反转,启动,停止,和加速,减速功能5. 步进电机的单片机控制
步进电机的单片机控制
通过IO口输出的具有时序的方波作为步进电机的控制信号,信号经过芯片L298N驱动步进电机;同时,用 4X4的键盘来对电机的状态进行控制,并用数码管显示电机的转速,采用74LS164作为4位单个数码管的显示驱动,从单片机输入信号;
采通过IO口输出的具有时序的方波作为步进电机的控制信号,信号经过芯片L298N驱动步进电机;同时,用 4X4的键盘来对电机的状态进行控制,并用数码管显示电机的转速,采用74LS164作为4位单个数码管的显示驱动
1、对步进电机的控制和驱动,设计中受控电机为四相六线制的步进电机(内阻33欧,步进1.8度,额定电压12V)
使用L298N芯片驱动电机
L298N芯片可以驱动两个二相电机(如图1-1),也可以驱动一个四相电机,输出电压最高可达50V,可以直接通过电源来调节输出电压;可以直接用单片机的IO口提供信号;而且电路简单,使用比较方便。 而使用L298N时,可以用L297来提供时序信号,可以节省单片机IO口的使用;也可以直接用单片机模拟出时序信号,由于控制并不复杂,故选用后者。
2、 数码管显示电路的设计
串行接法
设计中要显示4位数字,用74LS164作为显示驱动,其中带锁存,使用串行接法可以节约IO口资源,但要使用SIO,发送数据时容易控制。
二、步进电机控制原理
步进电机是数字控制电机,它将脉冲信号转变成角位移,即给一个脉冲信号,步进电机就转动一个角度,因此非常适合于单片机控制。步进电机可分为反应式步进电机(简称VR)、永磁式步进电机(简称PM)和混合式步进电机(简称HB)。
步进电机区别于其他控制电机的最大特点是,它是通过输入脉冲信号来进行控制的,即电机的总转动角度由输入脉冲数决定,而电机的转速由脉冲信号频率决定。
步进电机的驱动电路根据控制信号工作,控制信号由单片机产生。其基本原理作用如下:
(1)控制换相顺序
通电换相这一过程称为脉冲分配。例如:三相步进电机的三拍工作方式,其各相通电顺序为A-B-C-D,通电控制脉冲必须严格按照这一顺序分别控制A,B,C,D相的通断。
(2)控制步进电机的转向
如果给定工作方式正序换相通电,步进电机正转,如果按反序通电换相,则电机就反转。
(3)控制步进电机的速度
如果给步进电机发一个控制脉冲,它就转一步,再发一个脉冲,它会再转一步。两个脉冲的间隔越短,步进电机就转得越快。调整单片机发出的脉冲频率,就可以对步进电机进行调速。
三、理论设计
1、步进电机驱动电路
通过L298N构成步进电机的驱动电路,电路图如图3-2所示。
通过单片机的IOB8~IOB13对L298N的IN1~IN4口和ENA、ENB口发送方波脉冲信号,2、数码管显示电路的设计
数码管的显示驱动使用74LS164,通过的IOB0和IOB1口对DATA和CLK发送数据。
3、4x4键盘电路
使用了标准的4x4键盘,单片机的A口低8位为键盘的接口。尽管设计要求中只需要4个键对步进电机的状态进行控制,但考虑到对控制功能的扩展,我们使用了4x4的键盘。
6. 用单片机控制风扇的转速希望提供具体电路,我是新手希望大家多多帮助!!!
直流电机调速的技术是很常见的。。
不过当然不是用电阻,那样会有巨大的损耗。
一般直流电机调速都采用PWM(即脉宽调制)技术。
即,首先在电源和电机之间串联一个开关电子器件(比如mosfet管、达林顿管),这种器件可以以极高的速度控制电路通断。然后,我利用模拟电路或者数字电路(现在多用单片机)来控制这个开关管就能控制电机的电功率。比如,我想让电机工作电压只有电源电压的一半,我可以以1毫秒为周期,让开关管通0.5毫秒,断0.5毫秒,这样快速的电压波动在经过电机转子电枢这一有惯性的元件后就被“抹平”了,而且平均下来电压正好是电源的1/2,这就达到了控制电机输出功率的目的。[1]
开关元件可以在淘宝上买到现成的模块。其中最常用的是L298N做的电机控制板(楼上图中上方的那个就是),有两路双向调速(用H桥实现)的输出,单路最大电流2A,工作电压是12V以下(记不清是12还是24,你查一下。。)。如果需要更大功率,可以找BTS7960做的模块,容量是40A。。。
至于单片机,如果你有51可以用,学学定时器中断和IO操作,然后网上51 PWM的资料很多。。当然arino更不错(楼上图中下方的那个就是,不过是山寨的,正版是蓝色的,淘宝搜),除了AVR性能更好之外,IDE自带的驱动函数也挺方便。我记得51是没有硬件PWM端口的,而AVR有,在Arino IDE中直接调现成函数就能用。。。
参考资料:[1]来自我以前的原创回答