Raspberry Pi Pico W+ADS1115+SCT-013-000电流检测数值偏差求助
电流监测数值偏低问题排查与解决
根据你的硬件配置和代码,数值偏低(约为实际值的1/3)的核心原因集中在参数设置错误和计算逻辑上,以下是逐一排查和修正方案:
1. 核心问题:maxVoltage参数设置错误
你的SCT-013-000电流互感器变比为100A:50mA,副边串联22Ω负载电阻,当原边达到最大100A时,副边电压应为:
V_max = I副边_max × R负载 = 0.05A × 22Ω = 1.1V
但你初始化ADC时传入的maxVoltage=3,这直接导致电流计算时的比例系数错误:
- 当前错误计算:
current = (100/3) × voltage - 正确计算应为:
current = (100/1.1) × voltage
修正方案:
将初始化代码中的maxVoltage改为1.1:
STC = ADC(STC_ADS,100,1.1,0,1)
2. 验证ADS1115的电压转换逻辑
需要确认ads1115.py中的raw_to_v函数是否正确处理了增益设置。当增益为1时,ADS1115的量程是±4.096V,每个原始采样值(16位有符号)对应的电压应为:
V_per_LSB = 4.096V / 32768 = 0.000125V (125μV)
如果库中的raw_to_v函数没有正确关联增益参数,会导致电压转换错误。可以手动验证:假设采样得到的原始有效值是8800(对应1.1V),raw_to_v(8800)应返回1.1V,若不符合则需修正库函数的转换逻辑。
3. 采样与有效值计算的优化
你的采样逻辑(累加平方值后求均方根)是正确的,但可以优化两点:
- 采样间隔
ADC_RATE=5ms,对于50Hz/60Hz交流电,120个采样点足够覆盖多个周期,无需调整。 - 确保
ADS.read_rev()返回的是A0-A1的差分采样值(有符号原始读数),若返回绝对值或单端值会导致平方累加错误。可在循环中临时打印原始值,确认范围是否符合预期(比如35A对应副边电压0.385V,原始值应为3080左右)。
4. 硬件连接的二次确认
- 确认电流互感器副边确实串联了22Ω电阻,未误接其他阻值(比如68Ω会导致数值差约3倍,需排除)。
- ADS1115的差分输入(A0-A1)连接正确,电流互感器两根线分别接A0和A1(接反仅影响数值正负,不影响有效值大小)。
修正后的关键代码示例
调整maxVoltage并修复main函数的错误:
def main(): while True: STC.read() amps = STC.getAmps() # 处理其他逻辑 i2c = machine.I2C(1, scl=machine.Pin(15), sda=machine.Pin(14)) STC_ADS = ADS1115(i2c,address=0x48, gain=1) # 修正maxVoltage为1.1 STC = ADC(STC_ADS,100,1.1,0,1) sleep(1) main()
内容的提问来源于stack exchange,提问作者captaincy
相关产品推荐
相关产品推荐

