工具与软件:
我将使用 OPT4060来尝试测量 PAR。 但是、当我尝试根据已知0.1%精度的传感器校准传感器时、当范围自动调整时、会产生明显的频段。 数据表中指出应考虑这些因素、因此我希望我出错了。
由于在自动量程模式下无法读取传感器的当前范围状态、因此我无法在不创建自己的自动量程程序的情况下轻松地解决该问题。 如果您有任何建议、请告诉我、否则我是否能够了解每个给定范围的响应曲线?
提前感谢您的帮助
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
工具与软件:
我将使用 OPT4060来尝试测量 PAR。 但是、当我尝试根据已知0.1%精度的传感器校准传感器时、当范围自动调整时、会产生明显的频段。 数据表中指出应考虑这些因素、因此我希望我出错了。
由于在自动量程模式下无法读取传感器的当前范围状态、因此我无法在不创建自己的自动量程程序的情况下轻松地解决该问题。 如果您有任何建议、请告诉我、否则我是否能够了解每个给定范围的响应曲线?
提前感谢您的帮助
尊敬的 Regan:
感谢您提供更多信息! 需要回答其他几个问题、以便我理解:
-上述数据中显示的是哪个传感器通道? CH0、CH1、CH2、CH3?
- OPT4060的 Y 轴上的单位是什么? 是否转换为 ADC 代码? 似乎情况并非如此、因为趋势似乎是对数。 您能否使用以下公式转换为 ADC 代码?


这些值从结果寄存器中检索:


看起来您只是将输出寄存器绘制为十进制值、而没有进行上述计算、从而产生图中所示的行为。
谢谢!
Daniel
尊敬的 Regan:
从您在上面分享的映像中、ADC 代码计算似乎没有在您的程序中正确实现。 我可以问问您要从哪些寄存器中读取来实现这个图吗?
我在上面分享的上述计算考虑了范围变化、应该会产生一个没有这种分级行为的线性图。
似乎您正在读取 MANTISSA 位、这些位将递增、直到进入另一个范围、此时 MANTISSA 将复位。 考虑到这一点、您必须将尾数位乘以2^指数值。
如果您可以共享执行该转换的部分代码、则对调试也可能有帮助。
谢谢!
Daniel
Daniel、您好!
是的、我很抱歉、我发现我在随后的代码片段中错误地对结果数据应用了一个掩码。 我在下面附上了转换函
# Extract register address and bit range
address = reg_info['address']
bits = reg_info['bits']
# Read the two bytes from the register (case of reading color data)
if isinstance(address, tuple):
# Read 2 bytes from 0x00 (MSB)
msb_data = self.i2c.readfrom_mem(self.device_address, 0x00, 2)
result_exponent = (int.from_bytes(msb_data, 'big') >> 12) & 0x0F # Extract bits 15-12
result_msb = int.from_bytes(msb_data, 'big') & 0x0FFF # Mask to keep bits 11-0
# Read 1 byte from 0x01 (LSB)
result_lsb = self.i2c.readfrom_mem(self.device_address, 0x01, 1)[0] # Read bits 15-8
# Combine into a 20-bit value
mantissa = (result_msb << 8) | result_lsb # Shift MSB left by 8 and OR with LSB
# Exctract adc codes
data = (mantissa<<result_exponent)
虽然这现在产生了更加一致的关系、但它仍然不像您预期的那样是线性的。 我在下面附上了最新的图表

再次感谢、
REGAN