Compré el Syren 10A para conducir un elemento Peltier usando python y una frambuesa-pi cero + Fuente de alimentación de 12V.
Después de leer y hablar, llegué a la conclusión de usar el controlador en el modo de tiempo de espera a prueba de fallos de R / C donde los pines 1 y 6 están abajo.
Suponiendo (porque no puedo determinarlo a lo largo del pdf) que el controlador necesita 50Hz para el PWM, y se basa en la siguiente oración en la página 11.
Un pulso de 1500us es velocidad cero, un pulso de 1000 us está totalmente invertido y 2000 us pulso está lleno hacia adelante
Calculé los ciclos de trabajo de la siguiente manera:
For full reverse 1000usec = 1msec pulse width is needed. So 1msec is 1 / 20 = 5% of the duty cycle
For stop 1500usec = 1.5msec is needed. So 1.5msec is 1.5 / 20 = 7.5% of the duty cycle
For full forward 2000usec = 2msec pulse width is needed. So 2msec is 2 / 20 = 10% of the duty cycle
Entonces, para probarlo, utilicé el siguiente script de Python y cada vez que cambié el ciclo de trabajo.
import RPi.GPIO as GPIO
import time
servoPIN = 18
GPIO.setmode(GPIO.BCM)
GPIO.setup(servoPIN, GPIO.OUT)
p = GPIO.PWM(servoPIN, 50) # GPIO 18 for PWM with 50Hz
# DUTY CYCLE DESCRIPTION
# FULL FORWARD 10%
# FULL REVERSE 5%
# STOP 7.5%
p.start(10)
try:
while True:
p.ChangeDutyCycle(10)
time.sleep(3)
except KeyboardInterrupt:
p.stop()
GPIO.cleanup()
Cuando se ejecutó el script, medí con un multímetro el voltaje entre los encabezados M1 y M2 del controlador y aquí están los resultados:
@5% of Duty Cycle gives -12V
@7.5% of Duty Cycle gives -6 V
@10% of Duty Cycle gives 0V
Mientras que lo que esperaba ver es:
@5% of Duty Cycle to give -12V
@7.5% of Duty Cycle to give 0 V
@10% of Duty Cycle to give 12V
¿Por qué no estoy obteniendo lo que esperaba? ¿Estoy haciendo algo mal con los cálculos / suposiciones? Ten en cuenta que soy algo nuevo en el mundo de la electrónica y tal vez me haya perdido algo.
EDITAR (usando pigpio lib):
Así que después de las indicaciones de JRE para usar la biblioteca pigpio, escribí ese sencillo código debajo de python.
import time
import pigpio
servoPIN = 18
pi = pigpio.pi()
print("Turning it off")
pi.set_servo_pulsewidth( servoPIN, 1500)
time.sleep(10)
print("Trying 1000 [FULL REVERSE] ")
pi.set_servo_pulsewidth( servoPIN, 1000)
time.sleep(10)
print("Trying 1500 [OFF]")
pi.set_servo_pulsewidth( servoPIN, 1500)
time.sleep(10)
print("Trying 2000 [FULL FORWARD]")
pi.set_servo_pulsewidth( servoPIN, 2000)
time.sleep(10)
pi.stop()
Y algo curioso sucedió.
Las primeras veces que lo ejecuté obtuve resultados inesperados como:
@1000 gave me 0V
@1500 gave 12V
@2000 gave 6V
Luego desconecto el controlador, lo vuelvo a conectar y vuelvo a ejecutar el script donde
@1000 gave me -12V
@1500 gave 0V
@2000 gave 12V
como se esperaba !! Wow, pensé. Luego vuelvo a desconectar y enchufar el controlador y, mientras ejecutaba el script, dio algo diferente.
@1000 gave me 0V
@1500 gave 12V
@2000 gave 12V
Entonces, ¿qué está pasando? ¿Por qué conectar y desconectar el controlador cambia el comportamiento?