光电传感器转速测量系统设计.docx

上传人:b****2 文档编号:514987 上传时间:2022-10-10 格式:DOCX 页数:15 大小:177.08KB
下载 相关 举报
光电传感器转速测量系统设计.docx_第1页
第1页 / 共15页
光电传感器转速测量系统设计.docx_第2页
第2页 / 共15页
光电传感器转速测量系统设计.docx_第3页
第3页 / 共15页
光电传感器转速测量系统设计.docx_第4页
第4页 / 共15页
光电传感器转速测量系统设计.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

光电传感器转速测量系统设计.docx

《光电传感器转速测量系统设计.docx》由会员分享,可在线阅读,更多相关《光电传感器转速测量系统设计.docx(15页珍藏版)》请在冰豆网上搜索。

光电传感器转速测量系统设计.docx

光电传感器转速测量系统设计

专业课程设计

题目

光电传感器的转速测量设计

院系:

自动化学院

专业班级:

小组成员:

指导教师:

2012年10月8---2012年期:

日10月19

1

一.课程设计描述

采用单片机、uln2003为主要器件,设计步进电机调速系统,实现电机速度开环可调。

二.课程设计具体要求

1、通过按键选择速度;

2、转速测量显示范围为0~9999转/秒。

3、检测并显示各档速度。

三.主要元器件

实验板(中号)1个步进电机1个

STC89C521个电容(30pF、10uF)各1个

数码管(共阳、四位一体)1个晶振(12MHz)1个

小按键4个ULN20031个

电阻若干发光二极管1个

三极管(NPN)4个排阻1个

四.原理阐述

4.1系统简述

按照题给要求,我们最终设计了如下的解决方案:

用户通过键盘键入控制指令(开关),微控制器在收到指令后改变输出的PWM波,最终在ULN2003的驱动下电机转速发生改变。

通过ST151传感器测量电机扇叶的旋转情况,将转速显示在数码管上。

在程序主循环中实现按键扫描与转速显示,将定时器0作为计数器,计数ST151产生的下降沿,可算出转速,并送至数码管显示。

设计思路:

(1)利用光电开关管做电机转速的信号拾取元件,在电机的转轴上安装一个圆盘,在圆盘上挖1小洞,小洞上下分别对应着光发射和光接受开关,圆盘转动一圈即光电管导通1次,利用此信号做为脉冲计数所需。

(2)对光电开关信号整流放大。

(3)脉冲经过单片机内部的计数器和定时器进行计数和定时。

(4)显示电路采用单片机动态显示。

2

4.2转速测量原理

在此采用频率测量法,其测量原理为,在固定的测量时间内,计取转速传感器产生的脉冲个数,从而算出实际转速。

设固定的测量时间为Tc(min),计数器计取的脉冲个数m,假定脉冲发生器每转输出p个脉冲,对应被测转速为N(r/min),则f=pN/60Hz;另在测量时间Tc内,计取转速传感器输出的脉冲个数[1]:

,所以,当测得m值时,就可算出实际转速值m应为m=Tcf

N=60m/pTc(r/min)

(1)

4.3转速测量系统组成框图

系统由信号预处理电路、单片机STC89C51、系统化LED显示模块、串口数据存储电路和系统软件组成。

其中信号预处理电路包含信号放大、波形变换和波形整形。

对待测信号进行放大的目的是降低对待测信号的幅度要求;波形变换和波形整形电路则用来将放大的信号转换成可与单片机匹配的TTL信号;通过对单片机的编程设置可使内部定时器T0对输入脉冲进行计数,这样就能精确地算出加到T0引脚的单位时间内检测到的脉冲数;设计中转速显示部分采用价格低廉2C总线放到模块,通过相关计算方法计算得到的转速通过且使用方便的LEDI2PROM存储,E既节省了所需单片机的口线和外围器件,同时也简化了显示部分的软件编程。

系统的原理框图如图2.1所示。

波形整形波形变换信号放大器

键盘模块单数字存储电路片RS232

显LED机示

3

图2.1系统的原理框图

五.系统硬件电路的设计

系统硬件部分包含输入模块、显示模块、控制模块、测速模块等。

在硬件搭建前,先通过ProteusPro7.5进行硬件仿真实现。

5.1脉冲产生电路设计

设计采用了红外光电传感器,进行非接触式检测。

当有物体挡在红外光电发光二极管和高灵敏度的光电晶体管之间时,传感器将会输出一个低电平,而当没有物体挡在中间时则输出为高电平,从而形成一个脉冲。

系统在光电传感器收发端间加入电动机,并在电动机的转轴上安装一转盘。

在这个转盘的边沿处挖出若干个圆形过孔,把传感器的检测部分放在圆孔的圆心位置。

每当转盘随着后轮旋转的时候,传感器将向外输出若干个脉冲。

把这些脉冲通过一系列的波形整形成单片机可以识别的TTL电平,即可算出轮子即时的转速。

转盘的圆孔的个数决定了测量的精度,个数越多,精度越高。

这样就可以在单位时间内尽可能多地得到脉冲数,从而避免了因为两个过孔之间的距离过大,而正好在过孔之间或者是在下个过孔之前停止了,造成较大的误差。

设计中转盘的圆孔的实际个数受到技术的限制。

为了达到预定的效果设计在转盘过孔的设计上采用11个过孔,从而留下了10个同等的间距。

这样在以后的软件设计中能够较为方便的计算出脉冲频率。

脉冲发生源的硬件结构图如图3.1所示。

图3.1脉冲发生源硬件结构图(左为正视图,右为侧视图)

5.2光电转换及信号调理电路设计

由于系统需要将光信号转换为电信号,因而需要使用光电传感器并设计相应的信号调理电路,以得到符合要求的脉冲信号,送给单片机STC89C51进行计数,同时得到计数的时间,由单片机进行相关计算以得到电动机转速。

传感器将电机的转速信号转变成了电脉冲信号,该信号经过LM324集成运放整形驱动,送到单片机进行脉冲计数,从而测出电动机转速。

光电转换部分与单片机的连接框图如图3.2所示。

4

LED数码管

数码显示译码器

计数脉冲整形驱动传感器LM324STC89C51

图3.2光电转换部分与单片机的连接框图

5.3时钟电路

系统采用12M晶振与两个30pF电容组成震荡电路,接STC89C52的XTAL1与XTAL2引脚,为微控制器提供时钟源

5.4按键电路

四个按键分别控制电机的不同转速,即控制PWM波高电平的占空比,以实现电机的速度控制,采用开环控制方法,不是十分精确,但控制简单,易实现,代码编写简单。

5

5.5显示部分

系统采用4位共阴极数码管实现转速显示。

数码管的位选端1~4分别接STC89C52的P2.0~P2.3管脚,端选段A~G与DP分别接STC89C52的P0.0~P0.7管脚。

需要说明的是:

实际焊接电路时,数码管的位选端需要焊接三极管,否则数码管显示亮度将会非常暗。

5.6电机控制与驱动部分

电机的运行通过PWM波控制。

PWM波通过STC89C52的P2.4口输出。

6

说明:

测速部分用的是Motro-encode电机,实际用ST151实现测速,焊接电路如下图:

其中R1=510Ω,R2=4.7KΩ

ST内部电路:

5.7其他电路

复位电路如下所示

7

完整仿真电路图:

六、软件部分设计P1取反后取有效按键位

N判断有无键按Y

防延10ms

再读键判断按键是否存在?

YP1.0=P1.0=相应项目值的设定N设置修改项目?

P1.1=0

返回8

中断程序开始

重装初值T1

保护现场

+1定时单元N1S满YTH0读取

恢复现场

集成开发环境开发系统软件采用Keil:

程序代码如下(带注释)#include

数码管选定位sbitP2_0=P2^0;//sbitP2_1=P2^1;

sbitP2_2=P2^2;

sbitP2_3=P2^3;

电机控制位sbitP2_4=P2^4;//

0的控制键sbitkeysp0=P1^0;//电机转速为30的控制键sbitkeysp30=P1^1;//电机转速为的控制键//sbitkeysp60=P1^2;电机转速为60的控制键sbitkeysp100=P1^3;//电机转速为100

unsignedcharcodetable[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,

0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};

电机转速unsignedintmotorspeed;//motorspeed的各个位unsignedcharGE,SHI,BAI,QIAN;//电机转速光电传感器脉冲数unsignedintcounter=0;//占空比unsignedintpwm;//pwm//占空比设置值unsignedintmid;

设定多长时间计算一次速度unsignedintcalsp;//

数码管显示电机速度voiddisplay();//9

voiddelay();//延迟函数

voidcontrolpwm();//控制电机占空比

voidcalspeed();//计算电机速度,放于motorspeed变量中

voidkeyscan();//按键扫描

voidmain()

{

P2=P2&0x0f;

mid=0;

EA=1;//开启总中断

EX0=1;//开启外部中断0

IT0=1;//设置成下降沿触发方式

TMOD=0x01;//设置定时器0为模式1,即16位计数模式

TH0=(65536-10000)/256;//计数时间为10ms

TL0=(65536-10000)%6;

ET0=1;//开启定时器0中断

TR0=1;//启动定时器0

while

(1)

{

keyscan();

display();

controlpwm();

calspeed();

}

}

voidkeyscan()//键盘扫描

{

if(keysp0==0)

{

delay();//延迟防止抖动

if(keysp0==0)

mid=0;

}

if(keysp30==0)

{

delay();

if(keysp30==0)

mid=1;

}

if(keysp60==0)

10

{

delay();

if(keysp60==0)

mid=3;

}

if(keysp100==0)

{

delay();

if(keysp100==0)

mid=5;

}

}

voidcalspeed()

{

if(calsp>=100)//100*10ms=1s计算一次电机转速

{

motorspeed=counter/3;//转的圈数除以时间

counter=0;//清零脉冲数

calsp=0;//清零标志

}

}

voidcontrolpwm()

{

if(pwm>=0&&pwm

{

P2_4=1;//电机加速

}

elseif(pwm>=mid&&pwm<10)

{

P2_4=0;//电机不加速

}

elsepwm=0;

}

void_TIMER0()interrupt1

{

TH0=(65536-10000)/256;//重新装入初值,计数时间为10ms

TL0=(65536-10000)%6;

pwm++;

calsp++;

}

11

void_

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

当前位置:首页 > 解决方案 > 学习计划

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

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