ImageVerifierCode 换一换
格式:DOCX , 页数:11 ,大小:75.83KB ,
资源ID:5275904      下载积分:1 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-5275904.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(霍尔元件测量转速地实现Word格式文档下载.docx)为本站会员(b****1)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

霍尔元件测量转速地实现Word格式文档下载.docx

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

2、感器会产生一个负脉冲信号。程序中将T0当作计数器使用,记录电动机转动的圈数;T1作定时器用,确定计数周期。设定计数周期为1s,上一周期计数器记录下的电机转动圈数,作为当前的转速显示。下面是程序主流程图:六:实现程序:1 12864驱动:#include/*/延时函数void DelayUs(unsigned char t) /当t=1时,延时1.1us 0t255 while(-t);void DelayMs(unsigned char t) /当t=1时,延时1.0ms 0 unsigned int j; while(t-) for(j=0;j100;j+); /LCD12864液晶部分#d

3、efine 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_WriteCommand(unsigned char content);void LCD12864_CleanRam(void);void LCD12864_Init(void);void LCD12864_Init(void) LC

4、D12864_WriteCommand(0x06); /光标的移动方向 LCD12864_WriteCommand(0x0c); /开显示,关游标 LCD12864_CleanRam(); /清屏 LCD12864_WriteCommand(0x01); /?void LCD12864_CleanRam(void) LCD12864_WriteCommand(0x30);void LCD12864_WriteData(unsigned char content) /LCD12864_CheckBusy(); LCD12864_RS=1; LCD12864_RW=0; LCD12864_Data

5、Port=content; LCD12864_EN=1; LCD12864_EN=0;void LCD12864_WriteCommand(unsigned char content) LCD12864_RS=0;void LCD12864_Gotoxy(unsigned char y,unsigned char x) if(y=1) LCD12864_WriteCommand(0x80|x); if(y=2) LCD12864_WriteCommand(0x90|x); if(y=3) LCD12864_WriteCommand(0x80|x)+8); if(y=4) LCD12864_Wr

6、iteCommand(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; sprintf(s,%2.1f, num);3.141593 LCD12864_Display(x,y,s);2 主要程序:/*头文件调用*/ #include

7、 intrins.hmath.h#include 12864.h宏定义*/#define uchar unsigned char#define uint unsigned int/*全局变量及数组定义*/uchar code g_arInitDisplay117=The rotate speed; /液晶初始化会死要显示的字符串。uchar code g_arInitDisplay28=round/s /注意:数组的长度至少要比字符串长度大一。 /数组长度选择不合理,会出现意想不到的错误uchar g_arRoundDisplay5=0; /此数组将以字符形式存放将要显示在1602上的数值uc

8、har g_ucT1_OutTimes; /Timer1的溢出次数,用以计时1suint g_uiRound; /电动机的转动圈数,每秒更新一次,可作为电机转速/* Function:Timers_init Description:初始化时钟,T0工作于16位计数模式,记录电机转速;T1为16位定时模式 ,用于管理时间阀门。Calls:不调用其他函数 Called By:main() Input:无 Output:Return:Others:仅在系统初始化时使用一次*/void Timers_init() /定时器的初始化 TMOD=0x15; /T0工作于16位计数模式;T1为16位定时模式

9、 TCON=0x50; /TR1、TR0为1,其余为0 EA=1; /开总中断 ET1=1; /允许T1溢出中断 TH0=0; TL0=0; /电动机每秒钟转动的圈数在200圈之内 TH1=(65536-50000)/256; TL1=(65536-50000)%256; /T1用于计时1s,中断20次约为1sLCD_InitDisplay 12864初始显示内容 Display void LCD_InitDisplay() /在12864上显示出初始字符串 LCD12864_Display(0,0,g_arInitDisplay1); LCD12864_Display(6,1,g_arIni

10、tDisplay2);main 主函数 Timers_init(),LcdInit(), LCD_InitDisplay(), sprintf(),Display()主函数void main() Timers_init(); /定时器初始化 LCD12864_Init(); /液晶初始化 LCD_InitDisplay(); /在12864上显示出初始字符串 while(1) if(g_ucT1_OutTimes=20) /中断20次时,计时达到1s TR0=0; /关定时器0 g_uiRound=256*TH0+TL0; /读取定时器0的计数值,即上一周期电机转动的圈数 TH0=0; TL0

11、=0; /定时器0计数值清零,准备下次计数 TR0=1; /打开定时器0,开始新一轮计数 sprintf(g_arRoundDisplay,%4d,g_uiRound); /将数值Round以字符形式打印到Round_display数组里面 LCD12864_Display(1,1,g_arRoundDisplay); /在12864上显示Round_display里面的字符,即显示Round的值 g_ucT1_OutTimes=0; /T1中断次数清零,开始下一周期的计时 Timer1_INT Timer1的中断函数,中断20次为计时1s 无中断函数,不被任何函数调用void Timer1_

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

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2