diff --git a/darkwater_640/PCA9685.py b/darkwater_640/PCA9685.py index 5619a2f..379ffb0 100644 --- a/darkwater_640/PCA9685.py +++ b/darkwater_640/PCA9685.py @@ -83,7 +83,7 @@ class PCA9685(object): self._device.write8(MODE1, mode1) time.sleep(0.005) # wait for oscillator - def set_pwm_freq(self, freq_hz): + def set_pwm_freq(self, freq_hz, correctionFactor=1.0): """Set the PWM frequency to the provided value in hertz.""" prescaleval = 25000000.0 # 25MHz prescaleval /= 4096.0 # 12-bit @@ -91,7 +91,7 @@ class PCA9685(object): prescaleval -= 1.0 logger.debug('Setting PWM frequency to {0} Hz'.format(freq_hz)) logger.debug('Estimated pre-scale: {0}'.format(prescaleval)) - prescale = int(math.floor(prescaleval + 0.5)) + prescale = round(prescaleval * correctionFactor + 0.5) logger.debug('Final pre-scale: {0}'.format(prescale)) oldmode = self._device.readU8(MODE1); newmode = (oldmode & 0x7F) | 0x10 # sleep diff --git a/darkwater_640/darkwater_640.py b/darkwater_640/darkwater_640.py index d828b2c..859ef22 100644 --- a/darkwater_640/darkwater_640.py +++ b/darkwater_640/darkwater_640.py @@ -293,12 +293,12 @@ class dw_Controller: ININ = 0 PHASE = 1 - def __init__(self, addr = 0x60, freq = 100): + def __init__(self, addr = 0x60, freq = 100, correctionFactor = 1.0): self._i2caddr = addr # default addr on HAT self._frequency = freq # default @1600Hz PWM freq # self.steppers = [ Adafruit_StepperMotor(self, 1), Adafruit_StepperMotor(self, 2) ] self._pwm = PCA9685(addr) - self._pwm.set_pwm_freq(self._frequency) + self._pwm.set_pwm_freq(self._frequency, correctionFactor) # Just gonna default to high for now GPIO.setmode(GPIO.BCM) GPIO.setwarnings(False)