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

一、使用的模块

1.1、光电对射传感器模块

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

二、STM32的配置

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

  • 2.1、配置上升沿或下降沿都产生中断,这样的话,我们就能获得轮子更准确的转速。
    在这里插入图片描述

  • 2.2、使能中断
    在这里插入图片描述
    2.3、编写进入中断函数后的操作(参考博客:STM32CubeMX学习教程之二:GPIO输入之外部中断)
    如下所示代码,在获取每次上升沿和下降沿的时候,对触发次数进行累加,然后在别处,可以在一个自定义的周期内,读取触发次数,就可以知道轮子的转速,利用这个转速就可以用来反馈控制小车的行动了。

	#define  RightWheelSpeed_PIN  GPIO_PIN_12  //PB12#define  LeftWheelSpeed_PIN   GPIO_PIN_13  //PB13void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin){if(GPIO_Pin == RightWheelSpeed_PIN){RightWheelSpeedCount++;}if(GPIO_Pin == LeftWheelSpeed_PIN){LeftWheelSpeedCount++;}}


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部