Geneva Drive

A geneva drive is a special gearset which outputs intermittent, indexed motion in response to a continuous rotation input.

How it Works
The motion of this mechanism is best explained by a video.

thumb|left|400px|A video of the prototyped geneva drive.

Advantages

 * Creates indexed motion from a continuous input
 * When in an indexed position, cannot be backdriven
 * Smoothly engages and disengages

Disadvantages

 * High tolerances required to fabricate a competition-level mechanism
 * The current design of the retaining plate (the apple-core shape) allows the mechanism to jam if backdriven during operation in one direction (but not the other). This should be fixable with a redesigned curve.

Fabrication Drawings
These drawings were printed at 1:1 scale, and used as a template to build the mechanism.



Challenges

 * Drilling the holes by hand: at least one of the shafts is not perfectly straight.

Equivalent Gear Computations
A python script was written to determine the effect of the geneva gears in a general gear system. The output speed and torque are reported relative to the inputs (the input speed is 1.0 and the input torque is 1.0).

Conclusions
The specifications of the prototype mechanism were used as a test case. During the driven portion of the cycle, the output speed and torque remained relatively close to the input, varying from roughly 0.8 to 1.2. However, due to the duty cycle, the average speed was only 47% of that of the input.

Further experimentation has revealed that these values vary wildly with the geometry of the geneva system. However, several trends emerged:
 * As center_dist approaches pin_radius, output torque decreases and output speed increases (as expected)
 * As pins approaches slots, the the average speed increases (due to the higher duty cycle).
 * As slots increases, the system becomes more gearlike, and variances in the output torque and speed decrease

Program
The python script used to evaluate the performance of the geneva drive systems. Note that as written, the script requires the pylab module (not installed by default). However, this module is only used for generating the plots, and the program will run sucessfully if the import and plotting lines are removed (lines 6 and 88-end). from math import pi, sin, cos, atan2, sqrt from pylab import * DT = 0.0002 class supply: speed = 1.0 # rad/s torque = 1.0 # Nm class g: # geometry slots = 5 pins = 2 pin_radius = 0.03 # m    center_dist = 0.054 # m     drive_angle = 2*pi/float(slots) # rad t = [0] theta = [-pi] # angle of drive wheel phi = [-pi] # angle of geneva gear speed = [0] torque = [0] def rotate(start, change): return atan2(sin(start+change),cos(start+change)) sectors = [] for i in range(0, g.pins): begin = i*2*pi/float(g.pins)-pi sectors += [ [begin, begin+g.drive_angle] ] def driveMode(angle): # move angle to local angle = rotate(angle, 0) for sec in sectors: if angle > sec[0] and angle < sec[1]: return True return False previous_drive = False while phi[-1] < pi: # update position of drive wheel theta += [rotate(theta[-1],DT*supply.speed)] # check drive status if driveMode(theta[-1]): # check if previously not driving if previous_drive == False: gamma = g.drive_angle / 2.0 previous_drive = True # x is the distance from the center of the geneva to the pin at the current time x = sqrt(g.pin_radius**2 + g.center_dist**2 - 2 * g.pin_radius * g.center_dist * cos(abs(gamma))) gear = x / float(g.pin_radius) # equivalent gear ratio # compute new speed, torque of geneva gear speed += [supply.speed / float(gear)] torque += [supply.torque * float(gear)] # update geneva gear position phi += [phi[-1]+supply.speed*DT/float(gear)] gamma -= DT*supply.speed else: previous_drive = False speed += [0] torque += [0] phi += [phi[-1]] # update time t += [t[-1]+DT] avg_speed = sum(speed)/float(len(speed)) print "Final Time:", t[-1] print "Average Speed:", avg_speed figure(1) plot(t,phi) xlabel('Time (sec)') ylabel('Geneva Wheel Position (rad)') title('Geneva Wheel Position vs Time') figure(2) plot(t,speed,t,torque) xlabel('Time (sec)') ylabel('Output Speed, Torque') title('Output Speed, Torque vs Time') legend(['speed', 'torque']) figure(3) plot(phi, speed, phi, torque) xlabel('Geneva Wheel Position (rad)') ylabel('Output Speed, Torque') title('Output Speed, Torque vs Geneva Wheel Position') legend(['speed', 'torque']) show
 * 1) !/usr/bin/env python
 * 2) Geneva system equivalent gear calculator
 * 3) Jay J
 * 4) All units are standard SI (kg,m,s)
 * 1) INPUTS ###
 * 1) Initialization ###
 * 1) create drive sectors ###
 * 1) main computation loop ###
 * 1) complete computations for 1 revolution of the geneva wheel
 * 1) CREATE PLOTS ###