完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛|
很多人在买回来激光雷达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上的使用 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("%drn",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秒,点亮绿灯,否则不亮 |
|
|
|
|
只有小组成员才能发言,加入小组>>
3049 浏览 0 评论
817浏览 1评论
1062浏览 0评论
839浏览 0评论
1018浏览 0评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-10 01:10 , Processed in 0.551916 second(s), Total 76, Slave 57 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
1361
