傻瓜教程:激光雷达TFmini在单片机上的使用[新星计划]

TFmini是一款小型激光雷达模块。主要实现实时、无接触式的距离测量功能,具有测量准确、稳定、高速的特点。

1. 测距原理

  TFmini基于TOF(Time of Flight)即飞行时间原理。具体为产品周期性地向外发出近红外光调制波,调制波遇事物后反射。产品通过测量调制波往返相位差,得到飞行时间,再计算出产品与被测目标之间的相对距离。

傻瓜教程:激光雷达TFmini在单片机上的使用[新星计划]_第1张图片

2. 线序连接

傻瓜教程:激光雷达TFmini在单片机上的使用[新星计划]_第2张图片可自行延长连接线,为保证数据的有效传输,建议自行焊接的连接线长度不大于1米。

3. 数据输出格式

每个数据包为9Byte。包含距离信息(Dist)、信号强度信息(Strength)、测距档位(Mode)、数据校验字节(CheckSum)等。数据格式为16进制(HEX)。
傻瓜教程:激光雷达TFmini在单片机上的使用[新星计划]_第3张图片

4. TFmini在STM32上的使用

 1. STM32初始化配置
 在本例子中我们需要初始化USART1和USART2。 
 2. 将激光雷达输出数据信息转化为距离
 因为我们使用的是USART2串口接收数据,所以我们先使能串口2的接收中断。
HAL_UART_Receive_IT(&huart2,uart,1);

然后设置一些需要用到的量值。

int dist=99;
int check;
int count=10000;
int strength;
uint8_t uart[9];
const int HEADER=0X59;

在回调函数中,我们首先判断第一个数据包帧头,再判断第二个数据包帧头。如果都是0x59,则继续接收剩下数据填满数组,并按照协议对收到的数据进行校验,然后就可以计算对应的参数了。

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
     
	if((int)uart[0]==HEADER)
	{
     
		HAL_UART_Receive(&huart2,uart+1,1,0xffff);
		if((int)uart[1]==HEADER)
		{
     
			HAL_UART_Receive(&huart2,uart+2,7,0xffff);
			check=(int)uart[0]+(int)uart[1]+(int)uart[2]+(int)uart[3]+(int)uart[4]+(int)uart[5]+(int)uart[6]+(int)uart[7];
				if((int)uart[8]==(check&0xff))
				{
     
					dist=(int)uart[2]+(int)uart[3]*256;
					strength=(int)uart[4]+uart[5]*256;
					printf("%d\r\n",dist);	
				}
			}				
	}
		else
			uart[0]=0;
		HAL_UART_Receive_IT(&huart2,uart,1);
}

在上面的代码中,我们可以看到我在每一个数组前都加了int类型强制转换。这是由于我们从串口接收的数据都是uint8_t类型,无法直接用来与int判断计算。如果不进行转换,连第一步判断数据包帧头都无法通过。
又由于HAL_UART_Transmit()只能传送uint8_t类型,所以我们想通过上位机来获取距离数据需要重定义printf为串口1输出。

#include "stdio.h"

#ifdef __GNUC__           
    #define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
    #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif /* __GNUC__ */


PUTCHAR_PROTOTYPE
{
     
    HAL_UART_Transmit(&huart1 , (uint8_t *)&ch, 1, 0xFFFF);
    return ch;
}

源码链接:https://github.com/Liangyz2019/TFmini-STM32
源码实现任务:距离小于20cm时,点亮红灯,否则不亮。红灯维持亮的时间超过10秒,点亮绿灯,否则不亮

“本站所有文章均为原创,欢迎转载,请注明文章出处:https://blog.csdn.net/kasami_/article/details/117266903。百度和各类采集站皆不可信,搜索请谨慎鉴别。技术类文章一般都有时效性,本人习惯不定期对自己的博文进行修正和更新,因此请访问出处以查看本文的最新版本。”

你可能感兴趣的:(c语言,单片机,传感器,github)