Itamar -
查看您的数据,您没有“覆盖传感器的一半”。尽管有相当大的红外滤光片,传感器上的孔真的很小。
我试过这个实验。
我将传感器放在一个打开的盒子底部向上看。
这让我可以小心地放置目标。我用尺子作为目标。
我用了一个20厘米左右的盒子和13厘米高的盒子。但尺寸并不重要。
我标记了中心线和+/- 12.5度。
这允许我重复地将目标移入和移出视场(FoV)。统治者只是放在盒子的两侧。
代码如下:
void AutonomousLowPowerRangingTest(void)
{
uint32_t pMeasurementTimingBudgetMicroSeconds;
VL53L1_UserRoi_t Roi;
static VL53L1_RangingMeasurementData_t RangingData;
printf('自主测距测试 n');
status = VL53L1_WaitDeviceBooted(Dev);
status + = VL53L1_DataInit(Dev);
status + = VL53L1_StaticInit(Dev);
status + = VL53L1_SetPresetMode(Dev,VL53L1_PRESETMODE_LOWPOWER_AUTONOMOUS);
status + = VL53L1_SetDistanceMode(Dev,VL53L1_DISTANCEMODE_LONG);
status + = VL53L1_SetMeasurementTimingBudgetMicroSeconds(Dev,20000); // 8毫秒
status + = VL53L1_SetInterMeasurementPeriodMilliSeconds(Dev,100);
status + = VL53L1_GetMeasurementTimingBudgetMicroSeconds(Dev,& pMeasurementTimingBudgetMicroSeconds);
printf('时间预算=%d n',pMeasurementTimingBudgetMicroSeconds);
Roi.TopLeftX = 0;
Roi.TopLeftY = 15;
Roi.BotRightX = 15;
Roi.BotRightY = 0;
#if 1
Roi.TopLeftX = 5;
Roi.TopLeftY = 15;
Roi.BotRightX = 10;
Roi.BotRightY = 0;
#万一
status + = VL53L1_SetUserROI(Dev,& Roi);
status + = VL53L1_StartMeasurement(Dev);
如果(状态){
printf('你有点错误 n');
而(1);
}
做//中断模式
{
__WFI(); //等待中断 - 您也可以轮询
if(IntCount!= 0){
IntCount = 0;
status = VL53L1_GetRangingMeasurementData(Dev,& RangingData);
如果(状态== 0){
printf('%d,%d,%。2f,%。2f,%d n',RangingData.RangeStatus,RangingData.RangeMilliMeter,
RangingData.SignalRateRtnMegaCps / 65536.0,RangingData.AmbientRateRtnMegaCps / 65336.0,HAL_GetTick());
}
status = VL53L1_ClearInterruptAndStartMeasurement(Dev);
}
}
而(1);
我遇到的一个问题是理解协调系统。
假设(0,0)位置在芯片的左下角。 (15,15)在右上方。
然后查看EVK,使USB位于“顶部”,字符正面朝上。
使用(0,15)(15,0)FoV运行代码。移动你的统治者,直到你确信你在FoV的边缘。用这些边标记框。
然后使用(5,15)(10,0)FoV运行代码。再次移动统治者,直到你确信FoV已经“移入”。
我的投资回报率发生了很大变化。这是我所期待的。
我唯一担心的是ROI变化可能不会立即改变。如果范围已开始,则可能仅在范围结束后生效。
以上来自于谷歌翻译
以下为原文
Itamar -
Looking at your data, you didn't 'cover half the sensor'. Despite the rather large IR filter, the hole in the sensor is REALLY small.
I tried this experiment.
I placed my sensor in the bottom of an open box looking up.
This allows me to carefully place my targets. I used a ruler as a target.
I used a box 20cm on a side and 13cm tall. But the dimensions aren't really important.
I marked the centerline and +/- 12.5 degrees.
This allows me to move targets in and out of the Field of View (FoV) repeatably. The ruler simply rests on the sides of the box.
Code follows:
void AutonomousLowPowerRangingTest(void)
{
uint32_t pMeasurementTimingBudgetMicroSeconds;
VL53L1_UserRoi_t Roi;
static VL53L1_RangingMeasurementData_t RangingData;
printf('Autonomous Ranging Testn');
status = VL53L1_WaitDeviceBooted(Dev);
status += VL53L1_DataInit(Dev);
status += VL53L1_StaticInit(Dev);
status += VL53L1_SetPresetMode(Dev,VL53L1_PRESETMODE_LOWPOWER_AUTONOMOUS);
status += VL53L1_SetDistanceMode(Dev, VL53L1_DISTANCEMODE_LONG);
status += VL53L1_SetMeasurementTimingBudgetMicroSeconds(Dev,20000); // 8 ms
status += VL53L1_SetInterMeasurementPeriodMilliSeconds(Dev, 100);
status += VL53L1_GetMeasurementTimingBudgetMicroSeconds(Dev, &pMeasurementTimingBudgetMicroSeconds);
printf('Timing Budget = %dn', pMeasurementTimingBudgetMicroSeconds);
Roi.TopLeftX = 0;
Roi.TopLeftY = 15;
Roi.BotRightX = 15;
Roi.BotRightY = 0;
#if 1
Roi.TopLeftX = 5;
Roi.TopLeftY = 15;
Roi.BotRightX = 10;
Roi.BotRightY = 0;
#endif
status += VL53L1_SetUserROI( Dev, &Roi);
status += VL53L1_StartMeasurement(Dev);
if(status){
printf('YOU DID SOMETHING WRONG n');
while(1);
}
do // interrupt mode
{
__WFI(); // Wait For Interrupt - you could also poll
if(IntCount !=0 ){
IntCount=0;
status = VL53L1_GetRangingMeasurementData(Dev, &RangingData);
if(status==0){
printf('%d,%d,%.2f,%.2f,%dn', RangingData.RangeStatus,RangingData.RangeMilliMeter,
RangingData.SignalRateRtnMegaCps/65536.0,RangingData.AmbientRateRtnMegaCps/65336.0,HAL_GetTick());
}
status = VL53L1_ClearInterruptAndStartMeasurement(Dev);
}
}
while(1);
One issue I had was understanding the co-ordinate system.
Assume the (0,0) location is in the bottom left of the chip. (15,15) is in the upper right.
Then view the EVK so the USB is at the ‘top’ and the characters are right-side-up.
Run the code using the (0,15) (15,0) FoV. Move your rulers in an out until you are convinced you are at the edge of the FoV. Mark the box with these edges.
Then run the code using the (5,15) (10,0) FoV. Again move the rulers in an out until you are convinced the FoV has moved “in”.
I get a pretty significant change in the ROI. It's about what I would expect.
My only worry is that an ROI change might not change immediately. If a range has started, it might only take effect after the range finishes.
Itamar -
查看您的数据,您没有“覆盖传感器的一半”。尽管有相当大的红外滤光片,传感器上的孔真的很小。
我试过这个实验。
我将传感器放在一个打开的盒子底部向上看。
这让我可以小心地放置目标。我用尺子作为目标。
我用了一个20厘米左右的盒子和13厘米高的盒子。但尺寸并不重要。
我标记了中心线和+/- 12.5度。
这允许我重复地将目标移入和移出视场(FoV)。统治者只是放在盒子的两侧。
代码如下:
void AutonomousLowPowerRangingTest(void)
{
uint32_t pMeasurementTimingBudgetMicroSeconds;
VL53L1_UserRoi_t Roi;
static VL53L1_RangingMeasurementData_t RangingData;
printf('自主测距测试 n');
status = VL53L1_WaitDeviceBooted(Dev);
status + = VL53L1_DataInit(Dev);
status + = VL53L1_StaticInit(Dev);
status + = VL53L1_SetPresetMode(Dev,VL53L1_PRESETMODE_LOWPOWER_AUTONOMOUS);
status + = VL53L1_SetDistanceMode(Dev,VL53L1_DISTANCEMODE_LONG);
status + = VL53L1_SetMeasurementTimingBudgetMicroSeconds(Dev,20000); // 8毫秒
status + = VL53L1_SetInterMeasurementPeriodMilliSeconds(Dev,100);
status + = VL53L1_GetMeasurementTimingBudgetMicroSeconds(Dev,& pMeasurementTimingBudgetMicroSeconds);
printf('时间预算=%d n',pMeasurementTimingBudgetMicroSeconds);
Roi.TopLeftX = 0;
Roi.TopLeftY = 15;
Roi.BotRightX = 15;
Roi.BotRightY = 0;
#if 1
Roi.TopLeftX = 5;
Roi.TopLeftY = 15;
Roi.BotRightX = 10;
Roi.BotRightY = 0;
#万一
status + = VL53L1_SetUserROI(Dev,& Roi);
status + = VL53L1_StartMeasurement(Dev);
如果(状态){
printf('你有点错误 n');
而(1);
}
做//中断模式
{
__WFI(); //等待中断 - 您也可以轮询
if(IntCount!= 0){
IntCount = 0;
status = VL53L1_GetRangingMeasurementData(Dev,& RangingData);
如果(状态== 0){
printf('%d,%d,%。2f,%。2f,%d n',RangingData.RangeStatus,RangingData.RangeMilliMeter,
RangingData.SignalRateRtnMegaCps / 65536.0,RangingData.AmbientRateRtnMegaCps / 65336.0,HAL_GetTick());
}
status = VL53L1_ClearInterruptAndStartMeasurement(Dev);
}
}
而(1);
我遇到的一个问题是理解协调系统。
假设(0,0)位置在芯片的左下角。 (15,15)在右上方。
然后查看EVK,使USB位于“顶部”,字符正面朝上。
使用(0,15)(15,0)FoV运行代码。移动你的统治者,直到你确信你在FoV的边缘。用这些边标记框。
然后使用(5,15)(10,0)FoV运行代码。再次移动统治者,直到你确信FoV已经“移入”。
我的投资回报率发生了很大变化。这是我所期待的。
我唯一担心的是ROI变化可能不会立即改变。如果范围已开始,则可能仅在范围结束后生效。
以上来自于谷歌翻译
以下为原文
Itamar -
Looking at your data, you didn't 'cover half the sensor'. Despite the rather large IR filter, the hole in the sensor is REALLY small.
I tried this experiment.
I placed my sensor in the bottom of an open box looking up.
This allows me to carefully place my targets. I used a ruler as a target.
I used a box 20cm on a side and 13cm tall. But the dimensions aren't really important.
I marked the centerline and +/- 12.5 degrees.
This allows me to move targets in and out of the Field of View (FoV) repeatably. The ruler simply rests on the sides of the box.
Code follows:
void AutonomousLowPowerRangingTest(void)
{
uint32_t pMeasurementTimingBudgetMicroSeconds;
VL53L1_UserRoi_t Roi;
static VL53L1_RangingMeasurementData_t RangingData;
printf('Autonomous Ranging Testn');
status = VL53L1_WaitDeviceBooted(Dev);
status += VL53L1_DataInit(Dev);
status += VL53L1_StaticInit(Dev);
status += VL53L1_SetPresetMode(Dev,VL53L1_PRESETMODE_LOWPOWER_AUTONOMOUS);
status += VL53L1_SetDistanceMode(Dev, VL53L1_DISTANCEMODE_LONG);
status += VL53L1_SetMeasurementTimingBudgetMicroSeconds(Dev,20000); // 8 ms
status += VL53L1_SetInterMeasurementPeriodMilliSeconds(Dev, 100);
status += VL53L1_GetMeasurementTimingBudgetMicroSeconds(Dev, &pMeasurementTimingBudgetMicroSeconds);
printf('Timing Budget = %dn', pMeasurementTimingBudgetMicroSeconds);
Roi.TopLeftX = 0;
Roi.TopLeftY = 15;
Roi.BotRightX = 15;
Roi.BotRightY = 0;
#if 1
Roi.TopLeftX = 5;
Roi.TopLeftY = 15;
Roi.BotRightX = 10;
Roi.BotRightY = 0;
#endif
status += VL53L1_SetUserROI( Dev, &Roi);
status += VL53L1_StartMeasurement(Dev);
if(status){
printf('YOU DID SOMETHING WRONG n');
while(1);
}
do // interrupt mode
{
__WFI(); // Wait For Interrupt - you could also poll
if(IntCount !=0 ){
IntCount=0;
status = VL53L1_GetRangingMeasurementData(Dev, &RangingData);
if(status==0){
printf('%d,%d,%.2f,%.2f,%dn', RangingData.RangeStatus,RangingData.RangeMilliMeter,
RangingData.SignalRateRtnMegaCps/65536.0,RangingData.AmbientRateRtnMegaCps/65336.0,HAL_GetTick());
}
status = VL53L1_ClearInterruptAndStartMeasurement(Dev);
}
}
while(1);
One issue I had was understanding the co-ordinate system.
Assume the (0,0) location is in the bottom left of the chip. (15,15) is in the upper right.
Then view the EVK so the USB is at the ‘top’ and the characters are right-side-up.
Run the code using the (0,15) (15,0) FoV. Move your rulers in an out until you are convinced you are at the edge of the FoV. Mark the box with these edges.
Then run the code using the (5,15) (10,0) FoV. Again move the rulers in an out until you are convinced the FoV has moved “in”.
I get a pretty significant change in the ROI. It's about what I would expect.
My only worry is that an ROI change might not change immediately. If a range has started, it might only take effect after the range finishes.
举报