This is the same board used in the MouseAir project. It contains a PC9685 Module and has 4 pins for motor (2 DC motors or one stepper motor) control and 8 PWM pins for Servo motor control.

Code
You can download the PC9685 Driver as part of the MouseAir software release.
https://github.com/switchdoclabs/SDL_Pi_MouseAir
sys.path.append('./PCA9685Driver')
# Import the PCA9685 module.
from pca9685_driver import Device
# launch servo
pwm = Device(0x41)
# Set frequency to 60hz, good for pwm.
pwm.set_pwm_frequency(60)
#PC9685 - TB6612FNG
# PWM8 - PWMA
# PWM9 - AIN1
# PWM10 - AIN2
#
# PWM11 - BIN1
# PWM12 - BIN2
# PWM13 - PWMB
pwmA = 8
ain1 = 9
ain2 = 10
pwmB = 11
bin1 = 12
bin2 = 13
servo_max = 4095
# launch motors
def getStatistics():
return (0,0)
def setLaunchSpeed(Right, Left):
state.LaunchSpeedRight = Right
state.LaunchSpeedLeft = Left
def launchMotorsOn():
LSpeed = int((state.LaunchSpeedLeft/255.0)*servo_max)
RSpeed = int((state.LaunchSpeedRight/255.0)*servo_max)
print ('LSpeed, Rspeed', LSpeed, RSpeed)
pwm.set_pwm(pwmA, LSpeed )
pwm.set_pwm(ain1, 0)
pwm.set_pwm(ain2, servo_max)
time.sleep(1.0)
pwm.set_pwm(pwmB, RSpeed )
pwm.set_pwm(bin1, 0)
pwm.set_pwm(bin2, servo_max)
def launchMotorsOff():
pwm.set_pwm(pwmA, 0)
pwm.set_pwm(ain1, 0)
pwm.set_pwm(ain2, 0)
time.sleep(0.5)
pwm.set_pwm(pwmB, 0)
pwm.set_pwm(bin1, 0)
pwm.set_pwm(bin2, 0)
def set_servo_pulse(channel, pulse):
pulse_length = 1000000 # 1,000,000 us per second
pulse_length //= 60 # 60 Hz
print('{0}us per period'.format(pulse_length))
pulse_length //= 4096 # 12 bits of resolution
print('{0}us per bit'.format(pulse_length))
pulse *= 1000
pulse //= pulse_length
pwm.set_pwm(channel, pulse)
def launchServoStart():
# Move servo on channel O between extremes.
pwm.set_pwm(0, state.LaunchServoMin)
time.sleep(state.LaunchTimeForward)
pwm.set_pwm(0, 0 )
time.sleep(state.LaunchTimeDelay)
def launchServoRetract():
pwm.set_pwm(0, state.LaunchServoMax)
time.sleep(state.LaunchTimeBackward)
pwm.set_pwm(0, 0 )
time.sleep(state.LaunchTimeDelay)
def safeShuntdownServos():
pwm.set_pwm(0, servo_max)
time.sleep(state.LaunchTimeQuit)
pwm = Device(0x41)
def immediateShutDownServos():
pwm = Device(0x41)
Features
Downloads