Я пытаюсь сделать частоту 60 Гц, вот как я это делаю:
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)
На экране результат:
prescaler value = 101.725260417
однако можно установить только круглые значения, поэтому мы будем использовать 102 в качестве значения предварительного делителя, что дает частоту 59,8383884804.
Но с моим осциллографом Tektronix TDS210 я получаю частоту 64,1 Гц, а не 59,84 Гц.
Я где-то ошибся?
Судя по старому отзыву на форуме adafruit, PCA9685 не очень точен. Таким образом, вы должны вручную проверить и адаптировать значение предварительного делителя.
Мои расчеты верны в соответствии со страницей 25 таблицы данных, и 102 действительно должен генерировать частоту 59,84 Гц.
Однако мое измерение осциллографа дает мне следующее:
110 = 60.24Hz
111 = 59.52Hz
TL:ДР ; из-за низкой точности этого компонента вычисление предварительного делителя дает только приблизительную оценку, вам придется измерять реальную вещь с помощью осциллографа.
см. второй пост: https://forums.adafruit.com/viewtopic.php?f=19&t=72554
Синий = реальный, измерено моим осциллографом
Красный = из формулы таблицы данных
Безумный Шляпник
Маркус Мюллер
слайдеры_альфа
Безумный Шляпник