• 对射式红外传感器模块、测速传感器模块、计数器模块、电机测试模块、槽型光耦模块



    一、产品简介

    在这里插入图片描述

    该产品采用FTR9606高灵敏度槽型光耦器件,槽宽5mm。它由一个红外发光二极管和NPN光电三极管组成,M3固定安装孔,有输出状态指示灯,输出高电平灯灭,输出低电平灯亮。有遮挡,输出高电平。无遮挡,输出低电平。使用3.3-5VDC 宽电压LM393比较器输出,信号干净,波形好,驱动能力强,超过15mA。输出形式:数字开关量输出(0和1)。广泛用于电机转速检测,脉冲计数,位置限位等。
    即:

    • 1、使用进口ITR9606高灵敏度槽型光耦传感器,槽宽度5mm。
    • 2、有输出状态指示灯,输出高电平灯灭,输出低电平灯亮。
    • 3、有遮挡,输出高电平;无遮挡,输出低电平。
    • 4、比较器输出,信号干净,波形好,驱动能力强,超过15mA。
    • 5、工作电压3.3V-5V
    • 6、输出形式:数字开关量输出(0和1)
    • 7、设有M3固定螺栓孔,方便安装
    • 8、小板PCB尺寸:3.2cm x 1.4cm
    • 9、使用宽电压LM393比较器
    • 10、广泛用于电机转速检测,脉冲计数,位置限位等。

    在这里插入图片描述
    引脚:
    在这里插入图片描述

    操作说明:

    • 1、接好VCC和GND,模块电源指示灯会亮
    • 2、模块槽中无遮挡时,接收管导通,模块DO输出低电平,开关指示灯亮;遮挡时,DO输出高电平,开关指示灯灭。
    • 3、模块DO可与继电器相连,组成限位开关等功能,也可以与有源蜂鸣器模块相连,组成报警器。
    • 4、DO输出接口可以与单片机10口直接相连,一般接外部中断,检测传感器是否有遮档,如用电机码盘则可检测电机的转速。

    二、原理分析

    1. 测距离: 测速传感器输出为脉冲信号,一个脉冲中断一次;红外射线导通的时候是低电平,所以我们设置中断为低电平触法模式。一般码盘上有整数格子,无论是多少格其实原理一样,例如10格码盘,也就是有10个空格子,电机转一圈后便是射线导通10次,外部低电平触法10次;安装上面的思路,我们的测速传感器就可以发挥出效果了,我们知道一圈就有10个中断,于是我们计算中断次数,得到的总次数除于10也就是电机转动次数了,然后按照轮子的周长,计算轮子一圈是多长,就可以推算出小车已经跑多远了。

    2. 测速度: 按照测距离的思路,我们用一个MCU定时器计算,1秒内接收多少个外部中断,例如一秒内接收了20个外部中断,我们就可以判断小车速度为1秒小车轮子转两圈,然后再计算出小车轮子的周长,就可得知小车1秒行驶的速度。

    tips:

    • 1、正确接线!切勿将正负接反,使板子电子器件烧毁。
    • 2、玩家应该设置MCU的1/0口为输入模式/接收模式,否则无法使用。其他 MCU,或者更为高级的控制板如ARM这些,若需设置Ⅰ/0口为输入输出模式,都必须设置为输入模式/接收模式,否则无法使用。
    • 51系列单片机可直接使用,无需设置输入输出模式。

    电路原理图:
    在这里插入图片描述
    接线图:
    在这里插入图片描述
    由上知:其中VCC和GND不用我多说,AO用不上,所以这里只需将DO接入某个引脚,根据脉冲数进行测量。

    三、程序设计

    测速模块的OUT口链接MCU的外部中断口,每当有红外射线导通就是一个外部缓冲。
    所以我这里程序设计为 每发生一个脉冲就进入中断函数,计数器+1,并通过oled显示在屏幕上。

    1. 引脚初始化
    先对DO接入的引脚进行初始化,这里我以PB14为例展开设计

    	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
    	RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
    	
    	GPIO_InitTypeDef GPIO_InitStructure;
    	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;   //上拉输入
    	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14;
    	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    	GPIO_Init(GPIOB, &GPIO_InitStructure);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    2. 外部中断配置

    	GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource14);   //外部中断源
    	
    	EXTI_InitTypeDef EXTI_InitStructure;
    	EXTI_InitStructure.EXTI_Line = EXTI_Line14;    //中断标志位
    	EXTI_InitStructure.EXTI_LineCmd = ENABLE;
    	EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
    	EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;
    	EXTI_Init(&EXTI_InitStructure);
    	
    	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
    	
    	NVIC_InitTypeDef NVIC_InitStructure;
    	NVIC_InitStructure.NVIC_IRQChannel = EXTI15_10_IRQn;
    	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
    	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
    	NVIC_Init(&NVIC_InitStructure);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    3. 中断函数

    uint16_t CountSensor_Get(void)
    {
    	return CountSensor_Count;
    }
    
    void EXTI15_10_IRQHandler(void)
    {
    	if (EXTI_GetITStatus(EXTI_Line14) == SET)
    	{
    		/*如果出现数据乱跳的现象,可解除以下注释,再次判断引脚电平,以避免抖动*/
    //		if (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_14) == 0)
    //		{
    			CountSensor_Count ++;
    //		}
    		EXTI_ClearITPendingBit(EXTI_Line14);
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    4. main函数

    int main(void)
    {
    	OLED_Init();
    	CountSensor_Init();
    	
    	OLED_ShowString(1, 1, "Count:");
    	
    	while (1)
    	{
    		OLED_ShowNum(1, 7, CountSensor_Get(), 5);
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    四、程序源码

    有需要者 可留言评论区或私信

  • 相关阅读:
    169. 多数元素
    Android学习从入门到放弃(文末有福利)
    【100个 Unity实用技能】| C# 中 Sort() 对List中的数据排序的几种方法 整理总结
    一个23岁的男孩没技术能不能学软件测试,是不是注定要打工一辈子?
    《最新出炉》系列初窥篇-Python+Playwright自动化测试-33-处理https 安全问题或者非信任站点-上篇
    微信公众号开发
    微信小程序里边怎么添加付费视频_怎么做付费视频小程序
    RabbitMQ消息队列——快速入门
    【机器学习】Sklearn导入手写数字数据集 Mnist 失败的解决办法
    面试经典150题——Day24
  • 原文地址:https://blog.csdn.net/Dustinthewine/article/details/127546273