大学本科毕业设计论文.docx

上传人:b****3 文档编号:24675754 上传时间:2023-05-31 格式:DOCX 页数:18 大小:144.59KB
下载 相关 举报
大学本科毕业设计论文.docx_第1页
第1页 / 共18页
大学本科毕业设计论文.docx_第2页
第2页 / 共18页
大学本科毕业设计论文.docx_第3页
第3页 / 共18页
大学本科毕业设计论文.docx_第4页
第4页 / 共18页
大学本科毕业设计论文.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

大学本科毕业设计论文.docx

《大学本科毕业设计论文.docx》由会员分享,可在线阅读,更多相关《大学本科毕业设计论文.docx(18页珍藏版)》请在冰豆网上搜索。

大学本科毕业设计论文.docx

大学本科毕业设计论文

(此文档为word格式,下载后您可任意编辑修改!

广东白云学院

毕业设计(论文)开题报告

题目:

基于霍尔传感器的控制电机测速装置

的设计与实现

课题类型:

论文□设计□

专业(全称):

自动化

系别:

电子信息工程系

 

2010年10月

基于霍尔传感器的电机测速装置的设计与实现

摘要

在工业生产生活中,经常会遇到各种需要测量转速的场合,例如在发电机、电动机、机床主轴等旋转设备的实验运转和控制中,常需要分时或连续测量、显示其转速及瞬时速度。

为了能精确地测量转速,还要保证测量的实时性,要求能测的瞬时速度。

针对工业上常见的发动机设计了以单片机STC89C52为控制核心的转速测量系统,本文介绍基于霍尔传感器的电机测速系统,该系统利用霍尔传感器采集脉冲信号,通过定时计数法程序,将转速结果实时显示出来。

实际测试表明,该系统能满足发动机转速测量要求。

关键词:

单片机;电机测速系统;霍尔传感器;定时

SENSORBASEDONHALLOFMOTORSPEEDDEVICEDESIGN

ABSTRACT

4.4图LCD1602正常显示

L298N驱动电路调试:

在焊接硬件电路时需细心排除元器件和焊接等方面可能出现的故障,元器件的安装位置出错或引脚插错都可能导致电路短路或实现不了电路应有的功能,甚至烧坏元器件。

为方便调试,用信号发生器产生的10KHz的正弦信号送给L298N驱动电路,调试直到OUT1和OUT2可以输出矩形脉冲信号为止,该驱动电路调试即可完成。

通过以上的电路功能调试,就可以确定电路设计的问题所在可以及时进行更改。

达到最佳的设计效果。

4.4软件部分调试

在进行软件编程调试时需要用到单片机的集成开发环境KeiluVision3软件,编程时极易出现误输入或其他的一些语法错误,最重要的还有一些模块无语法错误却达不到预期的功能,都要经过调试才能排除。

KeiluVision3软件具有很强大的编程调试功能,能够模拟仿真实际单片机的端口和内部功能部件的状态值。

该软件中有硬件调试和软件调试功能,可以观察单片机内存单元对应的运行值,可以显示单片机端口、中断、定时器2、定时器2还有串口对应的运行值。

可以单步调试也可以模块调试,最好的是可以对你所怀疑的语句模块设置断点。

KeiluVision3具有的强大的编译调试功极大地方便了对软件部分的调试。

在具体调试过程中,系统将各功能模块如数据处理程序、按键程序设计、中断服务子程序、LCD显示程序分别分开进行调试,最后进行主程序的整体调试。

编译无误后生成目标代码.HEX文件

一般为了更好的观察仿真的效果及各部分的功能等问题,我们学生大多数采用ISIS7Professional软件进行仿真,利用ISIS7Professional软件画出原理图(附图3),可以形象的显示出各部分的运行情况,很清楚各部分参数的多少!

但是我们要注意仿真图效果与实际的硬件电路效果是有一定的差异的,我们必须很好调试,找到控制的最佳效果

最后采用STC单片机下载软件STC_ISP_V580将其下载到实验板的单片机中。

下载软件的最后一步:

点击软件STC_ISP_V580界面中的[下载]按钮,在点击前一定要保持实验板的串行通信线及电源线与PC机连接良好,并且实验板的电源开关处于关闭状态,然后点击[下载]按钮,再打开实验板电源开关,此时软件将自动完成程序下载。

最后将硬件和软件结合起来整体调试实现系统的测速功能。

4.5实验调试与系统优化

设计基本完成题目中的各项要求,在调试过程中发现了许多的问题。

其中电机转速的测量比较精确,与实际转速相差1转秒分左右,精度在全量程范围内优于1转秒,存在一定的误差,经分析主要是由以下原因造成:

1)由于电机的转盘是采用塑料盘片磨制而成,高速旋转时容易打飘不稳,导致获得的脉冲信号频率与实际转速有一定的误差。

2)中断处理的进入和中断处理程序都会有一定时间的误差,从而导致定时时间的误差,这也是造成测量误差的一个因素。

3)在固定装置时,由于是手动操作,从而导致初始获得信号有一定的时差。

通过各系统分析的结果,然后进入系统设计的优化。

在弄清楚霍尔传感器的电机测速装置各部件的工作原理的情况下,编制了电机的控制持续,制定一个合理高效的调试方法步聚。

我的调试步骤如下:

根据智能小车的硬件,编写简单的测试程序对硬件的电路分别进行测试。

1)编写的程序对硬件测试没有问题后,再划分功能模块,编写功能模块的程序,并进行调试;

2)若发现程序效果不理想,则首行考虑程序流程是否合理,再检查语句是否书写正确。

3)最后进行整个持续的调试,这是最后一步,与是最难的一步,要协调好各个模块之间的先后顺序,处理好他们之间因为锁死状态。

4)对写好的代码进行优化,使代码变得更为简洁。

在软件编写与调试部分我完全按照上面的步骤去做,由于以前没有用过PWM调制控制,PWM调制控制的学习实践花了一段时间。

因此,总程序经过多次调式和修改后,最终能够使霍尔传感器的电机测速装置具有测速显示,运行时间显示,电机运行速度控制,的功能,基本上完成了本设计的任务

第五章总结

在这三个月的设计过程中,我边查资料边进行软件的调试,在这三个月中我做了以下工作:

(1)对设计中所需要的元件分析其原理和性能,极其应用和发展。

(2)详细介绍霍尔传感器的电机测速装置硬件设计的方案,电路图,并附上说明。

(3)详细介绍软件设计方法,并给出个部分的程序清单。

(4)给出对本设计进行仿真调试与优化的过程。

在制作的过程中两大部分的功能模块花了很大的功夫,一个是电机的驱动程序,一个是LCD液晶显示程序。

在本装置的研制过程中,充分考虑了作为便携装置其电源的提供、功率的损耗、体积的大小、价位的高低、使用及携带的方便性等因素。

本装置不受人群、时间、地点等的影响,对任何人都适用。

而且还能快速、准确地测量。

本产品成本低、技术含量高、其稳定性可靠性已经过实践的考验。

本装置是将我们的学习知识和社会的需求结合创作出来的。

参考文献

[1]吴波等。

工程创新设计与实践教程,电子工业出版社

[2]周兴华,手把手教你学单片机,北京航空航天大学出版社

[3]姚福安编著,电子电路设计与实现,山东科学技术出版社

[4]于长官。

自动控制技术及应用,哈尔滨工业大学出版社

[5]胡寿松。

自动控制原理,科学出版社

[6]江太辉,石秀芳.MCS-52系列单片机原理与应用.广州:

华南理工大学出版社,2002.8

[7]杨忠煌,黄博俊,李文昌.单芯片8051实务与应用.北京:

中国水利水电出版社,2001

[8]张世铭,王振和.直流调速系统.武汉:

华中理工大学出版社,1988.103~107

[12]王旭,王积森.机械设计课程设计.机械工业出版社,2003

[13]陆玉,何在洲,修延伟.机械设计课程设计(第3版).机械工业出版社,1999

[14]陈隆昌,阎治安,刘新正.控制电机.西安电子科技大学出版社,2000.

致谢

白驹过隙,转眼四年的学习生活就将结束了。

本论文是在刘崇进老师的悉心指导下完成的,老师严谨的治学态度,务实的工作作风,孜孜不倦的学习精神令我敬佩至深,受益非浅。

陈老师很忙,但还是抽出时间来指导我们,修改我们的论文,且从来都是不厌其烦地为我们解答各种问题,特别是在我论文完成的这段时间。

在这里我要特别谢谢刘老师。

其次感谢我的同学和朋友,他们给予了我无私的帮助和无穷的精神动力。

在我遇到知识上的或技术上的难点时,他们总是能给我及时的援助。

感谢我同宿舍的其他同学,谢谢她们在这大学四年里给我的帮助和关心。

最后,特别感谢父母和亲人在我求学过程中自始至终的支持。

附录1:

硬件总图

附录2:

电路PCB版图

附录3:

ISIS7Professional仿真图

附录4:

基于霍尔传感器的电机转速装置元件清单

序号

元件名称

数量

1

STC89C52单片机

1个

2

L298N电机驱动芯片

1个

3

LCD1602液晶显示

1个

4

10K电阻排

1个

5

霍尔传感器

1个

6

10K滑动电阻

1个

7

发光二极管

2个

8

控制按键

2个

9

IN4148

4个

10

10K欧姆电阻

3个

11

22PF电容

2个

12

10UF25V电容

1个

13

12MHZ晶振

1个

14

DV9.0直流电机

1个

15

5V~12V电源插座

1个

附录5:

程序清单

电机测速程序

PWM控制直流电机

晶振为11.0592M

利用定时器控制产生占空比可变的PWM波

按K1,PWM值增加,则占空比减小,电机转速加大。

按K2,PWM值减小,则占空比增加,电机转速减少。

当PWM值增加到最大值或减小到最小值时,蜂鸣器将报警。

*********************************************************

#include"reg51.,shi;

voidddelay(uint);

voidlcd_wait(void);

voiddisplay();

voidinitLCM();

voidWriteCommandLCM(ucharWCLCM,ucharBusyC);

voidSTR();

voidaccount();

voidBeep(void);

voiddelayms(ucharms);

voiddelay(uchart);

*********************************************************

voidmain(void)

{TMOD=0x21;

TH0=0xfc;1ms延时常数

TL0=0x66;频率调节

TH1=PWM;脉宽调节

TL1=0;

ET0=1;

ET1=1;

TR0=1;

RCAP2H=0x3C;定时器2定时50MS

RCAP2L=0x0B0;

ET2=1;

TR2=1;外部中断

IT0=1;下降沿触发中断

EX0=1;开外中断0

EA=1;开总中断

initLCM();初始化LCD1602

WriteCommandLCM(0x01,1);清显示屏

dianji1=1;电机开机默认正转

dianji2=0;

while

(1)

{display();

do

{if(PWM!

=0xff)

{PWM++;

delayms(10);}

elseBeep();}

while(K1==0);

do

{if(PWM!

=0x02)

{PWM--;

delayms(10);

}

elseBeep();

}

while(K2==0);}}

*********************************************************

定时器0中断服务程序.

*********************************************************

voidtimer0()interrupt1

{

TR1=0;

TH0=0xfc;

TL0=0x66;

TH1=PWM;

TR1=1;

ENA=0;启动输出

}

*********************************************************

定时器1中断服务程序

*********************************************************

voidtimer1()interrupt3

{TR1=0;

ENA=1;结束输出

}

*********************************************************

蜂鸣器子程序

*********************************************************

voidBeep(void)

{uchari;

for(i=0;i<100;i++)

{delay(100);

BEEP=!

BEEP;Beep取反

}

BEEP=1;关闭警示灯

delayms(100);

}

**********************************************************

voidex0_isr(void)interrupt0using1外部中断0服务函数

{count++;

}

******************************************************

voidtimer_2(void)interrupt5中断入口,闪烁

{uchartimecount,quanshu;

TF2=0;

timecount++;

if(timecount>20)

{timecount=0;

miao++;

quanshu=count;

count=0;

speed=quanshu;

}

if(miao>59)

{miao=0;

fen++;

}

if(fen>59)

{fen=0;

shi++;

}

if(shi>59)

shi=0;

}

*********************************************************

延时子程序

*********************************************************

voiddelay(uchart)

{while(t--);

}

*********************************************************

延时子程序

*********************************************************

voiddelayms(ucharms)

{uchari;

while(ms--)

{for(i=0;i<120;i++);

}

}

********************************************************

voidSTR()

{str0[0]='S';

str0[1]='p';

str0[2]='e';

str0[3]='e';

str0[4]='d';

str0[5]='';

str0[6]=':

';

str0[7]=speed1000+0x30;

str0[8]=speed%+0x30;

str0[8]='.';

str0[9]=speed%10010+0x30;

str0[10]=speed%10+0x30;

str0[11]='';

str0[12]='r';

str0[13]='';

str0[14]='s';

str0[15]='';

str1[0]='t';

str1[1]='i';

str1[2]='m';

str1[3]='e';

str1[4]=':

';

str1[5]=shi10+0x30;

str1[6]=shi%10+0x30;

str1[7]=':

';

str1[8]=fen10+0x30;

str1[9]=fen%10+0x30;

str1[10]=':

';

str1[11]=miao10+0x30;

str1[12]=miao%10+0x30;

str1[13]='';

str1[14]='';

str1[15]='';

}

voidddelay(uintk)

{uinti,j;

for(i=0;i

{for(j=0;j<60;j++)

{;}

}

}

**********写指令到LCD子函数************

voidWriteCommandLCM(ucharWCLCM,ucharBusyC)

{if(BusyC)lcd_wait();

DATAPORT=WCLCM;

LCM_RS=0;*选中指令寄存器*

LCM_RW=0;写模式

LCM_EN=1;

_nop_();

_nop_();

_nop_();

LCM_EN=0;

}

**********写数据到LCD子函数************

voidWriteDataLCM(ucharWDLCM)

{lcd_wait();检测忙信号

DATAPORT=WDLCM;

LCM_RS=1;*选中数据寄存器*

LCM_RW=0;写模式

LCM_EN=1;

_nop_();

_nop_();

_nop_();

LCM_EN=0;

}

***********lcd内部等待函数*************

voidlcd_wait(void)

{DATAPORT=0xff;读LCD前若单片机输出低电平,而读出LCD为高电平,则冲突,Proteus仿真会有显示逻辑黄色

LCM_EN=1;

LCM_RS=0;

LCM_RW=1;

_nop_();

_nop_();

_nop_();

while(DATAPORT&BUSY)

{LCM_EN=0;

_nop_();

_nop_();

LCM_EN=1;

_nop_();

_nop_();

}

LCM_EN=0;

}

**********LCD初始化子函数***********

voidinitLCM()

{DATAPORT=0;

ddelay(15);

WriteCommandLCM(0x38,0);三次显示模式设置,不检测忙信号

ddelay(5);

WriteCommandLCM(0x38,0);

ddelay(5);

WriteCommandLCM(0x38,0);

ddelay(5);

WriteCommandLCM(0x38,1);8bit数据传送,2行显示,5*7字型,检测忙信号

WriteCommandLCM(0x08,1);关闭显示,检测忙信号

WriteCommandLCM(0x01,1);清屏,检测忙信号

WriteCommandLCM(0x06,1);显示光标右移设置,检测忙信号

WriteCommandLCM(0x0c,1);显示屏打开,光标不显示,不闪烁,检测忙信号

}

****显示指定坐标的一个字符子函数****

voidDisplayOneChar(ucharX,ucharY,ucharDData)

{Y&=1;

X&=15;

if(Y)X|=0x40;若y为1(显示第二行),地址码+0X40

X|=0x80;指令码为地址码+0X80

WriteCommandLCM(X,0);

WriteDataLCM(DData);

}

*******显示指定坐标的一串字符子函数*****

voidDisplayListChar(ucharX,ucharY,uchar*DData)

{ucharListLength=0;

Y&=0x01;

X&=0x0f;

while(X<16)

{DisplayOneChar(X,Y,DData[ListLength]);

ListLength++;

X++;

}

}

voiddisplay()

{STR();

DisplayListChar(0,0,str0);

DisplayListChar(0,1,str1);

}

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

当前位置:首页 > IT计算机

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1