基于51单片机的光电测速系统测转速方案原理图设计

系统的功能分析

链接:https://pan.baidu.com/s/114nSwEcDQdt8n1L8XADtiQ
提取码:hdib

本设计由STC89C52单片机电路+液晶LCD1602显示电路+光电测速(槽型光耦)电路+电源电路组成。
1、通过光电传感器测速,光电传感器检测轮盘上的孔数进而知道轮盘转了多少周。
2、LCD1602液晶实时显示转速。
本系统具体框图
在这里插入图片描述
原理图设计:
在这里插入图片描述

CXGO光电槽型光耦传感器模块电路设计
本光电槽型光耦传感器是基于红外对管模块的红外传感器。该传感器模块对环境光线适应能力强,其具有一对红外线发射与接收管,发射管发射出一定频率的红外线,当检测方向遇到障碍物(反射面)时,红外线反射回来被接收管接收,经过比较器电路处理之后,指示灯会亮起,同时信号输出接口输出数字信号(一个低电平信号),此传感器广泛用于电机转速检测,脉冲计数,位置限位等。
一、模块参数说明
(1)有输出状态指示灯,输出高电平灯灭,输出低电平灯亮。
(2)有遮挡,输出高电平;无遮挡,输出低电平。
(3)比较器输出,信号干净,波形好,驱动能力强,超过15mA。
(4)工作电压3.3V-5V
(5)输出形式 :数字开关量输出(0和1)
(6)使用宽电压LM393比较器
二、模块接口说明
(1)VCC 电源正
(2)GND电源负
(3)DO数字量输出
(4)AO无效
光电槽型光耦模块内部电路图如下图所示,其中R1电阻为分压电阻,将光电槽型光耦传感器检测到的障碍信息转化为模拟电压信号,模拟量信号接入LM393比较器后,即可与LM393比较器芯片2号引脚所接的分压电阻分压后的模拟电压进行比较,进而得出DO数字信号(即高低电平信号)。C1、C2为滤波电容,C1电容对电源进行滤波,让电源输出更稳定。C2电容对模拟信号进行滤波,保证模拟信号输出的稳定性。R2、R3均为限流电阻,来保护LED灯,防止LED灯烧坏,LED灯均为低电平有效。R7也为限流电阻,保护红外发射头,以防烧坏。R4为上拉电阻,上拉就是将不确定的信号通过一个电阻钳位在高电平,同时起限流作用。保证LM393比较器输出的高低电平信号在与单片机引脚连接时电平信号的读取更加稳定。

在这里插入图片描述
光电槽型光耦模块模块接口原理图如下图所示。
在这里插入图片描述
5V直流电机调速电路设计
电动马达(Electric motor),又称为马达或电动机,是一种将电能转化成机械能,并可再使用机械能产生动能,用来驱动其他装置的电气设备。
直流电动机(DC Motor)的好处为在控速方面比较简单,只须控制电压大小即可控制转速,但此类电动机不宜在高温、易燃等环境下操作,而且由于电动机中需要以碳刷作为电流变换器(Commutator)的部件(有刷马达),所以需要定期清理炭刷磨擦所产生的污物。
马达的旋转原理的依据为佛来明左手定则,当一导线置放于磁场内,若导线通上电流,则导线会切割磁场线使导线产生移动。电流进入线圈产生磁场,利用电流的磁效应,使电磁铁在固定的磁铁内连续转动的装置,可以将电能转换成力学能。 与永久磁铁或由另一组线圈所产生的磁场互相作用产生动力 直流马达的原理是定子不动,转子依相互作用所产生作用力的方向运动。 交流马达则是定子绕组线圈通上交流电,产生旋转磁场,旋转磁场吸引转子一起作旋转运动直流马达的基本构造包括“电枢”、“场磁铁”、“集电环”、“电刷”。
电枢:可以绕轴心转动的软铁芯缠绕多圈线圈。 场磁铁:产生磁场的强力永久磁铁或电磁铁。集电环:线圈约两端接至两片半圆形的集电环,随线圈转动,可供改变电流方向的变向器。每转动半圈(180度),线圈上的电流方向就改变一次。 电刷:通常使用碳制成,集电环接触固定位置的电刷,用以接至电源。
本系统选通过纯模拟电路即可实现对电机转速的调节,DC为电源插座,SW2为电源开关,PR为10K的大功率电阻。当系统上电后,按下电源开关,通过调节电位器PR即可实现调速,调节PR,则分配到电机上的电压则会在0-5V变化,通过改变施加在电机上的电压的变化来实现对电机转速的调节。其具体原理图如下图所示。电机最大的速度只与电位器分配到电机上的电压有关。
在这里插入图片描述
系统软件设计
在这里插入图片描述
部分代码

#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
#include<stdio.h>
#include "1602.h"
#include "delay.h"

unsigned long PluNum=0;	//检测速度转化来的脉冲量
unsigned long time_ms;		   //定时器计数
float Juli=0;				//距离计算
char displaytemp[16];		   //显示更新暂存
unsigned char DealSudu=0;	  //处理速度
void Init_Timer0(void);		 //函数声明
/*------------------------------------------------
                    主函数
------------------------------------------------*/
void main (void)
{                  
	Init_Timer0();        //定时器0初始化
	EX0=1;         //外部中断0开
	IT0=1;         //边沿触发
    EA=1;          //全局中断开
	LCD_Init();           //初始化液晶
	DelayMs(20);          //延时有助于稳定
	LCD_Clear();          //清屏

	LCD_Write_String(0,0,"My Designer!    ");  //初始化
	sprintf(displaytemp,"ZhuanSu:%3.1fr/s",Juli);
	LCD_Write_String(0,1,displaytemp);

	while (1)         //主循环
	{
		if(DealSudu==1)
		{
			DealSudu=0;
			Juli=(float)PluNum/20.0/3.0;	//m/s 20个脉冲为1圈 3s时间进行检测
			PluNum=0;
			sprintf(displaytemp,"ZhuanSu:%3.1fr/s",Juli);	 //打印转速
			LCD_Write_String(0,1,displaytemp);	//显示
			PluNum=0;
		}
	}
}

void Init_Timer0(void)
{
	TMOD |= 0x01;	  //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响		     
	TH0=(65536-20000)/256;		  //重新赋值 20ms
	TL0=(65536-20000)%256;
	EA=1;            //总中断打开
	ET0=1;           //定时器中断打开
	TR0=1;           //定时器开关打开
}

void Timer0_isr(void) interrupt 1 
{
	static unsigned char Count=0;	   //计数
	TH0=(65536-20000)/256;		  //重新赋值 20ms
	TL0=(65536-20000)%256;	
	time_ms++;
	if(time_ms%48==0)		  //定时处理
	{
		Count++;
		if(Count>3)		//3s进行处理
		{
		 	DealSudu=1;
		}
	}
}

/*------------------------------------------------
                 外部中断程序
------------------------------------------------*/
void ISR_Key(void) interrupt 0 using 1
{
	PluNum++;		//脉冲计数
}

.

.

<think>嗯,用户想了解如何使用ST188反射式光电传感器进行转速量。首先,我需要回忆一下ST188的基本工作原理。根据引用[1],ST188由高发射功率的红外光电二极管和高灵敏度的光电晶体管组成,检测距离可调,用于非接触检测。反射式传感器通常是检测物体反射回来的红外光,所以当有物体靠近时,反射光会被接收器捕捉到,从而产生信号变化。 接下来,转速量的原理应该是通过检测物体(比如旋转轴上的标记)经过传感器的次数,计算单位时间内的次数来得到转速。这通常需要将旋转物体贴上反光条或者开孔,这样每转一圈,传感器就能检测到一次或多次脉冲信号。 然后,硬件连接方面,ST188有三个引脚:VCC、GND和输出。输出信号应该是数字信号,当检测到物体时输出低电平或高电平。需要将这个信号连接到微控制器的GPIO口,通过中断或轮询的方式检测电平变化。 在软件处理部分,需要编写程序来捕捉脉冲信号,记录时间间隔。比如,使用定时器来计算两个上升沿或下降沿之间的时间,从而计算转速。公式应该是转速=60/(T*N),其中T是周期,N是每转的脉冲数。 可能还需要考虑去抖动处理,因为机械接触或传感器可能会有噪声,导致误触发。可以通过软件延时或硬件滤波来解决。 另外,引用[2]提到E18-D80NK的检测距离可调,虽然这里讨论的是ST188,但可能ST188也有类似的调节机制,需要调整传感器与被物体的距离,确保反射信号有效。引用[3]中的雨量传感器试方法可能对模拟旋转标记的试有参考价值,比如如何设置不同的试条件。 最后,应用场景可能包括电机转速检测、打印机纸张检测等。需要确保用户了解安装注意事项,比如反光条的大小、传感器的距离调整,以及环境光干扰的可能影响。</think>### ST188反射式光电传感器转速量方法及原理 #### 一、量原理 1. **反射式检测** ST188通过发射红外光并接收物体反射的光信号实现非接触检测。当旋转物体表面存在反光标记(如反光条或凹槽)时,传感器会因反射光强度变化产生脉冲信号[^1]。 转速计算公式: $$n = \frac{60 \cdot f}{N}$$ 其中,$n$为转速(r/min),$f$为脉冲频率(Hz),$N$为旋转体每转的标记数。 2. **信号生成机制** - **标记通过时**:反射光增强 → 接收管导通 → 输出低电平 - **无标记时**:反射光减弱 → 接收管截止 → 输出高电平 #### 二、硬件实现步骤 1. **传感器安装** - 调整检测距离至4~13mm(通过电位器或机械结构) - 标记宽度需大于传感器响应时间对应的弧长 - 示例安装示意图: ``` [旋转盘] ← 反光标记 → [ST188传感器] ``` 2. **电路连接** ```text ST188引脚: VCC → 5V GND → GND OUT → 微控制器GPIO(需上拉电阻) ``` #### 三、软件处理流程 1. **脉冲计数法** ```python # 伪代码示例(基于定时中断) count = 0 start_time = 0 def interrupt_handler(): global count count += 1 # 定时计算转速 def calculate_rpm(): period = current_time - start_time frequency = count / period rpm = 60 * frequency / N # N为每转标记数 count = 0 start_time = current_time return rpm ``` 2. **周期量法** 使用微控制器输入捕获功能,量相邻脉冲的时间间隔$T$,则: $$n = \frac{60}{N \cdot T}$$ #### 四、注意事项 1. **抗干扰设计** - 添加RC低通滤波器(推荐值:R=10kΩ, C=0.1μF) - 软件去抖动(采样间隔>1ms) - 避免环境光直射传感器[^2] 2. **参数优化** - 标记对比度:建议反射率差>30% - 最大可转速:$$n_{max} = \frac{60}{2t_r \cdot N}$$ 其中$t_r$为传感器响应时间(ST188约0.5ms) #### 五、典型应用场景 1. 电机转速监控 2. 打印机辊筒转速检测 3. 工业传送带速度量[^3]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值