ST意法半导体
直播中

申换换

7年用户 1504经验值
私信 关注
[问答]

为什么不能让4x4_CONTINUOUS模式以高于17Hz的速度运行呢

我的用例会受益于高速,但我无法让它以 60Hz 运行。我在带有 XCUBE-TOF1 软件的 NUCLEO-L476RG 板上使用 X-NUCLEO-53L5A1。我正在使用 SimpleRanging 示例程序:XCUBE-TOF1ProjectsNUCLEO-L476RGExamples53L5A153L5A1_SimpleRanging
我已经在轮询周期较短的轮询模式和中断模式下进行了尝试。两者都不会超过 17Hz。
我在 app_x-cube-tof1.c 中编辑这一行以提高速度:
  • Profile.Frequency = 60;
我插入了一个简单的 HAL_Gettick() 并计算了实际频率,它的运行速度不会超过 16.67Hz。5Hz 和 10Hz 效果很好,但随后会达到最大值,如下所示:
  • Profile.Frequency = 5; /* Actually runs at 4.97Hz */
  • Profile.Frequency = 10; /* Actually runs at 9.95Hz */
  • Profile.Frequency = 20; /* Actually runs at 16.59Hz */
  • Profile.Frequency = 30; /* Actually runs at 16.61Hz */
  • Profile.Frequency = 60; /* Actually runs at 16.67Hz */
有什么限制它的想法,或者我应该在哪里优化代码以加快速度?谢谢你的帮助!

回帖(1)

陈蓓

2022-12-21 09:47:43
我让它以 60Hz 运行!我会发布我所做的,以便其他人可以从中学习。通过在 CubeMX 中将 I2C 模式设置为“Fast Mode Plus”并将频率设置为 1MHz,我能够提高 I2C 速度。不知何故,我仍然只用示波器测量 I2C 时钟线 (SCL) 上的 850kHz,但我想这已经足够快了。这让我达到了 19.18Hz。我还在 /Drivers/BSP/Components/vl53l5cx/porting/platform.h 中关闭了传感器使用此代码返回的一些数据


  • //To ensure data consistency, ST recommends to always keep ‘number of target detected’ and ‘target status’ enabled
  • #define VL53L5CX_DISABLE_AMBIENT_PER_SPAD
  • #define VL53L5CX_DISABLE_NB_SPADS_ENABLED
  • //#define VL53L5CX_DISABLE_NB_TARGET_DETECTED
  • #define VL53L5CX_DISABLE_SIGNAL_PER_SPAD
  • #define VL53L5CX_DISABLE_RANGE_SIGMA_MM
  • //#define VL53L5CX_DISABLE_DISTANCE_MM
  • //#define VL53L5CX_DISABLE_TARGET_STATUS
  • #define VL53L5CX_DISABLE_REFLECTANCE_PERCENT
  • #define VL53L5CX_DISABLE_MOTION_INDICATOR

这使它达到了 20.36Hz。然后我意识到 USART 串行总线是瓶颈,所以我消除了应用程序输出的大部分文本,因此它只发送距离。现在我可以可靠地获得 60Hz。顺便说一下,我不需要调整 Profile.TimingBudget=30 因为如手册中所述,该设置仅在自主模式下使用。这是我的新串行输出的样子:


  • |1936|1886|1848|1825|
  • |1885|1815|1798|1760|
  • |1819|1788|1757|1713|
  • |1774|1738|1711|1393|
  • uptime(ms):63962
  • frequency(Hz):60.00

举报

更多回帖

发帖
×
20
完善资料,
赚取积分