carousel - Orient a toolchanger carousel using various encoding schemes
loadrt carousel pockets=N[,N]
encoding=ssss[,sss]
num_sense=N[,N] dir=N[,N]
-
pockets The number of pockets in each
toolchanger.
- Use up to 8 numbers separated by commas to create multiple
carousel components.
-
encoding The position encoding.
- gray, binary, bcd, index, edge, counts or single. Default =
'gray'
-
num_sense The number of position sense pins.
- Default = 4.
-
dir Set to 1 for unidirectional or 2 for
bidirectional operation.
- Default = bidirectional
-
parity Set to 1 for odd parity, 0 for even parity
checking.
- Default = 0 (even)
This component is intended to help operate various types of carousel-type
toolchangers.
The component can be configured to operate with binary, binary-coded decimal
(BCD) or gray-coded position feedback ('binary;, 'bcd' and 'gray' modes) It
can alternatively work with an individual sensor for each tool position
('single' mode) or with a sensor at each tool position and a separate index
('index' mode). Systems using a stepper motor or quadrature encoder are also
supported ('counts' mode).
edge is a special case of index mode for
tool changers with pockets on both the rising and falling edges of the
position sensor. (Seen on at least one Denford Orac.)
Both unidirectional and bidirectional systems are supported and those that
reverse against a stop when in position.
The number of carousel component instances created depends on the number of
entries in the 'pockets' modparam. For example
loadrt carousel pockets=10,10,8
Would create 3 carousel instances with 10, 10 and 8 pockets. The other
parameters are optional. If absent then defaults will be used. Any missing
entry will assume the previous value.
When the enable pin is set to true the component will immediately set the
"active" pin to true and then (for a bidirectional instance)
calculate the shortest path to the requested pocket number. The appropriate
motor direction output pins will then be set. Bit outputs for forward and
reverse are provided as well as a three-state velocity output for driving a DC
motor PWM or a velocity-mode stepgen.
The component will monitor the carousel position and, when the correct position
is reached, set the motor-control pins to 0, set "active" to 0 and
set "ready" to 1.
In 'index', 'edge' or 'counts'mode there is a need to find the initial home
position of the carousel. The first time that the "enable" pin is
set; the carousel will rotate forwards searching for a home signal. In 'index'
and 'edge' mode this is when both the index and pulse inputs are true. In
'counts' mode only the index input needs to be set to set home. Additionally
in 'counts' mode the usual index-enable logic of the encoder counters is
supported.
With some carousel designs the carousel will not stop immediately. To allow for
this set the
lign-dc pin to a low velocity to be used for a final
latching move, and set the
decel-time to a suitable value. Once the
decel-time has expired the carousel will, if it was moving forwards, reverse
back on to the position marker, off of the arker and then bak on to the FWD
edge. If moving in reverse it will continue off the marker and then reverse
slowly on to the FWD edge. This algnment is only possible with a motor-vel
controlled bidirectional carousel, Other combinations will be acepted but
probably won't have the desired behaviour. Some tuning will be needed of
align-dc and decel-time to achieve reliable operation.
In the unusual case that the index and pulse signals do not align it is possible
to use HAL logic to achieve the desired pin switching during homing.
Setting "enable" low does not halt the homing move, so if homing on
first tool change is not needed then the enable pin can be toggled by an axis
homing pin or a script and the homing process will continue even if that
driving signal resets during the carousel homing move.
To operate the component with an encoder or stepgen use mode "C". The
scale pin should be the number of steps or encoder counts between
pocket centres. The
width pin can be used to stop the motor some
distance before the centre of the pocket to allow the motor time to
decelerate.
For tool changers which lock the carousel against a stop the
rev-pulse
pin can be set to a non-zero value. The motor-rev pin will then be set for
this many seconds at the completion of the tool search and at the same time
the reverse duty/cycle velocity value will be sent to the motor-vel pin.
-
carousel.N (requires a floating-point
thread)
-
- carousel.N.pocket-number s32 in
- The pocket to move to when the .enable pin goes high. If
the value passed is higher than the number of pockets specified in the
"pockets" modparam then modulo arithmetic is used. This is
intended to allow the use of multiple tools in the same holder, as is
sometimes useful with lathes.
- carousel.N.enable bit in
- Set this pin high to start movement. Setting it low will
stop movement
- carousel.N.active bit out
- indicates that the component is active
- carousel.N.ready bit out
- This pin goes high when the carousel is in-position
- carousel.N.strobe bit in (default:
1)
- Use this pin to indicate that the position feedback is
valid. Often provided by binary encoders
- carousel.N.parity bit in
- Some encoders supply a parity bit, if this is connected
then the parity-error output bit will indicate parity errors
- carousel.N.sense-M bit in
(M=0..personality)
- Carousel position feedback pins. In 'index' mode there will
be only 2 pins. sense-0 is the index and sense-1 is the pocket
sensor.
- carousel.N.rev-pulse float in
- The duration in seconds for which a ratchet changer
(Boxford, Emco) should pulse the reverse pin to lock the holder
- carousel.N.fwd-dc float in
- Velocity or duty cycle when forwards rotation is
desired
- carousel.N.rev-dc float in
- Velocity or duty cycle when reverse rotation is
desired
- carousel.N.hold-dc float in
- Duty cycle when carousel is in-position (to hold against
stop)
- carousel.N.align-dc float in
- Use this pin to set the speed of a slower alignment move
once the changer is in position. Such a system almost certainly needs
decel-time setting too
- carousel.N.decel-time float in
- Time to wait for carousel to stop before final
alignment
- carousel.N.counts s32 in
- Connect to the rawcounts of an encoder or a stepgen in
'counts' mode
- carousel.N.scale s32 in (default:
100)
- The number of stepgen or encoder counts between successive
pockets
- carousel.N.width s32 in (default:
0)
- How far each side of the exact scale to signal a new
pocket
- carousel.N.home-offset s32 in (default:
0)
- The offset (in counts) between the index and pocket 1
- carousel.N.index-enable bit io
- Used to home to an encoder index
- carousel.N.jog-fwd bit in
- Jog the carousel forwards one tool position
- carousel.N.jog-rev bit in
- Jog the carousel in reverse (only if dir = 2). It is very
important that these pins should be debounced and should probably also be
interlocked to only operate when the machine is idle.
- carousel.N.motor-fwd bit out
- Indicates the motor should run forwards (bigger
numbers)
- carousel.N.motor-rev bit out
- Indicates the motor should run reverse.
- carousel.N.parity-error bit out
- Indicates a parity error
- carousel.N.current-position s32 out
- This pin indicates the current position feedback
- carousel.N.motor-vel float out
- The duty-cycle or velocity to drive a DC motor or
stepgen
- carousel.N.homed bit out (default:
0)
- Shows that homing is complete. Only used in index and edge
modes
- carousel.N.unhome bit in (default:
0)
- Should only really be necessary for testing
- carousel.N.state s32 r (default:
0)
- Current component state
- carousel.N.homing bit r (default:
0)
- Shows that homing is in progress. Only used for index
mode
- carousel.N.timer float r
- Shows the value of the internal timer
- carousel.N.motor-dir s32 r
- Internal tag for search direction
- carousel.N.debounce u32 r
- How many thread cycles to wait for the position to
stabilise
Andy Pugh
GPL