硬件分析

(文末附文件)
原理框图
在这里插入图片描述
原理图:

在这里插入图片描述

系统功能分析
本设计由STC89C52单片机电路+液晶LCD1602显示电路+霍尔测速电路+电源电路组成。
1、通过霍尔传感器测速,霍尔传感器检测轮盘上的磁铁进而知道轮盘转了多少周,从而计算出转速。
2、LCD1602液晶实时显示转速。
3、可以通过电位器调节电机的转速。

A3144霍尔传感器模块电路设计
本霍尔传感器模块是基于霍尔元件A3144设计制作的模块,A3144芯片是一种磁传感器,其应用霍尔效应原理,采用半导体集成技术制造的磁敏电路,它是由电压调整器、霍尔电压发生器、差分放大器、史密特触发器,温度补偿电路和集电极开路的输出级组成的磁敏传感电路,其输入为磁感应强度,输出是一个数字电压信号,用它可以检测磁场及其变化,可在各种磁场相关的场合中使用,霍尔器件具有很多优点,它的结构牢固、体积小、重量轻、寿命长、安装方便、功耗低、频率高、耐振动、不怕灰尘、油污、水汽、盐雾等的污染或腐蚀。使用LM393宽电压比较器,通过对霍尔传感器传过来的值和电位器的分压值比较,可以直接输出高低电平,信号干净,波形好,驱动能力强。A3144霍尔传感器模块体积小,灵敏度高,响应速度快,温度性能好,精确度高,可靠性高。
一、传感器参数
(1)工作电压:3.3-5V。
(2)使用3144E开关型霍尔传感器。
(3)当传感器感应到磁场时,数字输出低电平,信号灯亮;如果没有感应到磁场,则数字输出高电平,信号灯不亮。
(4)具有电源指示灯和信号指示灯。
(5)输出形式:数字开关量输出(0和1),模拟量AO口无效。
(6)采用LM393比较器输出,型号干净,波形好,驱动能力强,超过15mA。
(7)可用于电机测速、位置检测等。
二、接口说明
(1) VCC→电源正极。
(2)GND→电源负极。
(3)DO →TTL数字量输出,有磁感应是输出低电平。
(4)AO →模拟量输出(不同距离输出不同电压)。
三、使用说明
A3144霍尔开关元件属于开关型霍尔传感器(集成霍尔开关),它是把霍尔片产生的霍尔电压放大后驱动触发电路,输出电压是能变化的方脉冲。霍尔转速传感器的外形图和与磁场的作用关系如下图所示。磁场由磁钢提供,所以霍尔传感器和磁钢需要配对使用。在非磁材料的圆盘边上粘贴一块磁钢,霍尔传感器固定在圆盘外缘附近。圆盘每转动一圈,霍尔传感器便输出一个脉冲。通过单片机测量产生脉冲的频率就可以得出圆盘的转速。
在这里插入图片描述
霍尔传感器模块内部电路图如下图所示,其中R1电阻为分压电阻,将霍尔传感器检测到的磁场信息转化为模拟电压信号即AO,模拟量信号接入LM393比较器后,即可与LM393比较器芯片2号引脚所接的分压电阻分压后的模拟电压进行比较,进而得出DO数字信号(即高低电平信号)。C1、C2为滤波电容,C1电容对电源进行滤波,让电源输出更稳定。C2电容对模拟信号进行滤波,保证模拟信号输出的稳定性。R2、R3均为限流电阻,来保护LED灯,防止LED灯烧坏,LED灯均为低电平有效。R4为上拉电阻,上拉就是将不确定的信号通过一个电阻钳位在高电平,同时起限流作用。保证LM393比较器输出的高低电平信号在与单片机引脚连接时电平信号的读取更加稳定。在这里插入图片描述
在这里插入图片描述

系统软件设计

在这里插入图片描述

#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
#include<stdio.h>
#include "1602.h"
#include "delay.h"

unsigned long PluNum=0;	//检测速度转化来的脉冲量
unsigned long time_ms;		   //定时器计数
float Juli=0;				//转速计算
char displaytemp[16];		   //显示更新暂存
unsigned char DealSudu=0;	  //处理速度
void Init_Timer0(void);		 //函数声明
/*------------------------------------------------
                    主函数
------------------------------------------------*/
void main (void)
{                  
	Init_Timer0();        //定时器0初始化
	EX0=1;         //外部中断0开
	IT0=1;         //边沿触发
    EA=1;          //全局中断开
	LCD_Init();           //初始化液晶
	DelayMs(20);          //延时有助于稳定
	LCD_Clear();          //清屏

	LCD_Write_String(0,0,"My Designer!    ");  //初始化
	sprintf(displaytemp,"ZhuanSu:%3.1fr/s",Juli);
	LCD_Write_String(0,1,displaytemp);

	while (1)         //主循环
	{
		if(DealSudu==1)
		{
			DealSudu=0;
			Juli=(Juli+(float)PluNum/3.0)/2;	//m/s 1个脉冲为1圈 3s时间进行检测
			PluNum=0;
			sprintf(displaytemp,"ZhuanSu:%3.1fr/s",Juli);	 //打印转速
			LCD_Write_String(0,1,displaytemp);	//显示
			PluNum=0;
		}
	}
}

void Init_Timer0(void)
{
	TMOD |= 0x01;	  //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响		     
	TH0=(65536-20000)/256;		  //重新赋值 20ms
	TL0=(65536-20000)%256;
	EA=1;            //总中断打开
	ET0=1;           //定时器中断打开
	TR0=1;           //定时器开关打开
}

void Timer0_isr(void) interrupt 1 
{
	static unsigned char Count=0;	   //计数
	TH0=(65536-20000)/256;		  //重新赋值 20ms
	TL0=(65536-20000)%256;	
	time_ms++;
	if(time_ms%48==0)		  //定时处理
	{
		Count++;
		if(Count>3)		//3s进行处理
		{
		 	DealSudu=1;
		}
	}
}

/*------------------------------------------------
                 外部中断程序
------------------------------------------------*/
void ISR_Key(void) interrupt 0 using 1
{
	PluNum++;		//脉冲计数
}

.

链接:https://pan.baidu.com/s/1dcQS8Tf_Ym4MBDXn6cIo-g
提取码:idy4

.

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐