Estoy tratando de hacer una frecuencia de 60 Hz, 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 configurar valores redondos, por lo que usaremos 102 como valor de preescalador, lo que genera una frecuencia de 59.8383884804
Pero con mi osciloscopio, un Tektronix TDS210 obtengo una frecuencia de 64.1Hz, no 59.84Hz
¿Cometí un error en alguna parte?
Según un viejo comentarista del foro de adafruit, el PCA9685 no es muy preciso. Por lo tanto, debe verificar y adaptar manualmente el valor del preescalador.
Mis cálculos son correctos según la página 25 de la hoja de datos y 102 debería generar una frecuencia de 59,84 Hz.
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 preescalador solo le brinda una estimación aproximada, tendrá que medir la realidad con un osciloscopio.
ver segunda publicación: https://forums.adafruit.com/viewtopic.php?f=19&t=72554
Azul = real, medido con mi osciloscopio
Rojo = de la fórmula de la hoja de datos
sombrereroloco
marcus muller
deslizadores_alfa
sombrereroloco