霍尔元件测量转速地实现.doc

上传人:夺命阿水 文档编号:17948 上传时间:2022-07-01 格式:DOC 页数:12 大小:81.50KB
返回 下载 相关 举报
霍尔元件测量转速地实现.doc_第1页
第1页 / 共12页
霍尔元件测量转速地实现.doc_第2页
第2页 / 共12页
霍尔元件测量转速地实现.doc_第3页
第3页 / 共12页
霍尔元件测量转速地实现.doc_第4页
第4页 / 共12页
霍尔元件测量转速地实现.doc_第5页
第5页 / 共12页
点击查看更多>>
资源描述

《霍尔元件测量转速地实现.doc》由会员分享,可在线阅读,更多相关《霍尔元件测量转速地实现.doc(12页珍藏版)》请在课桌文档上搜索。

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

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

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

4、负脉冲信号。程序中将T0当作计数器使用,记录电动机转动的圈数;T1作定时器用,确定计数周期。设定计数周期为1s,上一周期计数器记录下的电机转动圈数,作为当前的转速显示。下面是程序主流程图:全局初始化开始显示中断计数INT0、T1中断六:实现程序: 12864驱动:#include/*/延时函数/*void DelayUs(unsigned char t) /当t=1时,延时1.1us0t255 while(-t);void DelayMs(unsigned char t) /当t=1时,延时1.0ms0t255 unsigned int j;while(t-)for(j=0;j100;j+);

5、/*/LCD12864液晶局部/*#define LCD12864_DataPort P1sbit LCD12864_RS = P25;sbit LCD12864_RW = P26;sbit LCD12864_EN = P27;/sbit LCD12864_Busy = P07; void LCD12864_WriteData(unsigned char content);void LCD12864_Writemand(unsigned char content);void LCD12864_CleanRam(void);void LCD12864_Init(void);void LCD128

6、64_Init(void)LCD12864_Writemand(0x06); /光标的移动方向LCD12864_Writemand(0x0c);/开显示,关游标LCD12864_CleanRam(); /清屏LCD12864_Writemand(0x01); /?void LCD12864_CleanRam(void)LCD12864_Writemand(0x30);LCD12864_Writemand(0x01);void LCD12864_WriteData(unsigned char content)/LCD12864_CheckBusy();LCD12864_RS=1; LCD1286

7、4_RW=0;LCD12864_DataPort=content;LCD12864_EN=1;LCD12864_EN=0;void LCD12864_Writemand(unsigned char content)/LCD12864_CheckBusy();LCD12864_RS=0; LCD12864_RW=0;LCD12864_DataPort=content;LCD12864_EN=1;LCD12864_EN=0;void LCD12864_Gotoxy(unsigned char y,unsigned char x)if(y=1)LCD12864_Writemand(0x80|x);i

8、f(y=2) LCD12864_Writemand(0x90|x);if(y=3)LCD12864_Writemand(0x80|x)+8);if(y=4) LCD12864_Writemand(0x90|x)+8);void LCD12864_Display(unsigned char x,y,unsigned char *str)LCD12864_Gotoxy(x,y);DelayMs(5);while(*str!=0)LCD12864_WriteData(*str);str+;extern void Displaynum(char x,char y,float num) char s4;

9、 sprintf(s,%2.1f, num); /?3.141593 LCD12864_Display(x,y,s); 主要程序:/*头文件调用*/#include #include #include #include #include 12864.h/*宏定义*/#define uchar unsigned char#define uint unsigned int/*全局变量与数组定义*/uchar code g_arInitDisplay117=The rotate speed; /液晶初始化会死要显示的字符串。uchar code g_arInitDisplay28=round/s;

10、/注意:数组的长度至少要比字符串长度大一。/数组长度选择不合理,会出现意想不到的错误uchar g_arRoundDisplay5=0; /此数组将以字符形式存放将要显示在1602上的数值uchar g_ucT1_OutTimes;/Timer1的溢出次数,用以计时1suint g_uiRound;/电动机的转动圈数,每秒更新一次,可作为电机转速/* Function:Timers_init Description:初始化时钟,T0工作于16位计数模式,记录电机转速;T1为16位定时模式 ,用于管理时间阀门。 Calls:不调用其他函数 Called By:main() Input:无 Out

11、put:无 Return:无 Others:仅在系统初始化时使用一次*/void Timers_init()/定时器的初始化TMOD=0x15;/T0工作于16位计数模式;T1为16位定时模式TCON=0x50;/TR1、TR0为1,其余为0EA=1;/开总中断ET1=1;/允许T1溢出中断TH0=0;TL0=0;/电动机每秒钟转动的圈数在200圈之内TH1=(65536-50000)/256;TL1=(65536-50000)%256;/T1用于计时1s,中断20次约为1s/* Function:LCD_InitDisplay Description:12864初始显示内容 Calls:Di

12、splay Called By:main() Input:无 Output:无 Return:无 Others:仅在系统初始化时使用一次*/void LCD_InitDisplay()/在12864上显示出初始字符串LCD12864_Display(0,0,g_arInitDisplay1);LCD12864_Display(6,1,g_arInitDisplay2);/* Function:main Description:主函数 Calls:Timers_init(),LcdInit(), LCD_InitDisplay(), sprintf(),Display()Called By:ma

13、in() Input:无 Output:无 Return:无 Others:主函数*/void main()Timers_init(); /定时器初始化LCD12864_Init(); /液晶初始化LCD_InitDisplay(); /在12864上显示出初始字符串while(1)if(g_ucT1_OutTimes=20) /中断20次时,计时达到1sTR0=0; /关定时器0g_uiRound=256*TH0+TL0; /读取定时器0的计数值,即上一周期电机转动的圈数TH0=0;TL0=0; /定时器0计数值清零,准备下次计数TR0=1; /打开定时器0,开始新一轮计数sprintf(g

14、_arRoundDisplay,%4d,g_uiRound);/将数值Round以字符形式打印到Round_display数组里面LCD12864_Display(1,1,g_arRoundDisplay);/在12864上显示Round_display里面的字符,即显示Round的值g_ucT1_OutTimes=0; /T1中断次数清零,开始下一周期的计时 /* Function:Timer1_INT Description:Timer1的中断函数,中断20次为计时1s Calls:无Called By:无 Input:无 Output:无 Return:无 Others:中断函数,不被任

15、何函数调用*/void Timer1_INT() interrupt3TR1=0; /关闭定时器1TH1=(65536-50000)/256;TL1=(65536-50000)%256; /重装初值,每次计时50msTR1=1; /定时器1开始计数g_ucT1_OutTimes+; /Timer0每溢出一次,T1_OutTimes数值加1实验感想:本次实验在小组成员的共同努力下,完成了通过单片机控制霍尔传感器测量电机转换的速度,掌握了霍尔测速的方法与霍尔测速的原理。通过软件方式实现了电机转速的测量并能在12864液晶频上显示结果。由于实验硬件电路在试验箱上已经给出,实验的操作主要考验软件的编写和开发上,因为自身软件方面根底比拟薄弱,因此主要负责查询12864驱动资料辅助软件设计并调试程序,小组的另一位成员如此负责程序的主要设计工作。通过实验更加认识到自己的不足,在以后的学习生活中应该更加注重51开发和自身软件这一方面的学习。12 / 12

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 在线阅读 > 生活休闲


备案号:宁ICP备20000045号-1

经营许可证:宁B2-20210002

宁公网安备 64010402000986号