A. 霍尔传感器该怎么连接单片机
第一接的管脚是你程序控制的你不把程序贴上来没人知道霍尔元件其他的管脚就是电源和地线第二一般测转速是在电机上加个小轮子磁铁放在小轮子的边缘霍尔元件靠近这个小轮子磁铁过一次霍尔时霍尔元件管脚产生一个脉冲第三电压5V完全够用你从单片机的工作电压脚上引一根线出来就好
B. 有大神能帮我解释一下下图的霍尔元件和单片机为什么这么连吗
①图中霍尔元件为(输出)电压型的传感器(估计是开关型的电压输出),当被测物体(如带有磁铁的扇叶)经过霍尔元件正上方时,霍尔元件输出(正)电压。
②LM358运放搭建的是个“过零比较器”(也可以认为是“比较器”),但同相端(3脚)输入电压高于反相端(2脚)时,运放输出(1脚)正电压(近似为Vcc),否则就输出负电压(近似为GND)。图中 R10为“零”点的失调电阻,就是用来校“零”的。当然,如果理解成比较器电路,那R10就是用来调节“感应灵敏度”的(前提是霍尔元件输出的电压是随磁场变化的模拟量,而不是开关量)
③综上,简易的是:霍尔感应磁场后,输出正电压,经过运放比较后,输出开关量电压到单片机进行开关检测。
复杂的是:霍尔感应磁场大小,输出对应电压值,经过运放比较器,与指定动作电压比较后,输出开关量电压到单片机进行开关检测。
注:要留心的是,①霍尔普遍输出为电流的;②霍尔感应磁场分N/S单极,和NS双极型。
C. 怎么编程51单片机来采集霍尔信号
现在的霍尔传感器的输出信号一般都是开关信号,所以使用单片机的任何一个IO口都可以,判断高低电平即可。
D. 霍尔传感器测速电路图及如何连接到单片机
霍尔传感器一般由霍尔元件和磁钢组成。当霍尔元件和磁钢相对运动时就会产生信号脉冲。根据磁钢和脉冲数量就可以计算转速。转而可以求出周长,得出车速之类的参数。
E. 用单片机C51中的计数器来测霍尔传感器转一圈的时间程序
#include<reg52.h>
#include<Star1602.h>
#define CIRCLE 1.8 //宏定义 车轮的周长(这个要根据实际的车轮进行设置)
sbit Signal = P1^0; //这里的Signal表示的是霍尔传感器的信号引脚
int m_second=0; //定义变量m_second,用来记录时间(以毫秒为单位)
float speed=0.0 ; //定义速度变量
float length=0.0 ;//定义路程变量
void main()
{
lcd_init(); //初始化液晶函数
TMOD = 0x01; //打开定时器0,并设定其工作方式为16位定时模式。
TH0=(65536-10000)/ 256;
TL0=(65536-10000)% 256; //设定定时器的初值,使得没10ms中断一次
EA = 1; //允许总中断
ET0 = 1; //允许定时器0终端
TR0 = 1; //启动定时器0
while(1) //大循环
{
while(Signal); //等待霍尔传感器信号线拉低;
speed = CIRCLE *1000 / m_second ; //计算速度。
m_second = 0; //计时清零
length += CIRCLE ; //路程加一个车轮周期
//第一行,显示速度
lcd_pos(0x0); //设定液晶的写入位置为第一行第一格
lcd_wdat(‘S’);
lcd_wdat(‘p’);
lcd_wdat(‘e’);
lcd_wdat(‘e’);
lcd_wdat(‘d’);
lcd_wdat(‘:’);
lcd_wdat( (int)speed%10 ); //显示速度的整数部分
lcd_wdat( (int)(speed*10)%10 ); //显示速度的小数第一位
lcd_wdat( (int)(speed*100)%10 ); //显示速度的小数第二位
lcd_wdat(‘m’);
lcd_wdat(‘/’);
lcd_wdat(‘s’);
//第二行,显示里程
lcd_pos(0x80); //设定液晶的写入位置为第二行第一格
lcd_wdat(‘L’);
lcd_wdat(‘e’);
lcd_wdat(‘n’);
lcd_wdat(‘g’);
lcd_wdat(‘t’);
lcd_wdat(‘h’);
lcd_wdat(‘:’);
lcd_wdat(length /10000+0x30); //显示里程的万位;
lcd_wdat(length %10000/1000+0x30); //显示里程的千位;
lcd_wdat(length %1000/100+0x30); //显示里程的百位;
lcd_wdat(length %100/10+0x30); //显示里程的十位;
lcd_wdat(length %10+0x30); //显示里程的个位;
lcd_wdat(‘m’);
}
}
void timer0_intt() interrupt 1 //
{
TH0=(65536-10000)/ 256;
TL0=(65536-10000)% 256; //设定定时器的初值,使得没10ms中断一次
m_second += 10; //因为中断每10毫秒一次,所以这里每次加10;
}
附件1 Star1602.h
#ifndef __STAR1602_H__
#define __STAR1602_H__
sbit rs= P2^0; //
sbit rw = P2^1; //
sbit ep = P2^2; //
void lcd_init(); //液晶初始化函数
void lcd_pos(unsigned char pos); //设定液晶的显示位置函数
void lcd_wdat(unsigned char dat); //液晶写入字符
void lcd_write_int(unsigned int x); //液晶显示一个整形变量
#endif
附件2 Star1602.c
#include <reg52.h>
#include "1602.h"
/*****************************************************************************
函数功能:LCD延时子程序
入口参数:ms
出口参数:
*****************************************************************************/
static void delay(unsigned char ms)
{
unsigned char i;
while(ms--)
{
for(i = 0; i< 5; i++);
}
}
/*****************************************************************************
函数功能:测试LCD忙碌状态
入口参数:
出口参数:result
*****************************************************************************/
static bit lcd_bz()
{
bit result;
rs = 0;
rw = 1;
ep = 1;
delay(5);
result = (bit)(P0 & 0x80);
ep = 0;
return result;
}
/*****************************************************************************
函数功能:写指令数据到LCD子程序
入口参数:cmd
出口参数:
*****************************************************************************/
static void lcd_wcmd(unsigned char cmd)
{
while(lcd_bz()); //判断LCD是否忙碌
rs = 0;
rw = 0;
ep = 0;
delay(5);
P0 = cmd;
delay(5);
ep = 1;
delay(5);
ep = 0;
}
/*****************************************************************************
函数功能:设定显示位置子程序
入口参数:pos
出口参数:
*****************************************************************************/
void lcd_pos(unsigned char pos)
{
lcd_wcmd(pos | 0x80);
}
/*****************************************************************************
函数功能:写入显示数据到LCD子程序
入口参数:dat
出口参数:
*****************************************************************************/
void lcd_wdat(unsigned char dat)
{
while(lcd_bz()); //判断LCD是否忙碌
rs = 1;
rw = 0;
ep = 0;
P0 = dat;
delay(5);
ep = 1;
delay(5);
ep = 0;
}
/*****************************************************************************
函数功能:LCD初始化子程序
入口参数:
出口参数:
*****************************************************************************/
void lcd_init()
{
lcd_wcmd(0x38);
delay(100);
lcd_wcmd(0x0c);
delay(100);
lcd_wcmd(0x06);
delay(100);
lcd_wcmd(0x01);
delay(100);
}
/*****************************************************************************
函数功能:LCD写入一个整形数据
入口参数:int x
*****************************************************************************/
void lcd_write_int(unsigned int x);
{
unsigned char x1,x2,x3,x4,x5;
x1 = x/10000;
x2=x%10000/1000;
x3=x%1000/100;
x4=x%100/10;
x5=x%10;
lcd_wdat(x1+0x30);
lcd_wdat(x2+0x30);
lcd_wdat(x3+0x30);
lcd_wdat(x4+0x30);
lcd_wdat(x5+0x30);
}
F. 霍尔传感器与单片机怎么接
霍尔传感器分为两类,1是开关型的,2是线性的,分别叫做开关霍尔和线性霍尔器件,与单片机连接要看你采集的是什么样的信号,如果你只需要开关信号的话,就用开关霍尔,从霍尔的输出连接到单片机的中断引脚,程序里使用中断方式处理,或者连接到普通IO引脚,程序里使用查询方式处理,这种器件输出就是高低电平,比如3144Z等型号。线性霍尔主要用来测量附近的磁强度,输出变化与磁场强度成正比,即为一个受磁场调制的模拟信号,单片机要处理的话需要采用AD转换后才能正确处理的。
G. 单片机测转速(霍尔)如果不是霍尔,是脉冲即可
很简单,我提供一个思路给你。转动一周,则用单片机的T0计数一次,用T1做定时器,时间/次数=转速。
H. 霍尔传感器如何与单片机连接
常用的霍尔传感器就是一个开关量,我通常是用光耦再连接到单片机,连接光耦发光的那端电阻不能太大保证发光管可以发光。
I. 关于单片机 霍尔传感器 可加分
可以直接把OUT接到单片机的输入端~