使用光电对射传感器模块和码盘对电机进行测速 ---- 基于RT-thread Nano和STM32

一、使用的模块

1.1、光电对射传感器模块
使用光电对射传感器模块和码盘对电机进行测速 ---- 基于RT-thread Nano和STM32_第1张图片
原理图如下:
使用光电对射传感器模块和码盘对电机进行测速 ---- 基于RT-thread Nano和STM32_第2张图片
其中:
1、VCC 接电源正极 3.3-5V
2、GND 接电源负极
3、OUT(D0) TTL 开关信号输出
原理简单来说就是,当有东西处于槽内,遮挡在发光二极管和接收三极管之间时,模块D0口输出高电平;无遮挡,模块D0口输出低电平。
D0 输出接口可以与单片机 IO 口直接相连,检测传感器是否有遮档,结合电机码盘则可检测电机的转速,这也就是本文光电测速的原理,原理确实很简单 -_- 。
1.2、20栅格光电测速码盘
光电测速码盘的栅格越多,轮子每转一周获得的上升沿或下降沿会更多,当然这样精度更高,下图的只有20格,精度一般。
使用光电对射传感器模块和码盘对电机进行测速 ---- 基于RT-thread Nano和STM32_第3张图片

二、STM32的配置

由于我们只是检测高低电平的变化,直接用GPIO的上升沿和下降沿触发即可,利用一定时间内触发的次数,就可以知道该时间内轮胎转了多少圈。
STM32CubeMX相配置:

  • 2.1、配置上升沿或下降沿都产生中断,这样的话,我们就能获得轮子更准确的转速。
    使用光电对射传感器模块和码盘对电机进行测速 ---- 基于RT-thread Nano和STM32_第4张图片

  • 2.2、使能中断
    使用光电对射传感器模块和码盘对电机进行测速 ---- 基于RT-thread Nano和STM32_第5张图片
    2.3、编写进入中断函数后的操作(参考博客:STM32CubeMX学习教程之二:GPIO输入之外部中断)
    如下所示代码,在获取每次上升沿和下降沿的时候,对触发次数进行累加,然后在别处,可以在一个自定义的周期内,读取触发次数,就可以知道轮子的转速,利用这个转速就可以用来反馈控制小车的行动了。

	#define  RightWheelSpeed_PIN  GPIO_PIN_12  //PB12
	#define  LeftWheelSpeed_PIN   GPIO_PIN_13  //PB13

	void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
	{
	    if(GPIO_Pin == RightWheelSpeed_PIN)
		{
		    RightWheelSpeedCount++;
		}
		if(GPIO_Pin == LeftWheelSpeed_PIN)
		{
		    LeftWheelSpeedCount++;
		}
	}

你可能感兴趣的:(电子开发模块应用记录)