傻瓜教程:激光雷达TFmini在单片机上的使用[新星计划]
Posted kasami_
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了傻瓜教程:激光雷达TFmini在单片机上的使用[新星计划]相关的知识,希望对你有一定的参考价值。
很多人在买回来激光雷达TFmini模块后却束手无策,有的人不知道怎么接线,有的人不知道怎么获取数据,有的人照着官方文档也得不出结果。本文就官方文档以及个人使用经验总结出TFmini如何在STM32上获取距离等测量数值。
本文要求基础:基本阅读能力,键盘敲打能力,单片机基础知识,C语言基础知识
软件配备:KEIL5,CUBEMX
硬件配备:激光雷达TFmini,任一STM32单片机,杜邦线(最少三根)
TFmini是一款小型激光雷达模块。主要实现实时、无接触式的距离测量功能,具有测量准确、稳定、高速的特点。
1. 测距原理
TFmini基于TOF(Time of Flight)即飞行时间原理。具体为产品周期性地向外发出近红外光调制波,调制波遇事物后反射。产品通过测量调制波往返相位差,得到飞行时间,再计算出产品与被测目标之间的相对距离。
2. 线序连接
将各引脚对应STM32各引脚连接好即可。可自行延长连接线,为保证数据的有效传输,建议自行焊接的连接线长度不大于1米。
3. 数据输出格式
每个数据包为9Byte。包含距离信息(Dist)、信号强度信息(Strength)、测距档位(Mode)、数据校验字节(CheckSum)等。数据格式为16进制(HEX)。
4. TFmini在STM32上的使用
- STM32初始化配置
在本例子中我们需要初始化USART1和USART2。 - 将激光雷达输出数据信息转化为距离
因为我们使用的是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。百度和各类采集站皆不可信,搜索请谨慎鉴别。技术类文章一般都有时效性,本人习惯不定期对自己的博文进行修正和更新,因此请访问出处以查看本文的最新版本。”
以上是关于傻瓜教程:激光雷达TFmini在单片机上的使用[新星计划]的主要内容,如果未能解决你的问题,请参考以下文章