Configuración del prescaler del módulo PWM PCA9685

1

Estoy tratando de hacer una frecuencia de 60Hz, así es como lo hago:

    freq_hz = 60
    pca9685_frequency = 25000000.0 #pca9685 clock : 25Mhz
    pca9685_resolution = 4096.0 #12 bits resolution
    freq_in_step = pca9685_resolution*float(freq_hz)
    prescaleval = pca9685_frequency/freq_in_step
    print "prescaler value = {}".format(prescaleval)
    prescale = int(math.floor(prescaleval + 0.5))
    print "however only round values can be set so we wil use {} as a prescaler value".format(prescale)
    print "which makes a frequency of {}".format(pca9685_frequency/(prescale*pca9685_resolution))
    oldmode = self.pca9685_device.readU8(self.MODE1);
    newmode = (oldmode & 0x7F) | 0x10    # sleep
    self.pca9685_device.write8(self.MODE1, newmode)  # go to sleep
    self.pca9685_device.write8(self.PRESCALE, prescale)
    self.pca9685_device.write8(self.MODE1, oldmode)
    time.sleep(0.005)
    self.pca9685_device.write8(self.MODE1, oldmode | 0x80)

En la pantalla, el resultado es:

prescaler value = 101.725260417

Sin embargo, solo se pueden establecer valores redondos, por lo que usaremos 102 como un valor preescalador que hace una frecuencia de 59.8383884804

Pero con mi osciloscopio, un Tektronix TDS210 tengo una frecuencia de 64.1Hz, no 59.84Hz

¿Cometí un error en alguna parte?

enlace

    
pregunta sliders_alpha

1 respuesta

2

Desde el antiguo creador del foro adafruit, el PCA9685 no es muy preciso. Por lo tanto, debe verificar y adaptar manualmente el valor del prescaler.

Mis cálculos son correctos de acuerdo con la página 25 de la hoja de datos y 102 deben generar una frecuencia de 59.84Hz.

Sin embargo, mi medida de osciloscopio me da esto:

110 = 60.24Hz
111 = 59.52Hz

TL: DR; Debido a la baja precisión de este componente, el cálculo del prescaler solo le proporciona una estimación aproximada, tendrá que medir la cosa real con un osciloscopio.

vea la segunda publicación: enlace

Azul = real, medido con mi osciloscopio

Rojo = de la fórmula de la hoja de datos

    
respondido por el sliders_alpha

Lea otras preguntas en las etiquetas