霍尔元件测量转速地实现_第1页
霍尔元件测量转速地实现_第2页
霍尔元件测量转速地实现_第3页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、霍尔元件测量转速的实现一、实验目的1掌握霍尔测速的方法,掌握霍尔测速的原理。2、重视保护电路在电路中的重要性。二、实验设备教学实验开发板等三、预习要求1了解霍尔测速的原理2、熟悉运算放大器的各种放大电路的接法和增益计算方法。四、转速测量原理转速的测量方法很多,根据脉冲计数来实现转速测量的方法主要有M法(测频法)、T法(测周期法)和MPT法(频率周期法),该系统采用了 M法(测频 法)。由于转速是以单位时间内转数来衡量,在变换过程中多数是有规律的重复 运动。根据霍尔效应原理,将一块永久磁钢固定在电机转轴上的转盘边沿,转盘随测轴旋转,磁钢也将跟着同步旋转,在转盘下方安装一个霍尔器件,转盘随轴 旋转

2、时,受磁钢所产生的磁场的影响,霍尔器件输出脉冲信号,其频率和转速成 正比。脉冲信号的周期与电机的转速有以下关系:式中:n为电机转速;P为电机转一圈的脉冲数;T为输出方波信号周期 根据公式即可计算出直流电机的转速。测量电机转速的第一步就是要将电机的转速表示为单片机可以识别的脉冲信号,从而进行脉冲计数。霍尔器件作为一种转速测量系统的传感器,它有结构牢固、体积小、重量轻、寿命长、安装方便等优点,因此选用霍尔传感器检测脉 冲信号,其基本的测量原理如图所示,当电机转动时,带动传感器运动,产生对 应频率的脉冲信号,经过信号处理后输出到计数器或其他的脉冲计数装置,进行转速的测量。信号址理+VI B p- *

3、 * M * .LI转动方向五、软件设计由于实验箱已给出霍尔传感器测量转速的硬件电路,实验中只需要设计软件实现通过AT89C51,单片机完成对电机转速脉冲计数的控制,读取寄存器完成转速频率的确定。其测量过程是测量转速的霍尔传感器和电机机轴同轴连接,机轴每转一周,产生一定量的脉冲个数,由霍尔器件电路输出。经过电耦合器后,成为转数计数器的计数脉冲。同时霍尔传感器电路输出幅度为 12V的脉冲经光电耦合后降为 5V,保持同单片机 AT89C51逻辑电 平相一致,控制计数时间,即可实现计数器的计数值对应机轴的转速值。主CPU将该值数据处理后,在12864LCD液晶显示器上显示出来。本程序通过测频的方法计

4、算电动机的转速。电动机转一周,霍尔传感器会产生一个负脉冲信号。程序中将 T0当作计数器使用,记录电动机转动的圈数; T1作定时器用,确定计数 周期。设定计数周期为1s,上一周期计数器记录下的电机转动圈数,作为当前的转速显示。下面是程序主流程图:六:实现程序:12864驱动:#in clude<stdio.h>*/延时函数* 当t=1时,延时1.1usvoid DelayUs( un sig ned char t)0<t<255while(-t);II 当t=1时,延时1.0msvoid DelayMs( un sig ned char t)0<t<255un

5、 sig ned int j;while(t-)for(j=0;j<100;j+);*/LCD12864液晶部分/*#defi ne LCD12864_DataPort P1 sbit LCD12864_RS = P2A5; sbit LCD12864_RW =卩2人6;sbit LCD12864_EN =卩2人7;/sbit LCD12864_Busy = P0A7;void LCD12864_WriteData(u nsig ned char conten t);void LCD12864_WriteComma nd(u nsig ned char content);void LCD

6、12864_Clea nRam(void);void LCD12864_I nit(void);void LCD12864_I nit(void)光标的移动方向 开显示,关游标 清屏LCD12864_WriteComma nd(0x06);/LCD12864_WriteComma nd(OxOc);/LCD12864_Clea nRam();/LCD12864_WriteComma nd(0x01); /?void LCD12864_Clea nRam(void)LCD12864_WriteComma nd(0x30);LCD12864_WriteComma nd(0x01);void LCD

7、12864_WriteData(u nsig ned char content)LCD12864_CheckBusy();LCD12864_RS=1;LCD12864_RW=0;LCD12864_DataPort=co ntent;LCD12864_EN=1;LCD12864_EN=0;void LCD12864_WriteComma nd(u nsig ned char content)LCD12864_CheckBusy();LCD12864_RS=0;LCD12864_RW=0;LCD12864_DataPort=co ntent;LCD12864_EN=1;LCD12864_EN=0;

8、void LCD12864_Gotoxy (un sig ned char y,un sig ned char x)if(y=1)LCD12864_WriteComma nd(0x80|x);if(y=2)LCD12864_WriteComma nd(0x90|x);if(y=3)LCD12864_WriteComma nd(0x80|x)+8);if(y=4)LCD12864_WriteComma nd(0x90|x)+8);void LCD12864_Display (un sig ned char x,y ,un sig ned char *str)LCD12864_Gotoxy(x,y

9、);DelayMs(5);while(*str!='O')LCD12864_WriteData(*str);str+;exter n void Displa ynu m(char x,char y,float num)char s4;sprintf(s,"%2.1f", num); ?"3.141593"LCD12864_Display(x,y,s);主要程序:/*头文件调用*#in clude <reg52.h>#in clude vintrin s.h>#in clude <math.h>#in clud

10、e <stdio.h>#in clude "12864.h"/* 宏定义*/ #defi ne uchar un sig ned char#defi ne uint un sig ned int/*全局变量及数组定义*/uchar code g_arlni tDisplay117="The rotate speed" /液晶初始化会死要显示的字符串。uchar code g_arInitDisplay28="round/s"/注意:数组的长度至少要比字符串长度大一。/数组长度选择不合理,会出现意想不到的错误uchar g_

11、arRoundDisplay5=0;/此数组将以字符形式存放将要显示在1602上的数值uchar g_ucT1_OutTimes;/Timer1 的溢出次数,用以计时 1suint g_uiRound;/电动机的转动圈数,每秒更新一次,可作为电机转速/*Fun ctio n:TimersnitDescription:初始化时钟,T0工作于16位计数模式,记录电机转速;T1为16位定时模式,用于管理时间阀门。Calls:不调用其他函数Called By:mai n()In put:无Output:无Return:无Others:仅在系统初始化时使用一次* Ivoid Timers_i nit()

12、TMOD=0x15;TCON=Ox5O;EA=1;ET1=1;TH0=0;TL0=0;/定时器的初始化/T0工作于16位计数模式;T1为16位定时模式/TR1、TR0为1,其余为 0/开总中断/允许T1溢出中断/电动机每秒钟转动的圈数在200圈之内/T1用于计时1s,中断20次约为1sTH1=(65536-50000)/256;TL仁(65536-50000)%256;/*Fu nctio n:LCD_l nitDisplayDescriptio n:12864初始显示内容Calls:DisplayCalled By:mai n()In put:无Output:无Return:无Others:

13、仅在系统初始化时使用一次*/void LCD_InitDisplay()/在12864上显示出初始字符串LCD12864_Display(0,0,g_arl ni tDisplay1);LCD12864_Display(6,1,g_arl ni tDisplay2);*/*Fun cti on:mainDescriptio n:主函数Calls:Timers_init() , LcdInit(), LCD_InitDisplay(), sprintf(),Display()Called By:mai n()In put:无Output:无Return:无Others:主函数*void mai

14、n()Timers_i nit();LCD12864_I nit();LCD_I ni tDisplay();while(1)/定时器初始化/液晶初始化if(g_ucT1_OutTimes>=20)TR0=0;/g_uiRou nd=256*TH0+TL0;/ 中断20次时,计时达到1s关定时器0/读取定时器0的计数值,即上/ 在12864上显示出初始字符串周期电机转动的圈数TH0=0;TL0=0;/定时器0计数值清零,准备下次计TR0=1;/打开定时器0,开始新一轮计数/将数值spri ntf(g_arRou ndDisplay,"%4d",g_uiRou nd);

15、Round以字符形式打印到 Round_display数组里面LCD12864_Display(1,1,g_arRoundDisplay); /在 12864 上显示Round_display 里面的字符,即显示 Round的值g_ucT1_OutTimes=0;T1中断次数清零,开始下一周期的计时/*Fu nctio n:Timer1_INTDescriptio n:Timer1的中断函数,中断20次为计时1sCalls:无Called By:无In put:无Output:无Return:无Others:中断函数,不被任何函数调用*void Timer1_INT() in terrupt 3 TR1=0;/TH1=(65536-50000)/256;TL仁(65536-50000)%256;/TR 1=1;/g_ucT1_OutTimes+;关闭定时器1重装初值,每次计时 50ms 定时器1开始计数/TimerO每溢出一次,T1_OutTimes 数值加 1实验感想:本次实验在小组成员

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论