2024年3月7日发(作者:幼儿园特色教育)
广东白云学院
毕业设计(论文)开题报告
题目:基于霍尔传感器的控制电机测速装置
的设计与实现
课 题 类 型: 论文 □ 设计 □
学 生 姓 名
学 号:
班 级:07自动化2班
专业(全称):自动化
系 别:电子信息工程系
指 导 教 师:
2010年 10月
基于霍尔传感器的电机测速装置的设计与实现
摘要
在工业生产生活中,经常会遇到各种需要测量转速的场合,例如在发电机、电动机、机床主轴等旋转设备的实验运转和控制中,常需要分时或连续测量、显示其转速及瞬时速度。为了能精确地测量转速,还要保证测量的实时性,要求能测的瞬时速度。针对工业上常见的发动机设计了以单片机STC89C52为控制核心的转速测量系统,本文介绍基于霍尔传感器的电机测速系统,该系统利用霍尔传感器采集脉冲信号,通过定时计数法程序,将转速结果实时显示出来。实际测试表明,该系统能满足发动机转速测量要求。
关键词: 单片机;电机测速系统;霍尔传感器;定时
SENSOR BASED ON HALL OF MOTOR
SPEED DEVICE DESIGN
ABSTRACT
In the cour of industrial production in life often need to measure
speed encounter various occasions. For example, AT the engines motors
machine tool spindles and other rotating equipment’s operation and
control of the piolt often need frequent time-sharing or continuous
measurements show its speed and instantaneous order to
accurately measured. The rotate spee measurement system for the common
engine is designed with the single chip paper inroduces a
microcomputer-bad debugger选择的是FET Debugger!然后检查LCD接口电路,有时候接触不良也会不亮的。我遇到一些LCD不亮的板子,大部分都是焊接不良才导致不亮的。检查下程序里watchdog的设置,要及时清除watchdog的!最后显示出结果如4.4图就是正常的
4.4图LCD1602正常显示
L298N驱动电路调试:在焊接硬件电路时需细心排除元器件和焊接等方面可能出现的故障,元器件的安装位置出错或引脚插错都可能导致电路短路或实现不了电路应有的功能,甚至烧坏元器件。为方便调试,用信号发生器产生的10KHz的正弦信号送给L298N驱动电路,调试直到OUT1和OUT2可以输出矩形脉冲信号为止,该驱动电路调试即可完成。
通过以上的电路功能调试,就可以确定电路设计的问题所在可以及时进行更改。达到最佳的设计效果。
4.4 软件部分调试
在进行软件编程调试时需要用到单片机的集成开发环境Keil
uVision3软件,编程时极易出现误输入或其他的一些语法错误,最重要的还有一些模块无语法错误却达不到预期的功能,都要经过调试才能排除。Keil uVision3 软件具有很强大的编程调试功能,能够模拟仿真实际单片机的端口和内部功能部件的状态值。该软件中有硬件调试和软件调试功能,可以观察单片机内存单元对应的运行值,可以显示单片机端口、中断、定时器2、定时器2还有串口对应的运行值。可以单步调试也可以模块调试,最好的是可以对你所怀疑的语句模块设置断点。Keil uVision3 具有的强大的编译调试功极大地方便了对软件部分的调试。在具体调试过程中,系统将各功能模块如数据处理程序、按键程序设计、中断服务子程序、LCD显示程序分别分开进行调试,最后进行主程序的整体调试。编译无误后生成目标代码.HEX文件
一般为了更好的观察仿真的效果及各部分的功能等问题,我们学生大多数采用ISIS 7 Professional软件进行仿真,利用ISIS 7 Professional软件画出原理图(附图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:ISIS 7 Professional仿真图
附录4:基于霍尔传感器的电机转速装置元件清单
序号 元件名称 数量
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
STC89C52单片机
L298N电机驱动芯片
LCD1602液晶显示
10K电阻排
霍尔传感器
10K滑动电阻
发光二极管
控制按键
IN4148
10K欧姆电阻
22PF电容
10UF25V电容
12MHZ晶振
DV9.0直流电机
5V~12V电源插座
1个
1个
1个
1个
1个
1个
2个
2个
4个
3个
2个
1个
1个
1个
1个
附录5:程序清单
电机测速程序
PWM 控制 直流电机
晶振为11.0592M
利用定时器控制产生占空比可变的 PWM 波
按K1,PWM值增加,则占空比减小,电机转速加大。
按K2,PWM值减小,则占空比增加,电机转速减少。
当PWM值增加到最大值或减小到最小值时,蜂鸣器将报警。*********************************************************
#include "reg51.,shi;
void ddelay(uint);
void lcd_wait(void);
void display();
void initLCM();
void
WriteCommandLCM(uchar
WCLCM,uchar BusyC);
void STR();
void account();
void Beep(void);
void delayms(uchar ms);
void delay(uchar t);
*********************************************************
void main(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);}
el Beep(); }
while(K1==0);
do
{ if(PWM!=0x02)
{ PWM--;
delayms(10);
}
el Beep();
}
while(K2==0);}}
*********************************************************
定时器0中断服务程序.
*********************************************************
void timer0()interrupt 1
{
TR1=0 ;
TH0=0xfc ;
TL0=0x66 ;
TH1=PWM ;
TR1=1 ;
ENA=0 ; 启动输出
}
*********************************************************
定时器1中断服务程序
*********************************************************
void timer1()interrupt 3
{TR1=0 ;
ENA=1 ;结束输出
}
*********************************************************
蜂鸣器子程序
*********************************************************
void Beep(void)
{uchar i ;
for(i=0;i<100;i++)
{ delay(100);
BEEP=!BEEP ;Beep取反
}
BEEP=1 ;关闭警示灯
delayms(100);
}
**********************************************************
void ex0_isr (void) interrupt 0
using 1外部中断0服务函数
{ count++;
}
******************************************************
void timer_2(void) interrupt 5 中断入口,闪烁
{ uchar timecount,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;
}
*********************************************************
延时子程序
*********************************************************
void delay(uchar t)
{ while(t--);
}
*********************************************************
延时子程序
*********************************************************
void delayms(uchar ms)
{ uchar i ;
while(ms--)
{ for(i=0;i<120;i++);
}
}
********************************************************
void STR()
{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]=' ';
}
void ddelay(uint k)
{ uint i,j;
for(i=0;i {for(j=0;j<60;j++) {;} } } **********写指令到LCD子函数************ void WriteCommandLCM(uchar WCLCM,uchar BusyC) {if(BusyC)lcd_wait(); DATAPORT=WCLCM; LCM_RS=0; * 选中指令寄存器* LCM_RW=0; 写模式 LCM_EN=1; _nop_(); _nop_(); _nop_(); LCM_EN=0; } **********写数据到LCD子函数************ void WriteDataLCM(uchar WDLCM) {lcd_wait( ); 检测忙信号 DATAPORT=WDLCM; LCM_RS=1; * 选中数据寄存器 * LCM_RW=0; 写模式 LCM_EN=1; _nop_(); _nop_(); _nop_(); LCM_EN=0; } ***********lcd内部等待函数************* void lcd_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初始化子函数*********** void initLCM( ) {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); 显示屏打开,光标不显示,不闪烁,检测忙信号 } ****显示指定坐标的一个字符子函数**** void DisplayOneChar(uchar X,uchar Y,uchar DData) { Y&=1; X&=15; if(Y)X|=0x40; 若y为1(显示第二行),地址码+0X40 X|=0x80; 指令码为地址码+0X80 WriteCommandLCM(X,0); WriteDataLCM(DData); } 字符子函数***** void DisplayListChar(uchar X,uchar Y,uchar *DData) { uchar ListLength=0; Y&=0x01; X&=0x0f; while(X<16) {DisplayOneChar(X,Y,DData[ListLength]); ListLength++; X++; } } void display() {STR(); DisplayListChar(0,0,str0); DisplayListChar(0,1,str1); }
本文发布于:2024-03-07 07:02:51,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/zhishi/a/1709766171153590.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:(完整版)大学本科毕业设计(论文).doc
本文 PDF 下载地址:(完整版)大学本科毕业设计(论文).pdf
留言与评论(共有 0 条评论) |