电机转速表设计

本文详细描述了一种利用C52单片机和霍尔传感器实现电机转速检测的方法,包括转速测量原理、系统设计、硬件构建、C语言编程以及使用KeiluVision4和Proteus进行开发与仿真。文中展示了转速测量的周期法和频率法,并介绍了计数和定时同步的实现过程。
摘要由CSDN通过智能技术生成

概述:

本次设计是一种基于C52单片机基础之上来实现对电机转速检测的方法;本次设计基于霍尔传感器来完成速度的检测,其中硬件系统包括:脉冲信号的产生,脉冲信号的处理和显示模块,以及用C语言编程,使用Keil和Proteus进行编译、调试和仿真。

研究的主要内容

1、具体地研究转速测量的方法:周期(T)法,频率(M)法,以及2种测量方法的具体计算方式并分析其优劣,理解转速测量的原理。
2、构建系统总体设计框图,构建硬件系统,用C语言编程完成软件系统。

3、使用Keil uVision4 和Proteus 7 Professional 进行编译,调试和仿真。
4、根据设计的要求设置各控制字,并且使用C语言来编程,对计数和定时来进行同步,并采用数码管动态显示来显示转速。

系统的总体设计框图


本次设计主要是利用AT89C52单片机和传感器来设计的。通过传感器来采集脉冲信号,并且通过定时/计数的算法,最后将转速数值通过LED实时显示。此次设计利用单片机进行信号处理,利用传感器采集信号,并使用Keil uVision4和Proteus 7 Professional进行编译,调试和仿真。
系统总体设计如下图所示:

各部分模块的功能:


1.传感器:用来采集脉冲信号。
2.单片机:对接收到的信号进行处理后送LED显示。
3.电机驱动:驱动电机,使其运转。
4.LED显示:显示转数的瞬时值。

Proteus仿真电路图:

初始界面

仿真运行:

测速代码:

#include<reg51.h>    
#include<intrins.h> 
sbit RS=P2^0;    
sbit RW=P2^1;    
sbit E=P2^2;     
sbit BF=P0^7;    
unsigned char code digit[ ]={"0123456789"}; 
unsigned int v;  
unsigned char count;  
bit flag;      
void delay1ms()
{
   unsigned char i,j;	
	 for(i=0;i<10;i++)
	  for(j=0;j<33;j++)
	   ;		 
 }
 
 void delay(unsigned char n)
 {
   unsigned char i;
	for(i=0;i<n;i++)
	   delay1ms();
 }

 unsigned char BusyTest(void)
  {
    bit result;
	RS=0;       
    RW=1;
    E=1;       
    _nop_();   
    _nop_();
    _nop_(); 
    _nop_();   	
    result=BF;  
   E=0;         
   return result;
  }
void WriteInstruction (unsigned char dictate)
{   
while(BusyTest()==1); 
	 RS=0;                 
	 RW=0;   
	E=0;                                             	 _nop_();
	 _nop_();            
	 P0=dictate;            
	 _nop_();
	 _nop_();
	 _nop_();
	 _nop_();              
	 E=1;                   
	 _nop_();
	 _nop_();
	 _nop_();
	 _nop_();               
	  E=0;                 
 }

 void WriteAddress(unsigned char x)
 {
     WriteInstruction(x|0x80);
 }
 void WriteData(unsigned char y)
 {
    while(BusyTest()==1);  
	  RS=1;           
	  RW=0;
	  E=0;            
  	  P0=y;          
	  _nop_();
	  _nop_();
 	  _nop_();
     _nop_();      
	  E=1;        
	  _nop_();
	  _nop_();
	  _nop_();
	 _nop_();        
	 E=0;            
void LcdInitiate(void)
{
   delay(15);             
   WriteInstruction(0x38);  
	delay(5);              
   WriteInstruction(0x38);
	delay(5);
	WriteInstruction(0x38);
	delay(5);
	WriteInstruction(0x0c);  
	delay(5);
	WriteInstruction(0x06);  
	delay(5);
	WriteInstruction(0x01);  
	delay(5);

 }
void display_sym(void)
{
   WriteAddress(0x00); 
	WriteData('v');     
	WriteData('=');      
 
 } 
 
void display_val(unsigned int x)
{
 unsigned char i,j,k,l;     
	i=x/1000;         
	j=(x%1000)/100;    
   k=(x%100)/10;     
   l=x%10;           
	WriteAddress(0x02);     
	WriteData(digit[i]);    
	WriteData(digit[j]);    
	WriteData(digit[k]);    
	WriteData(digit[l]);    	 
 } 
void display_unit(void)
{
   WriteAddress(0x06);   
	WriteData('r');    
	WriteData('/');    
	WriteData('m');    
	WriteData('i');    
	WriteData('n');    
 } 
 void main(void)
 {
   LcdInitiate();            	
   TMOD=0x51;               
	TH0=(65536-46083)/256;    
	TL0=(65536-46083)%256;   
	EA=1;                     
	ET0=1;                    
	TR0=1;                   
	count=0;                  
	display_sym();            
  display_val(0000);        
  display_unit();            
	 while(1)                 
	  {
   	  TR1=1;           
		  TH1=0;           
		  TL1=0;            
		  flag=0;           
		  while(flag==0)    ;
		 v=(TH1*256+TL1)*60/16; 
		 display_val(v);       
    }			
}

void Time0(void ) interrupt 1 using 1 
  {
count++;          
	 if(count==20)     
	  {
       flag=1;       
		 count=0;      
	  }
TH0=(65536-46083)/256;   
 TL0=(65536-46083)%256;   
	
  }

模拟霍尔脉冲代码:

#include<reg51.h>
sbit cp=P3^2;    
void delay()
{
   unsigned char i;	
	 for(i=0;i<200;i++)
	       ;    
 }
 void main(void)
 {
	   while(1)
	    { 
	      cp=1;     
	      delay();  
	      cp=0;     
	      delay();  
	   } 
 }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值