Calibrar la corriente de ensayo en lazo cerrado
Por qué no basta con la lectura de la propia fuente
Una ley de control deliberadamente simple
Dónde encaja en la secuencia de ensayo
Un fragmento de la implementación
Tal cual del ejemplo desplegado en el Raspberry PLC 19R — cópialo libremente:
def calibrate(supply, target_a):
"""Trim the setpoint until the shunt current matches the target.
Returns (final_setpoint, measured_current, converged).
"""
setpoint = target_a # first approximation: setpoint = target
supply.set_current(setpoint)
t0 = time.time()
while time.time() - t0 < TIMEOUT_S:
measured = read_shunt_current()
error = target_a - measured
if abs(error) <= TOLERANCE_A:
return setpoint, measured, True # converged
# Fixed 0.1 A correction steps in the direction of the error
setpoint += STEP_A if error > 0 else -STEP_A
setpoint = max(0.0, min(setpoint, 220.0)) # XG limits
supply.set_current(setpoint)
time.sleep(PERIOD_S)
return setpoint, read_shunt_current(), False # timed out without convergingEl ejemplo completo es un programa entero — cabecera de conexionado, setup y bucle principal — listo para adaptar a tu aplicación.
Preguntas frecuentes
¿Por qué no usar un controlador PID?
Porque la planta es casi estática. La fuente mantiene su salida totalmente estable, así que un corrector de paso fijo con banda muerta converge rápido y nunca puede sobrepasar ni oscilar, lo que en un banco de certificación importa más que la velocidad.
¿Qué pasa si el bucle nunca converge?
El timeout de 5 s devuelve un flag de no convergencia. El banco lo trata como condición de aborto; normalmente significa que la muestra fundió durante la rampa, que hay una conexión abierta o que la fuente alcanzó su límite de compliance.
¿Qué precisión tiene la cadena de medida del shunt?
Un shunt de 60 mOhm de clase 0.5 leído en diferencial por un ADS1015 a ganancia 16 resuelve mejor que 0.1 A. Un factor de corrección final de 1.02, obtenido contra un medidor de referencia, absorbe el error residual de la cadena.