转速测量仪

摘要:本系统是基于Freescale HC08GP32单片机主控制器的转速测量系统,该系统采用两个高灵敏度的红外反射光传感器,对圆盘覆铜和圆盘白色部分进行检测,将检测的数据送入单片机进行处理,单片机将处理结果送到LCD显示。在LCD上能直观的看到转动方向,圆盘的转速,功耗和圆盘转速变化曲线。

Abstract: The system is based on Freescale HC08GP32 MCU speed measurement system that uses two high-sensitivity infrared reflective photoelectric sensor, on the copper disc and the white part of the disc to detect, the test data into the single chip processor, microcontroller will handle the results sent to the LCD display. In the LCD,can directly see the disk rotation speed,rotation direction and the disk rotational speedc curve.

本系统设计的主要特色:

采用稳定可靠的Freescale HC08GP32单片机。

使用能显示中文的OCMJ5x10B液晶LCD。

优化的软件算法,智能化的自动控制,定位精确度高。

1.方案的选择与论证

1.1、控制器模块选择

方案1:采用可编程逻辑器件CPLD 作为控制器。CPLD可以实现各种复杂的逻辑功能、规模大、密度高、体积小、稳定性高、IO资源丰富、易于进行功能扩展。采用并行的输入输出方式,提高了系统的处理速度,适合作为大规模控制系统的控制核心。但本系统不需要复杂的逻辑功能,且CPLD计算能力差,不能满足计算要求。且从使用及经济的角度考虑我们放弃了此方案。

方案2:采用飞思卡尔公司的HC08GP32单片机,具有体积小、可靠性高、稳定可靠、中断处理能力强、处理速度快等特点。有两个输入捕捉功能方便检测转盘速度,完全能实现转盘的测速。

综合各方面因素,我们最终选择了方案2。

1.2、转速传感器模块选择

方案1:可见光发光二极管与光敏二极管组成的发射-接收电路。这种方案的缺点在于其他环境光源会对光敏二极管的工作产生很大干扰,一旦外界光亮条件改变,很可能造成误判和漏判;虽然采取超高亮度发光管可以降低一定的干扰,但这又增加额外的功率损耗。

方案2:采用反射式光电传感器 ITR20001/T ,ITR20001/T传感器是一种集发射与接收于一体的光电传感器,可用于圆盘覆铜和圆盘白色部分的检测。ITR20001/T传感器受可见光干扰小,输出信号为开关量,信号处理简单,使用非常方便。此模块不需外部电路,我们只要加入一个10K和100欧姆的上拉电阻便可使其工作正常。

基于以上情况,我们选择了方案2。

1.3、电源模块选择

方案1:采用4节5号干电池供电。此方案价格便宜,安装简单。但是我们发现干电池电量消耗很快,导致不能提供持续的工作电流。

方案2:采用直流稳压电源转换器,将220V的电压转换成5V的电压,且电压稳定,简单方便。

对比方案1和方案2我们选择了案2。

1.4、小结

经过几番仔细的论证和比较,我们决定了本系统主要模块方案如下:

主控制器:飞思卡尔公司的HC08GP32单片机。

转速传感器模块:收发一体的反射式光电传感器 ITR20001/T

电源模块:直流稳压电源转换器。

2、理论分析与计算

2.1圆盘转速的测量方法

测量转速的方法有测频和测周法。本文选用两路输入捕捉配合测周法,即两个固定位置(角度固定)的传感器分别检测的下降沿的时间差值来计算旋转速度

2.2圆盘转动方向测量

如下图所示在圆盘上方10mm内有两个光电传感器1和2,在圆盘顺时针转动时,传感器1的电平先由高到低,然后传感器2的电平再由高到底;圆盘逆时针转动时,传感器2的电平先由高到低,然后传感器1的电平再由高到底。

clip_image004

1和2为圆盘上边的光电传感器

2.3低功耗分析

每隔十分之八秒开启一次检测,检测时长十分之二秒,这样一节省功耗百分之八十。

3、系统硬件设计与实现

3.1 单片机最小系统设计

本系统由两个光电传感器对圆盘的转速和方向进行检测,单片机处理光电传感器检测的结果,再送到LCD上显示。其系统整体框图如图1所示:

clip_image005

图1 系统整体框图

单片机最小系统原理图如图2所示:

clip_image002[4]

图2 单片机最小系统电路原理图

3.2 转速模块设计

我们采用收发一体的反射式光电传感器 ITR20001/T,驱动电路原理图如图3,ITR20001/T可在+5V下正常工作,在没有探测到覆铜时,传感器输出保持高电平。当检测到覆铜时,输出立刻由高调变到低。在圆盘的转动过程中,可使传感器的高低电平不断的变化。输入到单片机上进行处理。

clip_image009

图3 光电检测电路原理图

4、系统软件设计

控制电路主要由单片机实现,主要负责对路面的软件检测与纠错,车速检测,电机驱动,光源检测,声光提示。

4.1软件的主要特色

软件在设计时,采用C语言和汇编。底层采用汇编语言编写,而在高层则采用C语言进行编写。这样不仅使程序更加简洁,更加提高了程序的可靠性。

4.2软件流程图如图6

clip_image010

图6 软件流程图

5、系统测试

5.1测试仪器

示波器

5.2测试方法

用示波器测试实验板上的接收光电信号的IO口的工作频率,根据测得的工作频率可以算出电机的转速。

5.3测试结果(如下表)

项目

第一次

第二次

第三次

第四次

第五次

示波器显示频率(HZ)

1.7

3.2

4.7

6.8

8.8

LCD显示的转速(r/min)

101

191

280

410

525

算得电机实际转速(r/min)

102

192

282

408

528

5.4测试结果和误差分析

我们测试多组数据,用多种数据进行比较,能计算出电机测速的误差为多少,由于实验环境和光电传感器在圆盘上的角度的影响,会影响LCD显示电机转速。

6、参考文献

[1]全国大学生电子设计竞赛组委会. 全国大学生电子设计竞赛获奖作品选编[M] .北京理工大学出版社,2003

[2]王宜怀、刘晓升. 嵌入式技术基础与实践 清华大学出版社 2007

[3]夏路易、石宗义 电路原理图与电路板设计教程 北京希望电子出版社 2002

[4]谭浩强 C语言程序设计 清华大学出版社 2005

7、附录

附1:部分元器件清单

电阻:47欧姆,10M,150K,10K,470欧姆的电阻

电容:0.47uf,0.01uf,20pf,15pf,0.1uf的电容

晶振:大小为32.768

其他:LM358集成芯片,9012三极管,ITR20001/T的光电传感器,电位器,按键

2.部分程序清单(判断方向与计算转速程序)

/* 代码段一*/

if((flag0==1)&&(flag1==1))

{

if(time0>time1)

{

temptime = (time0-time1);

temptime = 250000/temptime; //计算

if(xcount<=120) //未超出边界

{

pset(20 + xcount, 40 - temptime);

}

else if(xcount > 120)

{

xcount = 1;

lineinit();

pset(20 + xcount, 40 - temptime);

}

}

else if(time0

{

temptime = (time1-time0);

temptime = 250000/temptime;

if(xcount <= 120) //未超出边界

{

pset(20 + xcount, 40 + temptime);

}

else if(xcount > 120)

{

xcount = 1;

lineinit();

pset(20 + xcount, 40 + temptime);

}

}

xcount++;

t1counter = 0;

flag0 = flag1 = 0;

T1Ch0init(); //定时器1通道0初始化

T1Ch1init(); //定时器1通道1初始化

EnableT1Ch0InInt(); // 允许定时器1通道0的输入捕捉中断

EnableT1Ch1InInt(); // 允许定时器1通道1的输入捕捉中断

T1start();

}

/* 代码段二*/

if((flag0==1)&&(flag1==1))

{

if(time0>time1)

{

#ifdef lvbo

if(dir != 0)//方向已经不是顺时针

{

dir = 0; //重新设置方向为顺时针

temptime = 0; //重新开始累加

addcounter = 0; //累加次数置零

}

if(addcounter <= 5) //累加次数小于5次

{

temptime += (time0-time1); //继续累加

addcounter++; //累加次数递增

}

else //累加次数等于5次

{

temptime/=addcounter; //求时间差的平均值

#endif

temptime = (time0-time1);

temptime = (2500000/temptime) * 6;//根据参数计算速度

speed[3] = temptime%10 + '0';

temptime/=10;

speed[2] = temptime%10 + '0';

temptime/=10;

speed[1] = temptime%10 + '0';

temptime/=10;

speed[0] = temptime%10 + '0';

hz_tran(4,1,"逆时针");

asc_tran(8,32,speed);

asc_tran(8,48,consum);

#ifdef lvbo

}

#endif

}

else if(time0

{

#ifdef lvbo

if(dir != 1)

{

dir = 1;

temptime = 0;

addcounter = 0;

}

if(addcounter <= 5)

{

temptime += (time1-time0);

addcounter++;

}

else

{

temptime/=addcounter; //求平均值并显示

#endif

temptime = (time1-time0);

temptime = (2500000/temptime) * 6;

speed[3] = temptime%10 + '0';

temptime/=10;

speed[2] = temptime%10 + '0';

temptime/=10;

speed[1] = temptime%10 + '0';

temptime/=10;

speed[0] = temptime%10 + '0';

hz_tran(4,1,"顺时针");

asc_tran(8,32,speed);

asc_tran(8,48,consum);

#ifdef lvbo

}

#endif

}

flag0 = flag1 = 0;

t1counter = 0;

T1Ch0init(); //定时器1通道0初始化

T1Ch1init(); //定时器1通道1初始化

EnableT1Ch0InInt(); // 允许定时器1通道0的输入捕捉中断

EnableT1Ch1InInt(); // 允许定时器1通道1的输入捕捉中断

//EnableT1OVInt();

Delay(500);

T1start();

2.:实物图

image

没有工作时

 

image

 

工作时

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值