光电测速论文 (2)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

本科毕业设计 (论文)
基于单片机的转速测量设计(软件) Microcontroller-based photoelectric tachometer system design(Software)
学院:理学院
专业班级:光信息科学与技术
学生姓名:学号: 03
指导教师:
2012 年5 月
目录
1 序言 (1)
2.设计功能分析 (2)
2.1 系统功能概述 (2)
2.2 设计系统要求以及主要内容 (2)
2.3 系统技术指标与要求 (3)
2.4 测速原理 (3)
2.5 光电转换原理 (3)
2.6 光电耦合器简介 (3)
3.设计总体设计 (3)
3.1 硬件设计思路 (4)
3.2 软件设计思路 (5)
4.软件设计 (6)
4.1 程序注释 (6)
4.2 采集数据的处理 (19)
5.实物制作与硬件调试 (20)
5.1实物焊接 (20)
5.2硬件调试 (20)
5.3局限性与不足之处 (20)
5.4改进和应用 (21)
6.结果分析与小结............................ 错误!未定义书签。

7.致谢 (24)
1 序言
基于单片机转速测量系统可以对电机的转速进行测量。

电机在转动过程中,它的平稳性至关重要,不能太快,不能太慢。

所以本设计旨在对单片机进行实时的测速以反映电机的状况。

本设计主要由U型红外传感器,单片机AT89C51组成。

可以对较高转速进行转速测量,测量的转速精确度很高,而且还能够在数码管显示出来,从而完成对电机转速的测量。

MCU是单片机的英文名称Micro Controller unit的缩写,他是一种把中央处理器、定时/计数器(Timer/Counter)、存储器、寄存器、各种输入输出接口等都集成在一块集成电路芯片上的微型计算机。

单片机具有很多优点,例如功能多样,可靠,应用多样广泛,可以说单片机的出现极大推动了电子产业以及相关产业的发展。

我是负责软件的编程所以我将着重对软件加以叙述,至于硬件设计我就不再赘述,由于本人水平技能有限加之时间仓促难免有不足之处望指导老师和各位教授批评指正。

在这里我特别感谢王素芹老师对我的大力指导。

2.设计功能分析
2.1 系统功能概述
实现功能:本设计主要是通过AT89C51的控制功能,接受由U型光电传感器产生的脉冲信号然后,单片机进行外部中断处理,然后再内部定时器进行脉冲记数,得出电机转速送到LED数码管显示。

2.2 设计系统要求以及主要内容
由单片机的外部中断0口将U型感器产生的脉冲信号进行接收,单片机内部定时器所采用工作方式0,对脉冲信号的周期进行内部记数,通过调用公式得出转速,然后通过显示程序的调用将转速显示在LED数码管上。

主要内容:
1.电机的转速主要由单片机来实现;
2.转速的显示有共阳极数码管来实现;
3.信号的采集主要是由U型传感器来进行采集;
4.转速的设定有寄存器和开关组来进行实现;
5.转速过高报警由单片机控制和蜂鸣器实现;
2.3 系统技术指标与要求
1、实现飞轮转速测量,并通过数码管显示;
2、实现飞轮转速方向判定,并通过指示灯指示;
3、设定飞轮转速允许值,能在超出允许值后报警提示;
2.4 测速原理
频率周期计数法是我采用的一种检测方法。

周期测量法的大致原理:在一段测量时间内,计数U型传感器通过遮光产生的若干脉冲个数,从而经过换算公式算出电动机实际的转速。

设一定的测量时间我们假定为Tb(min),由计数器产生的脉冲个数为n,假定U型传感器在Tb时间内每转送入单片机m个脉冲,对应被测转速为N(r/min),则f=mN/60Hz;另在测量时间Tb内,计转速传感器输出的脉冲个数m应为m=Tbf,所以当得出测得m值时,就可算出实际转速值[1]:N=60n/mTb(r/min) (1)
2.5 光电转换原理
光电转换是整个测量系统的核心部分,将光信号转换成电信号通过电压比较器转换成符合要求的脉冲信号最后送入单片机进行计数从而完成转速测量。

2.6 光电耦合器简介
光电耦合器顾名思义就是光接受器件与光发射器件相互组合工作的一种器件。

光电二极管,光电三极管以及光电集成模块等作为光接收器件。

发光二极管作为发光器件。

这种光电元件之所以称之为光电耦合器件因为它以光作为媒介把输入端的电信号耦合到输出端。

光电耦合器件具有体积小,使用寿命长,无接触,不易受干扰,输出稳定,可单向输出。

在某些场合也可以取代波形转换器,变压器,继电器等等。

光电耦合器的作用非常广泛比如隔离电路,逻辑电路,A-D,D-A转换电路,开关电路,以及高压线路等电路。

光电传感器的优点有:
1.检测距离长:如果在对射型中保留10m以上的检测距离等,便能实现其他检测手段(磁性、超声波等)无法进行检测。

2.对检测物体的限制少:由于以检测物体引起的遮光和反射为检测原理,所以不象接近传感器等将检测物体限定在金属,它可对玻璃、塑料、木材、液体等几乎所有物体进行检测。

3.响应时间短:光本身为高速,并且传感器的电路都由电子零件构成,所以不包含机械性工作时间,响应时间非常短。

4.分辨率高:能通过高级设计技术使投光光束集中在小光点,或通过构成特殊的受光光学系统,来实现高分辨率。

也可进行微小物体的检测和高精度的位置检测.
5.可实现
非接触的检测:可以无须机械性地接触检测物体实现检测,因此不会对检测物体和传感器造成损伤。

因此,传感器能长期使用。

6.可实现颜色判别:通过检测物体形成的光的反射率和吸收率根据被投光的光线波长和检测物体的颜色组合而有所差异。

利用这种性质,可对检测物体的颜色进行检测。

3.设计总体设计
3.1 硬件设计思路
硬件设计是软件编程思路的实现形式,在先初步完成硬件设计后,软件编程才能进行。

所以说硬件的设计是否合理决定这软件编程的复杂程度。

硬件设计的主要做的是在选择的单片机机型的基础上,具体确定测速系统中所要求使用的各种元器件,设计出系统的原理框架图,进一步画出仿真图和PCB图。

单片机通过T1口接受脉冲信号,P0口接数码管显示转速。

主要框架图如下图表示:
3.2 软件设计思路
由于测量的转速范围大,所以高转速和低转速必须都要考虑在内,不然就失去了测转速的实际价值。

所以此时软件需要解决的问题是定时器0的计数和外部中断0的设定,这时候关键就需要通过四子节除三字节的程序来实现。

软件部分由几大部分组成:
1. 数据处理部分:信号的处理,数据的整合和计算,格式的转换都
由数据处理程序来完成。

2. 按键程序:防抖动处理以及按键判定等如图:
3. 中断服务子程序:定时器1服务子程序
定时功能有定时器1完成,定时20ms ,每过20ms 进行一次显示。

单片机每50次进行一次处理(既1s)然后换算成一分钟的转速,送显示。

读P1口
取反后取有效按键位延迟10 ms 防抖
再读键判断按键是否存在?P1.0=0?P1.1=0?P 1.0=1?返回
设置修改项目相应项目值的设定判断有无键按下Y Y N Y N N N
算法:
定时器,堆栈,计数器初始化。

2.判断标志:若为1则说明需要对数据进行计算,此时标志还未清0,必须先清0,以免下次判断出错。

这时送入数据处理程序。

由于此时间断时间为1s,而测速需要每分钟的转速,所以要进行数据换算。

最简单的方法就是将数据乘以60。

1s的间断时间就是50次间断所得到的,计数器count一次中断时间为20ms。

20ms*50=1s,到50次后可以清除计数器count,然后关闭T0,将所存在THO和TLO的数据,依次送入CpCount和SpCount+1单元,Tho为空,再使标记为1,再次进行计算。

如图:
4.软件设计
4.1 程序注释
1.led灯与按键开关的程序
2 #include <reg52.h>
3 #include <intrins.h>
4 #define uint unsigned int
5 #define uchar unsigned char
6 #define time0initvalue 20000 //定时器零赋
值语句
7
8 sbit freq =P3^4; //
9 sbit count=P3^5; // 脉冲计数引脚
10
11 sbit key1=P1^0; //按键1
12 sbit key2=P1^1; //按键2
13 sbit key3=P1^2; //按键3
14 sbit key4=P1^3; //按键4
15 sbit key5=P1^4; //按键5
16 sbit led1=P3^7; //LED灯1 ,反转
指示灯
17 sbit led4=P3^6; //LED灯4 正在
测速指示灯
18 sbit led2=P1^6; //LED灯2 ,正转
指示灯
19 sbit led3=P1^7; //LED灯3,报警

20 sbit SH_CP = P0^0;
21 sbit DS = P0^1;
22 sbit ST_CP = P0^2;
23 sbit SH_CP1 = P0^3;
24 sbit DS1 = P0^4;
25 sbit ST_CP1 = P0^5;
26 sbit SH_CP2 = P0^6;
27 sbit DS2 = P0^7;
28 sbit ST_CP2 = P2^0;
29
30 sbit SH_CP3 = P2^1;
31 sbit DS3 = P2^2;
32 sbit ST_CP3 = P2^3
2. 转速设定的程序编辑
uchar code
seg7[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbff};
//共阳数码管
36 uchar timecount=0; //定时计数
37 uchar time0flag=0; //T/c0定时中断事件
38 uchar time1count=0; //T/C1计数溢出计数
39 uchar time0onesecond=0; //定义一秒事件
40 uint freqcount=0,freqcount1=0; //转速计数
41 uchar num1,num2,num3,num4; //转速个十百千位
42 uchar keynum,key5flag=0; //按键一标志位
43 uchar ge,shi,bai,qian; //要调节的最大转速的位数
44
45 uint maxspeed; //设定的最大转速
46 void timeinit(); //定时器1和定时器0初始化
47 void time0start(); //定时器0开始计数
48 void time0stop(); //定时器0停止计数
49 void time1start(); //定时器1开始计数
50 void time1stop(); //定时器1停止计数
51 void portinit(); //端口初始化
52 void display(); //测速数码管显示
53 void Delay(uint x); //延时子函数
54 void fqmeasure(); //脉冲计数函数
55 void keyconve(); //按键转换函数3.
C51 COMPILER V9.00 WUSHIDU 04/04/2012 13:01:26 PAGE 2
56 void maxspeeddisplay(); //设置速度最大值显示
57 void speedcompare(); //速度与设定的最大速
度比较
3.显示程序
void display()
370 {
371 1 senddata4(seg7[num4]); //千
372 1 senddata1(seg7[num3]); //百
373 1 senddata2(seg7[num2]); //十
374 1 senddata3(seg7[num1]); //个
4.最大值显示程序
void maxspeeddisplay()
378 {
379 1 senddata1(seg7[bai]);
380 1 senddata2(seg7[shi]);
381 1 senddata3(seg7[ge]);
382 1 senddata4(seg7[qian]);
387 void speedcompare()
388 {
389 1 maxspeed=1000*qian+bai*100+10*shi+ge;
390 1 if(maxspeed<freqcount)
391 1 {
392 2 led3=0;
393 2 }
394 1 else
395 1 {
396 2 led3=1;
397 2 }
398 1 if(freqcount>2500&&freqcount<3800)
399 1 {
400 2 led1=0;
401 2 led2=1;
402 2 }
403 1 else if(freqcount>400&&freqcount<2500) 404 1 {
405 2 led1=1;
406 2 led2=0;
407 2 }
408 1
409 1 else if(freqcount>4000)
410 1 {
411 2 led2=0;
412 2 led1=1;
413 2 }
414 1 else
415 1 {
416 2 led1=1;
417 2 led2=1;
418 2
419 2 }
420 1
421 1
422 1 }
423
424 void fqmeasure()
425 {
426 1 if(time0flag==1)
427 1 {
C51 COMPILER V9.00 WUSHIDU 04/04/2012 13:01:26 PAGE 8
428 2 time0flag=0;
429 2 timecount++;
430 2 if(timecount>=50) //定时一

431 2 {
432 3 timecount=0;
433 3 time0stop();
434 3 time1stop();
435 3
//freqcount=(TH1<<8|TL1)+time1count*65536; //计算总计数值
436 3 freqcount=(TH1<<8|TL1); 437 3 num4=freqcount/1000; //千位
num4=freqcount/1000;
438 3
num3=(freqcount/1000)%100; //百位
439 3 num2=(freqcount%100)/10;
//十位
440 3 num1=freqcount%10; //个位
441 3 time1count=0;
442 3 time0start();
443 3 time1start(); 444 3 }
445 2 }
446 1
447 1
448 1 }
449
450
451
452 void main()
453 {
454 1 portinit();
455 1 timeinit();
456 1 time0start();
457 1 time1start(); 458 1 while(1)
459 1 {
460 2
461 2 keyconve(); //按键转换函数
462 2 fqmeasure();
463 2 if(key5flag==1)
464 2 {
465 3 EA=1; //开总中断
466 3 led4=0;
467 3 speedcompare();
468 3 display();
469 3 }
470 2 else if(key5flag==0)
471 2 {
472 3 EA=0; // 关总中断
473 3 led4=1;
474 3 maxspeeddisplay(); //显示设定的速度最
大值
475 3 }
476 2
477 2 }
478 1
479 1
480 1 }
5.定时器计数与中断
//定时器1和定时器0初始化
221 void timeinit()
222 {
223 1 TH1=0;
224 1 TL1=0;
225 1 TH0=(65536-time0initvalue)/256;
226 1 TH0=(65536-time0initvalue)%256; //
定时5MS
227 1 TMOD=0X51;
228 1 }
229
230 //定时器0开始计数
231
232 void time0start()
233 {
234 1 TR0=1;
235 1 ET0=1;
236 1
237 1 }
238
239
240 void time0stop()
241 {
C51 COMPILER V9.00 WUSHIDU 04/04/2012 13:01:26 PAGE 5
242 1
243 1 TR0=0;
244 1 ET0=0;
245 1
246 1
247 1 }
248
249
250 //定时器1开始计数
251 void time1start()
252 {
253 1 TR1=1;
254 1 ET1=1;
255 1 TH1=TL1=0;
256 1
257 1
258 1 }
259 void time1stop()
260 {
261 1 TR1=0;
262 1 ET1=0;
263 1
264 1
265 1 }
266
267
268 void portinit()
269 {
270 1 P0=P1=P2=P3=0XFF;
271 1 ge=0;
272 1 shi=0;
273 1 bai=0;
274 1 qian=0;
275 1 maxspeed=0;
276 1 }
277
278 //定时器零中断
279 void time0IRQ(void) interrupt 1
280 {
281 1 ET0=0;
282 1 TH0=(65536-time0initvalue)/256;
283 1 TH0=(65536-time0initvalue)%256; //定时5MS
284 1 time0flag=1;
285 1 ET0=1;
286 1
287 1 }
288
289 //定时器一中断
290 void timer1IRQ(void) interrupt 3
291 {
292 1 ET1=0;
293 1 time1count++;
294 1 ET1=1;
295 1 }
296
428 2 time0flag=0;
429 2 timecount++;
430 2 if(timecount>=50)
//定时一秒
431 2 { 432 3 timecount=0;
433 3 time0stop();
434 3 time1stop();
435 3
//freqcount=(TH1<<8|TL1)+time1count*65536; //计算总计数值
436 3 freqcount=(TH1<<8|TL1); 437 3 num4=freqcount/1000;
//千位
num4=freqcount/1000;
438 3
num3=(freqcount/1000)%100; //百位
439 3
num2=(freqcount%100)/10; //十位
440 3
num1=freqcount%10; //个位
441 3 time1count=0;
442 3 time0start();
443 3 time1start(); 444 3 }
445 2 }
446 1
447 1
448 1 }
449
450
451
452 void main()
453 {
454 1 portinit();
455 1 timeinit();
456 1 time0start();
457 1 time1start(); 458 1 while(1)
459 1 {
460 2
461 2 keyconve(); //按键转换函数
462 2 fqmeasure();
463 2 if(key5flag==1)
464 2 {
465 3 EA=1; //开总中断
466 3 led4=0;
467 3 speedcompare();
468 3 display();
469 3 }
470 2 else if(key5flag==0)
471 2 {
472 3 EA=0; // 关总中断 473 3 led4=1;
474 3 maxspeeddisplay(); //显示设定的速度最大值
475 3 }
476 2
477 2 }
478 1
479 1
480 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 758 ----
CONSTANT SIZE = 21 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 24 ----
IDATA SIZE = ---- ----
C51 COMPILER V9.00 WUSHIDU
04/04/2012 13:01:26 PAGE 9
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
4.2 采集数据的处理
在系统开始测速时,或者说进行一次频率测量之前,系统软件会对各种量进
行初始化。

例如,模块设置堆栈指针(SP),工作寄存器,中断控制器和定时器/
计数器,这些数量必须初始化。

首先设置定时器/计数器的状态计数器模式,在
对定时器与计数器的计数寄存器标志清0后,置TR(运行控制位)为1,开始对
待测脉冲信号的计数。

通过调用延时程序实现控制计数器门限,从计数门限的
min值开始,换句话说,从高测量频率范围。

计数门限结束后,TR标志由软件来
清0,此时终止计数。

计数寄存器的值以十六进制的转换程序转换十进制数。


制转换程序是个十六进制数到十进制的转换程序。

十进制优先(MSB)来确定,
如果有效位数不为0,重新测量数据,以满足要求。

把测量值和标记范围的信息
发送到显示模块;若判定该位为0,将计数门限值的宽度乘以10倍,对待测脉冲
信号的计数重新进行计数,一直到测量数据的有效位数满足要求。

重复上述测量过程,直到计数门限宽度达到所要求的1s,100Hz-999Hz为此
时所对应的频率测量范围,如果3位有效数字还没出现在测量的结果中,则频率
计测量待测信号的周期则应使用定时方法。

定时器方式应该是定时/计数器的工
作方式。

在对定时/计数器的计数寄存器清0后,等待待测脉冲信号的上升沿的
到来。

待测脉冲信号的上升沿一到,运行控制位TR要置为1,此时要对待测信
号进行周期测量,以单片机工作周期为单位。

然后等待待测脉冲信号的下降沿的
到来,待测脉冲信号的下将沿一到到,停止计数(运行控制位TR清0)。

最高额
度为65535是16位定时/计数器的极限数值,定时器与计数器发生数据溢出将会
发生在待测脉冲信号的频率较低时。

定时/计数器一旦溢出,程序即刻调用定时
器中所采用的中断服务程序,溢出次数的统计由系统中断服务程序进行统计。


测脉冲信号所采用的周期由计数/定时器溢出次数、计数器/定时的高八位和低八
位这3个字节组成。

信号的频率f与信号的周期T之间的关系为:f=1/T,脉冲信
号所需测的周期测量结束后,要获得频率必须进行一次必要的运算即倒数运算。

浮点数算术的采用是为了提高运算精度。

浮点数采用3个字节,第一字节的最高位为数符,其余7位为所谓的低阶码; 尾数的高字节为第2字节;尾数的低字节为第2字节。

首先截取高16位用来当作待测脉冲信号周期的3个字节,定点数、数符的设置和阶码的计算转换为上述所要求的格式的浮点数。

然后进行数据转换的运算,信号格式由浮点格式表达。

BCD码转换器模块的符点数变换的表达使用浮点格式,把脉冲频率测量值改为视觉的速度显示格式,并传送到LED显示模块显示的测试脉冲信号的频率值是速度。

5.实物制作与硬件调试
5.1实物焊接
从电子元器件市场买来一套原件,主要包括AT89c51,万能电路板,导线若干,集成开关,4位显示数码管,电动机,三极管,U型开关。

经过几天的制作终于将实物如期的制作了出来。

在焊接的过程中每一条线的排布都要仔细考虑,因为排线布局的好坏直接影响着测速的精确和错误的出现率。

在焊好电路板后随即进行程序下载,最后完成了测速系统。

不过在焊电路板的时候会遇到一点问题,比如虚焊,线路短接等等。

所以我们每焊一根线都会用万用表测一下。

5.2硬件调试
调试是最后一个环节但也是不容忽视的环节,再上电前我们又一次用万用表进行测试,以确保没有虚焊和短路。

最后再给老师进行最后检查,然后才上电。

刚开始出现了一些小问题,比方说数码管接触不良,显示时有时无,最后我们拆下来重新再焊了上去,终于解决了问题。

使用方法:
开关面板上有0-9数字键和A,B键起作用。

通电按下数码管默认显示0000此时按下B键进行最高转速设计,由于转速一般过高会达到上万转,此时四位数码管只能显示4位所以我们默认在转速后面加上一个0。

比如数码管显示是3376则它的转速为33760转,如果在设定转速时同样的在输入四位转速时必须再按一个0。

此时我们将电机高速转动的叶片放到U型开关上进行测速如果转速低于设定的最高转速超速灯不会亮,蜂鸣器不会响。

按下A键则会显示当前转速。

若转速超过设定转速,超速灯亮,蜂鸣器报警。

同上按下A键显示当前转速。

5.3局限性与不足之处
虽然我们在焊接的时候我们严格要求但是还是出现了一些不足之处,由于元器件有的很难买到所以我们用别的东西代替。

所以说在做实物的时候我们不可能
完全按照仿真的去做,有些功能不是完全能够实现,在刚开始的时候我们打算实现真反转的功能,但是旋转译码器在市场上价格昂贵,安装困难所以我们最后取消了这一功能。

所以说我们的毕业设计还有待改进的地方。

5.4改进和应用
我们做的毕业设计虽然只是一个演示,但是如果加以改进还是可以在工业生产中得以应用,我们可以使用集成电路板来减少我们这个系统的尺寸,还可以对数码管进行改进,可以使用LCD显示屛来代替数码管,这样灵敏度更高,测量范围跟广。

测速系统的功能扩展:
A.除了单单测速功能外,我们还可以每隔一段时间取平均值,这样我们可以断定电机在一定时间内是匀速运动还是加减速运动。

B.我们还可以加入反馈电路实现对电机转速的调节。

若转速过高我们可以降低电压值减少转速。

若转速过低,我们可以提高电压来提高转速。

应用前景:
电机是作为生产中机械动力的主要来源,它的保护是至关重要的,长时间高速运转会对电机寿命会造成不少影响,但电机转速过低往往会降低生产效率,所以说一个稳定的速度对于电机来说是至关重要的。

所以本测速系统应用前景还是比较开阔的。

结论
本设计已基本完成课题要求,就是转速有一定的误差。

我们买的电机转速一般在上万转左右但是我们能买到的只有4位数码管所以测量会有个位上的误差,而且中断处理的进入和中断处理的响应是有一定的延迟的,所以说转速误差是难免的。

在做毕业设计时遇到过不少困难,比如编程原理,测量原理还有实物的制作思路。

王素情老师给了我门不少帮助,她查了不少资料,告诉我们了单片机智能电机测速原理。

短短几个月来自己的摸索,天天去图书馆查资料,翻阅书籍,积极地请教和询问老师,去单片机论坛求助,发帖。

自己对C语言程序设计,和一些类似单片机编程有了不少了解,我想这对以后的工作学习都有帮助。

刚开始我还傻傻地一个人在琢磨,我想我负责软件,另一个人负责软件,所以我就看VisualBasic和C语言程序设计。

我想这样就会有效率。

最后才发现各自为战根本不会有什么效率。

所以我们决定一起编程,一起做实物。

只要两个协力合作就不会有什么困难可以难倒我们。

在与组员合理完成这个毕业设计的时候我们一起讨论,一起探讨,相互交流,也培养了我们团队协作能力,我们在一起做毕业设计的过程中我们遇到了一时间不能解决的问题。

比如在刚开始编程序的时候对c语言的陌生,资料的缺乏,不会编程,我们两个积极的向老师寻求帮助,通过老师的耐心讲解,终于在老师的带领下,我们初步完成了程序的编写。

但是后续的程序编写工作有出现了问题,你想实现某功能和我们的编程能力形成了很大的反差,我们请教薛老师,薛老师马上在很多复杂的程序设计上给出了一些比较简洁的编程思路。

给我们毕业设计的进程有添加了一些动力。

终于在多方面的帮助下和我们的共同努力下,我们的毕业设计终于完成的差不多了。

设计所涉及到的学科和我们所学到的一些科目专业很多,可以说是一个综合性很强的设计。

所以我们两个会好好的做好这个毕业设计。

做毕业设计的时候是一次理论联系实际的机会。

所以说看到自己的毕业设计的时候我很自豪。

在画电路图的时候我们也遇到了不少麻烦,比如元器件的选择,由于Proteus 仿真没有电机和光电传感器,我们一度无从下手,因为没有电机和光电传感器我们无法获得信号,从而也影响了程序的进一步编写,好在我天天在单片机论坛上发帖求助,有一个单片机爱好者对我们的问题提出了解决方案,他说可以用仿真图中的脉冲信号进行模拟转速,我们采用他的建议,从而完成了程序的初步编程。

编程初步完成后我们又进行了程序的功能添加由于在测正反转的时候我们卡住
了。

因为正反转的测量是比较复杂的。

在王素情老师的指导下我们明白了测正反转的原理。

是用两个传感器配合使用判断脉冲上升沿的到达顺序来判断正反转。

由于在做实物的时候要用的旋转译码器价格昂贵,所以在老师的同意下取消了正反转这一功能。

致谢
进过一个多月的努力终于将这片论文完成了,在此过程中也遇到了许多困难,但是同周边同学和指导老师王素芹老师的帮助,我还是克服了这些困难。

王老师多次找我到并帮助我解决写论文过程中所遇到的问题,她严谨的治学精神和精益求精的工作作风感染着我,使我不断的努力。

最后再次感谢帮助我的同学和王素芹指导老师!
参考文献
[1].赵继文,何玉彬.传感器与应用电路设计[M].科学出版社,2002
[2].雷玉堂,光电检测技术(第2版)(M).中国计量出版社,2009
[3].郁有文,常健,程继红.传感器原理及工程应用(第三版).西安电子科技大学出版社,2010
[4].郭培源,付扬.光电检测技术与应用(M).北京航空航天大学出版,2006
[5].余永权,汪明慧,黄英.单片机在控制系统中的应用[M].电子工业出版社,2003
[6].李朝青.单片机原理及接口技术(第3版).北京航空航天大学出版社,2005
[7].何立民.单片机应用技术选编.北京:北京航空航天大学出版社,1997,10
[8].张有德.单片微机原理、应用与实验.上海:复旦大学出版社,1997,8
[9].王福瑞.单片微机测控系统设计大全[M].北京航空航天大学出版社,1999
[10].杨路明.C语言程序设计(M).北京邮电大学出版社,2005
附录:
1.仿真电路图:
2.元器件清单:
元器件名称数量MC-2型传感器 1个AT89S52单片机 1个数码管 1个蜂鸣器 1个三极管 4个电阻 10个电容 1个导线若干电机 1个叶片 1个4*4开关 1个电池 2个单片机插座 1个放光二极管 3个3.实物图。

相关文档
最新文档