` 【北醒TFmini-S 测距避障激光雷达传感器试用连载】+2.传感器I2C接口调试
大家好,上篇帖子的末尾,我分析了如何让北醒的TFmini-S传感器达到1000HZ的输出速度,按照目前厂家给出来的资料,只有通过串口才能达到最大输出速度。 而使用I2C接口,最大也只能达到100HZ(这个是厂家给出来的数据)。 那么我现在就试试I2C接口。为什么我执意于I2C接口,主要是考虑到I2C总线的1对多特性。 本次使用我就以STM32F103RCT6 单片机,运行RT-Thread系统,通过I2C接口,来去带动北醒的TFmini-S 传感器。 一、传感器I2C接口设置 传感器是支持TTL接口和I2C接口的。出厂默认是TTL接口。 首先可以使用任意一个串口调试助手,设置通讯格式115200,8,N,1。一开始串口可以看到串口调试助手一直快速的发出数据帧(出厂默认配置)。 设置HEX发送,5A 05 07 00 66(关闭数据输出)
在发送:5A 05 0A 01 6A 设置通讯接口为I2C。 在发送:5A 04 11 6F 保存配置。 注意,在发送保存配置之后,这时候的接口已经是I2C接口了,此时通过串口已经不能发送命令了。 二、环境搭建 这我大致的交代一下我的硬件连接方式。
接下来需要看一下北醒TFmini-S传感器的I2C接口的协议,从厂家给出手册的时序要求如下图所示:
程序编写的时候,需要把下行指令放到BYTE数据区,然后通过I2C去读数据。 协议看起来挺简单的,但是确是我见到最奇葩的I2C通讯定义,北醒的工程师也太会偷懒了,直接拿串口的通讯协议,只是改下发送方式,就把他当作I2C协议。 我们平时用的I2C难道不是通过读写寄存器的么?算了,我这是又涨见识了。反正,既然都到了这步田地,那就试试呗。 三、程序编写 本次使用RT-Thread操作系统,这两年比较热门的一款RTOS。关于怎么移植的,怎么添加I2C组件。这部分我就不说了,网上有太多的教程,RTT官网也有文档中心来讲述这个。 直接开始I2C编程: 首先需要先写两个接口,I2C读和I2C写。方便后面编程封装上行和下行指令。这个需要结合RTT的相关接口函数。
接下来就需要按照指令表进行数据协议封装和数据解析了。 首先是读固件版本:实际读出来的是V2.2.4
模块复位:
模块数据输出频率设置,因为I2C不能主动发送数据,我不知道设置是否有用,但是先把接口写下来吧。
数据输出使能开关,这里我把开和关的两个协议合并了。
最后是读取距离数据,同样的我也把输出的为CM,MM的两个协议合并了。通过串口打印出来。
最后的最后,写一个测试示例程序。
下载到单片机后,通过串口发送命令,让程序运行起来:
动画显示如下: 四、使用总结 一番折腾下来,除了对这个I2C协议感觉比较奇葩之外,其他的都还挺不错了。 另外,北姓的技术人员说I2C支持传感器数据输出最大也就100KHZ,我个人觉得,如果北醒的工程师,能够好好的优化下I2C的协议,速度肯定能达到1000KHZ。
串口的115200波特率就能达到1000HZ的数据输出速度,我I2C最大400KHZ为什么不能达到1000KHZ的输出速率呢?
`
|