Provided by: linuxcnc-uspace_2.9.4-2ubuntu1_amd64 bug

NAME

       carousel - Orient a toolchanger carousel using various encoding schemes

SYNOPSIS

       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)

DESCRIPTION

       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 align-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 marker and then back 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 alignment is  only  possible  with  a  motor-vel
       controlled  bidirectional  carousel,  Other  combinations  will be acepted but probably will not 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.  In mode "C" it is possible to use
       either  the  speed/direction control used in other modes or to use direct position mode using the counts-
       target pin. The internal scaling of the encoder or stepgen should be set to 1.0. A PID hal component will
       be needed for encoder applications whereas stepgen configurations can use a stepgen in  position  control
       mode or in velocity control mode with a PID.

       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.

FUNCTIONS

       carousel.N (requires a floating-point thread)

PINS

       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 and position check

       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: 10)
              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.counts-target float out
              Target position for a stepgen or external PID controller

PARAMETERS

       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.counts-offset s32 r
              Internal offset of index pin

       carousel.N.debounce u32 rw
              How many thread cycles to wait for the position to stabilise

       carousel.N.target s32 r
              Current target pocket, debug

       carousel.N.base-counts s32 r (default: 0)

AUTHOR

       Andy Pugh

LICENSE

       GPL

LinuxCNC Documentation                             2025-06-19                                        CAROUSEL(9)