Home
        Part I Integrators Manual
         Contents
1.                                                                       make_pulses                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               freggen 0                               STEP TYPE  2  14       l        l  x   position  lt p I  i rawcounts  l count  counter a  dn je  counts e latch l La wie i     count      l  e step        I steplen  Pea Se stepspace     update_fre  date eal  I dirsetup  frequency m   step dir    dirhold z  logic  maxireg l maxaccel q r    frequenc   velocity scale      l    genstator TT  1    1 Id  velocity    09 a l ramp e  i   count  i     l  1 STEP TYPE   0  freggen 0 i     capture_position   I make_pulses    position scale            position bx  I y  y i ali a  up  i rawcounts    counter   HA down  counts rt latch l   upan  l count fe     I  l  f                       j  update_freq   i  frequency          Aa  maxited   maxaccel  vay eae H jl raueney     up dn  velocity    l ramp p    count        1 STEP TYPE   1  freggen 0  I  capture_position   I make_pulses    posit
2.                                                                      AA Dar D A AN  alel Pori Commecror  IN1 GND alc Bioware  y  yo l Jack  gt   3 ING  OUT8 OUTO  5 IN6 ACEX FPGA  OUTS OUT     GND  OUT4 OUT5  LED OUT2 0UT3  INO STO ST1 GND DIR3 ST3 IN9 VCC IN10 IN12 IN14 IN15 OUTO ut OUTI  DIRO GND DIR1 DIR2 ST2 GND IN8 VCC GND 1N11 IN13 GND our DUTH OUTA                                        Figure 16 4  Pluto Step Timings    dirtime dirtime       stepspace  steplen   stepspace                   STEP f N N SN  DIRECTION         CHAPTER 16  HARDWARE DRIVERS 147    16 10 4 HAL Functions  Pins and Parameters    A list of all    loadrt    arguments  HAL function names  pin names and parameter names is in the  manual page  pluto_step 9     Chapter 17    Halui    17 1 Introduction    Halui is a HAL based user interface for EMC  it connects HAL pins to NML commands  Most of  the functionality  buttons  indicators etc   that is provided by a traditional GUI  mini  Axis  etc    is  provided by HAL pins in Halui     The easiest way to use halui is to modify your ini file to include  HALUI   halui  in the  HAL  section     17 2 Halui pin reference    17 2 1 Machine    e  317  halui machine on   pin for requestiong machine on  e  317  halui machine off   pin for requesting machine off    e  817  halui machine is on   indicates machine on    17 2 2 E Stop    e  317  halui estop activate   pin for requesting E Stop  e  317  halui estop reset   pin for requesting E Stop reset    e  317  h
3.                                                            J   y    hay                                              parport 0  configured as input                                                                                                                                                                                                                                                                                                                                                                            LX L     3 3  3    3  S e E a  S       lt    SE NE LE eE   Elo    gt  5 lelsllns llos es y    3  fs  E  Ss  gt    S      En    s e  slo  sy    E   E  A  E al   ale A os  ale we 7  e  L  DCSAOSCGOGOOCOOG  SY ASAS EY A  Y EY A NAS  QDAOOQQOOQOLIOCIE O   i     co   mM N j         E IN  lt  Re IN   a A  2 IN  o 3 iZ la ll ll ll bl bl ll ll ll ll Ll  5 3 if ae AA  a v    2 z c   z c c     x E E     a 2 E  3  E  28 E aU E El a a  E  2  S INICIA CIMEINE   gt  E pa be   io    Ed N   2 as    Sl El       fal  s S           8    8 8   fs  3  El E ll ls ls  3 da fa  a a 3   gt  co    lt o Lo   m N ES         a    ja isl a fa   a  fa  a a fg  fa                                                                                                                                        Figure 16 1  Parport Block Diagram    CHAPTER 16  HARDWARE DRIVERS 128    16 1 4 Functions    e  FUNCT  parport  lt portnum gt  read  Reads physical input pins of port  lt portnum gt  and up   dates HAL  in and  i
4.                                                      o   o            co   Lo    lt     e    SN   o   oO   wi  lt  faa      o o  wn wn   E oO oO   a    lt    ii oa a   E   N                o   o   co       Ko   wo    lt     ma   N   o   E   wi  lt  faa      o o  N N    i Z Z   a   5 a a       mn                         Figure 15 6  Five Phase Step Types    CHAPTER 15  INTERNAL COMPONENTS 115    15 2 PWMgen    This component provides software based generation of PWM  Pulse Width Modulation  and PDM   Pulse Density Modulation  waveforms  It is a realtime component only  and depending on CPU  speed  etc  is capable of PWM frequencies from a few hundred Hertz at pretty good resolution  to  perhaps 10KHz with limited resolution     15 2 1 Installing  emc2  halcmd loadrt pwmgen output_type  lt config array gt      lt config array gt  is a series of comma separated decimal integers  Each number causes a single  PWM generator to be loaded  the value of the number determines the output type  For example     emc2  halcmd loadrt pwmgen step _type 0 1 2    will install three PWM generators  The first one will use output type    0     PWM only   the next uses  output type 1  PWM and direction  and the last one uses output type 2  UP and DOWN   There  is no default value  if  lt config array gt  is not specified  no PWM generators will be installed  The  maximum number of frequency generators is 8  as defined by MAX_CHAN in pwmgen c   Each  generator is independent  but all are updated by 
5.                                                m5i20 card connector P4 Function HAL pin Secondary Function HAL pin   1 in 16 enc 00 index mask  3 in 17 enc 01 index mask  5 in 18 enc 02 index mask  7 in 19 enc 03 index mask  9 in 20   11 in 21   13 in 22   15 in 23   17 in 24 enc 04 index mask  19 in 25 enc 05 index mask   21 in 26 enc 06 index mask   23 in 27 enc 07 index mask   25 in 28   27 in 29   29 in 30   31 in 31   33 out 08   35 out 09   37 out 10   39 out 11   41 out 12   43 out 13   45 out 14   47 out 15   49 Power  5 V  or  3 3V      all even pins Ground          16 5 4 4 LEDs    136    The status LEDs will monitor one motion channel set by the m5i20  lt board gt  1led view parameter   A call to m5i20  lt board gt  misc update is required to update the viewed channel                                         LED name Output  LEDO IRQLatch    LED1 enc  lt channel gt  A  LED2 enc  lt channel gt  B  LED3 enc  lt channel gt  index  LED4 dac  lt channel gt  DIR  LED5 dac  lt channel gt   LED6 dac  lt channel gt  enable  LED7 watchdog timeout            16 6 Vital Systems Motenc 100 and Motenc LITE    The Vital Systems Motenc 100 and Motenc LITE are 8  and 4 channel servo control boards  The  Motenc 100 provides 8 quadrature encoder counters  8 analog inputs  8 analog outputs  64  68    digital inputs  and 32 digital outputs  The Motenc LITE has only 4 encoder counters  32 digital  inputs and 16 digital outputs  but it still has 8 analog inputs and 8 analog outputs  The d
6.             ma                4 4 3 8 HOME SEQUENCE so cece cnrs  lt  lt   ee e   DAG ho meee tage t hace neat ne ead haa bee ede ee dee de i  4 5 1 DCTS PIE 0 a Boe e Bo ew a OP AO ale ao 4    5 EMC2 and HAL    5 1    5 2    5 3    motion  realtime  s RR Re ew DL ee eae  5 1 1 P A wk Ge ER A A A RR AAA Se a  5 1 2 ec A Et GS  oe es ye Ss a Ae a ia  Sus ta   6 eee ae es ee a OG me a aE  Ge wl  axis N  realtime     ek ee a kada eke we ee a ewe we es a  5 2 1 Ping AAA  5 2 2 POPE  eG See OE ERO ae eee Oe A A a ee  iocontrol  us  rspace    reco RR a AR A Ea a eae ba hd Pa bw hoa Ge  Add a a A AA    VI HAL Specifics    6 Introduction    6 1    6 2  6 3    6 4    WITT HAL  a a AAA E A A A SEES bE wh  6 1 1 HAL is based on traditional system design techniques                   6 111 PASA rr Me we we RR   6 1 1 2 Interconnection DESEA coo    200 e a eee Res   6 1  1 3 TIME AION  o eor k o ce ee Bo a we OP ee  a s we ew Ae   61 14 TEB  DE coi osorno O Oe Be   aa   6 1 2 oa A E we a ee ee  HAL CONCEPTS  sis RE A OR BG A HR ee ae wa ee  HAL COMORES   vido at Re SRSA SHEE a a oe eA Se le a  6 3 1 External Programs with HAL Books  s o 0 0526  e bee Re dw ek ew  6 3 2 Internal Components caos a HERDER Oe wees  6 3 3 Hardware Drivers  co fa we ee a oe a ae ee ee a  6 3 4 Tools and VOTES  lt  lt  dios a ER oe Ow A a Be ee ee a  Tinkertoys  Erector Sets  Legos and the HAL                             31  31  33  33  33  33  33  33  34  34    35  35  35  36  36  36  36  37  38  38    39    CON
7.       user manual                             net homeswitches  lt   parport 0 pin 10 in  net homeswitches   gt  axis 0 home sw in  net homeswitches   gt  axis 1 home sw in             net homeswitches   gt  axis 2 home sw in                   Sample separate limit switches on the X axis  axis 0                          net X neg limit parport 0 pin 11 in   gt  axis 0 neg lim sw in  net X pos limit parport 0 pin 12 in   gt  axis 0 pos lim sw in                      Just like the shared home switches example  you can wire together  limit switches  Beware if you hit one  EMC will stop but can t tell  you which switch axis has faulted  Use caution when recovering from this                                                     net Xlimits parport 0 pin 13 in   gt  axis 0 neg lim sw in axis 0 pos lim sw in       The files starting with         are comments  and their only purpose is to guide the reader through the  file     13 3 2 Overview of the standard_pinout hal    There are a couple of operations that get executed when the standard_pinout hal gets executed    interpreted     CHAPTER 13  BASIC CONFIGURATIONS FOR A STEPPER BASED SYSTEM 100    p       The Parport driver gets loaded  see 16 1 for details      The read  amp  write functions of the parport driver get assigned to the Base thread 3    The step  amp  direction signals for axes X Y Z get linked to pins on the parport     Further IO signals get connected  e stop loopback  toolchanger loopback     a A o N      A spindle On
8.      CHAPTER 18  VIRTUAL CONTROL PANELS 158    18 5 8 Spinbox    Spinbox controls a FLOAT pin  You increase or decrease the value of the pin by  resolution  by either  pressing on the arrows  or pointing at the spinbox and rolling your mouse wheel      lt spinbox gt    lt halpin gt  my spinbox  lt  halpin gt    lt min_ gt  12 lt  min_ gt    lt max_ gt 33 lt  max_ gt    lt resolution gt 0 1 lt  resolution gt    lt format gt  2 3f  lt  format gt    lt font gt   Arial  30  lt  font gt     3 200      18 5 9 Scale    Scale controls a FLOAT pin  You increase or decrease the value of the pin be either dragging the  slider  or pointing at the scale and rolling your mouse wheel      lt scale gt    lt halpin gt  my scale  lt  halpin gt    lt resolution gt 0 1 lt  resolution gt    lt orient gt HORIZONTAL lt  orient gt    lt min_ gt  33 lt  min_ gt    lt max_ gt 26 lt  max_ gt     lt  scale gt        18 5 10 Jogwheel    Jogwheel mimics a real jogwheel by outputting a FLOAT pin which counts up or down as the wheel  is turned  either by dragging in a circular motion  or by rolling the mouse wheel      lt jogwheel gt    lt halpin gt  my wheel  lt  halpin gt    lt cpr gt 45 lt  cpr gt    lt size gt 250 lt  size gt    lt  jogwheel gt     CHAPTER 18  VIRTUAL CONTROL PANELS 159       18 6 pyVCP Container reference    Containers are widgets that contain other widgets     18 6 1 Hbox  Use a Hbox when you want to stack widgets horizontally next to each other      lt hbox gt    lt label gt  lt text
9.      Pe Jo Dec                      24 4 2 The Section Display window    Most of the buttons are self explanitory   The config button is not used in EMC     The symbols button will display an editable list of symbols for the variables  eg you can name the  inputs  outputs  coils etc      The symbols window will display the HAL signal names if present for  I   Q and  W variables   The quit button will only shut down the display the ladder program will still run in the back ground     The check box at the top right allows you to select whether variable names or symbol names are  displayed    CHAPTER 24  CLASSICLADDER 186    Figure 24 2  ClassicLadder Section Display window  E  Section Display  E                   24 4 3 The Section Manager window    This window allows you to name  create or delete sections  This is also how you name a subroutine  for call coils     Figure 24 3  ClassicLadder Section Manager window    EJ Sections Manager fa acu aaa     Section Name Language Type debug      Add section    Delete section                24 4 4 The Editor window    Starting from the top left image     E     D a F WwW N      SELECTOR ARROW  ERASER     N O   N C    RISING EDGE  FALLING EDGE CONTACTS      HORIZONTAL  VERTICAL   HORIZONTAL RUNNING CONNECTIONS    TIMER  MONOSTABLE  COUNTER  COMPARE     N O  COIL  N C  COIL  SET COIL  RESET COIL     JUMP COIL  CALL COIL  OPERATE    CHAPTER 24  CLASSICLADDER 187    Figure 24 4  ClassicLadder Editor window         ok               m  O O   
10.      Ubuntu is released regularly and predictably  a new release is made every six months  You  can use the current stable release or help improve the current development release     e The Ubuntu community is entirely committed to the principles of free software development   we encourage people to use open source software  improve it and pass it on     2 2 EMC2 Live CD    The EMC2 team now has a custom Live CD based on Ubuntu 6 06 and 8 04 that will let you try out  EMC2 before installing  and it   s also the easiest way to install Ubuntu and EMC2 together     Just download the ISO from www linuxenc org and burn it to a CD     When you boot the CD on your machine  you can see and experiment with the exact environment  and EMC2 software that you will have if you choose to install it     If you like what you see  just click the Install icon on the desktop  answer a few questions  your  name  timezone  password  and the install completes in a few minutes     This install gives you all the benefits of the community supported Ubuntu distribution as well as  being automatically configured for EMC2  As new Ubuntu updates or EMC2 releases are made  the  Update manager will let you know and allow you to easily upgrade        l Ubuntu    is an ancient African word  meaning    humanity to others     Ubuntu also means    I am what I am because of  who we all are     The Ubuntu Linux distribution brings the spirit of Ubuntu to the software world  You can read more about  it at http    ww
11.      halcmd  start  Now the signal generator is running  Let s look at its output pins   halcmd  show pin    Component Pins   Owner Type Dir Value Name       32769 float OUT 2 12177e 01 siggen 0 cosine  32769 float OUT  5 64055e 01 siggen 0 sawtooth  32769 float OUT 9 79820e 01 siggen 0 sine  32769 float OUT  1 00000e 00 siggen 0 square  32769 float OUT 1 28110e 01 siggen 0 triangle   halcmd  show pin   Component Pins    Owner Type Dir Value Name  32769 float OUT 5 19530e 01 siggen 0 cosine  32769 float OUT 6 73893e 01 siggen 0 sawtooth  32769 float OUT  8 54452e 01 siggen 0 sine  32769 float OUT 1 00000e 00 siggen 0 square  32769 float OUT 3 47785e 01  siggen 0 triangle       CHAPTER 7  HAL TUTORIAL 51    We did two show pin commands in quick succession  and you can see that the outputs are no  longer zero  The sine  cosine  sawtooth  and triangle outputs are changing constantly  The square  output is also working  however it simply switches from  1 0 to  1 0 every cycle     7 3 4 Changing parameters    The real power of HAL is that you can change things  For example  we can use the setp command  to set the value of a parameter  Let s change the amplitude of the signal generator from 1 0 to 5 0     halcmd  setp siggen 0 amplitude 5  emc2     Check the parameters and pins again     halcmd  setp siggen 0 amplitude 5                      halcmd  show param   Parameters    Owner Type Dir Value Name  32769 float RW 5 00000e 00 siggen 0 amplitude  32769 float RW 1 00000e 00 siggen
12.     Pgain     Proportional gain   Igain     Integral gain   Dgain     Derivative gain     bias     Constant offset on output    FFO     Zeroth order feedforward   output proportional to command     FF1     First order feedforward   output proportional to derivative of     FF2     Second order feedforward   output proportional to 2nd deriva     tive of command  acceleration          eo  F  eo  F  e  F  eo  F  eo  F  o  F  eo  F    LOAT   LOAT   LOAT   LOAT   LOAT   LOAT     LOAT     pid  lt    pid   pid   pid   pid   pid     pid      lt 1     lt     Loopnum gt     loopnum gt    loopnum gt    loopnum gt     loopnum gt            loopnum gt      oopnum gt        deadband     Amount of error that will be ignored  maxerror     Limit on error   maxerrorl     Limit on error integrator  maxerrorD     Limit on error derivative    maxcmdD     Limit on command derivative    maxcmdDD     Limit on command 2nd derivative       maxoutput     Limit on output value    All of the max     limits are implemented such that if the parameter value is zero  there is no limit     If debug 1 was specified when the component was installed  four additional parameters will be  exported     e  FLOAT  pid   e  FLOAT  pid   e  FLOAT  pid     e  FLOAT  pid      lt L     lt      lt L     lt     loopnum gt        loopnum gt      15 4 5 Functions    oopnum gt      oopnum gt      error      Integral of error    errorD     Derivative of error   commandD     Derivative of the command     commandDD     2nd derivati
13.     create a signal for the estop loopback  net estop loop iocontrol 0 user enable out iocontrol 0 emc enable in            create signals for tool loading loopback  net tool prep loop iocontrol 0 tool prepare iocontrol 0 tool prepared  net tool change loop iocontrol 0 tool change iocontrol 0 tool changed                  connect  spindle on  motion controller pin to a physical pin  net spindle on motion spindle on   gt  parport 0 pin 09 9 out       INote  we are only presenting one axis to keep it short  all others are similar   2Refer to section 16 1 for additional information    CHAPTER 13  BASIC CONFIGURATIONS FOR A STEPPER BASED SYSTEM 99                You might use something like this to enable chopper drives when machine ON  the Xen signal is defined in core_stepper hal                                  net Xen   gt  parport 0 pin 01 out             If you want active low for this pin  invert it like this                             setp parport 0 pin 01 out invert 1                A sample home switch on the X axis  axis 0   make a signal   link the incoming parport pin to the signal  then link the signal  to EMC   s axis 0 home switch input pin                                        net Xhome parport 0 pin 10 in   gt  axis 0 home sw in                Shared home switches all on one parallel port pin   that   s ok  hook the same signal to all the axes  but be sure to  set HOME_IS_SHARED and HOME_SEQUENCE in the ini file  See the                                        
14.     loadrt classicladder_rt addf  classicladder 0 refresh servo thread       24 3 2 Variables    It is possible to configure the number of each type of ladder object while loading the classicladder  realtime module  If you do not configure the number of ladder objects ClassicLadder will use the  default values     Table 24 1  ClassicLadder realtime component options                                                                Object name  variable name  Default value   Number of rungs  numRungs  100  Number of bits  numBits  500  Number of word variables  numWords  100  Number of timers  numTimers  10  Number of monostables  numMonostables  10  Number of counters  numCounters  10  Number of hal inputs bit pins  numPhysInputs  15  Number of hal output bit pins  numPhysOuputs  15  Number of arithmetic expressions    numArithmExpr  50  Number of sections  numSections  10  Number of symbols  numSymbols  100  Number of S32 inputs  numS32in  0  Number of S32 outputs  numS32out   0           Ifyou do not configure the number of ladder objects classicladder will use the default values  Objects  of most interest are numPhysInputs and numPhysOutputs     Changing these numbers will change the number of HAL bit pins available     For example     loadrt classicladder_rt numRungs 12 numBits 100 numWords 10 numTimers 10  numMonostables 10 numCounters 10 numPhysInputs 10 numPhysOutputs 10  numArithmExpr 100 numSections 4 numSymbols 200       24 3 3 Loading the ClassicLadder user module  Th
15.    134    If you are using in 00 to in 11 as general purpose IO then reading enc  lt 4 7 gt  will produce some    random junk number     CHAPTER 16  HARDWARE DRIVERS                                                                                                 m5i20 card connector P3 Function HAL pin Secondary Function HAL pin   1 in 00 enc 04 A input   3 in 01 enc 04 B input   5 in 02 enc 04 index input  7 in 03 enc 05 A input   9 in 04 enc 05 B input  11 in 05 enc 05 index input  13 in 06 enc 06 A input  15 in 07 enc 06 B input  17 in 08 enc 06 index input  19 in 09 enc 07 A input  21 in 10 enc 07 B input  23 in 11 enc 07 index input  25 in 12  27 in 13  29 in 14  31 in 15  33 out 00  35 out 01  37 out 02  39 out 03  41 out 04  43 out 05  45 out 06  47 out 07  49 Power  5 V  or  3 3V      all even pins Ground          16 5 4 3 Connector P4    135    The index mask masks the index input of the encoder so that the encoder index can be combined  with a mechanical switch or opto detector to clear or latch the encoder counter only when the  mask input bit is in proper state  selected by mask polarity bit  and encoder index occurs  This  is useful for homing  The behaviour of these pins is controlled by the Counter Control Register   CCR   however there is currently no function in the driver to change the CCR  See REGMAP4   for a    description of the CCR         emc2 src hal drivers m5i20 REGMAP4E    CHAPTER 16  HARDWARE DRIVERS                                                  
16.    2     quadrature  and runs in velocity mode  The default  value for  lt config array gt  is    0 0 0    which will install three type    0     step dir  generators  The  maximum number of step generators is 8  as defined by MAX_CHAN in stepgen c   Each generator  is independent  but all are updated by the same function s  at the same time  In the following  descriptions   lt chan gt  is the number of a specific generator  The first generator is number 0     106    CHAPTER 15  INTERNAL COMPONENTS 107                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  H  capture_position   i rawcounts  i  i  i  counts dr  f  latch 1  i  position b G gt       ste
17.    E    GOO Z  1           No tool Position  Relative Actual    Figure 1 2  The AXIS Graphical Interface    to the motors  For servo systems  the output is based on a PID compensation algorithm  For  stepper systems  the calculations run open loop  and pulses are sent to the steppers based on  whether their accumulated position is more than a pulse away from their commanded position   The motion controller includes programmable software limits  and interfaces to hardware limit and  home switches     The motion controller is written to be fairly generic  Initialization files  with the same syntax as  Microsoft Windows INI files  are used to configure parameters such as number and type of axes  e g    linear or rotary   scale factors between feedback devices  e g   encoder counts  and axis units  e g    millimeters   servo gains  servo and trajectory planning cycle times  and other system parameters   Complex kinematics for robots can be coded in C according to a prescribed interface to replace the  default 3 axis Cartesian machine kinematics routines     1 5 3 Discrete I O Controller EMCIO    Discrete I O controllers are highly machine specific  and are not customizable in general using  the INI file technique used to configure the more generic motion controller  However  since EMC2    CHAPTER 1  THE ENHANCED MACHINE CONTROL 7    keystick    FL Estop On Off FS HDI Mode PS Spend  Fwd OFF SC Aborts Actions  F2 Machine OnO0ff FA Reset Interp FIO Spndl Rev OFF TR Selects Params  F
18.    Installed    method    3 4 1 Downloading the CVS version    If you wish to use the TRUNK version of EMC2 or the latest branch version of EMC2  please follow  the instructions on our wiki site to obtain the source code     http    wiki linuxcnc org cgi bin emcinfo pl CVS    3 5 Installed    EMC2 follows the standard way of compiling Linux software  To compile it simply go to the sources  folder        cd   emc2 src  and issue these commands       emc2 src    configure    emc2 src  make  amp  amp  sudo make install    To run it simply type    emc        CHAPTER 3  COMPILING FROM SOURCE 19    3 6 Run in place    If you want only to test the software before installing it  or if you   re worried about overwriting an  existing installation  there is a Run In Place  RIP  mode which you can try out  In this mode  there  is no installation step  and no files are placed outside the top directory     emc2 in this example        cd   emc2 src    and issue these commands          emc2 srcS   configur nable run in plac    emc2 src  make  amp  amp  sudo make setuid    In a shell session where you want to use the run in place version of EMC  execute    emc2 src      emc2 scripts emc environment    By putting this command in a shell start up script  such as    bash_profile  you do not need to  manually run it in each terminal window     Until you close that terminal  it will be set up so that the programs and manual pages from the  Run In Place directory are available without referring to 
19.    Manual Hode Ff Hist On   DFF PA Spend  Decrease  BM Quits Display  Fa Auto Mode FB Flood On Off Fl  Spndl Increase FF Toggles Help    AUTO     HOMED  Override 100  LUBE ON J m i  Tool  a LUBE Ok MIST OFF Speed  560 0  Offset  0 0000 FLOOD OFF Incr  continuous    Relative Act Post    Program    Linet   Command    Interpreter  TILE   Modal G Codes  G80 619 640 620 690 694 Gh4 649 699  61 1  Modal M Codes  H4 MO M46 FO S      e EMC HAL SIM EHC Version 1 2                                  Figure 1 3  The Keystick interface    uses the HAL  reconfiguration of the I O subsystem has become very powerful and flexible  EMC2  contains a Programmable Logic Controller module  behaves just like a hardware PLC  that can be  used for very complex scenarios  tool changers  etc       In EMC2 there is only one big I O controller  which provides support for all kinds of actions and  hardware control  All its outputs and inputs are HAL pins  more on this later on   so you can use  only the subset that fits your hardware and is necessary for your application     1 5 4 Task Executor EMCTASK    The Task Executor is responsible for interpreting G and M code programs whose behavior does  not vary appreciably between machines  G code programming is designed to work like a machinist  might work  The motion or turns of a hand wheel are coded into blocks  If a machinist wanted his  mill to move an inch in the  X direction at some feed rate  he might slowly turn the hand wheel five  turns clockwise in 
20.    e   D    E          A short description of each of the buttons     The SELECTOR ARROW button allows you to select existing objects and modify the informa   tion     The ERASER erases an object     The N O  CONTACT is a normally open contact  It can be an extenal HAL pin   1  input contact   an internal bit coil   B  contact or a external coil   Q  contact  The Hal pin input contact is  closed when the HAL pin is true  The coil contacts are closed when the coresponding coil is  active  Y4Q2 contact closes when  Q2 coil is active      The N C  CONTACT is a normally closed contact  It is the same as the n o  contact except that  the contact is open when the hal pin is true or the coil is active     The RISING EDGE CONTACT is a contact that is closed when the HAL pin goes from False to  true  or the coil from not active to active     The FALLING EDGE CONTACT is a contact that is closed when the HAL pin goes from true to  false or the coil from active to not     The HORIZONTAL CONNECTION connects the    signal    to objects horizontally     The VERTICAL CONNECTION connects the    signal    to objects vertically     The HORIZONTAL RUNNING CONNECTION is a quick way to connect a long run of    signal  wire    horizontally     The TIMER is a Timer Module     The MONOSTABLE is monostable module  one shot     The COUNTER is a counter module     CHAPTER 24  CLASSICLADDER 188    e The COMPARE button allows you to compare variable to values or other variables   eg  W1 lt  5  or  W1  W2 
21.   18 3 Security of pyVCP    Parts of pyVCP files are evaluated as Python code  and can take any action available to Python  programs  Only use pyVCP  xml files from a source that you trust     18 4 Using pyVCP with AXIS    Since AXIS uses the same GUI toolkit  Tkinter  as pyVCP  it is possible to include a pyVCP panel on  the right side of the normal AXIS user interface  A typical example is explained below     Place your pyVCP XML file describing the panel in the same directory where your  ini file is  Say we  we want to display the current spindle speed using a Bar widget  Place the following in a file called  spindle xml      lt pyvcp gt    lt label gt    lt text gt  Spindle speed   lt  text gt    lt  label gt    lt bar gt    lt halpin gt  spindle speed  lt  halpin gt    lt max_ gt 5000 lt  max_ gt    lt  bar gt    lt  pyvcp gt     Here we   ve made a panel with a Label and a Bar widget  specified that the HAL pin connected to the  Bar should be named    spindle speed     and set the maximum value of the bar to 5000  see widget  reference below for all options   To make AXIS aware of this file  and call it at start up  we need to  specify the following in the  DISPLAY  section of the  ini file     PYVCP   spindle xml    To make our widget actually display the spindle speed it needs to be hooked up to the appropriate  HAL signal  A  hal file that will be run once AXIS and pyVCP have started can be specified in the   HAL  section of the  ini file     POSTGUI_HALFILE   spindl
22.   But much of what happens is far  too fast to see with halmeter  To take a closer look at what is going on inside the HAL  we want an  oscilloscope  Fortunately HAL has one  called halscope     7 6 1 Starting Halscope    Halscope has two parts   a realtime part that is loaded as a kernel module  and a user part that  supplies the GUI and display  However  you don t need to worry about this  because the userspace  portion will automatically request that the realtime part be loaded     halcmd  loadusr halscope    The scope GUI window will open  immediately followed by a    Realtime function not linked    dialog  that looks like figure 7 4       This dialog is where you set the sampling rate for the oscilloscope  For now we want to sample once  per millisecond  so click on the 1 03mS thread    slow     formerly    siggen thread     see footnote   and  leave the multiplier at 1  We will also leave the record length at 4047 samples  so that we can use up  to four channels at one time  When you select a thread and then click    OK     the dialog disappears   and the scope window looks something like figure 7 5        5Several of these screen captures refer to threads named    siggen thread    and    stepgen thread    instead of    slow    and     fast     When the screenshots were captured  the    threads    component didn   t exist  and a different method was used to create  threads  giving them different names  Also  the screenshots show pins  etc  as    stepgen xxx    rather th
23.   Rising  Source  None             Figure 7 5  Initial scope window       60    CHAPTER 7  HAL TUTORIAL 61    7 6 2 Hooking up the    scope probes       At this point  Halscope is ready to use  We have already selected a sample rate and record length   so the next step is to decide what to look at  This is equivalent to hooking    virtual scope probes    to  the HAL  Halscope has 16 channels  but the number you can use at any one time depends on the  record length   more channels means shorter records  since the memory available for the record is  fixed at approximately 16 000 samples     The channel buttons run across the bottom of the halscope screen  Click button    1     and you will  see the    Select Channel Source    dialog  figure 7 6  This dialog is very similar to the one used by  Halmeter  We would like to look at the signals we defined earlier  so we click on the    Signals    tab   and the dialog displays all of the signals in the HAL  only two for this example         MA Select Channel Source Ex     selecta pin  signal  or parameter  as the source for channel 1        Pins   Signals   Parameters       siggen 1 cosine  siggen 1 sine  siggen 1 square  siggen 1 triangle  stepgen 1 counts  stepgen 1 dir  stepgen 1 position  stepgen 1 step    stepgen 1  velocity  stepgen 2 counts  stepgen 2 dir    Cancel               Figure 7 6  Select Channel Source dialog    To choose a signal  just click on it  In this case  we want to use channel 1 to display the signal     X_ve
24.   THE ENHANCED MACHINE CONTROL 11    Figure 1 7  EMC2 Process Diagram    PC EMC Process     overly Simplified        GUI  G CODE lA meme  TkErnc       Servo to Go  Card or Es  Printer Port    Motion Control  Roulines       Drivers for Axis    Motors  Motors m   Servo or  Stepper   Machine Leadscrews  Axis    he    Actuators       stopped running     As you work your way through this text  you will be learning  bit by bit  how to set up and run  a machine with your copy of the EMC2 software  While you are learning about setting up and  running a mini mill here  you will be thinking of other applications and other capabilities  These  are the topics of the other linuxcnc org handbooks     1 6 Thinking Like An Integrator    The biggest task of a machine integrator is figuring out how to connect a PC running the EMC2 to  a machine and configuring the software so that it runs the machine correctly     1 6 1 Units    Units can be confusing  You might ask     Does it work in inches  feet  centimeters  millimeters  or  what     There are several possible answers to this question but the best one is that it works in the  units that you set it to work in     At a machine level  we set each axis   s units to some value using an INI variable that looks like this   UNITS   inch    or    CHAPTER 1  THE ENHANCED MACHINE CONTROL 12  UNITS   mm    After we have decided upon a value for the units for an axis  we tell the EMC2 how may step pulses  or encoder pulses it should send or read for ea
25.   The variable you can use are  W words T timers  M monostables C counters X sequential and  their attributes D done  E empty  F full  P preset  R running  and V value  not all atributes  are available to all variables  eg  T2 D   The math symbols are             lt   gt   lt    gt       1  exponent     modulas   amp   and      or     not    Math function are ABS  absolute   MOY  average   eg ABS  W2  1  MOY  W1  W2  lt 3    Compare cannot be placed in the right most side of the section display     The OPERATE button allows you to assign values to variables   eg  W2 7 or  W1  W2  there  are two math funtions MINI and MAXI that check a variable for maximum  0x80000000  and  minimum values  OxO5FFFFFFF   think signed values  and keeps them from going beyond   You may use all the math symbols and functions from above  OPERATE funtions can only be  placed at the right most side of the section display     24 5 ClassicLadder Variables    List of known variables      Bxxx   Bit memory xxx  boolean    Wxxx   Word memory xxx  32 bits integer    Txx R   Timer xx running  boolean  user read only    Txx D   Timer xx done  boolean  user read only    Txx V   Timer xx current value  integer  user read only   Txx P   Timer xx preset  integer    Mxx R   Monostable xx running  boolean    Mxx V   Monostable xx current value  integer  user read only   Mxx P   Monostable xx preset  integer    Cxx D   Counter xx done  boolean  user read only    Cxx E   Counter xx empty overflow  boolean  user read
26.   Unlike the others  it does not need floating  point math        The last function  freqgen update_freq  is responsible for doing scaling and some other calcula   tions that need to be performed only when the frequency command changes     What this means for our example is that we want to run siggen 0 update at a moderate rate to  calculate the sine and cosine values  Immediately after we run siggen 0 update  we want to run  freqgen update_freq to load the new values into the step pulse generator  Finally we need to  run freqgen make_pulses as fast as possible for smooth pulses  Because we don   t use position  feedback  we don   t need to run freqgen capture_position at all        We run functions by adding them to threads  Each thread runs at a specific rate  Let   s see what  threads we have available     CHAPTER 7  HAL TUTORIAL 58    halcmd  show thread  Realtime Threads   Period FP Name  1005720 YES slow  207 0   50286 NO fast   0  O       The two threads were created when we loaded threads  The first one  slow  runs every millisec   ond  and is capable of running floating point functions  We will use it for siggen 0 update and  freqgen update_freq  The second thread is fast  which runs every 50 microseconds  and does  not support floating point  We will use it for freqgen make_pulses  To connect the functions to  the proper thread  we use the addf command  We specify the function first  followed by the thread        halcmd  addf siggen 0 update slow  halcmd  addf freqg
27.   comp will write all this code for you  automatically     Compiling a HAL component is also much easier when using comp  whether the component is part  of the emc2 source tree  or outside it     For instance  the    ddt    portion of blocks is around 80 lines of code  The equivalent component is  very short when written using the comp preprocessor     component ddt  Compute the derivative of the input function    pin in float in    pin out float out    variable float old    function _    license  GPL         float tmp   in   out    tmp   old    fperiod   old   tmp     and it can be compiled and installed very easily  by simply placing ddt  comp in src hal components  and running    make     or by placing it anywhere on the system and running comp   install ddt comp    11 2 Definitions    component A component is a single real time module  which is loaded with halcmd loadrt  One   comp file specifies one component     instance A component can have zero or more instances  Each instance of a component is created  equal  they all have the same pins  parameters  functions  and data  but behave independently  when their pins  parameters  and data have different values     singleton It is possible for a component to be a    singleton     in which case exactly one instance is  created  It seldom makes sense to write a singleton component  unless there can literally  only be a single object of that kind in the system  for instance  a component whose purpose is  to provide a pin with 
28.   encoder  lt channel gt  delta     Change in counts since last read    FLOAT  ppmc  lt port gt  encoder  lt channel gt  position     Encoder position  in user units    BIT  ppmc  lt port gt  encoder  lt channel gt   index     Something to do with index pulse        BIT  ppmc  lt port gt  pwm  lt channel gt  enable     Enables a PWM generator         FLOAT  ppmc  lt port gt  pwm  lt channel gt  value     Value which determines the duty cycle of the   PWM waveforms  The value is divided by pwm  lt channel gt  scale  and if the result is 0 6 the  duty cycle will be 60   and so on  Negative values result in the duty cycle being based on the  absolute value  and the direction pin is set to indicate negative      BIT  ppmc  lt port gt  stepgen  lt channel gt  enable     Enables a step pulse generator         FLOAT  ppmc  lt port gt  stepgen  lt channel gt  velocit y   Value which determines the step fre   quency  The value is multiplied by stepgen  lt channel gt   scale  and the result is the frequency  in steps per second  Negative values result in the frequency being based on the absolute value   and the direction pin is set to indicate negative      BIT  ppmc  lt port gt  in  lt channel gt       State of digital input pin  see canonical digital input      BIT  ppmc  lt port gt  in  lt channel gt  not     Inverted state of digital input pin  see canonical  digital input      BIT  ppmc  lt port gt  out  lt channel gt      Value to be written to digital output  seen canonical  dig
29.   halui feed override decrease   pin for decreasing the FO    scale     17 2 10 Spindle override    e  FLOAT  halui spindle override value   current SO value   e  FLOAT  halui spindle override scale   pin for setting the scale on changing the SO   e  S32  halui spindle override counts   counts from an encoder for example to change SO  e  BIT  halui spindle override increase   pin for increasing the SO    scale     e  BIT  halui spindle override decrease   pin for decreasing the SO    scale     17 2 11 Tool    e  U32  halui tool number   indicates current selected tool    e  FLOAT  halui tool length offset   indicates current applied tool length offset    CHAPTER 17  HALUI 151    17 2 12 Program    e  317  halui program is idle   e  317  halui program is running  e  317  halui program is paused  e  317  halui program run   e  317  halui program pause   e  317  halui program resume    e  317  halui program step    17 2 13 General    e  BIT  halui abort   pin to send an abort message  clears out most errors     17 2 14 MDI    Sometimes the user wants to add more complicated tasks to be performed by the activation of a  HAL pin  This is possible using the following MDI commands scheme     e a MDI_COMMAND is added to the ini  in the section  HALUI    e g   HALUI  MDI_ COMMAND    GO XO    e when halui starts it will read detect the MDI_COMMAND fields in the ini  and export pins of  type  817  halui mdi command  lt nr gt    lt nr gt  is a number from 00 to the number of MDI_COMMAND 
30.   the motion controller can determine that there has probably been a failure to meet its  timing constraints  Each time such a failure is detected  this value is incremented     motion debug bit O  motion debug bit 1  motion debug float 0    motion debug float 1 These values are used for debugging purposes     5 1 3 Functions    Generally  these functions are both added to the servo thread in the order shown     motion command handler Processes motion commands coming from user space    motion controller Runs the EMC motion controller    5 2 axis N  realtime     These pins and parameters are created by the real time motmod module  These are actually joint  values  but the pins and parameters are still called    axis N      They are read and updated by the  motion controller function     5 2 1 Pins    axis N amp enable out OUT bit TRUE if the amplifier for this joint should be enabled    axis N amp fault in IN bit Should be driven TRUE if an external fault is detected with the amplifier  for this joint    axis N home sw in IN bit Should be driven TRUE if the home switch for this joint is closed  axis N homing OUT bit TRUE if the joint is currently homing  axis N pos lim sw in IN bit Should be driven TRUE if the positive limit switch for this joint is closed       ln    trivial kinematics    machines  there is a one to one correspondence between joints and axes     CHAPTER 5  EMC2 AND HAL 37  axis N neg lim sw in IN bit Should be driven TRUE if the negative limit switch for this
31.   under Gtk  to see if my first idea to realise all this works    And as quickly I   ve found that it advanced quite well  I   ve continued with more complex  elements   timer  multiples rungs  etc      Voila  here is this work    and more   I   ve continued to add features since then        ClassicLadder has been adapted to work with emc2   s HAL  and is currently beeing distributed  along with emc2  If there are issues problems bugs please report them to the Enhanced Machine  Controller project     24 2 Languages    The most common language used when working with ClassicLadder is    ladder     ClassicLadder allows  one to use other variants  like sequential function chart   Grafcet  too  however those aren   t covered  by the current documentation     In the next chapters the main components of ClassicLadder will be described     24 3 Starting ClassicLadder    There are 2 components belonging to ClassicLadder     e The realtime module   classicladder_rt    e The userspace module  along with a GUI    classicladder    182    CHAPTER 24  CLASSICLADDER 183    24 3 1 Realtime Module    Loading the ClassicLadder realtime module  classicladder_rt  is possible from a halfile  or directly  using a halemd instruction  You must add two lines to your  hal file for ClassicLadder to func   tion  The first line loads real time the ClassicLadder module  The second line adds the function  classicladder O refresh to the servo thread  This makes ClassicLadder update at the servo thread  rate 
32.  0 00000e 00 X_vel     lt    siggen 0 cosine    When a signal is connected to one or more pins  the show command lists the pins immediately  following the signal name  The    arrow    shows the direction of data flow   in this case  data flows  from pin siggen 0 cosine to signal X_vel  Now let s connect the X_vel to the velocity input of a  step pulse generator     halcmd  net X_vel   gt  freqgen 0 velocity    We can also connect up the Y axis signal y_vel  It is intended to run from the sine output of the sig   nal generator to the input of the second step pulse generator  The following command accomplishes  in one line what two net commands accomplished for X_vel     CHAPTER 7  HAL TUTORIAL 57    halcmd  net Y vel siggen 0 sine   gt  freqgen 1 velocity  Now let s take a final look at the signals and the pins connected to them     halcmd  show sig   Signals    Type Value Name   float 0 00000e 00  X_ vel    lt    siggen 0 cosine      gt  freqgen 0 velocity   float 0 00000e 00 Y vel   lt    siggen 0 sine     gt  freqgen 1 velocity                      The show sig command makes it clear exactly how data flows through the HAL  For example  the  X_vel signal comes from pin siggen 0 cosine  and goes to pin freqgen 0 velocity     7 5 3 Setting up realtime execution   threads and functions    Thinking about data flowing through    wires    makes pins and signals fairly easy to understand   Threads and functions are a little more difficult  Functions contain the computer instruction
33.  0 frequency  32769 float RW 0 00000e 00 siggen 0 offset  32769  32 RO 397 siggen 0 update time  32769 s32 RW 109100 siggen 0 update tmax   halcmd  show pin   Component Pins    Owner Type Dir Value Name  32769 float OUT 4 78453e 00 siggen 0 cosine  32769 float OUT  4 53106e 00 siggen 0 sawtooth  32769 float OUT 1 45198e 00 siggen 0 sine  32769 float OUT  5 00000e 00 siggen 0 square  32769 float OUT 4 02213e 00 siggen 0 triangle    Note that the value of parameter siggen 0 amplitude has changed to 5 000  and that the pins  now have larger values     7 3 5 Saving the HAL configuration    Most of what we have done with halcmd so far has simply been viewing things with the show  command  However two of the commands actually changed things  As we design more complex  systems with HAL  we will use many commands to configure things just the way we want them   HAL has the memory of an elephant  and will retain that configuration until we shut it down  But  what about next time  We don   t want to manually enter a bunch of commands every time we want  to use the system  We can save the configuration of the entire HAL with a single command     halcmd  save   components   loadrt threads namel test thread period1 1000000  loadrt siggen   signals   links   parameter values   setp siggen 0 amplitude 5 00000e 00   setp siggen 0 frequency 1 00000e 00                                  CHAPTER 7  HAL TUTORIAL 52    setp siggen 0 offset 0 00000e 00    realtime thread function links  addf siggen 
34.  13 2 Maximum step Tale    kb EPR ES a Swe a ee ke ok 97    o AI he he hs aie aE Bs des A be ai EGE Se Ge aw  AE ew te eda wea 98    CONTENTS    13 3 1 standard pinout bal    orei aa i eai REA a ee es a  amp   13 3 2 Overview of the standard_pinout hal                            13 3 3 Changing the standard_pinout hal                  o            13 3 4 Changing the polarity of a signal     saaa o                 13 3 5 Adding PWM Spindle Speed Control              o               13 3 6 Adding an enable signal                         a a  13 3 7 Adding an external E STOP button                             14 HAL Components  14 1 Commands and Userspace Components                              14 2 Realtime components and kernel modules              o                15 Internal Components  15 2 OPN raro a IR A A A wa a dd le Re  15 1    INSISIBOS sisas a a A A A ED de x  ISL REMOVE i    aa a A A E a ad a ae a  E O EE  USE Fara OS o A AA A A A DED E eh G Ss  15 15  EP TYPOS vs una aoe oS a aS eae a e A A  WIG o INE  SL PAME da ASA A AAA A di o A e 8s  152 1 Jostallng ok pe ek SR a a ew ae we A ew Se ee ee    e a  i fee dk ea Nee eda Seeds eee ew eh ee ED ea aS  ISAS AI EEE   E Parameter AAA  15 25    Oulpu Tyee e aesa eee ee wa A A  12    PERICOS ns MAE ROEDER RAE A eed Bo  A PORE shi oo i eee ee A eee a Ge Sapa Sele a Ae we ee  Se e  15 21  CISTallS oe a a A a ee a A  E a A MAE OE REE AES Oh DG eh eS ES  Mae AAA  A e ooe anaa ee eee ee ew we a es  1G  A Ge de Ss ee Be eee Ties
35.  2000 counts per rev encoder  and 10 revs inch gearing  and desired units  of mm  we have          t  input_scale   2000 es   10 E   rev inch    20000222S  inch    4 3 9 3 Stepper related items    SCALE   4000  HAL  Specifies the number of pulses that corresponds to a move of one machine  unit  For stepper systems  this is the number of step pulses issued per machine unit  For  servo systems  this is the number of feedback pulses per machine unit  A second number  if  specified  is ignored    For example  on a 1 8 degree stepper motor with half stepping  and 10 revs inch gearing  and  desired units of mm  we have             2 st d  input_scale   LZPS fu a pd  1 8 degree rev inch  t    400025  inch    Older stepper configuration  ini and  hal used INPUT_SCALE for this value     STEPGEN_MAXACCEL   21 0  HAL  Acceleration limit for the step generator  This should be 1   to 10  larger than the axis MAX_ACCELERATION  This value improves the tuning of stepgen s     position loop        STEPGEN_MAXVEL   1 4  HAL  Older configuration files have a velocity limit for the step gener   ator as well  If specified  it should also be 1  to 10  larger than the axis MAX_VELOCITY   Subsequent testing has shown that use of STEPGEN_MAXVEL does not improve the tuning of  stepgen s position loop     4 3 10  EMCIO  Section    CYCLE_TIME   0 100 The period  in seconds  at which EMCIO will run  Making it 0 0 or a negative  number will tell EMCIO not to sleep at all  There is usually no need to chang
36.  3     8 3 2 Function Names    Hardware drivers usually only have two kinds of HAL functions  ones that read the hardware and  update HAL pins  and ones that write to the hardware using data from HAL pins  They should be  named as follows      lt device name gt   lt device num gt     lt io type gt    lt chan num range gt    read write     lt device name gt  The same as used for pins and parameters    lt device num gt  The specific device that the function will access      lt io type gt  Optional  A function may access all of the I O on a board  or it may access only a  certain type  For example  there may be independent functions for reading encoder counters  and reading digital I O  If such independent functions exist  the  lt io type gt  field identifies the  type of I O they access  If a single function reads all I O provided by the board   lt io type gt  is  not used       lt chan num range gt  Optional  Used only if the  lt io type gt  I O is broken into groups and accessed by  different functions     read write Indicates whether the function reads the hardware or writes to it        4One glaring exception to the    channel numbers start at zero    rule is the parallel port  Its HAL pins are numbered with  the corresponding pin number on the DB 25 connector  This is convenient for wiring  but inconsistent with other drivers   There is some debate over whether this is a bug or a feature    5Note to driver programmers  do NOT implement separate functions for different I O 
37.  3 000 HOME SWITCH RELEASES  LATCH_VEL   NEGATIVE HOME   1 000 HOME SWITCH TRIPS  USE_INDEX   FALSE ld    IE OVERSHOOT    SEARCH FOR HOME SWITCH  SEARCH_VEL        l FINAL DETECTION OF SWITCH  LATCH_VEL        ES GO TO HOME POSITION  MAX_VEL           1 000 3 000  SEARCH_VEL   POSITIVE HOME_OFFSET   3 000  LATCH_VEL   POSITIVE HOME   1 000 HOME SWITCH RELEASES  USE_INDEX   FALSE   fo HOME SWITCH TRIPS    SEARCH FOR HOME SWITCH  SEARCH_VEL        l BACK OFF OF HOME SWITCH  SEARCH_VEL             NAL DETECTION OF SWITCH  LATCH_VEL     a GO TO HOME POSITION  MAX_VEL           1 000 3 000  SEARCH_VEL   POSITIVE HOME_OFFSET   3 000  LATCH_VEL   NEGATIVE HOME   1 000 HOME SWITCH RELEASES  USE_INDEX   TRUE Zp y  HOME SWITCH TRIPS    SEARCH FOR HOME SWITCH  SEARCH_VEL     FINAL DETECTION OF SWITCH AND  INDEX PULSE  LATCH_VEL        GO TO HOME POSITION  MAX_VEL              1 000 3 000 da PULSES  SEARCH_VEL   POSITIVE HOME_OFFSET   3 000  LATCH_VEL   POSITIVE HOME   1 000 HOME SWITCH RELEASES  USE_INDEX   TRUE   Mo HOME SWITCH TRIPS    SEARCH FOR HOME SWITCH  SEARCH_VEL     BACK OFF OF HOME SWITCH  SEARCH_VEL     FINAL DETECTION OF SWITCH AND  INDEX PULSE  LATCH_VEL        GO TO HOME POSITION  MAX_VEL     1 000 Jn SU PULSES          Figure 4 1  Homing Sequences    32    CHAPTER 4  INI CONFIGURATION 33    and this parameter is nonzero  EMC goes ahead to the index pulse search  If HOME_SEARCH_VEL     is non zero and this parameter is zero  it is an error and the homing operation will fa
38.  36 inputs  0 19 and 24 39  and 12 outputs  20 23 and  40 47   The second board is at address 0x300  and has 20 inputs  8 15  24 31  and 40 43  and 28  outputs  0 7  16 23  32 39  and 44 47   Up to 8 boards may be used in one system     16 3 2 Pins    e  BIT  ax5214  lt boardnum gt  out  lt pinnum gt      Drives a physical output pin   e  BIT  ax5214  lt boardnum gt  in  lt pinnum gt      Tracks a physical input pin     e  BIT  ax5214  lt boardnum gt  in  lt pinnum gt  not     Tracks a physical input pin  inverted     For each pin   lt boardnum gt  is the board number  starts at zero   and  lt pinnum gt  is the I O channel  number  0 to 47      Note that the driver assumes active LOW signals  This is so that modules such as OPTO 22 will  work correctly  TRUE means output ON  or input energized   If the signals are being used directly  without buffering or isolation the inversion needs to be accounted for  The in  HAL pin is TRUE if  the physical pin is low  OPTO 22 module energized   and FALSE if the physical pin is high  OPTO   22 module off   The in  lt pinnum gt  not HAL pin is inverted     it is FALSE if the physical pin is low   OPTO 22 module energized   By connecting a signal to one or the other  the user can determine  the state of the input     16 3 3 Parameters    e  BIT  ax5214  lt boardnum gt  out  lt pinnum gt  invert     Inverts an output pin     The  invert parameter determines whether an output pin is active high or active low  If  invert is  FALSE  setting th
39.  36172    Threads 1 stepgen  capture position  2 motion command handler  servo thread 3 motion controller  base thread 4 stepgen  update freq  5 ddt 0   50286 NO  base thread   6535  35508     1 parport  0  read   2 stepgen  make pulses   3 parport  0  write          y  Enter HAL command    addf ddt 0 servo thread   Execute                   addf ddt 0 servo thread    This is just for viewing so we leave position blank and get the last position in the thread  Figure 10 3  shows the state of halshow after this command has been issued     Next we need to connect this block to something  But how do we know what pins are available  The  answer is look under pins  There we find ddt and see this     Component Pins    Owner Type Dir Value Name   08 float R  0 00000e 00 ddt 0 in  08 float  Ww 0 00000e 00 ddt 0 out          That looks easy enough to understand but what signal or pin do we want to connect to it  It could  be an axis pin  a stepgen pin  or a signal  I see this when I look at axis 0     Component Pins   Owner Type Dir Value Name  03 float  W 0 00000e 00 axis 0 motor pos cmd    gt  Xpos cmd    So it looks like Xpos cmd should be a good signal to use  Back to the editor where I enter the  following command     CHAPTER 10  TOOLS AND UTILITIES 81  linksp Xpos cmd ddt 0 in  Now if I look at the Xpos cmd signal using the tree node TIl see what I ve done     Signals    Type Value Name   float 0 00000e 00 Xpos cmd   lt    axis 0 motor pos cmd     gt  ddt 0 in      gt  stepgen 0 
40.  A 176  22 1 1 Contool loop DASICS oa es as romua E we eG 176  Ni II IEEE 177  2241 LOOP TOME      be a a a dd e 177   X Ladder Logic 179   23 Ladder programming 180  o a A we dow a By Ga APG es Ge bela  ee a 180    23 2 Weeiple   occa cod ee ah SR A A AR a BO ew Se Se ee  amp  a 180    CONTENTS xiv    24 ClassicLadder 182  CAL DUTCH  oe bc Rae REARS aw ER ERE A e bee a o e as 182  A I Ada a die ae a a Re wk ee Gee ak Gh ae aa on de ae Het we ok 182  24 3 Starting ClassicLagder occ dora Ree ea REAR we New a A ee Se    a 182   24 3 1 Realtinie Module    ociosas 04 348 4 ee be ee ae Ee be we et 183  See VADES 6 bok ek ek ee OE we A OR ee a ee a 183  24 3 3 Loading the ClassicLadder user module                         183  244 ClassicLadder GUI   ooo essa e Gee Eee se eae eben ds 184  224 1    The Variables window    6 66 56 sosser ia a RAR ee A 184  24 4 2 The Section Display window        2    2    e 185  24 4 3 The Section Manager window                               186  24 4 4 The Editor window         0    eee ee ee ee 186  24o ClassicLadder UNTIADISS  os ae eee we aw  amp  A a ed Gay he ee ia 188  24  UsSnegsuUMP Cole  2 25  224065 ee eh eRe A se ae ee bee ead 189  24 7 Using CALL COILS    6  bk ee ee aS le a 189   XI Hardware Examples 190   25 Spindle Speed Control 191  25 1 UTN Sprie Speeds  so ros Edge A ne So ew ae Bnd A eG ee ol A e 191  292 PWM Spindle Speed   ss c auo aea A ee A A RN Ay a 191  203 Spindle Feedback esad 244 cee A a ee a eee bE we e 191  29 4 Spande 
41.  Cover Texts on the front cover  and Back Cover Texts on the back cover  Both covers must also  clearly and legibly identify you as the publisher of these copies  The front cover must present the full title with  all words of the title equally prominent and visible  You may add other material on the covers in addition   Copying with changes limited to the covers  as long as they preserve the title of the Document and satisfy these  conditions  can be treated as verbatim copying in other respects     If the required texts for either cover are too voluminous to fit legibly  you should put the first ones listed  as  many as fit reasonably  on the actual cover  and continue the rest onto adjacent pages     If you publish or distribute Opaque copies of the Document numbering more than 100  you must either include  a machine readable Transparent copy along with each Opaque copy  or state in or with each Opaque copy a  publicly accessible computer network location containing a complete Transparent copy of the Document  free  of added material  which the general network using public has access to download anonymously at no charge  using public standard network protocols  If you use the latter option  you must take reasonably prudent steps   when you begin distribution of Opaque copies in quantity  to ensure that this Transparent copy will remain  thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy   directly or through your
42.  IP     bu   256  0x100  if the    and    output is desired    IP     bu   512  0x200  if the    or    output is desired             CHAPTER 11  COMP  A TOOL FOR CREATING HAL MODULES     IP     bu  1024  0x400  if the    xor     exclusive or  output is desired      license  GPL    FUNCTION  _     int i  a 1  o 0  x 0   for i 0  i  lt   personality  amp  Oxff   itt     if in i    0   1  x    x     else   a   0        if  personality     0x100  and   a   if  personality  amp  0x200  or   0   if personality  amp  0x400  xor   x        A typical load line for this component might be  loadrt logic count 3 personality 0x102 0x305 0x503  which creates the following pins     e A 2 input AND gate  logic O and  logic 0 in 00  logic 0 in 01    92    e 5 input AND and OR gates  logic 1 and  logic 1 or  logic 1 in 00  logic 1 in 01  logic 1 in 02     logic  1 in 03  logic  1 in 04     e 3 input AND and XOR gates  logic 2 and  logic 2 xor  logic 2 in 00  logic 2 in 01  logic 2 in 02    Chapter 12    Creating Userspace Python  Components with the    hal    module    12 1 Basic usage    A userspace component begins by creating its pins and parameters  then enters a loop which will  periodically drive all the outputs from the inputs  The following component copies the value seen  on its input pin  passthrough in  to its output pin  passthrough out  approximately once per  second         usr bin python   import hal  time   h   hal component   passthrough    h newpin  in   hal HAL   FLOAT  hal 
43.  If we subtract one from the other we will get        3If a machine  e g  a lathe  is set up with only the axes X Z  amp  A  and the EMC2 inifile holds only these 3 joints defined   then the above matching will be faulty  That is because we actually have  jointO x  jointl Z  joint2 A  whereas the above  assumes joint1 Y  To make it easily work in EMC2 one needs to define all axes  XYZA   then use a simple loopback in HAL  for the unused Y axis    4One other way of making it work  is by changing the matching code and recompiling the software        CHAPTER 20  KINEMATICS IN EMC2    Figure 20 1  Bipod setup    y A  0 0  Dx B Bx 0     AD BD    D Dx Dy     AD      BD    r   y      2   2 x zx Be     Ba    y   and therefore     AD      BD    Bx   2x Ba       From there we calculate     y   y AD      x     168    Note that the calculation for y involves the square root of a difference  which may not result in a  real number  If there is no single Cartesian coordinate for this joint position  then the position is    said to be a singularity  In this case  the forward kinematics return  1     Translated to actual code     double AD2 joints 0    joints 0    double BD2   jJoints 1    joints 1    double x    AD2   BD2   Bx x  Bx     double y2   AD2   x x x    if y2  lt  0  return  1    pos  gt tran x   X    pos  gt tran y   sqrt  y2     return 0      2 x Bx         CHAPTER 20  KINEMATICS IN EMC2 169    20 3 2 Inverse transformation    The inverse kinematics is lots easier in our example 
44.  MAXSIZE  When  the array is created its size will be CONDSIZE     DOC A string that documents the item  String can be a C style    double quoted    string  like              Selects the desired edge  TRUE means falling  FALSE means rising  ora Python   style    triple quoted    string  which may include embedded newlines and quote characters  such  as     param rw bit zot TRUE     The effect of this parameter  also known as  the orb of zot    will require at least two paragraphs to explain              Hopefully these paragraphs have allowed you to understand  zot   better wm     r    The documentation string is in    groff  man    format  For more information on this markup  format  see groff_man  7   Remember that comp interprets backslash escapes in strings  so  for instance to set the italic font for the word example  write    fIexample   fB      TYPE One of the HAL types  bit  signed  unsigned  or float  The old names s32 and u32 may  also be used  but signed and unsigned are preferred     PINDIRECTION One of the following  in  out  or io  A component sets a value for an out pin  it  reads a value from an in pin  and it may read or set the value of an io pin     PARAMDIRECTION One of the following  r or rw  A component sets a value for a r parameter  and  it may read or set the value of a rw parameter     STARTVALUE Specifies the initial value of a pin or parameter  If it is not specified  then the default  is 0 or FALSE  depending on the type of the item        fp Indi
45.  RESET state  and all you need to do is switch to Machine On and  you ll be able to continue your work with EMC2        4An extensive explanation of hooking up E STOP circuitry is explained in the wiki linuxcnc org and in the Integrator  Manual  5make sure you use a maintained switch for E STOP     Chapter 14    HAL    Components    14 1 Commands and Userspace Components    Some of these will have expanded descriptions from the man pages  Some will have limited descrip   tions  All of the components have man pages  From this list you know what components exist and  can use man n name to get additional information  For example in a terminal window type man 1  axis to view the information in the man page     axis remote 1   AXIS Remote Interface    axis  1    bfload  1    comp  1  emc  1    hal_input  1      AXIS EMC  The Enhanced Machine Controller  Graphical User Interface      A program for loading a Xilinx Bitfile program into the FPGA of an Anything I O board  from Mesa      Build  compile and install EMC HAL components    EMC  The Enhanced Machine Controller       control HAL pins with any Linux input device  including USB HID devices    hal_joystick 1   control HAL pins with a joystick    halemd 1  halmeter  1    halrun  1      manipulate the Enhanced Machine Controller HAL from the command line    observe HAL pins  signals  and parameters      manipulate the Enhanced Machine Controller HAL from the command line    halsampler 1   sample data from HAL in realtime    halst
46.  Sawtooth output     e  FLOAT  siggen  lt chan gt  triangle     Triangle wave output           e  FLOAT  siggen  lt chan gt  square     Square wave output     All five outputs have the same frequency  amplitude  and offset   In addition to the output pins  there are three control pins   e  FLOAT  siggen  lt chan gt   frequency     Sets the frequency in Hertz  default value is 1 Hz     e  FLOAT  siggen  lt chan gt  amplitude     Sets the peak amplitude of the output waveforms  de   fault is 1     e  FLOAT  siggen  lt chan gt  offset     Sets DC offset of the output waveforms  default is O   For example  if siggen 0 amplitude is 1 0 and siggen 0 offset is 0 0  the outputs will swing    from  1 0 to  1 0  If siggen 0 amplitude is 2 5 and siggen 0 offset is 10 0  then the outputs  will swing from 7 5 to 12 5     15 7 4 Parameters    None        15 7 5 Functions    e  FUNCT  siggen  lt chan gt  update     Calculates new values for all five outputs        3Prior to version 2 1  frequency  amplitude  and offset were parameters  They were changed to pins to allow control by  other components     Chapter 16    Hardware Drivers    16 1 Parport    Parport is a driver for the traditional PC parallel port  The port has a total of 17 physical pins  The  original parallel port divided those pins into three groups  data  control  and status  The data group  consists of 8 output pins  the control group consists of 4 pins  and the status group consists of 5  input pins     In the early 1990 s 
47.  The units on the P gain are volts per machine unit  e g   22  if  machine units are millimeters        I   0  HAL  The integral gain for the axis servo  The value multiplies the cumulative error between  commanded and actual position in machine units  resulting in a contribution to the computed  voltage for the motor amplifier  The units on the I gain are volts per machine unit per second   e g   LL if machine units are millimeters     mms       D   0  HAL  The derivative gain for the axis servo  The value multiplies the difference between the  current and previous errors  resulting in a contribution to the computed voltage for the motor  amplifier  The units on the D gain are volts per machine unit per second  e g   as if machine  units are millimeters     FFO   0  HAL  The Oth order feed forward gain  This number is multiplied by the commanded  position  resulting in a contribution to the computed voltage for the motor amplifier  The units  on the FFO gain are volts per machine unit  e g   volt if machine units are millimeters     m    CHAPTER 4  INI CONFIGURATION 29    FF1   0  HAL  The lst order feed forward gain  This number is multiplied by the change in com   manded position per second  resulting in a contribution to the computed voltage for the motor  amplifier  The units on the FF1 gain are volts per machine unit per second  e g   lt if ma   chine units are millimeters        FF2   O  HAL  The 2nd order feed forward gain  This number is multiplied by the change in c
48.  Type Name PID State   32769 RT siggen ready   9775 User halcmd9775 9775 initializing    CHAPTER 7  HAL TUTORIAL 49    Since halcmd itself is a HAL component  it will always show up in the list   The list also shows  the siggen component that we installed in the previous step  The    RT    under    Type    indicates that  siggen is a realtime component     Next  let s see what pins siggen makes available     halcmd  show pin  Component Pins   Owner Type Dir Value Name 02 float  W 0 00000e 00 siggen 0 cosine          32769 float OUT 0 00000e 00 siggen 0 sawtooth  32769 float OUT 0 00000e 00 siggen 0 sine  32769 float OUT 0 00000e 00 siggen 0 square  32769 float OUT 0 00000e 00 siggen 0 triangle    This command displays all of the pins in the HAL   a complex system could have dozens or hundreds  of pins  But right now there are only five pins  All five of these pins are floating point  and all five  carry data out of the siggen component  Since we have not yet executed the code contained within  the component  all the pins have a value of zero     The next step is to look at parameters     halcmd  show param          Parameters    Owner Type Dir Value Name  32769 float RW 1 00000e 00 siggen 0 amplitude  32769 float RW 1 00000e 00 siggen 0 frequency  32769 float RW 0 00000e 00 siggen 0 offset  32769 s32 RO 0 siggen 0 update time  32769 s32 RW 0 siggen 0 update tmax    The show param command shows all the parameters in the HAL  Right now each parameter has  the default value it w
49.  a problem that requires the wiring diagram to be changed  perhaps a part needs to be connected  differently or replaced with something completely different     HAL provides the software equivalents of a voltmeter  oscilloscope  signal generator  and other tools  needed for testing and tuning a system  The same commands used to build the system can be used  to make changes as needed     6 1 2 Summary    This document is aimed at people who already know how to do this kind of hardware system inte   gration  but who do not know how to connect the hardware to EMC     The traditional hardware design as described above ends at the edge of the main control  Outside  the control are a bunch of relatively simple boxes  connected together to do whatever is needed   Inside  the control is a big mystery     one huge black box that we hope works     HAL extends this traditional hardware design method to the inside of the big black box  It makes  device drivers and even some internal parts of the controller into smaller black boxes that can be  interconnected and even replaced just like the external hardware  It allows the    system wiring dia   gram   to show part of the internal controller  rather than just a big black box  And most importantly  it allows the integrator to test and modify the controller using the same methods he would use on  the rest of the hardware     Terms like motors  amps  and encoders are familiar to most machine integrators  When we talk  about using extra flexi
50.  add      16    Chapter 3    Compiling from Source    3 1 Introduction    The third hurdle that you face when you begin to set up the EMC2 manually is getting and installing  the EMC2 software itself  All of EMC2 has been placed on cvs linuxcnc org in a concurrent version   ing  CVS  repository  EMC2 is also available as a precompiled package  for various platforms  for  download from that site  Again the easiest install is the Live CD     Installation can be a daunting task to people new to Linux  The hardest part is getting the Real  Time Linux patch up and running  After that  installing EMC is pretty easy  With that said  we  recently provided a completely new experience for users  they only need to install Ubuntu  a very  friendly Linux distribution   then run a single install script  and they already should have the Real  Time part and EMC2 working     3 2 EMC Download Page    You will find the most recent releases of EMC2 announced on the Download page at http    www   linuxcnc org index php    The releases of EMC2 will be done in three ways the Live CD  sources and binary package  The  sources  described further on  consist of a tarball  emc2 version tar gz   which you should download  and unpack into your home directory     3 3 EMC2 Release Description    EMC2 will be using a release model similar to  but simpler than  the one used by Debian  At any  one time there will be three versions of EMC2  Debian uses  stable    testing   and  unstable   We  will be using  Rel
51.  agents or retailers  of that edition to the public     It is requested  but not required  that you contact the authors of the Document well before redistributing any  large number of copies  to give them a chance to provide you with an updated version of the Document     4  MODIFICATIONS    206    You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3  above  provided that you release the Modified Version under precisely this License  with the Modified Version  filling the role of the Document  thus licensing distribution and modification of the Modified Version to whoever  possesses a copy of it  In addition  you must do these things in the Modified Version     A  Use in the Title Page  and on the covers  if any  a title distinct from that of the Document  and from those  of previous versions  which should  if there were any  be listed in the History section of the Document   You  may use the same title as a previous version if the original publisher of that version gives permission  B  List  on the Title Page  as authors  one or more persons or entities responsible for authorship of the modifications  in the Modified Version  together with at least five of the principal authors of the Document  all of its principal  authors  if it has less than five   C  State on the Title page the name of the publisher of the Modified Version  as  the publisher  D  Preserve all the copyright notices of the Document  E  Add an appropriate co
52.  and Utilities    halemd Command line tool for configuration and tuning  See section 10 1   halgui GUI tool for configuration and tuning  not implemented yet     halmeter A handy multimeter for HAL signals  See section 10 2   halscope A full featured digital storage oscilloscope for HAL signals  See section 10 3    Each of these building blocks is described in detail in later chapters     6 4 Tinkertoys  Erector Sets  Legos and the HAL    A first introduction to HAL concepts can be mind boggling  Building anything with blocks can be a  challenge but some of the toys that we played with as kids can be an aid to building things with the  HAL     6 4 1 Tower    Pm watching as my son and his six year old daughter build a tower from a box full of  random sized blocks  rods  jar lids and such  The aim is to see how tall they can make  the tower  The narrower the base the more blocks left to stack on top  But the narrower  the base  the less stable the tower  I see them studying both the next block and the shelf  where they want to place it to see how it will balance out with the rest of the tower     The notion of stacking cards to see how tall you can make a tower is a very old and honored way  of spending spare time  At first read  the integrator may have gotten the impression that building a  HAL was a bit like that  It can be but with proper planning an integrator can build a stable system  as complex as the machine at hand requires     6 4 2 Erector Sets     What was great abo
53.  around the world  It is now used to con   trol many different kinds of machines  More recently the Sherline company http    www sherline   com has released their first CNC mill  It uses a standard release of the EMC     The source code files that make up the controller are kept in a repository on http    cvs linuxcnc   org  They are available for anyone to inspect or download  The EMC2 source code  with a few ex   ceptions   is released under the GNU General Public License  GPL   The GPL controls the terms  under which EMC2 can be changed and distributed  This is done in order to protect the rights of  people like you to use  study  adapt  improve  and redistribute it freely  now and in the future  To  read about your rights as a user of EMC2  and the terms under which you are allowed to distribute  any modifications you may make  see the full GPL at http    www gnu org copyleft gpl html     1 5 How EMC2 Works    The Enhanced Machine Controller  EMC2  is a lot more than just another CNC mill program  It  can control machine tools  robots  or other automated devices  It can control servo motors  stepper  motors  relays  and other devices related to machine tools  In this handbook we focus on only a  small part of that awesome capability  the mini mill     Figure 1 1 shows a simple block diagram showing what a typical 3 axis EMC2 system might look  like  This diagram shows a stepper motor system  The PC  running Linux as its operating system   is actually controlling the stepp
54.  as outputs  Note that you must know the base address of the  parallel port to properly configure the driver  For ISA bus ports  this is usually not a problem  since  the port is almost always at a    well known    address  like 0278 or 0378 which is typically configured  in the system BIOS  The address for a PCI card is usally shown in    lspci  v    in an    I O ports    line   or in the kernel message log after executing    sudo modprobe  a parport_pc     There is no default  address  if  lt config string gt  does not contain at least one address  it is an error     16 1 2 Pins    e  BIT  parport  lt portnum gt  pin  lt pinnum gt  out     Drives a physical output pin   e  BIT  parport  lt portnum gt  pin  lt pinnum gt  in     Tracks a physical input pin     e  BIT  parport  lt portnum gt  pin  lt pinnum gt  in not     Tracks a physical input pin  but in   verted     For each pin   lt portnum gt  is the port number  and  lt pinnum gt  is the physical pin number in the 25  pin D shell connector     For each physical output pin  the driver creates a single HAL pin  for example parport 0 pin 14 out   Pins 2 through 9 are part of the data group and are output pins if the port is defined as an output  port   Output is the default   Pins 1  14  16  and 17 are outputs in all modes  These HAL pins  control the state of the corresponding physical pins     For each physical input pin  the driver creates two HAL pins  for example parport 0 pin 12 in  and parport 0 pin 12 in not  Pins 
55.  as we can write it directly   AD   Vx    y     BD   y  Bz     x     y   or translated to actual code     double x2   pos  gt tran x   pos  gt tran x        double y2   pos  gt tran y   pos  gt tran y   joints 0    sqrt x2   y2    joints 1    sqrt  Bx   pos  gt tran x    Bx   pos  gt tran x    y2      return 0     20 4 Implementation details    A kinematics module is implemented as a HAL component  and is permitted to export pins and  parameters  It consists of several functions           e int kinematicsForward  const double   joint  EmcPose  world  const KINEMATICS _FORWARD_FL   fflags  KINEMATICS_INVERSE_ FLAGS x iflags                 Implements the forward kinematics function as described in section 20 3 1           e extern int kinematicsInverse const EmcPose   world  double  joints  const KINEMATICS_I  xiflags  KINEMATICS_FORWARD_FLAGS xfflags     Implements the inverse kinematics function as described in section 20 3 2        T          e extern KINEMATICS_TYPE kinematicsType  void        Returns the kinematics type identifier        e int kinematicsHome  EmcPose  world  double  joint  KINEMATICS_FORWARD_FLAGS x fflags   KINEMATICS_INVERSE_FLAGS xiflags   The home kinematics function sets all its arguments to their proper values at the known home  position  When called  these should be set  when known  to initial values  e g   from an INI  file  If the home kinematics can accept arbitrary starting points  these initial values should be  used                       e in
56.  built in pre tuned position loop  so PID tuning is not required   In velocity mode  it drives a motor at the commanded speed  while obeying velocity and acceleration  limits  It is a realtime component only  and depending on CPU speed  etc  is capable of maximum  step rates of 10kHz to perhaps 50kHz  Figure 15 1 shows three block diagrams  each is a single step  pulse generator  The first diagram is for step type    0      step and direction   The second is for step  type  l     up down  or pseudo PWM   and the third is for step types 2 through 14  various stepping  patterns   The first two diagrams show position mode control  and the third one shows velocity  mode  Control mode and step type are set independently  and any combination can be selected     15 1 1 Installing    emc2  halcmd loadrt stepgen step type  lt type array gt   ctrl_type  lt ctrl_array gt       lt type array gt  is a series of comma separated decimal integers  Each number causes a single step  pulse generator to be loaded  the value of the number determines the stepping type   lt ctrl_array gt   is a comma separated series of    p    or    v    characters  to specify position or velocity mode  ctrl_type  is optional  if ommitted  all of the step generators will be position mode  For example     emc2  halcmd loadrt stepgen o step_type 0 0 2 ctrl_type p p v    will install three step generators  The first two use step type    0     step and direction  and run in  position mode  The last one uses step type 
57.  but are gone as soon as it is     The entry box labeled Test Hal Command   will accept any of the commands listed for halemd   These include     e loadrt  unloadrt  e addf  delf    CHAPTER 10  TOOLS AND UTILITIES 79    e newsig  delsig  e linkpp  linksp  linkps  unlinkp    e setp  sets    This little editor will enter a command any time you press  lt enter gt  or push the execute button   An error message from halemd will show below this entry widget when these commands are not  properly formed  If you are not certain how to set up a proper command you ll need to read again  the documentation on halemd and the specific modules that you are working with     Let s use this editor to add a differential module to a hal and connect it to axis position so that we  could see the rate of change in position  ie acceleration  We first need to load a hal module named  blocks  add it to the servo thread  then connect it to the position pin of an axis  Once that is done  we can find the output of the differentiator in halscope  So let s go   yes I looked this one up      loadrt blocks ddt 1  Now look at the components node and you should see blocks in there someplace     Loaded HAL Components   ID Type Name   10 User halcmd29800   09 User halcmd29374   08 RT blocks   06 RT hal_parport   05 RT scope_rt   04 RT stepgen   03 RT motmod   02 User iocontrol             Sure enough there itis  Notice that its id is 08  Next we need to find out what functions are available  with it so we look at
58.  corresponding ADC           e  BIT  stg out  lt pinnum gt  invert     Inverts an output pin     The  invert parameter determines whether an output pin is active high or active low  If  invert  is FALSE  setting the HAL out  pin TRUE drives the physical pin high  and FALSE drives it low  If   invert is TRUE  then setting the HAL out  pin TRUE will drive the physical pin low     16 4 4 Functions    e  FUNCT  stg capture position     Reads the encoder counters from the axis  lt channel gt    e  FUNCT  stg write dacs     Writes the voltages to the DACs   e  FUNCT  stg read adcs     Reads the voltages from the ADCs     e  FUNCT  stg di read     Reads physical in  pins of all ports and updates all HAL in  and  in  lt pinnum gt  not pins           e  FUNCT  stg do write     Reads all HAL out  pins and updates all physical output pins     16 5 Mesa Electronics m5i20    Anything I O Card       The Mesa Electronics m5i20 card consists of an FPGA that can be loaded with a wide variety of  configurations  and has 72 pins that leave the PC  The assignment of the pins depends on the  FPGA configuration  Currently there is a HAL driver for the    4 axis host based motion control     configuration  and this FPGA configurations is also provided with EMC2  It provides 8 encoder  counters  4 PWM outputs  normally used as DACs  and up to 48 digital I O channels  32 inputs  and 16 outputs        Installing   loadrt hal_m5i20  loadFpga 1 0   dacRate  lt rate gt      If loadFpga is 1  the default 
59.  functions        Exported Functions   Owner CodeAddr Arg FP Users Name  08 E0B97630 EODC7674 YES 0 ddt 0  03 EODEF83C 00000000 YES 1 motion command handler  03 EODFOBF3 00000000 YES 1 motion controller  06 EOB541FE E0DC75B8 NO parport 0 read  06 E0B54270 EODC75B8 NO parport 0 write  06 E0B54309 EODC75B8 NO parport read all  O  O                               06 EOB5433A EODC75B8 N parport write all  05 EOAD712D 00000000 N scope sample  04 EO0B618C1 E0DC7448 YES 1 stepgen capture position  04 EOB612F5 E0DC7448 NO 1 stepgen make pulses   04 EOB614AD E0DC7448 YES 1 stepgen update freq    GOG O HP f                               Here we look for owner  08 and see that blocks has exported a function named ddt 0  We should be  able to add ddt 0 to the servo thread and it will do its math each time the servo thread is updated   Once again I look up the addf command and find that it uses three arguments like this     addf  lt functname gt   lt threadname gt    lt position gt    We already know the functname ddt 0 so let s get the thread name right by expanding the thread    node in the tree  Here we see two threads servo thread and base thread  The position of ddt 0 in  the thread is not critical     CHAPTER 10  TOOLS AND UTILITIES 80    Figure 10 3  Addf Command  HAC Configuration    File View       Components _  Show   Watch   Modify   Tune 0   Tune 1   Tune 2    Pins  Parameters Realtime Threads   Signals Period FP Name  Time  Max Time   Functions 1005720 YES servo thread   7622 
60.  gt  a vbox   lt  text gt  lt  label gt    lt led gt  lt  led gt    lt number gt  lt  number gt    lt bar gt  lt  bar gt    lt  hbox gt        a hbox  O 0 0    0 0 100 0       Inside a Hbox  you can use the  lt boxfill fill     gt    lt boxanchor anchor     gt   and  lt boxexpand  expand     gt  tags to choose how items in the box behave when the window is re sized  For details  of how fill  anchor  and expand behave  refer to the Tk pack manual page  pack  3tk   By default   fill  y   anchor   center     expand   yes           18 6 2 Vbox  Use a Vbox when you want to stack widgets vertically on top of each other      lt vbox gt    lt label gt  lt text gt  a vbox   lt  text gt  lt  label gt    lt led gt  lt  led gt    lt number gt  lt  number gt    lt bar gt  lt  bar gt    lt  vbox gt        CHAPTER 18  VIRTUAL CONTROL PANELS 160    a vbox        Inside a Hbox  you can use the  lt boxfill fill     gt    lt boxanchor anchor     gt   and  lt boxexpand  expand     gt  tags to choose how items in the box behave when the window is re sized  For details  of how fill  anchor  and expand behave  refer to the Tk pack manual page  pack  3tk   By default   fill    x     anchor   center     expand   yes           18 6 3 Label    A label is a piece of text on your panel      lt label gt    lt text gt  This is a Label   lt  text gt    lt font gt     Helvetica     20  lt  font gt      lt  label gt     This is a Label       A labelframe is a frame with a groove and a label at the upper left 
61.  has taken on a lot of different meanings over the years  In the early days CNC  replaced the hands of a skilled machinist with motors that followed commands in much the same  way that the machinist turned the hand wheels  From these early machines  a language of machine  tool control has grown  This language is called RS274 and several standard variants of it have been  put forward  It has also been expanded by machine tool and control builders in order to meet the  needs of specific machines  If a machine changed tools during a program it needed to have tool  change commands  If it changed pallets in order to load new castings  it had to have commands  that allowed for these kinds of devices as well  Like any language  RS274 has evolved over time   Currently there are several dialects  In general each machine tool maker has been consistent within  their product line but different dialects can have commands that cause quite different behavior from  one machine to another     More recently the language of CNC has been hidden behind or side stepped by several programming  schemes that are referred to as    Conversational  programming languages     One common feature  of these kinds of programming schemes is the selection of a shape or geometry and the addition of  values for the corners  limits  or features of that geometry     The use of Computer Aided Drafting has also had an effect on the CNC programming languages   Because CAD drawings are saved as a list or database of ge
62.  in machine units  Backlash compensation value can be used to  make up for small deficiencies in the hardware used to drive an axis     COMP_FILE   file extension A file holding a compensation structure for the specific axis  The  values inside are triplets of nominal  forward and reverse positions which correspond to the  nominal position  where it should be   forward  where the axis is while travelling forward  and  reverse  where the axis is while travelling back   One set of triplets per line  Currently the  limit inside EMC2 is for 256 triplets   axis  If COMP_FILE is specified  BACKLASH is ignored   COMP_FILE values are in machine units     COMP_FILE_TYPE   1 Specifying a non zero value changes the expected format ofthe COMP_FILE   For COMP_FILE_TYPE of zero  the values are triplets for nominal  forward  amp  reverse  Other   wise  the values in the COMP_FILE are nominal  forward_trim and reverse_trim  These corre   spond to the nominal  nominal forward and nominal reverse defined above     MIN_LIMIT    1000 The minimum limit  soft limit  for axis motion  in machine units  When this  limit is exceeded  the controller aborts axis motion     MAX_LIMIT   1000 The maximum limit  soft limit  for axis motion  in machine units  When this  limit is exceeded  the controller aborts axis motion     MIN_FERROR   0 010 This is the value in machine units by which the axis is permitted to deviate  from commanded position at very low speeds  If MIN_FERROR is smaller than FERROR  the  t
63.  interconnected as  needed     Parameter  Many hardware components have adjustments that are not connected to any other  components but still need to be accessed  For example  servo amps often have trim pots  to allow for tuning adjustments  and test points where a meter or scope can be attached to  view the tuning results  HAL components also can have such items  which are referred to  as  parameters   There are two types of parameters  Input parameters are equivalent to trim  pots   they are values that can be adjusted by the user  and remain fixed once they are set   Output parameters cannot be adjusted by the user   they are equivalent to test points that  allow internal signals to be monitored     Pin  Hardware components have terminals which are used to interconnect them  The HAL equiva   lent is a  pin  or  HAL pin     HAL pin  is used when needed to avoid confusion   All HAL pins  are named  and the pin names are used when interconnecting them  HAL pins are software  entities that exist only inside the computer     Physical_Pin  Many I O devices have real physical pins or terminals that connect to external hard   ware  for example the pins of a parallel port connector  To avoid confusion  these are referred  to as  physical pins   These are the things that    stick out    into the real world     Signal  In a physical machine  the terminals of real hardware components are interconnected by  wires  The HAL equivalent of a wire is a  signal  or  HAL signal   HAL signals 
64.  is always negative  The corresponding digital output invert may be set to TRUE to  make UPx active low rather than active high     DNx The  down   up down mode  or    direction     pwm direction mode  signal from PWM generator  X  May be used as a digital output if the corresponding PWM channel is unused  or the output  on the channel is never negative  The corresponding digital ouput invert may be set to TRUE  to make DNx active low rather than active high     QAx  QBx The A and B signals for Quadrature counter X  May be used as a digital input if the  corresponding quadrature channel is unused     CHAPTER 16  HARDWARE DRIVERS 143   QZx The Z  index  signal for quadrature counter X  May be used as a digital input if the index  feature of the corresponding quadrature channel is unused    INx Dedicated digital input  x   OUTx Dedicated digital output  x   GND Ground   VCC  3 3V regulated DC    Figure 16 2  Pluto Servo Pinout                                                                                                                               AA Dara D PES  INT END arallel Port Connector Deer  30 10 a Jack  gt   3 ING   OUTE QUTI  5 IN6 ALEX FPGA   OUT6 OUT   7 GND   OUT4 OUT5   LED OUT2 OUT3   INO UPU UPT GND DN3 UP3 UBO VCC QZ0 RBT DA  QB2 OUTO QB3 OUTI  DNO GND DN1 DN2 UP2 GND QAO VCC GND QA  QZ1 GND QZ2 As 0Z3                                                    16 9 2 Input latching and output updating    e PWM duty cycles for each channel are updated at different ti
65.  it  The interpreter then figures out what needs to be done for the motion and input or output  systems and sends blocks of canonical commands to the task and motion planning programs     1 5 5 Modes of Operation    When an EMC2 is running  there are three different major modes used for inputting commands   These are Manual  Auto  and MDI  Changing from one mode to another makes a big difference in  the way that the EMC2 behaves  There are specific things that can be done in one mode that can  not be done in another  An operator can home an axis in manual mode but not in auto or MDI  modes  An operator can cause the machine to execute a whole file full of G codes in the auto mode  but not in manual or MDI     In manual mode  each command is entered separately  In human terms a manual command might  be    turn on coolant    or    jog X at 25 inches per minute     These are roughly equivalent to flipping a       CHAPTER 1  THE ENHANCED MACHINE CONTROL 9    TKEMC  TkEmc BackPlot  File View Settings Units Scripts SETUP RESE    ON MIST OFF   SPINDLE OFF    AUTO FLOOD OFF   BRAKE ON    Tool  1 Offset  0 0000 NS RaRa  mm     override limits   y relative     machine  actual     commanded   2 joint   y world    continuous        home      Axis Speed  EM Feed Override    100   Spindle speed Override  100    G1 G17 G40 G21 G90 G94 G54 G49 G99 G64 G51 M2 M5 M9 M48 F225 51600  Program  fhomefjuve emc2inc_files 3D_Chips ngc   Status  idle    Open      Run Pause   Resume   Step   Verify Opt
66.  it backs off the switch at  HOME_SEARCH_VEL  the direction of the back off is opposite the sign of HOME_SEARCH_VEL    Then it searches for the home switch by moving in the direction specified by the sign of HOME_SEARCH_VEL      at a speed determined by its absolute value  When the home switch is detected  the joint will stop  as fast as possible  but there will always be some overshoot  The amount of overshoot depends on  the speed  If it is too high  the joint might overshoot enough to hit a limit switch or crash into the  end of travel  On the other hand  if  HOME_SEARCH_VEL is too low  homing can take a long time     4 4 3 2 HOME LATCH VEL    Specifies the speed and direction that EMC uses when it makes its final accurate determination of  the home switch  if present  and index pulse location  if present   It will usually be slower than the  search velocity to maximise accuracy  If HOME_SEARCH_VEL and HOME_LATCH_VEL have the  same sign  then the latch phase is done while moving in the same direction as the search phase    In that case  EMC first backs off the switch  before moving towards it again at the latch velocity    If HOME_SEARCH_VEL and HOME_LATCH_VEL have opposite signs  the latch phase is done while  moving in the opposite direction from the search phase  That means EMC will latch the first pulse  after it moves off the switch  If  HOME_SEARCH_VEL is zero  meaning there is no home switch      CHAPTER 4  INI CONFIGURATION       SEARCH_VEL   POSITIVE HOME_OFFSET  
67.  it down   you will  need it later  It contains the worst latency measurement during the entire run of the test  In the  example above  that is 10636 nano seconds  or 10 6 micro seconds  which is excellent  However  the example only ran for a few seconds  it prints one line every second   You should run the test  for at least several minutes  sometimes the worst case latency doesn   t happen very often  or only  happens when you do some particular action  I had one Intel motherboard that worked pretty well  most of the time  but every 64 seconds it had a very bad 300uS latency  Fortunately that is fixable   see FixingDapperSMIlssues in the wiki found at wiki linuxcnc org     So  what do the results mean  If your  ovl max  number is less than about 15 20 microseconds   15000 20000 nanoseconds   the computer should give very nice results with software stepping  If  the max latency is more like 30 50 microseconds  you can still get good results  but your maximum  step rate might be a little dissapointing  especially if you use microstepping or have very fine pitch  leadscrews  If the numbers are 100uS or more  100 000 nanoseconds   then the PC is not a good  candidate for software stepping  Numbers over 1 millisecond  1 000 000 nanoseconds  mean the PC  is not a good candidate for EMC  regardless of whether you use software stepping or not     Note that if you get high numbers  there may be ways to improve them  For example  one PC had  very bad latency  several milliseconds  wh
68.  joint is  closed    axis N index enable IO BIT Should be attached to the index enable pin of the joint s encoder to  enable homing to index pulse    axis N jog counts IN s32 Connect to the    counts    pin of an external encoder to use a physical jog  wheel     axis N jog enable IN bit When TRUE  and in manual mode   any change in    jog counts    will result  in motion  When false     jog counts    is ignored     axis N jog scale IN float Sets the distance moved for each count on    jog counts     in machine units     axis N jog vel mode IN bit When FALSE  the default   the jog wheel operates in position mode  The  axis will move exactly jog scale units for each count  regardless of how long that might take   When TRUE  the wheel operates in velocity mode   motion stops when the wheel stops  even if  that means the commanded motion is not completed     axis N motor pos cmd OUT float The commanded position for this joint   axis N motor pos fb IN float The actual position for this joint     axis N joint pos cmd The joint  as opposed to motor  commanded position  There may be an offset  between the joint and motor positions   for example  the homing process sets this offset     axis N joint pos fb The joint  as opposed to motor  feedback position     5 2 2 Parameters    Many of these parameters serve as debugging aids  and are subject to change or removal at any  time    axis N active TRUE when this joint is active   axis N backlash corr Backlash or screw compensation raw valu
69.  load if  the Linux loop module was also present on the system     When loaded  halcmd show comp will show a component called hal_loop  However  the pin shown  by halcmd show pin will be loop 0 example  not hal loop 0 example    CHAPTER 11  COMP  A TOOL FOR CREATING HAL MODULES 91    11 13 5 arraydemo    This realtime component illustrates use of fixed size arrays     component arraydemo  4 bit Shift register    pin in bit in    pin out bit out    4     function _ nofp     rr    int i   for i 3  i1 gt 0  i    out i    out  1 1    out  0    in     11 13 6 rand    This userspace component changes the value on its output pin to a new random value in the range   0  1  about once every lms     component rand   option userspace     pin out float out   ir     include  lt unistd h gt     void user_mainloop void     while 1     usleep  1000     FOR_ALL_INSTS   out   drand48       11 13 6 1 logic    This realtime component shows how to use    personality    to create variable size arrays and optional  pins     component logic    pin in bit in    16   personality  amp  Oxff     pin out bit and if personality     0x100    pin out bit or if personality  amp  0x200    pin out bit xor if personality  amp  0x400    function _ nofp    description       Experimental general    logic function    component  Can perform    and        or     and  xor    of up to 16 inputs  Determine the proper value for    personality     by adding     IP    bu 4   The number of input pins  usually from 2 to 16   
70.  may process the commandline argu   ments or take other actions  Its return type is void  it may call exit    if it wishes to  terminate rather than create a hal component  for instance  because the commandline  arguments were invalid      If an option   s VALUE is not specified  then it is equivalent to specifying option     yes  The  result of assigning an inappropriate value to an option is undefined  The result of using any  other option is undefined     LICENSE Specify the license of the module  for the documentation and for the MODULE_LICENSE   module declaration     11 5 Per instance data storage    variable CTYPE NAME   variable CTYPE NAME SIZE    variable CTYPE NAME   DEFAULT     CHAPTER 11  COMP  A TOOL FOR CREATING HAL MODULES 87    variable CTYPE NAME  SIZE    DEFAULT     Declare a per instance variable NAME of type CTYPE  optionally as an array of SIZE items  and  optionally with a default value DEFAULT  Items with no DEFAULT are initialized to all bits   zero  CTYPE is a simple one word C type  such as float  u32  s32  etc    Access to array variables uses square brackets     C   style one line comments          and C style multi line comments               are both  supported in the declaration section     11 6 Other restrictions on comp files    Though HAL permits a pin  a parameter  and a function to have the same name  comp does not     11 7 Convenience Macros    Based on the items in the declaration section  comp creates a C structure called struct state   
71.  minimum spindle override the user may select  0 5 means  50  of the programmed spindle speed   This is useful as it   s dangerous to run a program with  a too low spindle speed      MAX SPINDLE_OVERRIDE   1 0 The maximum spindle override the user may select  1 0 means  100  of the programmed spindle speed    PROGRAM_PREFIX     emc2 nc_files The default location for g code files and the location for  user defined M codes    INTRO_GRAPHIC   emc2 gif The image shown on the splash screen  INTRO_TIME   5 The maximum time to show the splash screen    4 3 2 1 AXIS Interface    If your using the Axis interface the following can be used with it only     DEFAULT_LINEAR_VELOCITY    25 The default velocity for linear jogs  in machine units per sec   ond     MAX LINEAR VELOCITY   1 0 The maximum velocity for linear jogs  in machine units per sec   ond     DEFAULT_ANGULAR_VELOCITY    25 The default velocity for angular jogs  in machine units per  second     MAX ANGULAR _VELOCITY   1 0 The maximum velocity for angular jogs  in machine units per  second     INCREMENTS   1 mm   5 in      Defines the increments available for incremental jogs  The INCRE   MENTS can be used to override the default  The values can be decimal numbers  e g   0 1000   or fractional numbers  e g   1 16   optionally followed by a unit  cm  mm  um  inch  in or mil    If a unit is not specified the machine unit is assumed  Metric and imperial distances may be  mixed  INCREMENTS   1 inch  1 mil  1 cm  1 mm  1 um is a va
72.  on the application  Some  processes must not allow an overshoot of the process variable from the setpoint  Other processes  must minimize the energy expended in reaching a new setpoint  Generally stability of response is  required and the process must not oscillate for any combination of process conditions and setpoints     CHAPTER 22  PID TUNING 178    Tuning of loops is made more complicated by the response time of the process  it may take minutes  or hours for a setpoint change to produce a stable effect  Some processes have a degree of non   linearity and so parameters that work well at full load conditions don   t work when the process is  starting up from no load  This section describes some traditional manual methods for loop tuning     There are several methods for tuning a PID loop  The choice of method will depend largely on  whether or not the loop can be taken  offline  for tuning  and the response speed of the system   If the system can be taken offline  the best tuning method often involves subjecting the system to  a step change in input  measuring the output as a function of time  and using this response to  determine the control parameters     22 1 3 0 0 4 Simple method Ifthe system must remain online  one tuning method is to first set  the I and D values to zero  Increase the P until the output of the loop oscillates  Then increase I  until oscillation stops  Finally  increase D until the loop is acceptably quick to reach its reference  A  fast PID loop tun
73.  only   Cxx F   Counter xx full overflow  boolean  user read only   Cxx V   Counter xx current value  integer  user read only   Cxx P   Counter xx preset  integer    Ixxx   Physical input xxx  boolean    HAL input bit     Qxxx   Physical output xxx  boolean    HAL output bit    Xxxx   Activity of step xxx  sequential language     Xxxx V   Time of activity in seconds of step xxx  sequential language     CHAPTER 24  CLASSICLADDER 189  24 6 Using JUMP COILs    JUMP COILs are used to JUMP    to another section like a goto in BASIC programming language     If you look at the top left of the sections display window you will see a small lable box and a longer  comment box beside it  Now go to Editor  gt Modify then go back to the little box  type in a name     Go ahead and add a comment in the comment section  This lable name is the name of this rung  only and is used by the JUMP COIL to identify where to go     When placing a JUMP COIL add it in the right most position and change the lable to the rung you  want to JUMP to     JUMP COILs should be placed as the last coil of a rung because of a bug  If there are coils after the  JUMP COIL  in the same rung  they will be updated even if the JUMP COIL is true      24 7 Using CALL COILs    CALL COILs are used to go to a subroutine section then return like a gosub in BASIC programming  language     If you go to the sections manager window hit the add section button  You can name this section   select what language it will use  ladder or 
74.  pwm 0 pwmdir is TRUE  this pin is the DIR output  OUT11 XOR d with DNO or DIRO   DN1 DIR1 When pwm 1 pwmdir is TRUE  this pin is the DIR output  OUT13 XOR d with DN1 or DIR1   DN2 DIR2 When pwm 2 pwmdir is TRUE  this pin is the DIR output  OUTI15 XOR d with DN2 or DIR2   DN3 DIRS When pwm 3 pwmdir is TRUE  this pin is the DIR output  OUT17 XOR d with DN3 or DIR3   QZO IN8 Read same value   QZ1 IN9 Read same value   QZ2 IN10 Read same value   QZ3 IN11 Read same value   QAO IN12 Read same value   Al IN13 Read same value   QA2 IN14 Read same value   QA3 IN15 Read same value   QBO IN16 Read same value   QB1 IN17 Read same value   QB2 IN18 Read same value   QB3 IN19 Read same value                      CHAPTER 16  HARDWARE DRIVERS 145    L298  or up to 2A  two motors per L298  with the supply voltage up to 46V  However  the L298  does not have built in current limiting  a problem for motors with high stall currents  For higher  currents and voltages  some users have reported success with International Rectifier s integrated  high side low side drivers   http    www cnczone com forums showthread php t 25929     16 10 Pluto step  300kHz Hardware Step Generator    Pluto step is suitable for control of a 3  or 4 axis CNC mill with stepper motors  The large number  of inputs allows for a full set of limit switches     The board features   e 4    step direction    channels with 312 5kHz maximum step rate  programmable step length   space  and direction change times  e 14 dedicated digi
75.  result from nuts that are loose  on leadscrews  slippage in belts  cable slack   wind up  in rotary couplings  and other places  where the mechanical system is not  tight   Backlash will result in inaccurate motion  or in  the case of motion caused by external forces  think cutting tool pulling on the work piece  the  result can be broken cutting tools  This can happen because of the sudden increase in chip  load on the cutter as the work piece is pulled across the backlash distance by the cutting tool     Backlash Compensation   Any technique that attempts to reduce the effect of backlash without  actually removing it from the mechanical system  This is typically done in software in the  controller  This can correct the final resting place of the part in motion but fails to solve  problems related to direction changes while in motion  think circular interpolation  and motion  that is caused when external forces  think cutting tool pulling on the work piece  are the source  of the motion     Ball Screw A type of lead screw that uses small hardened steel balls between the nut and screw  to reduce friction  Ball screws have very low friction and backlash  but are usually quite  expensive     Ball Nut A special nut designed for use with a ball screw  It contains an internal passage to re   circulate the balls from one end of the screw to the other     CNC Computer Numerical Control  The general term used to refer to computer control of machin   ery  Instead of a human operator 
76.  signal gets defined and linked to a parport pin    13 3 3 Changing the standard_pinout hal    If you want to change the standard_pinout hal file  all you need is a text editor  Open the file and  locate the parts you want to change     If you want for example to change the pin for the X axis Step  amp  Directions signals  all you need to  do is to change the number in the  parport 0 pin XX out  name     linksp Xstep parport 0 pin 03 out  linksp Xdir parport 0 pin 02 out       can be changed to     linksp Xstep parport 0 pin 02 out  linksp Xdir parport 0 pin 03 out       or basically any other numbers you like   Hint  make sure you don t have more than one signal connected to the same pin     13 3 4 Changing the polarity of a signal    If external hardware expects an    active low    signal  set the corresponding  invert parameter  For  instance  to invert the spindle control signal        setp parport 0 pin 09 invert TRUE    13 3 5 Adding PWM Spindle Speed Control    If your spindle can be controlled by a PWM signal  use the pwmgen component to create the signal     loadrt pwmgen output_type 0   addf pwmgen update servo thread   addf pwmgen make pulses base thread   net spindle speed cmd motion spindle speed out   gt  pwmgen 0 value   net spindle on motion spindle on   gt  pwmgen 0 enable   net spindle pwm pwmgen 0 pwm   gt  parport 0 pin 09 out   setp pwmgen 0 scale 1800   Change to your spindle   s top speed in RPM             This assumes that the spindle controller s res
77.  so the parport will get read and written to     193    CHAPTER 26  MPG PENDANT 194    26 2 Hook it up in HAL    In your custom hal file or other  hal file add the following making sure you don t have mux4 or an  encoder already in use  Ifyou do just increase the counts and change the reference number       Jog Pendant   loadrt encoder num_chan 1  loadrt mux4 count 1   addf encoder capture position servo thread  addf encoder  update counters base thread   addf mux4 0 servo thread   setp encoder 0 x4 mode 0   setp mux4 0 in0 0 1   setp mux4 0 in1 0 01   setp mux4 0 in2 0 001   net scalel mux4 0 sel0  lt   parport 1 pin 09 in  net scale2 mux4 0 sell  lt   parport 1 pin 10 in  net pend scale axis 0 jog scale  lt   mux4 0 out  net pend scale axis 1l jog scale   net pend scale axis 2 jog scale   net mpg a encoder 0 phase A  lt   parport 1 pin 02 in  net mpg b encoder 0 phase B  lt   parport      pin 03 in    net mpg y axis 1 jog enable  lt   parport     1  1   net mpg x axis 0 jog enable  lt   parport 1 pin 04 in  1 pin 05 in  1    A  li    net mpg z axis 2 jog enable parport 1 pin 06 in  net pend counts axis 0 jog counts  lt   encoder 0 counts  net pend counts axis l jog counts    net pend counts axis 2 jog counts    Part XII    FAQ    195    Chapter 27    Linux FAQ    These are some basic Linux commands and techniques for new to Linux users  More complete  information can be found on the web or by using the man pages     27 1 Man Pages    Man pages are automatically generated ma
78.  the bidirectional parallel port was introduced  which allows the data group to  be used for output or input  The HAL driver supports the bidirectional port  and allows the user to  set the data group as either input or output  If configured as output  a port provides a total of 12  outputs and 5 inputs  If configured as input  it provides 4 outputs and 13 inputs     In some parallel ports  the control group pins are open collectors  which may also be driven low by  an external gate  On a board with open collector control pins  the    x    mode allows a more flexible  mode with 8 dedicated outputs  5 dedicated inputs  and 4 open collector pins  In other parallel  ports  the control group has push pull drivers and cannot be used as an input      No other combinations are supported  and a port cannot be changed from input to output once the  driver is installed  Figure 16 1 shows two block diagrams  one showing the driver when the data  group is configured for output  and one showing it configured for input     The parport driver can control up to 8 ports  defined by MAX_PORTS in hal_parport c   The ports  are numbered starting at zero     16 1 1 Installing    loadrt hal_parport cfg   lt config string gt      The config string consists of a hex port address  followed by an optional direction  repeated for  each port  The direction is    in        out     or    x    and determines the direction of the physical pins 2  through 9  and whether to create input HAL pins for the physi
79.  the driver will load the FPGA configuration on startup  If it is O  the  driver assumes the configuration is already loaded  dacRate sets the carrier frequency for the PWM  outputs  in Hz  The default is 32000  for 32KHz PWM  Valid values are from 1 to 32226  The driver  prints some useful debugging message to the kernel log  which can be viewed with dmesg     Up to 4 boards may be used in one system        Sif IIOO is defined  there are 16 input pins  in 00    in 15  and 16 output pins  out 00    out 15   and they correspond to  PORTs ABCD  in 00 is PORTA O  out 15 is PORTD 7    7Ideally the encoders     DACs     and digital I O would comply with the canonical interfaces defined earlier  but they don t   Fixing that is on the things to do list     CHAPTER 16  HARDWARE DRIVERS    16 5 1 Pins    132    In the following pins  parameters  and functions   lt board gt  is the board ID  According to the naming  conventions the first board should always have an ID of zero  however this driver uses the PCI board  ID  so it may be non zero even if there is only one board     e  s32  m5i20  lt board gt  enc  lt channel gt  count     Encoder position  in counts      FLOAT  m5i20  lt board gt  enc  lt channel gt  position     Encoder position  in user units      B     B    T  m5120  lt board gt  enc  lt channel gt      index     Current status of index pulse input        T  m5i20  lt board gt  enc  lt channel gt     index enable     when TRUE  and an index pulse ap     pears on the enco
80.  the initial installation is done  Ubuntu will prompt you when updates of EMC2 or its  supporting files are available  When they are  you can update them easily and automatically  with the Update Manager     2 5 Manual installing using apt commands     The following few section will describe how to install EMC2 on Ubuntu 6 06    Dapper Drake    using  a console and apt commands  If you know a bit about Linux and Debian flavored distributions this  might be trivial  If not  you might consider reading 2 4     First add the repository to  etc apt sources list       sudo sh  c  echo  deb http    www linuxcnc org emc2  dapper emc2 2   gt  gt  etc apt sources list        sudo sh  c echo  deb src http   www linuxcnc org emc2  dapper emc2 2   gt  gt  etc apt sources list       Then update  amp  get EMC2       sudo apt get update    sudo apt get install emc2    This command will install the EMC2 package along with all dependencies      You might get warnings that the packages are from an untrusted source  this means your com   puter doesn t recognize the GPG signature on the packages   To correct that issue the following  commands        The dependencies are one of the nicest thing in Debian based distributions  They assure you have everything installed  that you need  In the case of EMC2 it s even a RT patched kernel  and all needed libraries     CHAPTER 2  INSTALLING THE EMC2 SOFTWARE      gpg   keyserver pgpkeys mit edu   recv key BC92B87F    gpg  a   export BC92B87F   sudo apt key
81.  thes ad Sei we dea  MO PY oe ine  amp  A ee ES SE ER SOS Ae A ee e ee LS Gi Stee  ee a  154 1   Tnstalling oe a ee wa es  154 2    REMOVE ca ct Se A BS BNE ae Ev de de we ad BH Ge ws S  ILLAS PWNS Ga oe ee Rhee RRR Re EBA Ee Se eB Ae ey    ow  Ua o A ee ee ee ee ee e    98   99   100  100  100  101  101    102  102  103    CONTENTS x    150    Slave Encoder si A ROE BE RSW we Re RE ah Ge oo 122  SaL BONE oeann era a a ao ee ae ee oe a we 122  15 52 REMOVE 64 6 oo ewe Had REED ee eee aa DES OLD Pee wd ed Od 122  LA E odos a a a A ee E ee Oh  HE note eh eee Ae eS 122  Iod Pma ui AR A A A RA A A A Be ae 122  looo UOC da a a a Ga we RA 122   A A NN 123  1561 Installed 123  12  REMOVAL 8 Ee ee ee 123  Woe SPW e ra err ee ea a ee ee we ee ee ee E 123  15 5 4  PARAMS  ed RAE A ER ERA ARERR aa EG Ew heh SS 123  1909 a AAA 123   USE AMB a ee A A ER RA A AO A A ew a we ee 124  ISAL Wistar a a e a a aa a 124  A a A oe REE ER eel OU ee SEE eS 124  Dee  PY oe ar a a Oe we Se a eee ee ee A 124  Irat e NAAA 124  a Tomo IAN NN 124   16 Hardware Drivers 125   16 1 PRPO   cues iaa a Sw a Sw Swe Ge a A A AA 8 125  PUL  PR A SI 125  Miele  DING ear A A dd e e GO 126  Ilo e ded  oh de he  de eR ee we ae Ee eet hs ae we De we 126  Lilo PATON  oa Se Se ee A GS Re Se ie e we 128  IGIS Common probleme escasa aa EB eS 128   16 2 Probe PAPO   ow a She a a RE de Ea Soe ew ae be ewe de ja 128  1   10 ck pes Ba Ba OM ee a he ed  Gy oe lt ae a 128   IGS TRAD ZU oie we OG A eRe OE ee ae SE we GA ah ww wl e
82.  unit  to con     l gt  offset     Sets the DAC offset        L gt  gain     Sets the DAC gain  scaling         T  m5i20  lt board gt  dac  lt channel gt     interlaced     Sets the DAC to interlaced mode  Use    this mode if you are filtering the PWM to generate an anaolg voltage        B             ital output        T  m5i20  lt board gt  out  lt channel gt  invert     Inverts a digital output  see canonical dig     8with normal 10 bit PWM  50  duty cycle would be 512 cycles on and 512 cycles off   ca 30 kHz with 33 MHz reference  counter  With fully interleaved PWM this would be 1 cycle on  1 cycle off for 1024 cycles  16 66 MHz if the PWM reference  counter runs at 33 MHz    much easier to filter  The 5120 configuration interlace is somewhat between non and fully  interlaced  to make it easy to filter but not have as many transistions as fully interleaved      CHAPTER 16  HARDWARE DRIVERS 133    e  u32  m5i20  lt board gt  watchdog control     Configures the watchdog  The value may be a  bitwise OR of the following values                          Bit     Value Meaning  0 1 Watchdog is enabled  1 2 Watchdog is automatically reset by DAC writes  the HAL dac write function           Typically  the useful values are O  watchdog disabled  or 3  watchdog enabled  cleared by  dac write      e  u32  m5i20  lt board gt  led view     Maps some of the I O to onboard LEDs  See table below     16 5 3 Functions    e  FUNCT  m5i20  lt board gt  encoder read     Reads all encoder count
83.  we invite you to contribute to its revision and growth   A copy of the license is included in  the section entitled  GNU Free Documentation License   Ifyou do not find the license you may order  a copy from Free Software Foundation  Inc  59 Temple Place  Suite 330  Boston  MA 02111 1307    GNU Free Documentation License    GNU Free Documentation License Version 1 1  March 2000    Copyright  C  2000 Free Software Foundation  Inc  59 Temple Place  Suite 330  Boston  MA 02111 1307 USA  Everyone is permitted to copy and distribute verbatim copies of this license document  but changing it is not  allowed     0  PREAMBLE    The purpose of this License is to make a manual  textbook  or other written document  free  in the sense of  freedom  to assure everyone the effective freedom to copy and redistribute it  with or without modifying it   either commercially or noncommercially  Secondarily  this License preserves for the author and publisher a  way to get credit for their work  while not being considered responsible for modifications made by others     This License is a kind of  copyleft   which means that derivative works of the document must themselves be  free in the same sense  It complements the GNU General Public License  which is a copyleft license designed  for free software     We have designed this License in order to use it for manuals for free software  because free software needs  free documentation  a free program should come with manuals providing the same freedoms 
84.  will most likely not be getting any new development or additional  widgets  We strongly recommend using pyVCP  However  pyVCP won t be released until version 2 2  comes out  and VCP is in version 2 1  That means some people will wind up using VCP  so we can t  simply drop it      Place the following in the file tiny vcp     vep    main window    box    button    halpin   vcp pushbutton  label   text    Push Me       is    LED  halpin   vcp light             J    The above file describes a tiny Virtual Control Panel  with one push button  and one light  To see  what it looks like  we need to start HAL       halrun  Next we load halvcp  and give it the name of our  vcp file     halcmd  loadusr halvcp tiny vcp  halcmd        There may be some text printed as halvcp parses the tiny vcp file  but when it finishes  there should  be a small window on your screen  with a button and an LED  It will look something like figure 19 1     So  we have a button and an LED  but they aren   t connected to anything  so nothing happens when  you push the button  However  the LED and the button both have HAL pins associated with them        lA  vcp to  xml translator that takes a vep file and turns it into one that pyVCP can use is on my to do list  That would  enable VCP users to easily switch over to pyVCP  If such a translator is written  VCP may be removed from the version 2 2  release     162    CHAPTER 19  VCP 163       Figure 19 1  tiny vcp on the screen    halcmd  show pin  Component Pin
85. 0 update test thread    The output of the save command is a sequence of HAL commands  Ifyou start with an    empty    HAL  and run all these commands  you will get the configuration that existed when the save command  was issued  To save these commands for later use  we simply redirect the output to a file     halcmd  save all saved hal    7 3 6 Restoring the HAL configuration    To restore the HAL configuration stored in saved hal  we need to execute all of those HAL com   mands  To do that  we use  f  lt filename gt  which reads commands from a file  and  I which shows  the halemd prompt after execiting the commands     emc2S halrun  I  f saved hal    Notice that there is not a    start    command in saved hal  It   s necessary to issue it again  or edit  saved hal to add it there      halcmd  start    7 4 Looking at the HAL with halmeter    You can build very complex HAL systems without ever using a graphical interface  However there  is something satisfying about seeing the result of your work  The first and simplest GUI tool for  the HAL is halmeter  It is a very simple program that is the HAL equivalent of the handy Fluke  multimeter  or Simpson analog meter for the old timers      We will use the siggen component again to check out halmeter  If you just finished the previous  example  then siggen is already loaded  If not  we can load it just like we did before     emc2  halrun   halcmd  loadrt siggen   halcmd  loadrt threads namel test thread period1 1000000  halcmd  
86. 1 Default Plane    When EMC   s interperter was first written  it was designed for mills  That is why the default plane  is XY  G17   A normal lathe only uses the XZ plane G18   To change the default plane place the  following line in the  ini file in the RS274NGC section     RS274NGC_STARTUP_CODE   G18    Chapter 5    EMC2 and HAL    See also the manual pages motion 9  and iocontrol 1      5 1 motion  realtime     These pins  parameters  and functions are created by the real time motmod module     5 1 1 Pins    motion adaptive feed IN float When adaptive feed is enabled with M52 P1  See the G Code Man   ual   the commanded velocity is multiplied by this value  This effect is multiplicative with the  NML level feed override value and motion feed hold     motion digital out NN OUT bit These pins are controlled by the M62 through M65 words     motion enable IN bit If this bit is driven FALSE  motion stops  the machine is placed in the    ma   chine off    state  and a message is displayed for the operator  For normal motion  drive this bit  TRUE     motion feed hold IN bit When Feed Stop Control is enabled with M53 P1  See the G Code Manual    and this bit is TRUE  the feed rate is set to O     motion motion inpos OUT bit TRUE if the machine is in position     motion probe input IN bit G38 2 uses the value on this pin to determine when the probe has  made contact  TRUE for probe contact closed  touching   FALSE for probe contact open     motion spindle brake OUT bit TRUE when t
87. 1 count or less between calls to the read function      FLOAT  velocity resolution      optional  The resolution of the velocity output  in position  units per second  This is an output from the encoder driver  and is intended to tell the user  something about the hardware capabilities  The simplest implementation of the velocity output  is the change in postion from one call of the read function to the next  divided by the time  between calls  This yields a rather coarse velocity signal that jitters back and forth between  widely spaced possible values  quantization error   However  some hardware captures both the  counts and the exact time when a count occurres  possibly with a very high resolution clock    That data allows the driver to calculate velocity with finer resolution and less jitter     3 Functions    There is only one function  to read the encoder s       FUNCT  read     Capture counts  update position and velocity     Chapter 10    Tools and Utilities    10 1 Halcmd    Halcmd is a command line tool for manipulating the HAL  There is a rather complete man page for  halemd  which will be installed if you have installed EMC2 from either source or a package  If you  have compiled EMC2 for    run in place     the man page is not installed  but it is accessible  From the  main EMC2 directory  do       man  M docs man halcmd    Chapter 7 has a number of examples of halcmd usage  and is a good tutorial for halemd     10 2 Halmeter    Halmeter is a    voltmeter    for t
88. 10  11  12  13  and 15 are always input pins  Pins 2 through  9 are input pins only if the port is defined as an input port  The  in HAL pin is TRUE if the physical  pin is high  and FALSE if the physical pin is low  The  in not HAL pin is inverted     it is FALSE  if the physical pin is high  By connecting a signal to one or the other  the user can determine the    e       state of the input  In    x    mode  pins 1  14  16  and 17 are also input pins     16 1 3 Parameters       e  BIT  parport  lt portnum gt  pin  lt pinnum gt  out invert     Inverts an output pin     e  BIT  parport  lt portnum gt  pin  lt pinnum gt  out reset  only for pins 2  9    TRUE if this pin  should be reset when the  reset function is executed     e  U32  parport  lt portnum gt  reset time     The time  in nanoseconds  between a pin is set by  write and reset by reset HAL functions     The  invert parameter determines whether an output pin is active high or active low  If  invert  is FALSE  setting the HAL  out pin TRUE drives the physical pin high  and FALSE drives it low  If   invert is TRUE  then setting the HAL  out pin TRUE will drive the physical pin low     If  reset is TRUE  then the reset function will set the pin to the value of  out invert  This can  be used in conjunction with stepgen s doublefreg to produce one step per period     CHAPTER 16  HARDWARE DRIVERS 127        8       8   2     NEN  ESA SEMEL NOU OS NSS  e ll    DAOHOQHQQOOQOPOOCL OEO O                                       
89. 15 1 4 Parameters       has no effect     o       FLOAT  stepgen  lt c     FLOAT  stepgen  lt c  nd squared  If 0 0  has no effect      FLOAT  stepgen  lt c     FLOAT  stepgen  lt c       p  p   P  p  p    han gt  step     Step pulse output  step type O only      dir     Direction output  step type O only      up     UP pseudo PWM output  step type 1 only      down     DOWN pseudo PWM output  step type 1 only      nase     nase      nase        nase     O and 1 only   in nano seconds     hase A     Phase A output  step types 2 14 only      B     Phase B output  step types 2 14 only    C     Phase C output  step types 3 14 only    D     Phase D output  step types 5 14 only         E     Phase E output  step types 11 14 only       FLOAT  stepgen  lt chan gt  position scale     Steps per position unit  This parameter is used  for both output and feedback     han gt  maxvel     Maximum velocity  in position units per second  If 0 0     han gt  maxaccel     Maximum accel decel rate  in positions units per sec     han gt   frequency     The current step rate  in steps per second     han gt  steplen     Length of a step pulse  step type O and 1  or minimum  time in a given state  step types 2 14   in nano seconds      FLOAT  stepgen  lt chan gt  stepspace     Minimum spacing between two step pulses  step types     FLOAT  stepgen  lt chan gt  dirsetup     Minimum time from a direction change to the begin   ning of the next step pulse  step type O only   in nanoseconds         FLOAT  
90. 2  W 000000001 freqgen 1 dirsetup   02 float R  0 00000e 00 freqgen 1 frequency   02 float  W 0 00000e 00 freqgen 1 maxaccel   02 float  W 1 00000e 15 freqgen 1 maxfreq   02 float  W 1 00000e 00 freqgen 1 position scale  02 s32 RS 0 fFreqgen 1 rawcounts   02 u32  W 000000001 freqgen 1 steplen   02 u32  W 000000001 freqgen 1 stepspace   02 float  W 1 00000e 00 freqgen 1 velocity scale          7 5 2 Connecting pins with signals    What we have is two step pulse generators  and a signal generator  Now it is time to create some HAL  signals to connect the two components  We are going to pretend that the two step pulse generators  are driving the X and Y axis of a machine  We want to move the table in circles  To do this  we will  send a cosine signal to the X axis  and a sine signal to the Y axis  The siggen module creates the  sine and cosine  but we need    wires    to connect the modules together  In the HAL     wires    are called  signals  We need to create two of them  We can call them anything we want  for this example they  will be X_vel and Y_vel  The signal X_vel is intended to run from the cosine output of the signal  generator to the velocity input of the first step pulse generator  The first step is to connect the signal  to the signal generator output  To connect a signal to a pin we use the net command     halcmd  net X_vel  lt   siggen 0 cosine  To see the effect of the net command  we show the signals again     halcmd  show sig    ignals   Type Value Name  float
91. 2  encoder  lt chan gt  raw count     The raw count value  updated by update counters        e  BIT  encoder  lt chan gt  x4 mode     Sets encoder to 4x or 1x mode  The 1x mode is usefull for  some jogwheels     e  FLOAT  encoder  lt chan gt  position scale     See canonical encoder interface  section 9 5     15 3 5 Functions    The component exports two functions  Each function acts on all of the encoder counters   running  different counters in different threads is not supported   e  FUNCT  encoder  update counters     High speed function to count pulses  no floating point      e  FUNCT  encoder capture position     Low speed function to update latches and scale posi   tion     CHAPTER 15  INTERNAL COMPONENTS 119    15 4 PID    This component provides Proportional Integeral Derivative control loops  It is a realtime compo   nent only  For simplicity  this discussion assumes that we are talking about position loops  however  this component can be used to implement other feedback loops such as speed  torch height  tem   perature  etc  Figure 15 8 is a block diagram of a single PID loop     15 4 1 Installing   emc2  halcmd loadrt pid  num_chan  lt loops gt    debug 1    lt loops gt  is the number of PID loops that you want to install  If numchan is not specified  one loop  will be installed  The maximum number of loops is 16  as defined by MAX_CHAN in pid c   Each    loop is completely independent  In the following descriptions   lt loopnum gt  is the loop number of a  specifi
92. 20 seconds  The same machinist programming that same move for CNC might  write the following block of code     G1 F3 X1 000    G1 means that the machine is supposed to run at a programmed feed rate rather than at the fastest  speed that it can  GO is the way to command a rapid move like you would make above the work  when not cutting   The F3 means that it should travel at 3 inches a minute or 3 millimeters a  minute if it is working in metric mode  The X1 000  assuming that the X axis started at zero  means    CHAPTER 1  THE ENHANCED MACHINE CONTROL 8    EMC HAL SIM    Settings Info 4 Editor W Backplot 4 Tools J Offsets    lh       X Y al X Z      Z 3D Hide Setup       x  92 0000  x 36  1280  Z 10 0000    Feed Override        MESSAGES       N6891Y56  112 27  838   N6901Y56  1282 27  634  IN6911G0Z10    N6931M9   ERES O    Figure 1 4  The Mini Graphical Interface    the machine should move one inch in the positive X direction  You will read quite a bit more about  G code in the programming chapters      Figure 1 7 is a block diagram of how a personal computer running the EMC2 is used to control  a machine with G code  The actual G code can be sent using the MDI  Machine Device Interface   mode or it can be sent as a file when the machine is in Auto mode  These choices are made by the  operator and entered using one of the Graphical User Interfaces available with the software     G code is sent to the interpreter which compares the new block with what has already been sent  to
93. 4  all glitches less than or equal to four thread periods will be  rejected     15 6 5 Functions    Each group of filters has one function  which updates all the filters in that group    simultaneously      Different groups of filters can be updated from different threads at different periods     e  FUNCT  debounce  lt G gt      Updates all filters in group  lt G gt         2Each individual filter also has an internal state variable  There is a compile time switch that can export that variable as  a parameter  This is intended for testing  and simply wastes shared memory under normal circumstances     CHAPTER 15  INTERNAL COMPONENTS 124  15 7 Siggen    Siggen is a realtime component that generates square  triangle  and sine waves  It is primarily used  for testing     15 7 1 Installing    emc2  halcmd loadrt siggen  num_chan  lt chans gt       lt chans gt  is the number of signal generators that you want to install  If numchan is not specified   one signal generator will be installed  The maximum number of generators is 16  as defined by  MAX_CHAN in siggen c   Each generator is completely independent  In the following descriptions    lt chan gt  is the number of a specific signal generator  the numbers start at 0      15 7 2 Removing    emc2  halcmd unloadrt siggen    15 7 3 Pins  Each generator has five output pins     e  FLOAT  siggen  lt chan gt  sine     Sine wave output   e  FLOAT  siggen  lt chan gt  cosine     Cosine output   e  FLOAT  siggen  lt chan gt  sawtooth    
94. 5 2 PWM Spindle Speed    If your spindle can be controlled by a PWM signal  use the pwmgen component to create the signal   loadrt pwmgen output_type 0   addf pwmgen update servo thread   addf pwmgen make pulses base thread   net spindle speed cmd motion spindle speed out   gt  pwmgen 0 value   net spindle on motion spindle on   gt  pwmgen 0 enable   net spindle pwm pwmgen 0 pwm   gt  parport 0 pin 09 out   setp pwmgen 0 scale 1800   Change to your spindle s top speed in RPM    This assumes that the spindle controller s response to PWM is simple  0  PWM gives ORPM  10   PWM gives 180 RPM  etc  If there is a minimum PWM required to get the spindle to turn  follow the  example in the nist lathe sample configuration to use a scale component     25 3 Spindle Feedback    Add this section    191    CHAPTER 25  SPINDLE SPEED CONTROL 192    25 4 Spindle Enable    If you need a spindle enable signal link your output pin to motion spindle on  To link these pins to  a parallel port pin put something like the following in your  hal file making sure you pick the pin  that is connected to your control device     net spindle enable motion spindle on   gt  parport 0 pin 14 out    25 5 Spindle Direction    If you have direction control of your spindle the hal pins motion spindle forward and motion spindle   reverse are controlled by M3 and M4  S must be set to a positive non zero value for M3 4 to turn  on spindle motion     To link these pins to a parallel port pin put something like the fol
95. 6  Py Container EEES  cdo eee ee Be ee hoe Ha ao Se o de ae 159  W350 RE 159  DOr VI eea ee eS AE 159  LA Tabel rn soe PRE Se Se Ee Se OE Oe De ee ee Be we 160  iea  Lebelirame siria Sw ee ROR A IA ec we ee ae 160    6 0 Table osos    eee ee ee ae ee a a els 160    CONTENTS xiii    19 VCP 162  14 1 VCR Asmal kampe  go os a A e ae be ewes 162  19 2 VCP  Another small example with EMC                             163  e VORP SAU AIRE Be we ce a 164   19 3 1 PAGE seda ESE OTE HSS EERE SHER EEE EAE DEE SELES EES 164   VIII Advanced topics 165   20 Kinematics in EMC2 166  20 1 TrOduci  n   e o ss 03    ae a a A ee dea 166   20 1 1 TOS VE  PRES o p e oO a ee ae a a ae a eS 166  20 2 Trivial Kinematics s e saci le ae ae ew a a we lal nw ws e eee ee 166  20 3 MNon trivial kinemaies   2 0 6 0c AV ee es 167   20 5 1 Forward transformation        lt    oo  ee ee 167   20 32 Inverse transiormatiork oc segoe kek AA we Aw we ee aes 169  20 4 Implementation details  gt   lt   cs ocs cosas a ee 169   IX Tuning 170   21 Stepper Tuning 171  21 1 Getting the most out of Software Stepping                   e 171   21 1 1 BUDA DAS TES 22 a a A A oA A S aea K A a eh A 171   21 1 2  Figure out what your drives expect   o so se sass ro sew wasu rsi      172   21 1 3 Choose y  ur BASE PERIOD   occiso a A 173   21 1 4 Use steplen  stepspace  dirsetup  and or dirhold                    174   2115 MoO Guessing e ob ce eR A A RA 174   22 PID Tuning 176   22 1 PID Controller    0  dae aci a A a Pe a A a ak
96. AA A a 59  78 Takinga closer look with Nalecope   lt  s  lt  caf eee da a a a a eee es 59  7 6 1 Starine HSISCODE se seac Ge Re HE TERS eR EE TERRES eS ees 59  7 6 2 Hooking up the    scope probes       ok a 61  7 6 3 Capturing our first waveforms   2 4 0 6  so eae ee 62  7 6 4 Ver  cal ACIUSTUIMEDIS ooa Se ADEE REE EES Swe ee ee be ee eS 63  7 6 5 TIEDE  o a ke a a we we a eal Soe a 63  7 6 6 Horizantal Adjustments  lt  lt   cosas sa A ee el ae aa 65  7 6 7 More e IE 66  7 6 8 MODE Samples o es oca a a A A eed 66    CONTENTS    8 General Reference Information  SL  INGA o e ce Sag a a Ap a a a A Ae 4  SLi Typographical Conventions    lt  gt    oso ccoo ou    lc ee a e  8 1 2 NAE a A a apg ee a A gh cs se sb e ere a eo  8 2 General Namig Conventions   lt  se reses bee eee g Ea da a ewe ee  8 3 Hardware Driver Naming Conventions                  a  8 3 1 Pin  Parameter DAMES  coo opus aa a a a a  TLI  EXABIDIES osos asas a ad ATA  8 3 2 Function NAMES asi a as Ae ee  a a we a wo  O21 EXAmplES   ica a e a a iaa ida aa  9 Canonical Device Interfaces  Mol TOU Taput  e e a A we A AA AA  9 1 1 PS O e a Se op e da oe oa A See N a ae ce  g  1 2 Fara RAS A A a RA A de a a  9 1 3 POUCUO  S an a AAA A A RA A Hee ESR  3 2 Digtal OUIOUE  lt  lt  ss ek ee eee A e a Ha eae Se  9 2 1 P oie  a et GB Os A we a a ae Re a  9 2 2 CORALES  o aS aS a A ee BO te we oe oe A  9 2 3 PUTICUONS oo ai OS oe AR oe ee ew ee A  Si Andog Ip  eo  cos ks ne ae ee  Sow ES doe BL ee ee He OA ae Ge ee ww ee  9 501 
97. Dase  oo ae ho O AA A Ae 192  25  Spindle Direction   lt r rap eaer A RA we ee we as 192   26 MPG Pendant 193  26 1 SEcona Parallel PO  o oa e a Oe A A A A   193  26 2 Hook itupinmHAL       lt  lt  lt     ew So 194   XII FAQ 195   27 Linux FAQ 196  ar E IRE POS si paraa Aa a de a es e A da a 196  Zro  ASL MOUNES on i a ee a a Re hae da e dd de e ee So 196  27 9 Editing a Root Ple    eo soes ai a ae Re A See dee a ee 196   27 3 1 The Command Line Way    lt  co ee ieee de ee daa a ae 197  ata    THEGUL Way 2 ew hd PAAR REE REE HED E DEE de e 197  274 Terminal Commands   ss   ssas saes Ae ew Ack A ae ia da 197    er  Workme Directoy vo s va SG Sa aw ee eee Eee Re BE a 197    CONTENTS    27 4 2 Changing Directories  27 4 3 Listing files in a directory  27 4 4 Finding a File  27 4 5 Searching for Text  27 5 Hardware Problems  27 5 1 Monitor Resolution    XIII Glossary    XIV Legal Section    XV Index    203    208    Part III    Introduction    Chapter 1    The Enhanced Machine Control    1 1 Introduction    For normal stepper based installations see the Getting Started Guide  Once EMC is installed and  configured see the User Manual for information on using EMC     The Integrator Manual scope is on more complex machines  configurations and installations  As  the system integrator your task is bringing together all the component subsystems into a whole and  ensuring that those subsystems function together  EMC being one of the subsystems     1 2 The Big CNC Picture    The term CNC
98. Directors will  decide when  Testing  is worthy of becoming  Released   This is a formal decision  made by motion  and voting on the board mailing list or board IRC channel     TRUNK is a CVS term for where all the primary development takes place  TRUNK can be broken  at any time  When TRUNK reaches a state that is deemed worthy of testing by a larger number of  people  the  Testing  tag will be moved  This is an informal decision  made by consensus of lead  developers  usually on IRC  Development will immediately continue  and TRUNK will once again  diverge from Testing  TRUNK has no  version number   and on a busy weekend it can literally  change every 10 minutes     3 4 Download and source preparation     The following few section will describe how to get EMC2  and compile it     To download  simply go to www linuxcnc org to the Download page  and get the latest release or  testing tarball     Once you have it  extract it to your home folder       cd       tar xzvf emc2 version tar gz    Next you ll need to decide what kind of install you want  There are two ways to try EMC2 out     Installed Like most other software on Linux  the files are placed in system directories  and is  automatically available to all users of that computer     Run in place All the files for EMC2 are kept inside the emc2 directory  This is useful for trying out  EMC2  especially when there is another version of EMC2 already installed on the system     The pre built packages for Ubuntu Linux use the 
99. EMC it is under Setting Calibration  can  be used to set these and more interactively and verify their results so that the proper values  can be put in the INI file with a minimum of trouble     4 3 9 1 Homing related items    The next few parameters are Homing related  for a better explanation read Section 4 4    HOME_OFFSET   0 0 The axis position of the home switch or index pulse  in machine units     HOME_SEARCH_VEL   0 0 Initial homing velocity in machine units per second  A value of zero  means assume that the current location is the home position for the machine  If your machine  has no home switches you will want to leave this value alone     HOME_LATCH_VEL   0 0 Final homing velocity in machine units per second     HOME_USE_INDEX   NO If the encoder used for this axis has an index pulse  and the motion card  has provision for this signal you may set it to yes  When it is yes  it will affect the kind of home  pattern used     HOME_IGNORE_LIMITS   NO Some machines use a limit switch as a home switch  This variable  should be set to yes if you machine does this     4 3 9 2 Servo related items    The following items are for servo based systems and servo like systems  This description assumes  that the units of output from the PID component are volts     P   50  HAL  The proportional gain for the axis servo  This value multiplies the error between  commanded and actual position in machine units  resulting in a contribution to the computed  voltage for the motor amplifier 
100. ERATION   2 0 In machines with nontrivial kinematics  the acceleration used  for    teleop     Cartesian space  jogs  in machine units per second per second     MAX VELOCITY   5 0 The maximum velocity for any axis or coordinated move  in machine units  per second  The value shown equals 300 units per minute     MAX ACCELERATION   20 0 The maximum acceleration for any axis or coordinated axis move   in machine units per second per second     POSITION_ FILE   position txt If set to a non empty value  the joint positions are stored between  runs in this file  This allows the machine to start with the same coordinates it had on shut   down   If unset  joint positions are not stored and will begin at O each time EMC is started     4 3 9  AXIS  lt num gt   Section    The  AXIS_0    AXIS_1   etc  sections contains general parameters for the individual components  in the axis control module  The axis section names begin numbering at O  and run through the  number of axes specified in the  TRAJ  AXES entry minus 1     TYPE   LINEAR The type of axes  either LINEAR or ANGULAR     UNITS   inch If specified  this setting overrides the related  TRAJ  UNITS setting   e g    TRAJ LINEAR_UNITS  if the TYPE of this axis is LINEAR   TRAJJANGULAR_UNITS if the TYPE of this axis is ANGULAR     MAX_VELOCITY   1 2 Maximum velocity for this axis in machine units per second     MAX_ACCELERATION   20 0 Maximum acceleration for this axis in machine units per second  squared     BACKLASH   0 000 Backlash
101. ERNAL COMPONENTS                                                      i 1 i i 1 i 1 i 1 i 1 i  MEA ae   osea  1 i  i  i    i  i i    i   i      L L L                     f f i   9 9seyd 9 9seyd  1 l T i l i  I i  i  i  I       1 i  i  i  ie eae            l l l     g eseyd l g   seyd                            i  i  i    L L i  I i  i  1 i    l I y I I     I I I y aseyd   I   I y aseyd  i  i  i  if l i  l l r l pl i  i  i  l     l  i    i  i 1 l l i  i   i  i  i    Y i  f l   PO ihe Gt A Ge ie rh RI et c y TEIAS PAN Be  o e Cae ls a CAL gas  1 i 1 i       q eseyd i   q eseyd      t     l  i  i l   l l 9 9seyd 1 1 9 aseyd  j  I i  I i  i    I i  if i  i  i  i    i     i i g   seyd i i g   seyd   i  i I l ji  i i i    l L L 1 L i  i  l   I 1 1 1 1 I y aseyd 1 1 1 I y aseyd  i  i    i  i  i  i i  f   i  i i  i i                                  i           O BS A Ge RE nee ea at wht ETAS e a SO oR set ea goes  gt  ATALS  1 i  l 1             i   q eseyd i i q aseyd  i   i     1 9 aseyd l 1 9 9seyd          I l                 i g oseyd i     i g   seyd  l l l l l i  i  l     f f     E L L         l 1 y   seyd     l       y   seyd   i  i  i i  i  i  i  I i  i  i  l i  if l i  I   l l h I l ii I l l   l   i  l  i l l l  i i    ie Wen AO Fe be ibe a ato SAO y Aakaas PO a JB ine  ede pW  SS see tes oe he V8 daa ass    Figure 15 5  Four Phase Step Types    114    CHAPTER 15  INTERNAL COMPONENTS                                  STEP TYPE 11          STEP TYPE 12  phase A  phase B     
102. FFSET     the axis will slightly overshoot the latched position as  it stops  Therefore there will always be a small move at this time  unless HOME_SEARCH_VEL is  zero  and the entire search latch stage was skipped   This final move will be made at the joint   s  maximum velocity  Since the axis is now homed  there should be no risk of crashing the machine   and a rapid move is the quickest way to finish the homing sequence       4 4 3 7 HOME_IS SHARED    If there is not a separate home switch input for this axis  but a number of momentary switches wired  to the same pin  set this value to 1 to prevent homing from starting if one of the shared switches is  already closed  Set this value to O to permit homing even if the switch is already closed     4 4 3 8 HOME_SEQUENCE    Used to define a multi axis homing sequence     HOME ALL     and enforce homing order  e g   Z  may not be homed if X is not yet homed   An axis may be homed after all axes with a lower  HOME_SEQUENCE have already been homed and are at the HOME_OFFSET  If two axes have the  same HOME_SEQUENCE  they may be homed at the same time  If HOME_SEQUENCE is  1 or  not specified then this joint will not be homed by the HOME ALL sequence  HOME_SEQUENCE  numbers start with O and there may be no unused numbers           The distinction between  home  and  home_offset  is not as clear as I would like  I intend to make a small drawing and  example to help clarify it     CHAPTER 4  INI CONFIGURATION 34    4 5 Lathe    4 5 
103. Gecko can be improved     The problem with the G202 is the 20uS hold time requirement  That plus the 11uS latency is what  forces us to use a slow 31uS period  But the EMC2 software step generator has some parameters  that let you increase the various time from one period to several  For example  if steplen is changed  from 1 to 2  then it there will be two periods between the beginning and end of the step pulse   Likewise  if dirhold is changed from 1 to 3  there will be at least three periods between the step  pulse and a change of the direction pin     If we can use dirhold to meet the 20uS hold time requirement  then the next longest time is the  4 5uS high time  Add the 11uS latency to the 4 5uS high time  and you get a minimum period of  15 5uS  When you try 15 5uS  you find that the computer is sluggish  so you settle on 16uS  If  we leave dirhold at 1  the default   then the minimum time between step and direction is the 16uS  period minus the 11uS latency   5uS  which is not enough  We need another 15uS  Since the period  is 16uS  we need one more period  So we change dirhold from 1 to 2  Now the minimum time from  the end of the step pulse to the changing direction pin is 5 16 21uS  and we don   t have to worry  about the Gecko stepping the wrong direction because of latency     If the computer has a latency of 11uS  then a combination of a 16uS base period  and a dirhold value  of 2 ensures that we will always meet the timing requirements of the Gecko  For normal s
104. HAL_IN   h newpin  out   hal HAL _ FLOAT  hal HAL_ OUT     h ready     try   while 1   time sleep  1   h    out       h    in        except KeyboardInterrupt   raise SystemExit       Copy the above listing into a file named    passthrough     make it executable  chmod  x   and place  it on your  PATH  Then try it out       halrun   halcmd  loadusr passthrough  halcmd  show pin   Component Pins     Owner Type Dir Value Name  03 float IN O passthrough in  03 float OUT O passthrough out    halcmd  setp passthrough in 3 14  halcmd  show pin  Component Pins     Owner Type Dir Value Name  03 float IN 3 14 passthrough in  03 float OUT 3 14 passthrough out    93    CHAPTER 12  CREATING USERSPACE PYTHON COMPONENTS WITH THE    HAL    MODULE 94  12 2 Userspace components and delays    If you typed    show pin    quickly  you may see that passthrough  out still had its old value of O  This  is because of the call to    time sleep 1      which makes the assignment to the output pin occur at most  once per second  Because this is a userspace component  the actual delay between assignments  can be much longer for instance  if the memory used by the passthrough component is swapped to  disk  the assignment could be delayed until that memory is swapped back in     Thus  userspace components are suitable for user interactive elements such as control panels  de   lays in the range of milliseconds are not noticed  and longer delays are acceptable   but not for  sending step pulses to a stepper d
105. HAPTER 7  HAL TUTORIAL 55    7 5 A slightly more complex example     Up till now we have only loaded one HAL component  But the whole idea behind the HAL is to allow  you to load and connect a number of simple components to make up a complex system  The next  example will use two components     Before we can begin building this new example  we want to start with a clean slate  If you just  finished one of the previous examples  we need to remove the all components and reload the RTAPI  and HAL libraries     halcmd  exit  emc2S halrun    7 5 1 Installing the components    Now we are going to load the step pulse generator component  For a detailed description of this  component refer to section 15 1  For now  we can skip the details  and just run the following  commands      halrun  loadrt freqgen step type 0 0  halcmd  loadrt siggen  halcmd  loadrt threads namel fast fp1 0 period1 50000 name2 slow period2 1000000       The first command loads two step generators  both configured to generate stepping type O  The  second command loads our old friend siggen  and the third one creates two threads  a fast one with  a period of 50 micro seconds and a slow one with a period of 1mS  The fast thread doesn   t support  floating point functions     As before  we can use halcmd show to take a look at the HAL  This time we have a lot more pins  and parameters than before     halcmd  show pin  Component Pins   Owner Type Dir Value Name                            03 float  W 0 00000e 00 sigg
106. However  instead of referring to the members of this structure  e g   x  inst  gt name    they will  generally be referred to using the macros below  The details of struct state and these macros  may change from one version of comp to the next     FUNCTION name  Use this macro to begin the definition of a realtime function which was previ   ously declared with  function NAME     The function includes a parameter    period    which is the  integer number of nanoseconds between calls to the function        EXTRA_SETUP   Use this macro to begin the definition of the function called to perform extra setup  of this instance  Return a negative Unix errno value to indicate failure  e g   return  EBUSY  on failure to reserve an I O port   or O to indicate success        EXTRA_CLEANUP   Use this macro to begin the definition of the function called to perform extra  cleanup of the component  Note that this function must clean up all instances of the com   ponent  not just one  The    pin_name        parameter_name     and    data    macros may not be used  here     pin_name  parameter_name For each pin pin_name or param parameter_name there is a macro which allows  the name to be used on its own to refer to the pin or parameter     When pin_name or parameter_name is an array  the macro is of the form pin_namelidx  or  param_name idx  where idx is the index into the pin array  When the array is a variable sized  array  it is only legal to refer to items up to its condsize     When the i
107. L threads   A thread might look a bit like a centipede  caterpillar  or earwig  A backbone of hubs  HAL com   ponents  strung together with rods  HAL signals  Each component takes in it own parameters and  input pins and passes on output pins and parameters to the next component  Signals travel along  the backbone from end to end and are added to or modified by each component in turn     Threads are all about timing and doing a set of tasks from end to end  A mechanical representation  is available with Tinkertoys also when we think of the length of the toy as a measure of the time  taken to get from one end to the other  A very different thread or backbone is created by connecting  the same set of hubs with different length rods  The total length of the backbone can be changed  by the length of rods used to connect the hubs  The order of operations is the same but the time to  get from beginning to end is very diferent        2Tinkertoy is now a registered trademark of the Hasbro company     CHAPTER 6  INTRODUCTION 46    6 4 4 A Lego Example       When Lego blocks first arrived in our stores they were pretty much all the same size and shape   Sure there were half sized one and a few quarter sized as well but that rectangular one did most of  the work  Lego blocks interconnected by snapping the holes in the underside of one onto the pins  that stuck up on another  By overlapping layers  the joints between could be made very strong   even around corners or tees     I watched m
108. PS ds se Bos Rea A BR AA OE we hi a eR oe Boe GS  9 3 2 ss 6 sk ROE ERS EEE AN  9 3 5 PFURCUORS   30  ee Ow we ele oe OG a ee a ee Da wh doh a da  g4 Analog DOSUE iaa we ee ee Re wee ewe AR  9 4 1 PAYERS   lt A AE RR DUP Re RA i  9 4 2 FUNGOS o o s asa ae ee ee Se eee A We a A et  A a ANN RN  9 5 1 P a EEE ENRE EER ERAR EEEF ERE A  9 5 2 ca EEN  9 5 3 FPUNCHONS A III  10 Tools and Utilities  A E A wo i A oe A ee OS ae  Bn we a a al  W SOIC i  Soa ke dd  Shae es ae Ge a we Re a Ge ee ae a a a o a  LES  Halstope oora AA i ae ee A ae BR ee we a  104  Halshow   25 i e eG 5404 SEAS ES EE eS eee eG Ne ee oe oe 4  104 1 Gbarling HalehOw      e258 ei Ge eS a a ee eee  10 42  Hal Tec Ara kg ee eo Hae ER Soe Be a we eG ae eww ow A A  10 4 3 Hal Show Area   omar RRA Oe RR ER AS ee ho wee hw he    10 4 4    Hal Watch Area oep ew ae a a ee lee a we ae A    vii    67  67  67  67  67  68  68  69  69  70    71  71  71  71  71  71  71  72  72  72  72  72  72  72  73  73  73  73  74  74    CONTENTS viii    11 comp  a tool for creating HAL modules 83  11 1 Touche    c f cies a ee eos A A ew a kw oe es 83  1  DEPOR we we A as Da ee al Ee ee 83  LLS Menne RECALI  N  ya aaa ee A A A SE OS eS EO ite   ee A 84  UVA a ek we ae AA See A Ee oe ee aE 84  11 32 Peor msi  nce data Storage saccra a ORR EEE PAR ED ewe es 86  11 6 Other restrictions on comp files  gt   o se a ee A 87  11 7    Convenience Macros   lt  lt     ERE RR Re Ge wl ek a we A 87  11 8 Components with one function  lt       e sas essa 
109. Part 1    Integrators Manual       V2 2 Integrators Manual    October 13  2008    The EMC Team    This handbook is a work in progress  If you are able to help with writing  editing  or graphic  preparation please contact any member of the writing team or join and send an email to emc   users lists sourceforge net     Copyright  c  2000 7 LinuxCNC org       Permission is granted to copy  distribute and or modify this document under the terms of the  GNU Free Documentation License  Version 1 1 or any later version published by the Free Software  Foundation  with no Invariant Sections  no Front Cover Texts  and one Back Cover Text   This EMC  Handbook is the product of several authors writing for linuxCNC org  As you find it to be of value in  your work  we invite you to contribute to its revision and growth   A copy of the license is included in  the section entitled  GNU Free Documentation License   If you do not find the license you may order  a copy from Free Software Foundation  Inc  59 Temple Place  Suite 330 Boston  MA 02111 1307       Part II    Contents    Contents    I Integrators Manual i  II Contents ii  HI Introduction 1  1 The Enhanced Machine Control 2  L a i cea ek Se ewe he SO ee aE Gea dE Go ns 2   1 2  The Big CNC PICS  oi Se A eR A we a Se we a De ee 2  1 3 Computer Operating Systems 2 0 66 6 6b be ee ee 3  1A History ef the Sotware oes aaacasa hE a Pee aa 3  Lo How EMC2 Works 650 483 5268 pad See eR A Sod a eG ee ta ed ee es 4  1 5 1 Graphical User Imieriact
110. S 6 6 sc eR SEE eee eee ee eas 5   1 5 2 Motion Controller EMCMOT   so ee ee ee ee Pe we ed 5   1 53 Discrete I O Controller EMIGIO  lt  ss 6 64 ei casi a ww 6   1 5 4 Task Executor EMCTASE cosida eee eee ee bee ee es 7   1 5 5 Modes of Operation  gt  c e cocs a A ee a ee Pe we ae 8   1 5 6 Informatio Display so oi eac Ae oR A i ER a A E d A 9   1 5  Thinking Like An Integrator oca ccoa nuaa meaa ra a ae e ea be ee as 11  1 6 1 Mi E Ge Ton re a 11   IV Installing EMC 13  2 Installing the EMC2 software 14  al   ts baw pcos ie Gp lee a wes NN 14  22 NICE ARE CI esa wae a a Sw a Se ah ee ee ae e a 14  23 Other Methods    cn e eee eee Re de aa Dae Vee we da 15  24A  TERS meta SOTA e sa eee soe Woe ae KY dod A a 15  2 5 Manual installing using apt commands               2 0 0 0    00  ee ae 15    iii    CONTENTS    3 Compiling from Source  S1 a IE  2 2 EMC Download Page 2 2 42 08 040504 ce eee Eee eee ewe ED  33  HMC2 Release DESCUIDO   co cacra daa A a as eo we eS  3 4 Download and source preparation     1      e    ee  3 4 1 Downloading the CVS version   co es como csm    ee ds e we tes  me IM cia ae eG ee de wee ee da bee a GS  36 R  n  mpte oo hk ee a a dd as A Ne ee A  Of SUN  26466 Ge ohh ah eee AA  3 8 Editing and Recompiling                  0    2 eee ee  V Configuration     4 INI Configuration    4 1  4 2    4 3    4 4    Files Used Tor Config  ration   4 424 445 2208 WR AR RRR we be RA  The INI File Layout  a ee a ee ee ad  4 2 1 aa 5 ki RG eae be EOE EMER EGE ee Seed e
111. ST project  EMC is able to run a wide range  of motion devices     201    EMCIO The module within EMC that handles general purpose I O  unrelated to the actual motion  of the axes     EMCMOT The module within EMC that handles the actual motion of the cutting tool  It runs as a  real time program and directly controls the motors     Encoder A device to measure position  Usually a mechanical optical device  which outputs a  quadrature signal  The signal can be counted by special hardware  or directly by the par   port with EMC2     Feed Relatively slow  controlled motion of the tool used when making a cut     Feed rate The speed at which a motion occurs  In manual mode  jog speed can be set from the  graphical interface  In auto or mdi mode feed rate is commanded using a  f  word  F10 would  mean ten units per minute     Feedback A method  e g   quadrature encoder signals  by which EMC receives information about  the position of motors    Feed rate Override A manual  operator controlled change in the rate at which the tool moves while  cutting  Often used to allow the operator to adjust for tools that are a little dull  or anything  else that requires the feed rate to be    tweaked        G Code The generic term used to refer to the most common part programming language  There are  several dialects of G code  EMC uses RS274 NGC     GUI Graphical User Interface     General A type of interface that allows communications between a computer and human  in  most cases  via the manipu
112. Section Variables    4 3 1  EMC  Section    VERSION   SRevision  1 3 S The version number for the INI file  The value shown here looks odd  because it is automatically updated when using the Revision Control System  It s a good idea  to change this number each time you revise your file  If you want to edit this manually just  change the number and leave the other tags alone     MACHINE   My Controller This is the name of the controller  which is printed out at the top of  most graphical interfaces  You can put whatever you want here as long as you make it a single  line long     4 3 2  DISPLAY  Section    Different user interface programs use different options  and not every option is supported by every  user interface     DISPLAY   tkemc The name of the user interface to use  Valid options may include     e axis  e keystick  e mini  e tkemc  e xemc  POSITION_OFFSET   RELATIVE The coordinate system  RELATIVE or MACHINE  to show when    the user interface starts  The RELATIVE coordinate system reflects the G92 and G5x coordi   nate offsets currently in effect     POSITION_FEEDBACK   ACTUAL The coordinate value  COMMANDED or ACTUAL  to show when  the user interface starts  The COMMANDED position is the ideal position requested by EMC   The ACTUAL position is the feedback position of the motors     CHAPTER 4  INI CONFIGURATION 24    MAX_FEED_OVERRIDE   1 2 The maximum feed override the user may select  1 2 means 120   of the programmed feed rate    MIN_SPINDLE_OVERRIDE   0 5 The
113. TENTS vi  6 4 1 TORSE ina fr ek A Tha A ae ee ae eee Se GS Ee es A 44  6 4 2 Erector SEIS aia 544404  e bob S Rb ERE eRe Hee eet bene da 44  6 4 3 Taky eere raa SR OS Ee Se OEE we RAE eal oe ee Be eo a ae 45  6 4 4 A Lego Example s oa oe EA A Rw ee ee a 46   6 5 Timing Issues Ii GAL    2 cee eee OE a eed ee eee Us 46  7 HAL Tutorial 47  Val IDE westai oscar eee eG a a ls 47  7 1 1 ii s e dows  a a has E a ws O we Bree A he wh et E ws R 47  7 1 2 THe RTAPI cwvironmient es sosoca ma a aTi a moia a e da di e 47  V2     Tab Gonpletion    3025 2a we ee ee ee ee a aaa da i a 48  Tom ASimple Example  lt  lt  o where OS a we a te wd He we 48  7 3 1 Loading a realtime component     2  6 ee we ee ee 48  Pee Examining the HAL oo wi a ba a We ee he ee 48  7 3 3 Making realtime code TUT  gt  s a sis a ee ele a Ee we aa 50  7 3 4 Changing parameters   crac RRA ER we we ee ee S 51  EA Saving the HAL configuration           e    51  7 3 6 Restoring the HAL configuration          lt        lt         e    o cisnes  52  7 4 Looking at the HAL with halmeter    62a eee ras e eee eS 52  7 4 1 oring WANG co socia A a de eo 52  7 4 2 Ue ci SI eS a Bde HE ww bE Sow bed bee Ji aa 54  7 0 Aslightly more complex example    s seod ee a Re Ne a eo 55  7 Del Installing The Components  lt  s s eaa s seenen be a ee eee 55  Lie Connecting pins with signals   o ce ee ee s 56  7 9 3 Setting up realtime execution   threads and functions                  57  7 5 4 Seting paramers E 58  7 5 5 Vio a A AAA AA A ed 
114. You can also supply arguments to halrun that are passed on to halemd  or give the name of a    hal file  Because halrun stops the realtime system when it exits  the hal file run in this way will  typically end with a command that waits for completion  like loadrt  w halscope     7 2 Tab completion    Your version of halemd may include tab completion  Instead of completing filenames as a shell  does  it completes commands with HAL identifiers  Try pressing tab after starting a HAL command     halcmd  lo lt TAB gt        loadrt loadusr lock  halcmd  loadrt d lt TAB gt   ddt debounce    7 3 A Simple Example    7 3 1 Loading a realtime component    For the first example  we will use a HAL component called siggen  which is a simple signal genera   tor  A complete description of the siggen component can be found in section 15 7 of this document   It is a realtime component  implemented as a Linux kernel module  To load siggen use the halcmd  loadrt command     halcmd  loadrt siggen    7 3 2 Examining the HAL    Now that the module is loaded  it is time to introduce halcmd  the command line tool used to config   ure the HAL  This tutorial will introduce some halemd features  for a more complete description try  man halcmd  or see the halcmd reference in section 10 1 of this document  The first halemd feature  is the show command  This command displays information about the current state of the HAL  To  show all installed components     halcmd  show comp   Loaded HAL Components    ID
115. _color otherwise      lt led gt    lt halpin gt  my led  lt  halpin gt    lt size gt 50 lt  size gt    lt on_color gt  blue  lt  on_color gt    lt off_color gt  black  lt  off_color gt      lt  led gt      lt halpin gt  sets the name of the pin  default is    led n     where n is an integer   lt size gt  sets the size of the led  default is 20    lt on_color gt  sets the color of the LED when the pin is true  default is    green      lt off_color gt  sets the color of the LED when the pin is false  default is    ref          CHAPTER 18  VIRTUAL CONTROL PANELS 156    18 5 2 Button    A button is used to control a BIT pin  The pin will be set True when the button is pressed and held  down  and will be set False when the button is released      lt button gt    lt halpin gt  my button  lt  halpin gt    lt text gt  ON  lt  text gt     lt  button gt        ok      18 5 3 Checkbutton    A checkbutton controls a BIT pin  The pin will be set True when the button is checked  and false  when the button is unchecked      lt checkbutton gt    lt halpin gt  my checkbutton  lt  halpin gt      lt  checkbutton gt     An unchecked checkbutton   A   and a checked one     18 5 4 Radiobutton    A radiobutton will set one of a number of BIT pins true  The other pins are set false      lt radiobutton gt    lt choices gt   one    two    three   lt  choices gt      lt halpin gt  my radio  lt  halpin gt    lt  radiobutton gt   r ONE  We two      three    Note that the HAL pins in the example above wil
116. aboration with the OMAC User s Group  we have written soft   ware which implements real time control of equipment such as machine tools  robots   and coordinate measuring machines  The goal of this software development is twofold   first  to provide complete software implementations of all OMAC modules for the purpose  of validating application programming interfaces  and second  to provide a vehicle for the  transfer of control technology to small  and medium sized manufacturers via the NIST  Manufacturing Extension Partnership  The EMC software is based on the NIST Real   time Control System  RCS  Methodology  and is programmed using the NIST RCS Library   The RCS Library eases the porting of controller code to a variety of Unix and Microsoft  platforms  providing a neutral application programming interface  API  to operating sys   tem resources such as shared memory  semaphores  and timers  The RCS Library also  implements a communication model  the Neutral Manufacturing Language  which allows  control processes to read and write C   data structures throughout a single homogeneous  environment or a heterogeneous networked environment  The EMC software is written in  C and C    and has been ported to the PC Linux  Windows NT  and Sun Solaris operating  systems  When running actual equipment  a real time version of Linux is used to achieve  the deterministic computation rates required  200 microseconds is typical   The software  can also be run entirely in simulation  down t
117. addf siggen 0 update test thread   halcmd  start   halcmd  setp siggen 0 amplitude 5       7 4 1 Starting halmeter    At this point we have the siggen component loaded and running  It s time to start halmeter  Since  halmeter is a GUI app  X must be running     halcmd  loadusr halmeter    At the same time  a halmeter window opens on your screen  looking something like figure 7 1     CHAPTER 7  HAL TUTORIAL 53       X A HAL Meter      x     Select   Exit      Figure 7 1  Halmeter at startup  nothing selected          XA Select Item to Probe NTE   Pins   Signals   Parameters    siggen 1 cosine  siggen 1 sine  siggen 1 square  siggen 1 triangle    OK   Accept   Cancel      Figure 7 2  Halmeter source selection dialog       CHAPTER 7  HAL TUTORIAL 54    7 4 2 Using halmeter    The meter in figure 7 1 isn t very useful  because it isn   t displaying anything  To change that  click  on the Select button  which will open the probe selection dialog  figure 7 2      This dialog has three tabs  The first tab displays all of the HAL pins in the system  The second one  displays all the signals  and the third displays all the parameters  We would like to look at the pin  siggen 0 triangle first  so click on it then click the OK    button  The probe selection dialog will  close  and the meter looks something like figure 7 3        X  HAL Meter NES  3 71923e 00       siggen 1 triangle    Select   Exit      Figure 7 3  Halmeter displaying the value of a pin          You should see the value 
118. ady loaded  the numeric argument to halscope will have no effect     Chapter 8    General Reference Information    8 1 Notation    8 1 1 Typographical Conventions    Command line examples are presented in bold typewriter font  Responses from the computer  will be in typewriter font  As of early 2006  there are no longer commands that require root  privileges  so all examples will be preceded by the normal user prompt     Text inside square  brackets  like this  is optional  Text inside angle brackets  lt like this gt  represents a field that  can take on different values  and the adjacent paragraph will explain the appropriate values  Text  items separated by a vertical bar means that one or the other  but not both  should be present  All  command line examples assume that you are in the emc2  directory  and you configured  compiled  emc2 for the run in place scenario  Paths will be shown accordingly when needed     8 1 2 Names    All HAL entities are accessed and manipulated by their names  so documenting the names of pins   signals  parameters  etc  is very important  HAL names are a maximum of 41 characters long  as  defined by HAL_NAME_LEN in hal h   Many names will be presented in a general form  with text  inside angle brackets  lt 1ike this gt  representing fields that can take on different values     When pins  signals  or parameters are described for the first time  their names will be preceeded  by their type in  SMALL CAPS  and followed by a brief description  A ty
119. ain the  text to search for    in the current directory and all the subdirec   tories below the current while ignoring the case  The  i is for ignore case and the  r is for recursive   include all subdirectories in the search   The   is a wild card for search all files     27 5 Hardware Problems    27 5 1 Monitor Resolution   During installation Ubuntu attempts to detect the monitor settings  If this fails you are left with a  generic monitor with a maximum resolution of 800x600    Instructions for fixing this are located here     https   help ubuntu com community FixVideoResolutionHowto    Part XIII    Glossary    199    200    A listing of terms and what they mean  Some terms have a general meaning and several additional  meanings for users  installers  and developers     Acme Screw A type of lead screw that uses an acme thread form  Acme threads have somewhat  lower friction and wear than simple triangular threads  but ball screws are lower yet  Most  manual machine tools use acme lead screws     Axis One of the computer control movable parts of the machine  For a typical vertical mill  the table  is the X axis  the saddle is the Y axis  and the quill or knee is the Z axis  Additional linear axes  parallel to X  Y  and Z are called U  V  and W respectively  Angular axes like rotary tables are  referred to as A  B  and C     Backlash The amount of  play  or lost motion that occurs when direction is reversed in a lead  screw  or other mechanical motion driving system  It can
120. alui estop is activated   indicates E stop reset    17 2 3 Mode    e  317  halui mode manual   pin for requesting manual mode  e  817  halui mode is_manual   indicates manual mode is on  e  317  halui mode auto   pin for requesting auto mode   e  817  halui mode is_auto   indicates auto mode is on   e  317  halui mode mdi   pin for requesting mdi mode    e  817  halui mode is_mdi   indicates mdi mode is on    148    CHAPTER 17  HALUI 149    17 2 4 Mist  Flood  Lube    e  317  halui mist on   pin for requesting mist on  e  817  halui mist is on   indicates mist is on   e  317  halui flood on   pin for requesting flood on  e  817  halui flood is on   indicates flood is on   e  317  halui lube on   pin for requesting lube on    e  817  halui lube is on   indicates lube is on    17 2 5 Spindle    e  817  halui spindle start   e  317  halui spindle stop   e  817  halui spindle forward   e  817  halui spindle reverse   e  817  halui spindle increase   e  817  halui spindle decrease   e  317  halui spindle brake on   pin for activating spindle brake   e  317  halui spindle brake off   pin for deactivating spindle  brake    e  817  halui spindle brake is on   indicates brake is on    17 2 6 Joints     lt channel gt  is a number between O and 7 and    selected        e  817  halui joint  lt channel gt  home   pin for homing the specific joint    e  817  halui joint  lt channel gt  on min limit soft   status pin telling joint is at the negative software  limit    e  817  halui joint  l
121. an    freqgen xxx     The  original name of the freqgen module was stepgen  and I haven t gotten around to re doing all the screen shots since it was  renamed  The name    stepgen    now refers to a different step pulse generator  one that accepts position instead of velocity  commands  Both are described in detail later in this document     CHAPTER 7  HAL TUTORIAL           gt  lt  Realtime function not linked lx           The HALSCOPE realtime sampling function  must be called from a HAL thread in to  determine the sampling rate     Please do one of the following     Select a thread name and multiplier then click    OK     or  Click  Quit  to exit HALSCOPE    Thread    e  Sample Period            Sample Rate        siggen  thread 1 01 mSec  stepgen thread 50 3 uSec       1      Multiplier   Record Length    C 16191 samples  1 channel   C 8095 samples  2 channels     4047 samples  4 channels   C 2023 samples  8 channels     C 1011 samples  16 channels     OK   Quit                  Figure 7 4     Realtime function not linked    dialog       XA HAL Oscilliscope       Mak                               Horizontal    Zoom   500 mSec 4047 samples   C Normal  Pos   per div at 994 Hz C Single    See IDLE       sf 2 a s  s f 7  6  afvofssfre iafralis ie  ore    Selected Channel             Run Mode         Stop    onnofancn denon danes  Vertical  E Gain Pos    gogan           Scale                  Chan Off    Trigger    Normal    C Auto    Force      Level Pos    any    Level      
122. analog input channel  This may be used for individual  channel reads  or it may cause all channels to be read    9 4 Analog Output    The canonical analog output  I O Type  adcout   This is intended for any kind of hardware that  can output a more or less continuous range of values  Examples are digital to analog converters or  PWM generators     Pins  e  FLOAT  value     The value to be written  The actual value output to the hardware will depend    on the scale and offset parameters     e  BIT  enable   If false  then output O to the hardware  regardless of the value pin     CHAPTER 9  CANONICAL DEVICE INTERFACES 73    9 4 1 Parameters    e  FLOAT  offset     This will be added to the value before the hardware is updated  e  FLOAT  scale     This should be set so that an input of 1 on the value pin will cause 1V    e  FLOAT  high limit  optional    When calculating the value to output to the hardware  if value    offset is greater than high_limit  then high_limit will be used instead     e  FLOAT  low_limit  optional    When calculating the value to output to the hardware  if value    offset is less than low_limit  then low_limit will be used instead     e  FLOAT  bit_weight  optional      The value of one least significant bit  LSB   in volts  or mA  for  current outputs     e  FLOAT  hw_offset  optional    The actual voltage  or current  that will be output if O is written  to the hardware     9 4 2 Functions     FUNCT  write     This causes the calculated value to be out
123. and functions for prefix    option data type  default  none  DEPRECATED  If specified  each instance of the component will have an associated data block of type   which can be a simple type like float or the name of a type created with typedef    In new components  variable should be used instead     option extra_setup yes  default  no     If specified  call the function defined by EXTRA_SETUP for each instance  If using the automat   ically defined rtapi_app_main  extra_arg is the number of this instance              option extra_cleanup yes  default  no   If specified  call the function defined by EXTRA_CLEANUP from the automatically defined  rtapi_app_exit  or if an error is detected in the automatically defined rtapi_app_main              option userspace yes  default  no   If specified  this file describes a userspace component  rather than a real one  A userspace  component may not have functions defined by the function directive  Instead  after all the  instances are constructed  the C function user_mainloop    is called  When this function  returns  the component exits  Typically  user_mainloop   will use FOR_ALL_INSTS   to  perform the update action for each instance  then sleep for a short time  Another common  action in user_mainloop   may be to call the event handler loop of a GUI toolkit     option userinit yes  default  no   If specified  the function userinit  argc  argv  is called before rtapi_app_main    and  thus before the call to hal_init     This function
124. ane feel that the cold steel of Erector Sets  The heart  of construction with Tinker Toys was a round connector with eight holes equally spaced  around the circumference  It also had a hole in the center that was perpendicular to all  the holes around the hub     Hubs were connected with rods of several different lengths  Builders would make large  wheels by using these rods as spokes sticking out from the center hub     My favorite project was a rotating space station  Short spokes radiated from all the holes  in the center hub and connected with hubs on the ends of each spoke  These outer hubs  were connected to each other with longer spokes  P d spend hours dreaming of living in  such a device  walking from hub to hub around the outside as it slowly rotated producing  near gravity in weightless space  Supplies traveled through the spokes in elevators that  transfered them to an from rockets docked at the center hub while they transfered their  precious cargos     The idea of one pin or component being the hub for many connections is also an easy concept  within the HAL  Examples two and four  see section 7  connect the meter and scope to signals that  are intended to go elsewhere  Less easy is the notion of a hub for several incoming signals but that  is also possible with proper use of functions within that hub component that handle those signals  as they arrive from other components     Another thought that comes forward from this toy is a mechanical representation of HA
125. art normally   And finally  if  you specify an item to display  you can add     s    before the pin   sig  param to tell halmeter to use a  small window  The item name will be displayed in the title bar instead of under the value  and there  will be no buttons  Usefull when you want a lot of meters in a small amount of screen space     10 3 Halscope    Halscope is an    oscilloscope    for the HAL  It lets you capture the value of pins  signals  and param   eters as a function of time  Complete operating instructions should be located here eventually  For    75    CHAPTER 10  TOOLS AND UTILITIES    now  refer to section 7 6 in the tutorial chapter  which explains the basics     76    CHAPTER 10  TOOLS AND UTILITIES 77    10 4 Halshow    The script halshow can help you find your away around a running HAL  This is a very specialized  system and it must connect to a working HAL  It can not run stand alone because it relies on the  ability of HAL to report what it knows of itself through the halemd interface library  It is discovery  based  Each time halshow runs with a different EMC configuration it will be different     As we will soon see  this ability of HAL to document itself is one key to making an effective CNC  system     10 4 1 Starting Halshow   Halshow is in the AXIS menu under Machine Show Hal Configuration   Halshow is in the TKEMC menu under Scripts  Hal Show    10 4 2 Hal Tree Area    At the left of its display as shown in figure 10 1 is a tree view  somewhat like 
126. as given when the component was loaded  Note the column labeled Dir  The  parameters labeled  w are writeable ones that are never changed by the component itself  instead  they are meant to be changed by the user to control the component  We will see how to do this later   Parameters labeled R  are read only parameters  They can be changed only by the component   Finally  parameter labeled RW are read write parameters  That means that thay are changed by the  component  but can also be changed by the user  Note  the parameters siggen 0 update time  and siggen 0 update tmax are for debugging purposes  and won t be covered in this section     Most realtime components export one or more functions to actually run the realtime code they  contain  Let s see what function s  siggen exported     halcmd  show funct  Exported Functions   Owner CodeAddr Arg FP Users Name  32769 b7  74ac5 b7d0c0b4 YES 0 siggen 0 update          The siggen component exported a single function  It requires floating point  Itis not currently linked  to any threads  so    users    is zero         The number after halemd in the component list is the process ID  It is possible to run more than one copy of halemd at  the same time  in different windows for example   so the PID is added to the end of the name to make it unique   2The codeaddr and arg fields were used in development  and should probably be removed from the halemd listing     CHAPTER 7  HAL TUTORIAL 50    7 3 3 Making realtime code run    To actua
127. ased screen graphics program named keystick 1 3   e an X Windows programs named xemc 1 6   e two Tcl Tk based GUIs named tkemc 1 5 and mini 1 4    e an OpenGL based GUI  with an interactive G Code previewer  called AXIS 1 2  Tkemc and Mini will run on Linux  Mac  and Microsoft Windows if the Tcl Tk programming language  has been installed  The Mac and Microsoft Windows version can connect to a real time EMC2  running on a Linux machine via a network connection  allowing the monitoring of the machine    from a remote location  Instructions for installing and configuring the connection between a Mac or  Microsoft Machine and a PC running the EMC2 can be found in the Integrators Handbook     1 5 2 Motion Controller EMCMOT    Motion control includes sampling the position of the axes to be controlled  computing the next  point on the trajectory  interpolating between these trajectory points  and computing an output    CHAPTER 1  THE ENHANCED MACHINE CONTROL 6    axis ngc   AXIS  fol     File Machine View Help    Q fo D g gi i d     IZ  IN  x ly JP 5  gt   Manual Control  F3    MDI  F5   Axis  Cx OY OZ          Continuous w   Home All   Touch Off  7 Override Limits       Spindle   Stop       E El  Coolant       Mist    Flood             Feed Override  100      Spindle Override  100  Ea     Jog Speed  71 infmin                          AXIS 1 480  splash g code           Not intended for actual milling     1  1  SH    2  01  CUT   5   3  0003  SCALE      4 60  FEED   620   Character
128. ator  to understand  Perhaps the most important display is the mode the EMC2 is running in  You will  want to keep your eye on the mode display     Right up there with knowing what mode is active is consistent display of the position of each axis   Most of the interfaces will allow the operator to read position based upon actual or commanded  position as well as machine or relative position     Machine This is the position of an axis relative to the place where it started or was homed     CHAPTER 1  THE ENHANCED MACHINE CONTROL 10                  Settings   Help   Limit Override  ESTOP MIST OFF SHNDLE OFF    E RV GUA RUT TETTI    MANUAL PLGGD OFF BRAKE OR    0 0000  Y 0 0000  0 0000                          CHO    i fea i i Passe Resme   Step   Varify E          Figure 1 6  The XEMC Graphical Interface    Relative This is the position of an axis after work or tool or other offsets have been applied   Actual This is the real position of the axis within the machine or relative system   Commanded This is where the axis is commanded to be    These may all be exactly the same if no offsets have been applied and there is no deadband set    in the INI file  Deadband is a small distance which is assumed to be close enough     perhaps one  stepper pulse or one encoder count     It is also important to see any messages or error codes sent by the EMC2  These are used to request  the operator change a tool  to describe problems in G code programs  or to tell why the machine    CHAPTER 1
129. ave at least one HALFILE  and stepper systems typically have two such files  one which  specifies the generic stepper configuration  core_stepper hal  and one which specifies the  machine pin out  xxx_pinout hal     HAL   command Execute    command    as a single hal command  If HAL is specified multiple times   the commands are executed in the order they appear in the ini file  HAL lines are executed  after all HALFILE lines     SHUTDOWN   shutdown hal Execute the file    shutdown hal    when EMC is exiting  Depending on  the hardware drivers used  this may make it possible to set outputs to defined values when  EMC is exited normally  However  because there is no guarantee this file will be executed  for  instance  in the case of a computer crash  it is not a replacement for a proper physical e stop  chain or other protections against software failure     POSTGUI_HALFILE   example2 hal  Only with the AXIS GUI  Execute  example2 hal  after the GUI  has created its HAL pins  See section 18 for more information     4 3 8  TRAJ  Section    The  TRAJ  section contains general parameters for the trajectory planning module in EMCMOT     COORDINATES   X Y Z The names of the axes being controlled  X  Y  Z  A  B  C  U  V  and W are  all valid  Only axis named in COORDINATES are accepted in g code  This has no effect on  the mapping from G code axis names  X  Y  Z   to joint numbers for    trivial kinematics     X is  always joint O  A is always joint 4  and U is always joint 7  and s
130. ax     h out   h in    For all pins  whether or not they are also proper Python identifiers  the value may be accessed or  set using the subscript syntax     h    out       h  in         CHAPTER 12  CREATING USERSPACE PYTHON COMPONENTS WITH THE  HAL MODULE 95  12 4 1 Driving output  HAL_OUT  pins    Periodically  usually in response to a timer  all HAL_OUT pins should be    driven    by assigning them  a new value  This should be done whether or not the value is different than the last one assigned   When a pin is connected to a signal  its old output value is not copied into the signal  so the proper  value will only appear on the signal once the component assigns a new value     12 4 2 Driving bidirectional  HAL_IO  pins    The above rule does not apply to bidirectional pins  Instead  a bidirectional pin should only be driven  by the component when the component wishes to change the value  For instance  in the canonical  encoder interface  the encoder component only sets the index enable pin to FALSE  when an index  pulse is seen and the old value is TRUE   but never sets it to TRUE  Repeatedly driving the pin  FALSE might cause the other connected component to act as though another index pulse had been  seen     12 5 Exiting    A    halcmd unload    request for the component is delivered as a KeyboardInterrupt exception   When an unload request arrives  the process should either exit in a short time  or call the  exit     method on the component if substantial work  such a
131. ble eight conductor shielded cable to connect an encoder to the servo input  board in the computer  the reader immediately understands what it is and is led to the question      what kinds of connectors will I need to make up each end     The same sort of thinking is essential  for the HAL but the specific train of thought may take a bit to get on track  Using HAL words may  seem a bit strange at first  but the concept of working from one connection to the next is the same     This idea of extending the wiring diagram to the inside of the controller is what HAL is all about  If  you are comfortable with the idea of interconnecting hardware black boxes  you will probably have  little trouble using HAL to interconnect software black boxes     CHAPTER 6  INTRODUCTION 42    6 2 HAL Concepts    This section is a glossary that defines key HAL terms but it is a bit different than a traditional  glossary because these terms are not arranged in alphabetical order  They are arranged by their  relationship or flow in the HAL way of things     Component  When we talked about hardware design  we referred to the individual pieces as  parts     building blocks    black boxes   etc  The HAL equivalent is a  component  or  HAL component     This document uses  HAL component  when there is likely to be confusion with other kinds  of components  but normally just uses  component    A HAL component is a piece of software  with well defined inputs  outputs  and behavior  that can be installed and
132. c loop  The first loop is number 0     If debug 1 is specified  the component will export a few extra parameters that may be useful during  debugging and tuning  By default  the extra parameters are not exported  to save shared memory  space and avoid cluttering the parameter list     15 4 2 Removing    emc2  halcmd unloadrt pid    15 4 3 Pins    The three most important pins are  e  FLOAT  pid  lt loopnum gt  command     The desired position  as commanded by another system  component     e  FLOAT  pid  lt loopnum gt   feedback     The present position  as measured by a feedback device  such as an encoder        e  FLOAT  pid  lt loopnum gt  output     A velocity command that attempts to move from the present  position to the desired position     For a position loop  command    and    feedback    are in position units  For a linear axis  this could  be inches  mm  meters  or whatever is relevant  Likewise  for an angular axis  it could be degrees   radians  etc  The units of the    output    pin represent the change needed to make the feedback  match the command  As such  for a position loop    Output    is a velocity  in inches sec  mm sec   degrees sec  etc  Time units are always seconds  and the velocity units match the position units  If  command and feedback are in meters  then output is in meters per second     Each loop has two other pins which are used to monitor or control the general operation of the  component   e  FLOAT  pid  lt loopnum gt  error     Equals  comma
133. cal control pins  If the direction is    not specified  the data group defaults to output  For example        IHAL cannot automatically determine if the    x    mode bidirectional pins are actually open collectors  OC   If they are not   they cannot be used as inputs  and attempting to drive them LOW from an external source can damage the hardware    To determine whether your port has    open collector    pins  load hal_parport in    x    mode  output a HIGH value on the pin   HAL should read the pin as TRUE  Next  insert a 470  resistor from one of the control pins to GND  If the resulting voltage  on the control pin is close to OV  and HAL now reads the pin as FALSE  then you have an OC port  If the resulting voltage is  far from OV  or HAL does not read the pin as FALSE  then your port cannot be used in    x    mode    The external hardware that drives the control pins should also use open collector gates  e g   74LS05   Generally  the  out  HAL pins should be set to TRUE when the physical pin is being used as an input    On some machines  BIOS settings may affect whether    x    mode can be used     SPP    mode is most most likely to work     125    CHAPTER 16  HARDWARE DRIVERS 126  loadrt hal_parport cfg  0x278 0x378 in 0x20A0 out     This example installs drivers for one port at 0x0278  with pins 2 9 as outputs  by default  since  neither    in    nor    out    was specified   one at 0x0378  with pins 2 9 as inputs  and one at 0x20A0   with pins 2 9 explicitly specified
134. cates that the function performs floating point calculations     nofp Indicates that it only performs integer calculations  If neither is specified  fp is assumed   Neither comp nor gcc can detect the use of floating point calculations in functions that are  tagged nofp     OPT  VALUE Depending on the option name OPT  the valid VALUEs vary  The currently defined  options are     option singleton yes  default  no     Do not create a count module parameter  and always create a single instance  With  singleton  items are named component name item name and without singleton  items  for numbered instances are named component name   lt num gt   item name        CHAPTER 11  COMP  A TOOL FOR CREATING HAL MODULES 86    option default_count number  default  1   Normally  the module parameter count defaults to O  If specified  the count will default  to this value instead    option count_function yes  default  no   Normally  the number of instances to create is specified in the module parameter count  if  count_function is specified  the value returned by the function int get_count  void   is used instead  and the count module parameter is not defined    option rtapi_app no  default  yes   Normally  the functions rtapi_app_main and rtapi_app_exit are automatically defined   With option rtapi_app no  they are not  and must be provided in the C code   When implementing your own rtapi_app_main  call the function int export  char   prefix   long extra_arg  to register the pins  parameters  
135. ch unit of distance to be traveled  Once we have done  this  the EMC2 knows how to count units of distance  However it is very important to understand  that this counting of distance is different from the commanding of distance  You can command  distance in millimeters or inches without even thinking about the units that you defined  There are  G codes that allow you to switch easily between metric and imperial     Part IV    Installing EMC    Chapter 2    Installing the EMC2 software    2 1 Introduction    One of the problems users often complained about EMC was installing the software itself  They  were forced to get sources  and compile themselves  and try to set up a RT patched Linux  etc  The  developers of EMC2 chose to go with a standard distribution called Ubuntu      Ubuntu has been chosen  because it fits perfectly into the Open Source views of EMC2     Ubuntu will always be free of charge  and there is no extra fee for the  enterprise edition   we  make our very best work available to everyone on the same Free terms     Ubuntu comes with full professional support on commercial terms from hundreds of compa   nies around the world  if you need those services  Each new version of Ubuntu receives free  security updates for 18 months after release  some versions are supported for even longer     Ubuntu uses the very best in translations and accessibility infrastructure that the Free Soft   ware community has to offer  to make Ubuntu usable for as many people as possible
136. changing as siggen generates its triangle wave  Halmeter refreshes its  display about 5 times per second     If you want to quickly look at a number of pins  you can use the    Accept    button in the source  selection dialog  Click on    Select    to open the dialog again  This time  click on another pin  like  siggen 0 cosine  and then click    Accept     When you click    Accept     the meter immediately begins to  display the newly selected item  but the dialog does not close  Try displaying a parameter instead of  a pin  Click on the  Parameters  tab  then select a parameter and click    Accept    again  You can very  quickly move the    meter probes    from one item to the next with a couple of clicks     To shut down halmeter  just click the exit button     If you want to look at more than one pin  signal  or parameter at a time  you can just start more  halmeters  The halmeter window was intentionally made very small so you could have a lot of them  on the screen at once          3Halmeter is due for a rewrite  The rewrite will do a number of things to make it nicer  Scientific notation will go away   it  is a pain to read  Some form of ranging  including autoranging  will be added to allow it to display a wide range of numbers  without using scientific notation  An    analog bar graph    display will also be added to give a quick indication of trends  When  the rewrite is done  these screenshots and the accompanying text will be revised to match the new version     C
137. connect HAL pins  together as required by the machine builder  HAL signals can be disconnected and reconnected  at will  even while the machine is running      Type  When using real hardware  you would not connect a 24 volt relay output to the    10V  analog input of a servo amp  HAL pins have the same restrictions  which are based upon their  type  Both pins and signals have types  and signals can only be connected to pins of the same  type  Currently there are 4 types  as follows     BIT   a single TRUE FALSE or ON OFF value    FLOAT   a 32 bit floating point value  with approximately 24 bits of resolution and over 200 bits  of dynamic range     U32   a 32 bit unsigned integer  legal values are O to  4294967295     32   a 32 bit signed integer  legal values are  2147483648 to  2147483647    Function  Real hardware components tend to act immediately on their inputs  For example  if  the input voltage to a servo amp changes  the output also changes automatically  However  software components cannot act  automatically   Each component has specific code that must  be executed to do whatever that component is supposed to do  In some cases  that code simply  runs as part of the component  However in most cases  especially in realtime components  the  code must run in a specific sequence and at specific intervals  For example  inputs should be  read before calculations are performed on the input data  and outputs should not be written  until the calculations are done  In these cas
138. corner        18 6 4 Labelframe     lt labelframe text  Group Title  gt    lt hbox gt    lt led  gt   lt led  gt    lt  hbox gt    lt  labelframe gt           18 6 5 Table    A table is a container that allows layout in a grid of rows and columns  Each row is started by a   lt tablerow  gt  tag  A contained widget may span rows or columns through the use ofthe  lt tablespan  rows  cols   gt  tag  The sides of the cells to which the contained widgets    stick    may be set through  the use of the  lt tablesticky sticky   gt  tag  A table expands on its flexible rows and columns     Example         lt table flexible _rows   2   flexible _columns   1 4   gt    lt tablesticky sticky  new   gt    lt tablerow  gt    lt label text  A  cell 1 1    gt    lt label text  B  cell 1 2    gt                                   CHAPTER 18  VIRTUAL CONTROL PANELS     lt tablespan columns  2   gt  lt label text  C  D  cells 1 3 and 1 4   gt                 ky sticky  nsew   gt  lt tablespan rows  2   gt                                                     1 text  G  cell 2 3    gt      lt tablerow  gt     lt label text  E  cell 2 1    gt    lt tablestic    lt label text     spans n2 rows     gt    lt tablesticky sticky  new   gt  lt lab   lt label text  H  cel DAYS   lt tablerow  gt    lt label text  J  cell 3 1    gt    lt label text  K  cell 3 2    gt    lt label text  M  cell 3 4    gt    lt  table gt        161    Chapter 19    VCP    19 1 VCP  A small example    NOTE  VCP is deprecated  and
139. crs astea wae ew eee ees 88  11 9 Component Personality  sm eo e moiy a A a we aw Aa 88  11 10 Compiling  comp files in the source tree          arenamed 0022 eee eee 88  11 11 Compiling realtime components outside the source tree                04  88  11 12 Compiling userspace components outside the source tree                   89  LLIS Mame o ia a ww we ae Me a wa we a Gee ee eee ts 89   TTL  constant soco hE We ew woy aa a a a ek Be aa 89  11132  BICIS  coa RASHEED SREB E TES Saeed ne eb eee ds 89  MASS US coda bs we kee Sa Ee we oe a a ee 89  11 184 hal loop  s csi ER RR ea A ERS oR AS SE bs Se ee we 90  LLIJS araye ssaa apa a a A a als 91  LEISG Tilo E a a a a Be a e Be ee E a n e ati Gee ee Eaa 91   TODE serosa Ge Se A ke E i a Be we Ee 91   12 Creating Userspace Python Components with the    hal    module 93  UD A o AA II NN 93  12 2 Userspace components and delays        lt  o    ew                ee 94  12 3 Create pins and parameters  lt s oos o      escri ee es 94   1231 Choangna lle prem ceras ss ea OA Bee dd 94  12 4 Reading and writing pins and parameters                      e       94  1241 Driving output  HAL  OUT  PiS  o s s s o w w oma a i i a oe a ar i a a s 95  12 4 2 Driving bidirectional  HAL_IO  pins                            95  125 EI ds a A ARE wee a A A AA ee 95  126 Project ideas os scr A AA A A A Sw de A ee 95   VII EMC related HAL 96   13 Basic configurations for a stepper based system 97  13 1 Tniroduchon cues od we a ee ee Ee A AA AA RL 97 
140. da Sas a a cc ES 149  17 29 SANE ocres ran e a ew Ae a ae ew as 149  o JO ce ek we ne a ee Ee a RA 149    a E IAEA 150  L726 O   AAA RRA Bes wa Eee 150  172 9  Peed Oven  AIN 150  17 2 1  OpUAGle PUE  oc a Ad ER Res 150  U2 4A  TOG  6 i ke ARRAS AE EE SR RA ERASE EDR A e hae 150  W712 Program    she awe Oa ee RA Oe ee ak a a AAA 151  17 215 Centralia Dae SES EE ae ORE ew EERE al UN ee EE 151  EA MED ook oe eR Re  amp  PE ee A EG a Seed ae eh eG we    151  UA Case  SIGS osa a Paes AS Pa SES PGES bes be ee a 151   18 Virtual Control Panels 152  161 Tnirodneton oaos ay oe al A ee A Ge ete Sh Ad Gis  Bo a 152  Laa eh de dee dose  ee a Aa SR ae a a Oe bs eo  ae GS 152  153 Seite PY    gah be anyk SEER eR ba ba whee bee wee 153  184  Using per CP wih BAIS ooga a aa BY we DG A aa eee ee AA 153  18 5 py VCP Wiksel TEO  oe ee Ce ee we eae OE Ee aS a 154   LEO UVES AAN 154   16 590  2General NOR a a dee Be a ag rh Ais a es A A Sek  de Be A 155   Week IED ek Sh bw ore wes a ae  aw ware   Sas PP a ee be ee ee eR ER 155  18 22   Button oa ek RRA RR AA EERO A eh Ga ew bad 156  19 6 9 Checkbutlon cx 00m eRe ae a Re a ae ew A 156  13 52 Badiobuuen    ca cic ui ve Gia ative wdeewa Yaw  habe Va wih eS 156  1895 Number    cs ccoa ee he eh HBR AREER OS Re oe we ee aG 156  USO IA 157    E I te ed ee a ee SE a a Sw GE a ee de A 157  Lee o 6 a i a oO EAR Aw AS OEE Ee RO Re hee ee 158    EA    GOA ce ob ek eek HE ae a SE a Sie a Ga he le ae Hig ae a ws 158  19 510 Jogwheel css  ew we ee als 158  18 
141. der driver will never set    index enable    True  However  some other component  may do so  If    index enable    is True  then when the next index pulse arrives  the encoder counter  will be reset to zero  and the driver will set    index enable    False  That will let the other component  know that an index pulse arrived  This is a form of handshaking   the other component sets    index   enable    True to request a index pulse reset  and the driver sets it False when the request has been  satisfied     CHAPTER 9  CANONICAL DEVICE INTERFACES 74    9 5 2 Parameters    9 5      FLOAT  scale     The scale factor used to convert counts to position units  It is in    counts per  position unit     For example  if you have a 512 count per turn encoder on a 5 turn per inch  screw  the scale should be 512 5   2560 counts per inch  which will result in    position    in  inches and    velocity    in inches per second      FLOAT  max index vel    optional  The maximum velocity  in position units per second  at  which the encoder can reset on an index pulse with     1 count accuracy  This is an output  from the encoder driver  and is intended to tell the user something about the hardware capa   bilities  Some hardware can reset the counter at the exact moment the index pulse arrives   Other hardware can only tell that an index pulse arrived sometime since the last time the read  function was called  For the latter      1 count accuracy can only be achieved if the encoder  advances by 
142. der input  reset counter to zero and clear index enable      B     B       T  m5120  lt board gt  enc  lt channel gt      volts if false     reset     When true  counter is forced to zero     T  m5i20  lt board gt  dac  lt channel gt  enable   Enables DAC if true  DAC outputs zero     FLOAT  m5i20  lt board gt  dac  lt channel gt  value     Analog output value for PWM    DAC     in  user units  see  scale and  offset      B     B          T  m5i20  lt board gt  in  lt channel gt  n  ital input           T  m5i20  lt board gt  watchdog reset    T  m5i20  lt board gt  in  lt channel gt      State of digital input pin  see canonical digital input     ot     Inverted state of digital input pin  see canonical    T  m5i20  lt board gt  out     lt channel gt      Value to be written to digital output  see canonical  ital output     T  m5i20  lt board gt  estop in     Dedicated estop input  more details needed     T  m5i20  lt board gt  estop in not     Inverted state of dedicated estop input         Bidirectional    Set TRUE to reset watchdog once     is automatically cleared  If bit value 16 is set in watchdog control then this value is not  used  and the hardware watchdog is cleared every time the dac write function is executed     16 5 2 Parameters     E    vert from counts to units       E   E     B    LOAT     LOAT     m5i20  lt board gt  dac  lt channel    m5i20  lt board gt  dac  lt channel    LOAT  m5i20  lt board gt  enc  lt channel gt  scale     The number of counts   user
143. driven FALSE when an external e stop condition exists  iocontrol 0 lube   iocontrol 0 lube_level Should be driven TRUE when   iocontrol 0 tool change TRUE when a tool change is requested  iocontrol 0 tool changed Should be driven TRUE when a tool change is completed  iocontrol 0 tool prep number The number of the next tool  from the RS274NGC T word  iocontrol 0 tool prepare TRUE when a tool prepare is requested  iocontrol 0 tool prepared Should be driven TRUE when a tool prepare is completed  iocontrol 0 user enable out FALSE when an internal e stop condition exists    iocontrol 0 user request enable TRUE when the user has requested that e stop be cleared    Part VI    HAL Specifics    39    Chapter 6    Introduction    6 1 What is HAL     HAL stands for Hardware Abstraction Layer  At the highest level  it is simply a way to allow a  number of    building blocks    to be loaded and interconnected to assemble a complex system  The     Hardware    part is because HAL was originally designed to make it easier to configure EMC for a  wide variety of hardware devices  Many of the building blocks are drivers for hardware devices   However  HAL can do more than just configure hardware drivers     6 1 1 HAL is based on traditional system design techniques    HAL is based on the same principles that are used to design hardware circuits and systems  so it is  useful to examine those principles first     Any system  including a CNC machine   consists of interconnected components  For th
144. e   axis N backlash filt Backlash or screw compensation filtered value  respecting motion limits   axis N backlash vel Backlash or screw compensation velocity   axis N coarse pos cmd   axis N error TRUE when this joint has encountered an error  such as a limit switch closing  axis N f error The actual following error   axis N f error lim The following error limit   axis N f errored TRUE when this joint has exceeded the following error limit  axis N free pos cmd The    free planner    commanded position for this joint   axis N free tp enable TRUE when the    free planner    is enabled for this joint  axis N free vel lim The velocity limit for the free planner   axis N home state Reflects the step of homing currently taking place   axis N homed TRUE if the joint has been homed   axis N in position TRUE if the joint is using the    free planner    and has come to a stop    axis N joint vel cmd The joint   s commanded velocity    CHAPTER 5  EMC2 AND HAL 38    axis N neg hard limit The negative hard limit for the joint  axis N neg soft limit The negative soft limit for the joint  axis N pos hard limit The positive hard limit for the joint    axis N pos soft limit The positive soft limit for the joint    5 3 iocontrol  userspace     These pins are created by the userspace IO controller  usually called io     5 3 1 Pins    iocontrol 0 coolant flood TRUE when flood coolant is requested  iocontrol 0 coolant mist TRUE when mist coolant is requested  iocontrol 0 emc enable in Should be 
145. e  Even though halemd doesn t  recognize the tree structure  proper choice of naming conventions will let it group related items  together  since it sorts the names   In addition  higher level tools can be designed to recognize such  structure  if the names provide the neccessary information  To do that  all HAL modules should  follow these rules     e Dots           separate levels of the heirarchy  This is analogous to the slash           in a filename     e    e Hypens           separate words or fields in the same level of the heirarchy     e HAL modules should not use underscores or    MixedCase          e Use only lowercase letters and numbers in names     8 3 Hardware Driver Naming Conventions       8 3 1 Pin Parameter names    Hardware drivers should use five fields  on three levels  to make up a pin or parameter name  as  follows      lt device name gt   lt device num gt   lt io type gt   lt chan num gt   lt specific name gt   The individual fields are      lt device name gt  The device that the driver is intended to work with  This is most often an interface  board of some type  but there are other possibilities      lt device num gt  It is possible to install more than one servo board  parallel port  or other hardware  device in a computer  The device number identifies a specific device  Device numbers start at  O and increment         lt io type gt  Most devices provide more than one type of I O  Even the simple parallel port has both  digital inputs and digital o
146. e 4 Hee 8  4 2 2 OCIO Ss  i ke A A BR AOE RR AA RM Reha kh ho Bale  4 2 3 WAVES a A A Hho A e a a ES  4 2 4 Denniions css 25 Sea G ee ee eae wee ee ee A  INI Sector Variables  cos ia we a dd  4 3 1 EMO Seton  2s eea aaa a a a we a a aea a a iia i a a a  4 3 2  DISPLAY  Section nes cn 44 Cee eR do a a e r  Lal AXIO UTOE aa oe e O a aS A a e a Ta a   4 3 3 FILER Secon eco oo On aw oe Ee a a A A  4 3 4 IRS2Z74NGC  SECOS 6 6 dk ia a a e AR we  ae de a ae A  4 3 5  EMEMOTISECION   ocios ieee eee a eR e a  4 3 6  TASK  SOCOM sio    ERS eA ee Le ee eS  4 3 7  HAT  secto cia A A A OR OE ae wha ae di  4 3 8  TRAJ  SECO aiii we we OE ER me a A ee ee a  4 3 9  AXIS  lt numi gt   Section scudo ES ON ee ROH wee aw A  4 3 9 1 Homing related items os cs cre nio ha ee ee Oe ee ee ee ae   4 3 9 2 Servo Telated items   6 ee a ewe  4 3 9 3 Stepper relaied TEMS  gt c s RHE Lee ees   43 10  EMCIO Secho    occ we Se ke Be eee oe el we A a  TIO eb  Bose ic Ra we oh we Ed te E A Ble a we Were Stee E Bese a da  4 4 1 CERIO o 6s he RAR BLS Aaa A A A e ee we  4 4 2 HNOS SOQUEHES es e go eB Id Sod We ae la we a  4 4 3 COMAS  i a a da ee aw Atal    17  17  17  17  18  18  18  19  19  19    20    CONTENTS    4 5    2 4 5 1 HOME  SEARCH VEL s oop m main oe i o aaa YA Ge ee ew  4 4 3 2 HOME LATCH VEL os sca bee ee a a a a a  4 4 3 3 HOME_IGNORE_LIMITS             o        e    eee  4 4 3 4 HOME_USE_INDEX             o    ee e     443 6 HOME OFFSET io    iaa a a  2450 AAN  4 4 3 7 HOME_IS SHARED             
147. e CNC ma   chine  those components might be the main controller  servo amps or stepper drives  motors  en   coders  limit switches  pushbutton pendants  perhaps a VFD for the spindle drive  a PLC to runa  toolchanger  etc  The machine builder must select  mount and wire these pieces together to make a  complete system     6 1 1 1 Part Selection    The machine builder does not need to worry about how each individual part works  He treats them  as black boxes  During the design stage  he decides which parts he is going to use   steppers or  servos  which brand of servo amp  what kind of limit switches and how many  etc  The integrator   s  decisions about which specific components to use is based on what that component does and the  specifications supplied by the manufacturer of the device  The size of a motor and the load it must  drive will affect the choice of amplifier needed to run it  The choice of amplifier may affect the kinds  of feedback needed by the amp and the velocity or position signals that must be sent to the amp  from a control     In the HAL world  the integrator must decide what HAL components are needed  Usually every  interface card will require a driver  Additional components may be needed for software generation  of step pulses  PLC functionality  and a wide variety of other tasks     6 1 1 2 Interconnection Design    The designer of a hardware system not only selects the parts  he also decides how those parts will  be interconnected  Each black box has 
148. e HAL out  pin TRUE drives the physical pin low  turning ON an attached OPTO   22 module  and FALSE drives it high  turning OFF the OPTO 22 module  If  invert is TRUE  then  setting the HAL out  pin TRUE will drive the physical pin high and turn the module OFF     16 3 4 Functions    e  FUNCT  ax5214  lt boardnum gt   read     Reads all digital inputs on one board     e  FUNCT  ax5214  lt boardnum gt  write     Writes all digital outputs on one board        3In fact it may be a pair of 8255 chips  but I   m not sure  If when someone starts a driver for an 8255 they should look at  the ax5214 code  much of the work is already done     CHAPTER 16  HARDWARE DRIVERS 130    16 4 Servo To Go    The Servo To Go is one of the first PC motion control cards  supported by EMC  It is an ISA card  and it exists in different flavours  all supported by this driver   The board includes up to 8 channels  of quadrature encoder input  8 channels of analog input and output  32 bits digital I O  an interval  timer with interrupt and a watchdog     16 4 1 Installing     loadrt hal_stg  base  lt address gt    num_chan  lt nr gt    dio   lt dio string gt     model  lt model gt         The base address field is optional  if it   s not provided the driver attempts to autodetect the board   The num_chan field is used to specify the number of channels available on the card  if not used the  8 axis version is assumed  The digital inputs outputs configuration is determined by a config string  passed to in
149. e simpler setups  because the motors run open loop  no feedback comes back from the  motors   yet the system needs to be configured properly so the motors don   t stall or lose steps     Most of this chapter is based on the sample config released along with EMC2  The config is called  stepper  and usually it is found in  etc emc2 sample configs stepper     13 2 Maximum step rate    With software step generation  the maximum step rate is one step per two BASE_PERIODs for step   and direction output  The maximum requested step rate is the product of an axis   s MAX_VELOCITY  and its INPUT_SCALE  If the requested step rate is not attainable  following errors will occur  par   ticularly during fast jogs and GO moves     If your stepper driver can accept quadrature input  use this mode  With a quadrature signal  one  step is possible for each BASE_PERIOD  doubling the maximum step rate     The other remedies are to decrease one or more of  the BASE_PERIOD  setting this too low will cause  the machine to become unresponsive or even lock up   the INPUT_SCALE  if you can select different  step sizes on your stepper driver  change pulley ratios  or leadscrew pitch   or the MAX_VELOCITY  and STEPGEN_MAXVEL     If no valid combination of BASE_PERIOD  INPUT_SCALE  and MAX_VELOCITY is acceptable  then  hardware step generation  such as with the EMC2 supported Universal Stepper Controller     97    CHAPTER 13  BASIC CONFIGURATIONS FOR A STEPPER BASED SYSTEM 98    13 3 Pinout    One of the 
150. e this number     TOOL TABLE   tool tbl The file which contains tool information  For more information see the G  Code Manual     TOOL_CHANGE_POSITION   0 O 2 Specifies the XYZ location to move to when performing a tool  change     CHAPTER 4  INI CONFIGURATION 31                               SEARCH_VEL   LATCH_VEL   USE_INDEX   Homing Type  nonzero nonzero NO Switch only  nonzero nonzero YES Switch   Index   0 nonzero YES Index only  0 0 NO None  Other combinations Error                Table 4 1  Homing Types  4 4 Homing    4 4 1 Overview    Homing seems simple enough   just move each joint to a known location  and set EMC s internal  variables accordingly  However  different machines have different requirements  and homing is  actually quite complicated     4 4 2 Homing Sequence    Figure 4 1 shows four possible homing sequences  along with the associated configuration param   eters  For a more detailed description of what each configuration parameter does  see the following  section     4 4 3 Configuration    There are six pieces of information that determine exactly how the home sequence behaves  They  are defined in an  AXIS  section of the ini file     4 4 3 1 HOME_SEARCH_VEL    The default value is zero  A value of zero causes EMC to assume that there is no home switch  the  search stage of homing is skipped     If    HOME SEARCH VEL    is non zero  then EMC assumes that there is a home switch  It be   gins by checking whether the home switch is already tripped  If so 
151. e_to_pyvcp hal          This change will run the HAL commands specified in    spindle_to_pyvcp hal     In our example the  contents could look like this     CHAPTER 18  VIRTUAL CONTROL PANELS 154       linksp spindle rpm filtered pyvcp spindle speed    assuming that a signal called    spindle rpm filtered    already exists  Note that when running together  with AXIS  all pyVCP widget HAL pins have names that start with    pyvcp          RX lathe pawn nge   AXIS Pe ar  File Machine View Help  CUBANO  Manual Control  F3  MDI  F5     History   m3s3250       Spindle speed     1000 0    0 0 5000       MDI Command     Active G Codes     G1 G17 640 G21 G90 G94 G54 649 699  G64 GO M2 M5 M9 N48 M53 F75 51000       Feed Override  100  HIB  Spindle Override  100  aya   Jog Speed  12 infmin y        621  2  G64                 G18    GOO X13 5 21 0  1000 M3    20 488     gt  20 975    GOO X0 383 21 269   gt  X13 5    ON No tool Position  Relative Actual          This is what the newly created pyVCP panel should look like in AXIS  The sim lathe configuration  is already configured this way     18 5 pyVCP Widget reference    HAL signals come in two variants  BIT and FLOAT  pyVCP can either display the value of the signal  with an indicator widget  or modify the signal value with a control widget  Thus there are four  classes of pyVCP widgets that you can connect to a HAL signal  A fifth class of helper widgets allow  you to organize and label your panel     1  Widgets for indicating BIT si
152. eased    Testing   and  Head   For the latest information  click on the version you  are interested in     Released is exactly that  a released version of EMC2 with a version number  It is tested by both  developers and beta users before being released  and is suitable for the average user  Most de   velopers and IRC mailing list regulars are able to help support people running a released version    Released  is available in several forms  including  debs for Ubuntu and source tarballs for local  compilation  There will be a Debian repository which will always have the latest released version   and thus allows for easy upgrades from one stable release to the next      Testing is a version of EMC2 that is ready for  beta testing  but not for general release  Before  a version is labeled testing it will be known to compile and run on several different platforms     17    CHAPTER 3  COMPILING FROM SOURCE 18    but there will probably be various limitations and known problems  The Testing wiki page will  attempt to list known problems and workarounds  but there will probably also be undiscovered  bugs  Since Testing is  beta  software  it should not be used for anything critical  Users of Testing  need to understand that it is beta software  and must be willing to give detailed bug reports if things  go wrong  Testing is available primarily as a tag in CVS  although for convenience of testers  a   testing  Debian repository and or tarballs may also be available  The EMC Board of 
153. eeded  This section lists some of the available components  and a brief description of what each does  Complete details for each component are available later  in this document     6 3 1 External Programs with HAL hooks    motion A realtime module that accepts NML motion commands and interacts with HAL  iocontrol A user space module that accepts NML I O commands and interacts with HAL  classicladder A PLC using HAL for all I O    halui A user space program that interacts with HAL and sends NML commands  it is intended to  work as a full User Interface using external knobs  amp  switches    6 3 2 Internal Components    stepgen Software step pulse generator with position loop  See section 15 1  encoder Software based encoder counter  See section 15 3   pid Proportional Integral Derivative control loops  See section 15 4   siggen A sine cosine triangle square wave generator for testing  See section 15 7  supply a simple source for testing    blocks assorted useful components  mux  demux  or  and  integ  ddt  limit  wcomp  etc      CHAPTER 6  INTRODUCTION 44    6 3 3 Hardware Drivers    hal_ax5214h A driver for the Axiom Measurement  amp  Control AX5241H digital I O board  hal m5i20 Mesa Electronics 5i20 board   hal_motenc Vital Systems MOTENC 100 board   hal_parport PC parallel port  See section 16 1   hal_ppmc Pico Systems family of controllers  PPMC  USC and UPC    hal_stg Servo To Go card  version 1     2    hal vti Vigilant Technologies PCI ENCDAC 4 controller    6 3 4 Tools
154. en 0 cosine  03 float  W 0 00000e 00 siggen 0 sawtooth  03 float  W 0 00000e 00 siggen 0 sine  03 float  W 0 00000e 00 siggen 0 square  03 float  W 0 00000e 00 siggen 0 triangle  02 s32  W 0 freggen 0 counts  02 bit  W FALSE freqgen 0 dir  02 float  W 0 00000e 00 freqgen 0 position  02 bit  W FALSE freggen 0 step  02 float R  0 00000e 00 fregqgen 0 velocity  02 s32  W 0 freggen 1l counts  02 bit  W FALSE freqgen 1 dir  02 float  W 0 00000e 00 freagen l position  02 bit  W FALSE freqgen 1 step  02 float R  0 00000e 00 freqgen 1 velocity  halcmd  show param  Parameters   Owner Type Dir Value Name  03 float  W 1 00000e 00 siggen 0 amplitude       The         at the end of a long line indicates line wrapping  needed for formatting this document   When entering the  commands at the command line  simply skip the          do not hit enter  and keep typing from the following line     CHAPTER 7  HAL TUTORIAL 56                      03 float  W 1 00000e 00 siggen 0 frequency   03 float  W  00000e 00 siggen 0 offset   02 u32  W 000000001 freqgen 0 dirhold   02 u32  W 000000001 freagen 0 dirsetup   02 float R  0 00000e 00 freqgen 0 frequency   02 float  W 0 00000e 00 freqgen 0 maxaccel   02 float  W 1 00000e 15 freqgen 0 maxfreq   02 float  W 1 00000e 00 freqgen 0 position scale  02 s32 R  0 freggen 0 rawcounts   02 u32  W 000000001 freqgen 0 steplen   02 u32  W 000000001 freqgen 0 stepspace   02 float  W 1 00000e 00 freqgen 0 velocity scale  02 u32  W 000000001 freqgen 1 dirhold   02 u3
155. en and edit    27 4 Terminal Commands    27 4 1 Working Directory    To find out the path to the present working directory in the terminal window type      pwd    27 4 2 Changing Directories    To move up one level in the terminal window type     ed     To move down to the emc2 configs subdirectory in the terminal window type        cd emc2 configs    27 4 3 Listing files in a directory    To view a list of all the files and subdirectories in the terminal window type      dir  or       ls    27 4 4 Finding a File    The find command can be a bit confusing to a new Linux user  The basic syntax is      find starting directory parameters actions    For example to find all the  ini files in your EMC2 directory you first need to use the pwd command  to find out the directory  Open a new terminal window and type        pwd    CHAPTER 27  LINUX FAQ 198    might return the following result       home joe   With this information put the command together like this      find  home joe emc2  name   ini  print    The  name is the name of the file your looking for and the  print tells it to print out the result to the  terminal window  The   ini tells find to return all files that have the  ini extension     To find all the files in the directory named and all the subdirectories under that add the  L option  to the find command like this        find  L  home joe emc2  name   ini  print    27 4 5 Searching for Text       grep  i  r  text to search for         To find all the files that cont
156. en update_freq slow  halcmd  addf freqgen make_pulses fast       After we give these commands  we can run the show thread command again to see what happened     halcmd  show thread  Realtime Threads   Period FP Name  Time  Max Time   1005720 YES slow C0540  3  1 siggen 0 update  2 freqgen update freg  50286 NO fast  0 0   1 freqgen make pulses          Now each thread is followed by the names of the functions  in the order in which the functions will  run     7 5 4 Setting parameters    We are almost ready to start our HAL system  However we still need to adjust a few parameters  By  default  the siggen component generates signals that swing from  1 to  1  For our example that is  fine  we want the table speed to vary from  1 to  1 inches per second  However the scaling of the step  pulse generator isn   t quite right  By default  it generates an output frequency of 1 step per second  with an input of 1 000  It is unlikely that one step per second will give us one inch per second of  table movement  Let s assume instead that we have a 5 turn per inch leadscrew  connected to a 200  step per rev stepper with 10x microstepping  So it takes 2000 steps for one revolution of the screw   and 5 revolutions to travel one inch  that means the overall scaling is 10000 steps per inch  We  need to multiply the velocity input to the step pulse generator by 10000 to get the proper output   That is exactly what the parameter freqgen n velocity scale is for  In this case  both the X and  Y ax
157. en using the onboard video  But a  5 used Matrox video  card solved the problem   EMC does not require bleeding edge hardware     21 1 2 Figure out what your drives expect    Different brands of stepper drives have different timing requirements on their step and direction  inputs  So you need to dig out  or Google for  the data sheet that has your drive   s specs     For example  the Gecko G202 manual says this   Step Frequency  O to 200 kHz    CHAPTER 21  STEPPER TUNING 173    Step Pulse    0    Time  0 5 uS min  Step on falling edge   Step Pulse    1    Time  4 5 uS min  Direction Setup  1 uS min  20 uS min hold time after Step edge     The Gecko G203V specifications are    Step Frequency  O to 333 kHz   Step Pulse    0    Time  2 0 uS min  Step on rising edge   Step Pulse    1    Time  1 0 uS min   Direction Setup     200 nS  0 2uS  before step pulse rising edge  200 nS  0 2uS  hold after step pulse rising edge    A Xylotex drive datasheet has a nice drawing of the timing requirements  which are     Minimum DIR setup time before rising edge of STEP Pulse 200nS Minimum  DIR hold time after rising edge of STEP pulse 200nS   Minimum STEP pulse high time 2 0uS   Minimum STEP pulse low time 1 0uS   Step happens on rising edge    Once you find the numbers  write them down too   you need them in the next step     21 1 3 Choose your BASE_PERIOD    BASE_PERIOD is the  heartbeat  of your EMC computer  Every period  the software step generator  decides if it is time for another step 
158. eps per second     But you can t start celebrating yet  Note that 13uS is a very short period  If you try to run the step  generator every 13uS  there might not be enough time left to run anything else  and your computer  will lock up  If you are aiming for periods of less than 25uS  you should start at 25uS or more  run  EMC  and see how things respond  If all is well  you can gradually decrease the period  If the mouse  pointer starts getting sluggish  and everything else on the PC slows down  your period is a little too  short  Go back to the previous value that let the computer run smoothly     In this case  sppose you started at 25uS  trying to get to 13uS  but you find that around 16uS is the  limit   any less and the computer doesn   t respond very well  So you use 16uS  With a 16uS period  and 11uS latency  the shortest output time will be 16 11   5uS  The drive only needs 2uS  so you  have some margin  Margin is good   you don   t want to lose steps because you cut the timing too  close     What is the maximum step rate  Remember  two periods to make a step  You settled on 16uS for  the period  so a step takes 32uS  That works out to a not bad 31 250 steps per second     21 1 4 Use steplen  stepspace  dirsetup  and or dirhold    In the last section  we got the Xylotex drive to a 16uS period and a 31 250 step per second maximum  speed  But the Gecko was stuck at 31uS and a not so nice 16 129 steps per second  The Xylotex  example is as good as we can make it  But the 
159. er     With a PLC  if the coil is OFF and the contact is closed when the PLC begins to evaluate the rung   then when it finishes that pass  the coil is ON  The fact that turning on the coil opens the contact  feeding it is ignored until the next pass  On the next pass  the PLC sees that the contact is open  and  de energizes the coil  So the relay still switches rapidly between on and off  but at a rate determined  by how often the PLC evaluates the rung     In HAL  the function is the code that evaluates the rung s   In fact  the HAL aware realtime version  of ClassicLadder exports a function to do exactly that  Meanwhile  a thread is the thing that runs  the function at specific time intervals  Just like you can choose to have a PLC evaluate all its rungs  every 10mS  or every second  you can define HAL threads with different periods     What distinguishes one thread from another is not what the thread does   that is determined by  which functions are connected to it  The real distinction is simply how often a thread runs     In EMC you might have a 50us thread and a Ims thread  These would be created baseds on  BASE_PERIOD and SERVO_PERIOD the actual times depend on the ini     The next step is to decide what each thread needs to do  Some of those decisions are the same in   nearly  any emc system    For instance  motion command handler is always added to servo thread     Other connections would be made by the integrator  These might include hooking the STG driver   s  enc
160. er left edge of  the display  This menu is shown in figure xx    10 4 3 Hal Show Area    Clicking on the node name rather than its plus or minus sign  the word    Components    for example   will show you all that hal knows about the contents of it  Figure 10 1 shows a list exactly like you  will see if you click the    Components    name while you are running a standard m5i20 servo card   The information display is exactly like those shown in traditional text based HAL analysis tools  The  advantage here is that we have mouse click access  Access that can be as broad or as focused as  you need     If we take a closer look at the tree display we can see that the six major parts of a HAL can all  be expanded at least one level  As these levels are expanded you can get more focused with the  reply when you click on the rightmost tree node  You will find that there are some hal pins and  parameters that show more than one reply  This is do to the nature of the search routines in  halemd itself  If you search one pin you may get two like this     Component Pins    Owner Type Dir Value Name   06 bit  W TRUE parport 0 pin 10 in   06 bit  W FALSE parport 0 pin 10 in not          The second pins name contains the complete name of the first     Below the show area on the right is a set of widgets that will allow you to play with the running  HAL  The commands you enter here and the effect that they have on the running HAL are not saved   They will persist as long as the emc remains up
161. er motor drives by sending signals through the printer port  These  signals  pulses  make the stepper drives move the stepper motors  The EMC2 can also run servo  motors via servo interface cards or by using an extended parallel port to connect with external  control boards  As we examine each of the components that make up an EMC2 system we will  remind the reader of this typical machine     There are four main components to the EMC2 software  a motion controller  EMCMOT   a discrete  I O controller  EMCIO   a task executor which coordinates them  EMCTASK   and a collection of  text based or graphical user interfaces  An EMC2 capable of running a mini mill must start some  version of all four of these components in order to completely control it  Each component is briefly  described below  In addition there is a layer called HAL  Hardware Abstraction Layer  which allows  simple reconfiguration of EMC2 without the need of recompiling        2some parts of EMC2 are released under the    Lesser    GPL  LPGL   which allows them to be used with proprietary software  as long as certain restrictions are observed     CHAPTER 1  THE ENHANCED MACHINE CONTROL 5    Figure 1 1  Simple EMC2 Controlled Machine    Power supply       Linux PC  emc2 installed    Stepper Stepper  drives motors    1 5 1 Graphical User Interfaces    A graphical interface is the part of the EMC2 that the machine tool operator interacts with  The  EMC2 comes with several types of user interfaces    e a character b
162. ere are options while loading the user module   e    help displays basically this list then exits    e  version displays the    version    surprise   then exits    e    nogui starts classicladder  while loading a ladder program if specified  with no GUI     CHAPTER 24  CLASSICLADDER 184       modbus_port port sets up the modbus port number  EMC doesn   t use it      config file Sets up the number of the each ladder object   only if there is no realtime support In  EMC you load this with the realtime module Ill get to this in a minute      w Used when ClassicLadder is used with a HAL file and not loaded with EMC  It tells HAL not  to close down the HAL environment until ClassicLadder is finished     Use the GUI when setting up your system then change it to  nogui when running  The only other  thing you can do while loading the user module is specify a ladder program to load  ladder programs  are specified by the  clp ending     e loadusr classicladder    nogui myladder clp    loads the classicladder user module  ladder program myladder and displays nothing     e loadusr classicladder myladder clp  loads the classicladder user module  ladder program myladder and starts the classicladder  GUI    e loadusr classicladder    loads the classicladder user module  starts the GUI but loads no laddder program     24 4 ClassicLadder GUI    If you load classicladder with the GUI it will display three windows  vars  section display  and  section manager     24 4 1 The Variables window    I
163. ers        e  FUNCT  m5i20  lt board gt  digital in read     Reads digital inputs   e  FUNCT  m5i20  lt board gt  dac write     Writes the voltages  PWM duty cycles  to the    DACs        e  FUNCT  m5i20  lt board gt  digital out write     Writes digital outputs        e  FUNCT  m5i20  lt board gt  misc update     Writes watchdog timer configuration to hardware   Resets watchdog timer  Updates E stop pin  more info needed   Updates onboard LEDs     16 5 4 Connector pinout    The Hostmot 4 FPGA configuration has the following pinout  There are three 50 pin ribbon cable  connectors on the card  P2  P3  and P4  There are also 8 status LEDs     CHAPTER 16  HARDWARE DRIVERS    16 5 4 1 Connector P2                                                                                              m5i20 card connector P2 Function HAL pin  1 enc 01 A input  3 enc 01 B input  5 enc 00 A input  7 enc 00 B input  9 enc 01 index input  11 enc 00 index input  13 dac 01 output  15 dac 00 output  17 DIR output for dac 01  19 DIR output for dac 00  21 dac 01 enable output  23 dac 00 enable output  25 enc 03 B input  27 enc 03 A input  29 enc 02 B input  31 enc 02 A input  33 enc 03 index input  35 enc 02 index input  37 dac 03 output  39 dac 02 output  41 DIR output for dac 03  43 DIR output for dac 02  45 dac 03 enable output  47 dac 02 enable output  49 Power  5 V  or  3 3V     all even pins Ground          16 5 4 2 Connector P3    Encoder counters 4   7 work simultaneously with in 00 to in 11  
164. es  the code is made available to the system in    CHAPTER 6  INTRODUCTION 43    the form of one or more  functions   Each function is a block of code that performs a specific  action  The system integrator can use  threads  to schedule a series of functions to be executed  in a particular order and at specific time intervals     Thread  A  thread  is a list of functions that runs at specific intervals as part of a realtime task   When a thread is first created  it has a specific time interval  period   but no functions  Func   tions can be added to the thread  and will be executed in order every time the thread runs     As an example  suppose we have a parport component named hal_parport  That component defines  one or more HAL pins for each physical pin  The pins are described in that component s doc section   their names  how each pin relates to the physical pin  are they inverted  can you change polarity   etc  But that alone doesn t get the data from the HAL pins to the physical pins  It takes code to  do that  and that is where functions come into the picture  The parport component needs at least  two functions  one to read the physical input pins and update the HAL pins  the other to take data  from the HAL pins and write it to the physical output pins  Both of these functions are part of the  parport driver     6 3 HAL components    Each HAL component is a piece of software with well defined inputs  outputs  and behavior  that  can be installed and interconnected as n
165. eter  42  HAL Physical Pin  42  HAL Pin  42   HAL Signal  42   HAL Thread  43   HAL Type  42  hal ax5214h  44  hal m5i20  44  hal motenc  44  hal parport  44  hal ppmc  44   hal stg  44   hal vti  44   halemd  44   halmeter  44   halscope  44   halui  43   HOME  33   home  201   HOME IGNORE LIMITS  33  HOME IS SHARED  33  HOME LATCH VEL  31  HOME OFFSET  33  HOME SEARCH VEL  28  31  HOME SEQUENCE  33  HOME USE INDEX  33       INI  6  21  201   ini  AXIS  Section  27   ini  DISPLAY  Section  23  ini  EMC  Section  23   ini  EMCIO  Section  30    209    INDEX    ini  EMCMOT  Section  25  ini  FILTER  Section  24   INI  RS274NGC  Section  25  ini  TASK  Section  26  INPUT SCALE  30  Installing  LiveCD  14  Installing  manual  15  Installing  script  15  iocontrol  43   iocontrol  HAL pins   38    jog  201  joint coordinates  201    keystick  5  22  kinematics  166  201    lead screw  201   LINEAR UNITS  26   Linux  4   Linux FAQ  196   Listing files in a directory  197  loop  202   ls  197    machine on  101  machine units  201  Man Pages  196  Manual  8   MAX ACCELERATION  27  MAX LIMIT  27   MAX VELOCITY  27  MDI  8  202   MIN FERROR  27  MIN LIMIT  27   mini  5  22   motion  43   motion  hal pins   35       NIST  3  202  NML  21    offsets  202  OMAC  3  Open Source  14    parallel port  125   part Program  202   pid  43  119   pinout  98   PLC  7   Pluto P  140  pluto servo  142  pluto servo alternate pin functions  144  pluto servo pinout  143  pluto step  145  pluto step p
166. f the screen only  For  larger adjustments the offset button should be used  see the halscope reference in section 10 3 for  details      7 6 5 Triggering    Using the    Force    button is a rather unsatisfying way to trigger the scope  To set up real triggering   click on the    Source    button at the bottom right  It will pop up the    Trigger Source    dialog  which  is simply a list of all the probes that are currently connected  Figure 7 8    Select a probe to use for  triggering by clicking on it  For this example we will use channel 3  the triangle wave        XA Trigger Source  x  Select a channel to use for triggering        Chan  Source    2 Y_vel   3 siggen 1 triangle  4 siggen 1 square  5      6 ae   7 a   8 zone   3        10        11        12               Cancel                  Figure 7 8  Trigger Source Dialog    After setting the trigger source  you can adjust the trigger level and trigger position using the sliders  in the    Trigger    box along the right edge  The level can be adjusted from the top to the bottom of the  screen  and is displayed below the sliders  The position is the location of the trigger point within the  overall record  With the slider all the way down  the trigger point is at the end of the record  and  halscope displays what happened before the trigger point  When the slider is all the way up  the  trigger point is at the beginning of the record  displaying what happened after it was triggered  The  trigger point is visible as a 
167. firmware or emc2 can leave the Pluto P pins in an undefined state     In pwm dir mode  by default dir is HIGH for negative values and LOW for positive values  To  select HIGH for positive values and LOW for negative values  set the corresponding dout NN   invert parameter TRUE to invert the signal     The index input is triggered on the rising edge  Initial testing has shown that the QZx inputs  are particularly noise sensitive  due to being polled every 25ns  Digital filtering has been  added to filter pulses shorter than 175ns  seven polling times   Additional external filtering  on all input pins  such as a Schmitt buffer or inverter  RC filter  or differential receiver  if  applicable  is recommended     The IN1   IN7 pins have 22 ohm series resistors to their associated FPGA pins  No other pins  have any sort of protection for out of spec voltages or currents  It is up to the integrator to add  appropriate isolation and protection  Traditional parallel port optoisolator boards do not work  with pluto_servo due to the bidirectional nature of the EPP protocol     16 8 4 LED    e When the device is unprogrammed  the LED glows faintly  When the device is programmed   the LED glows according to the duty cycle of PWMO  LED   UPO xor DOWNO  or STEPGENO   LED   STEPO xor DIRO      16 8 5 Power    e A small amount of current may be drawn from VCC  The available current depends on the  unregulated DC input to the board  Alternately  regulated  3 3VDC may be supplied to the  FPGA t
168. fset            FLOAT  motenc  lt board gt  adc  lt channel gt  gain     Sets the ADC gain  scaling      CHAPTER 16  HARDWARE DRIVERS 138  e  BIT  motenc  lt board gt  out  lt channel gt  invert     Inverts a digital output  see canonical dig   ital output     e  u32  motenc  lt board gt  watchdog control     Configures the watchdog  The value may be a  bitwise OR of the following values                    Bit     Value Meaning  0 1 Timeout is 16ms if set  8ms if unset  2 4 Watchdog is enabled  4 16   Watchdog is automatically reset by DAC writes  the HAL dac write function                    Typically  the useful values are O  watchdog disabled  or 20  8ms watchdog enabled  cleared  by dac write      e  u32  motenc  lt board gt  led view     Maps some of the I O to onboard LEDs     16 6 3 Functions       e  FUNCT  motenc  lt board gt  encoder read     Reads all encoder counters   e  FUNCT  motenc  lt board gt  adc read     Reads the analog to digital converters   e  FUNCT  motenc  lt board gt  digital in read     Reads digital inputs     e  FUNCT  motenc  lt board gt  dac write     Writes the voltages to the DACs        e  FUNCT  motenc  lt board gt  digital out write     Writes digital outputs                 e  FUNCT  motenc  lt board gt  misc update     Updates misc stuff     16 7 Pico Systems PPMC  Parallel Port Motion Control     Pico Systems has a family of boards for doing servo  stepper  and pwm control  The boards connect  to the PC through a parallel port working i
169. generally available  and the machine generated HTML produced by some word processors for output  purposes only     The  Title Page  means  for a printed book  the title page itself  plus such following pages as are needed to hold   legibly  the material this License requires to appear in the title page  For works in formats which do not have  any title page as such   Title Page  means the text near the most prominent appearance of the work s title   preceding the beginning of the body of the text     2  VERBATIM COPYING    You may copy and distribute the Document in any medium  either commercially or noncommercially  provided  that this License  the copyright notices  and the license notice saying this License applies to the Document  are reproduced in all copies  and that you add no other conditions whatsoever to those of this License  You  may not use technical measures to obstruct or control the reading or further copying of the copies you make  or distribute  However  you may accept compensation in exchange for copies  If you distribute a large enough  number of copies you must also follow the conditions in section 3     You may also lend copies  under the same conditions stated above  and you may publicly display copies   3  COPYING IN QUANTITY    If you publish printed copies of the Document numbering more than 100  and the Documents license notice  requires Cover Texts  you must enclose the copies in covers that carry  clearly and legibly  all these Cover  Texts  Front
170. gnals  LED   2  Widgets for controlling BIT signals  Button  Checkbutton  Radiobutton  3  Widgets for indicating FLOAT signals  Number  Bar  Meter   4  Widgets for controlling FLOAT signals  Spinbox  Scale  Jogwheel   5  Helper widgets  Hbox  Vbox  Tabel  Label  Labelframe    18 5 0 1 Syntax    Each widget is described briefly  followed by the markup used  and a screen shot  All tags inside  the main widget tag are optional     CHAPTER 18  VIRTUAL CONTROL PANELS 155    18 5 0 2 General Notes    At the present time  both a tag based and an attribute based syntax are supported  For instance   the following XML fragments are treated identically      lt led halpin  my led   gt   and   lt led gt  lt halpin gt  my led  lt  halpin gt  lt  led gt     When the attribute based syntax is used  the following rules are used to turn the attributes value  into a Python value     1  If the first character of the attribute is one of the following  it is evaluated as a Python expres   sion             2  If the string is accepted by int    the value is treated as an integer  3  If the string is accepted by float    the value is treated as floating point    4  Otherwise  the string is accepted as a string     When the tag based syntax is used  the text within the tag is always evaluated as a Python expres   sion     The examples below show a mix of formats     18 5 1 LED    A LED is used to indicate the status of a BIT signal  The LED color will be on_color when the BIT  signal is true  and off
171. hat you are dealing with is  to run the RTAI latency test     DO NOT TRY TO RUN EMC2 WHILE THE TEST IS RUNNING  On Ubuntu Dapper  you can run the test by opening a shell and doing     sudo mkdir  dev rtf    sudo mknod  dev rtf 3 c 150 3    sudo mknod  dev rtf3 c 150 3    cd  usr realtimex testsuite kern latency    run    171    CHAPTER 21  STEPPER TUNING 172    and then you should see something like this     ubuntu   usr realtime 2 6 12 magma testsuite kern latencyS   run                                                                                    x Type  C to stop this application          RTAI latency calibration tool   period   100000  ns    avrgtime   1  s    do not use the FPU   start the timer   timer_mode is oneshot  RTAI Testsuite   KERNEL latency  all data in nanoseconds   RTH  lat min  ovl min  lat avg  lat max  ovl max  overruns  RTD  1571  1571 1622 8446 8446 0  RTD  1558  T57L 1607 7704 8446 0  RTD  1568  1571 1640 7359 8446 0  RTD  1568  157I 1653 7594 8446 0  RTD  1568 ziS AI 1640 10636 10636 0  RTD  1568 S571 1640 10636 10636 0                               While the test is running  you should  abuse  the computer  Move windows around on the screen   Surf the web  Copy some large files around on the disk  Play some music  Run an OpenGL program  such as glxgears  The idea is to put the PC through its paces while the latency test checks to see  what the worst case numbers are     The last number in the column labeled  ovl max  is the most important  Write
172. he HAL  It lets you look at a pin  signal  or parameter  and displays the  current value of that item  It is pretty simple to use  Start it by typing    halmeter    in a X windows  shell  Halmeter is a GUI application  It will pop up a small window  with two buttons labeled    Select     and    Exit     Exit is easy   it shuts down the program  Select pops up a larger window  with three  tabs  One tab lists all the pins currently defined in the HAL  The next lists all the signals  and the  last tab lists all the parameters  Click on a tab  then click on a pin signal parameter  Then click on     OK     The lists will disappear  and the small window will display the name and value of the selected  item  The display is updated approximately 10 times per second  If you click    Accept    instead of     OK     the small window will display the name and value of the selected item  but the large window  will remain on the screen  This is convenient if you want to look at a number of different items  quickly    You can have many halmeters running at the same time  if you want to monitor several items  If  you want to launch a halmeter without tying up a shell window  type    halmeter  amp     to run it in the  background  You can also make halmeter start displaying a specific item immediately  by adding     pin sig par am   lt name gt     to the command line  It will display the pin  signal  or parameter   lt name gt  as soon as it starts   If there is no such item  it will simply st
173. he spindle brake should be applied  motion spindle forward OUT bit TRUE when the spindle should rotate forward  motion spindle reverse OUT bit TRUE when the spindle should rotate backward  motion spindle on OUT bit TRUE when spindle should rotate  motion spindle speed out OUT float Desired spindle speed in rotations per minute    motion spindle index enable I O bit For correct operation of spindle synchronized moves  this  signal must be hooked to the index enable pin of the spindle encoder     motion spindle revs IN float For correct operation of spindle synchronized moves  this signal must  be hooked to the position pin of the spindle encoder     35    CHAPTER 5  EMC2 AND HAL 36    5 1 2 Parameters    Many of these parameters serve as debugging aids  and are subject to change or removal at any  time    motion coord error TRUE when motion has encountered an error  such as exceeding a soft limit  motion coord mode TRUE when motion is in    coordinated mode     as opposed to    teleop mode     motion in position Same as the pin motion motion inpos   motion motion enabled TRUE when motion is enabled    motion servo last period The number of CPU cycles between invocations of the servo thread  Typ   ically  this number divided by the CPU speed gives the time in seconds  and can be used to  determine whether the real time motion controller is meeting its timing constraints    motion servo overruns By noting large differences between successive values of motion  servo last   period
174. here in Europe  the style is to draw the rails horizontal along  the top and bottom of the page while the rungs are drawn sequentially from left to right     A program in ladder logic  also called a ladder diagram  is similar to a schematic for a set of relay  circuits  Ladder logic is useful because a wide variety of engineers and technicians can understand  and use it without much additional training because of the resemblance     Ladder logic is widely used to program PLCs  where sequential control of a process or manufacturing  operation is required  Ladder logic is useful for simple but critical control systems  or for reworking  old hardwired relay circuits  As programmable logic controllers became more sophisticated it has  also been used in very complex automation systems     Ladder logic can be thought of as a rule based language  rather than a procedural language  A   rung  in the ladder represents a rule  When implemented with relays and other electromechani   cal devices  the various rules  execute  simultaneously and immediately  When implemented in a  programmable logic controller  the rules are typically executed sequentially by software  in a loop   By executing the loop fast enough  typically many times per second  the effect of simultaneous and  immediate execution is obtained     23 2 Example    The most common components of ladder are contacts  inputs   these usually are either NC  normally  closed  or NO  normally open   and coils  outputs      e the NO c
175. hine setups  robots  puma  scara  hexapods etc    Each of  them is set up using linear and rotary joints  These joints don   t usually match with the Cartesian  coordinates  therefor there needs to be a kinematics function which does the conversion  actually 2  functions  forward and inverse kinematics function      To illustrate the above  we will analyze a simple kinematics called bipod  a simplified version of the  tripod  which is a simplified version of the hexapod      The Bipod we are talking about is a device that consists of 2 motors placed on a wall  from which a  device is hanged using some wire  The joints in this case are the distances from the motors to the  device  named AD and BD in figure 20 1      The position of the motors is fixed by convention  Motor A is in  0 0   which means that its X  coordinate is O  and its Y coordinate is also O  Motor B is placed in  Bx  0   which means that its X  coordinate is Bx     Our tooltip will be in point D which gets defined by the distances AD and BD  and by the Cartesian  coordinates Dx  Dy     The job of the kinematics is to transform from joint lengths  AD  BD  to Cartesian coordinates  Dx   Dy  and vice versa     20 3 1 Forward transformation   To transform from joint space into Cartesian space we will use some trigonometry rules  the right  triangles determined by the points  0 0    Dx 0    Dx Dy  and the triangle  Dx 0    Bx 0  and  Dx Dy    we can easily see that AD    x    y   likewise BD     Br     x     y     
176. hrough these VCC pins  The required current is not yet known  but is probably around  50mA plus I O current     e The regulator on the Pluto P board is a low dropout type  Supplying 5V at the power jack will  allow the regulator to work properly     16 8 6 PC interface    e At present  only a single pluto_servo or pluto_step board is supported  At present there is no  provision for multiple boards on one parallel port  because all boards reside at the same EPP  address  but supporting one board per parallel port should be possible     16 8 7 Rebuilding the FPGA firmware    The src hal drivers pluto_servo_firmware  and src hal drivers pluto_step_firmware   subdirectories contain the Verilog source code plus additional files used by Quartus for the FPGA  firmwares  Altera   s Quartus II software is required to rebuild the FPGA firmware  To rebuild the    CHAPTER 16  HARDWARE DRIVERS 142    firmware from the  hdl and other source files  open the  qpf file and press CTRL L  Then  recompile  emc2     Like the HAL hardware driver  the FPGA firmware is licensed under the terms of the GNU General  Public License     The gratis version of Quartus II runs only on Microsoft Windows  although there is apparently a  paid version that runs on Linux     16 8 8 For more information    The Pluto P board may be ordered from http    www kn3jn com ShopBoards_Parallel html  US  based  international shipping is available   Some additional information about it is available from  http   www  fpga4fu
177. i   i  l   i    clear    i   i   A i   i   i   i   i   i   i   L  I  i  I  i   i   i   i   I     l   i  i   i   i   1  I   j              Figure 15 7  Encoder Counter Block Diagram    15 3 1 Installing   emc2S halcmd loadrt encoder  num _chan  lt counters gt     lt counters gt  is the number of encoder counters that you want to install  If numchan is not specified   three counters will be installed  The maximum number of counters is 8  as defined by MAX_CHAN  in encoder c   Each counter is independent  but all are updated by the same function s  at the same    time  In the following descriptions   lt chan gt  is the number of a specific counter  The first counter is  number 0     15 3 2 Removing    emc2S halemd unloadrt encoder    CHAPTER 15  INTERNAL COMPONENTS 118    15 3 3 Pins    e  BIT  encoder  lt chan gt  phase A     Phase A of the quadrature encoder signal   e  BIT  encoder  lt chan gt  phase B     Phase B of the quadrature encoder signal   e  BIT  encoder  lt chan gt  phase Z     Phase Z  index pulse  of the quadrature encoder signal   e  BIT  encoder  lt chan gt  reset     See canonical encoder interface  section 9 5     e  BIT  encoder  lt chan gt  velocity     Estimated speed of the quadrature signal        e  BIT  encoder  lt chan gt  index enable     See canonical encoder interface   e  s32  encoder  lt chan gt  count     See canonical encoder interface     e  FLOAT  encoder  lt chan gt  position     See canonical encoder interface     15 3 4 Parameters    e  s3
178. igger source   To add new channels  select channel 5  and choose pin    stepgen 1 dir     then channel 6  and select     stepgen 1 step     Then click run mode    Normal    to start the scope  and adjust the horizontal zoom  to 5mS per division  You should see the step pulses slow down as the velocity command  channel  1  approaches zero  then the direction pin changes state and the step pulses speed up again  You  might want to increase the gain on channel 1 to about 20m per division to better see the change in  the velocity command  The result should look like figure 7 11                 XA HAL Oscilliscope BAA  Horizontal Run Mode  Trigger    Zoom   5 00 mSec 4047 samples     Normal    e Normal  Pos   per div at 19 9 KHz C Single  C Auto         SSS TRIGGERED                       C stop   Force    Vertical Level Pos  Gain Pos    a i               re  ION l z       1 fdiv 0 000  alsje 7 8  3  10111 12 13 14 15 16f Ofset   Rising        Selected Channel      6 stepgen 1 step   Chan Off                 Figure 7 11  Looking at Step Pulses    7 6 8 More samples    If you want to record more samples at once  restart realtime and load halscope with a numeric  argument which indicates the number of samples you want to capture  such as    halcmd  loadusr halscope 80000    if the scope_rt component was not already loaded  halscope will load it and request 80000 total  samples  so that when sampling 4 channels at a time there will be 20000 samples per channel   If  scope_rt was alre
179. il  The default  value is zero     4 4 3 3 HOME_IGNORE_LIMITS    Can hold the values YES   NO  This flag determines whether EMC will ignore the limit switch inputs   Some machine configurations do not use a separate home switch  instead they route one of the limit  switch signals to the home switch input as well  In this case  EMC needs to ignore that limit during  homing  The default value for this parameter is NO     4 4 3 4 HOME_USE_INDEX    Specifies whether or not there is an index pulse  If the flag is true  HOME_USE_INDEX   YES   EMC  will latch on the rising edge of the index pulse  If false  EMC will latch on either the rising or falling  edge of the home switch  depending on the signs of HOME_SEARCH_VEL    and    HOME_LATCH_VEL    The default value is NO     4 4 3 5 HOME OFFSET    Contains the location of the home switch or index pulse  in joint coordinates  It can also be treated  as the distance between the point where the switch or index pulse is latched and the zero point  of the joint  After detecting the index pulse  EMC sets the joint coordinate of the current point to     HOME OFFSET     The default value is zero     4 4 3 6 HOME    The position that the joint will go to upon completion of the homing sequence  After detecting the  index pulse  and setting the coordinate of that point to    HOME_OFFSET     EMC makes a move to   HOME  as the final step of the homing process  The default value is zero  Note that even if this  parameter is the same as    HOME _O
180. il tight push button  But virtual panels can be used for testing or monitoring  things that don t require physical buttons and lights  to temporarily replace real I O devices while  debugging ladder logic  or perhaps to simulate a physical panel before you build it and wire it to an  I O board     18 2 pyVCP    The layout of a pyVCP panel is specified with an XML file that contains widget tags between  lt pyvcp gt   and  lt  pyvcp gt   For example      lt pyvcp gt    lt label text  This is a LED indicator   gt    lt led  gt     lt  pyvcp gt               a  mypanel mE    This is a LED indicator    If you place this text in a file called tiny xml  and run       152    CHAPTER 18  VIRTUAL CONTROL PANELS 153  halrun  I loadusr pyvcp  c mypanel tiny xml    pyVCP will create the panel for you  which includes two widgets  a Label with the text    This is a  LED indicator     and a LED  used for displaying the state of a HAL BIT signal  It will also create a  HAL component named    mypanel     all widgets in this panel are connected to pins that start with     mypanel       Since no  lt halpin gt  tag was present inside the  lt led gt  tag  pyVCP will automatically name  the HAL pin for the LED widget mypanel led O    For a list of widgets and their tags and options  see the widget reference below     Once you have created your panel  connecting HAL signals to and from the pyVCP pins is done with   halemd linksp    as usual  If you are new to HAL  the HAL Tutorial7 is recommended   
181. imum frequency is 1 000 000 000 divided by steplen  and  as in the other modes  maxfreq will be lowered if it is above the limit     15 1 6 Functions    The component exports three functions  Each function acts on all of the step pulse generators    running different generators in different threads is not supported        e  FUNCT  stepgen make pulses     High speed function to generate and count pulses  no float   ing point      e  FUNCT  stepgen update freq     Low speed function does position to velocity conversion   scaling and limiting     e  FUNCT  stepgen capture position     Low speed function for feedback  updates latches and  scales position     CHAPTER 15  INTERNAL COMPONENTS    step EN po A    stepspace stepspace  steplen    min  t steplen  min  steplen  dirsetup dirhold dirsetup   min   min   min                 direction       Figure 15 3  Step and Direction Timing       The high speed function stepgen make pulses should be run in a very fast thread  from 10 to  50uS depending on the capabilities of the computer  That thread   s period determines the maximum  step frequency  since steplen  stepspace  dirsetup  dirhold  and dirdelay are all rounded up    to a integer multiple of the thread periond in nanoseconds  The other two functions can be called  at a much lower rate        112    CHAPTER 15  INTERNAL COMPONENTS                                     5  aseyd    g aseud    y eseud        AdAL d31S    Figure 15 4  Three Phase step types    113    CHAPTER 15  INT
182. ing usually overshoots slightly to reach the setpoint more quickly  however  some  systems cannot accept overshoot                    Parameter Rise Time Overshoot   Settling Time S S  Error  p Decrease Increase   Small Change Decrease  I Decrease Increase Increase Eliminate  D Small Change   Decrease Decrease Small Change                         Effects of increasing parameters    22 1 3 0 0 5 Ziegler Nichols method Another tuning method is formally known as the  Ziegler   Nichols method   introduced by John G  Ziegler and Nathaniel B  Nichols  It starts in the same way  as the method described before  first set the I and D gains to zero and then increase the P gain until  the output of the loop starts to oscillate  Write down the critical gain  K   and the oscillation period  of the output  P    Then adjust the P  I and D controls as the table shows                                Control type P I D  P 5Ke  PI 45Ke   1 2 Po  PID 6K    2 P    Px P  8          Part X    Ladder Logic    179    Chapter 23    Ladder programming    23 1 Introduction    Ladder logic or the Ladder programming language is a method of drawing electrical logic schematics   It is now a graphical language very popular for programming Programmable Logic Controllers  PLCs    It was originally invented to describe logic made from relays  The name is based on the observation  that programs in this language resemble ladders  with two vertical  rails  and a series of  rungs   between them  In Germany and elsew
183. inout  146  pluto step timings  146    210    Position  Actual  10  Position  Commanded  10  Position  Machine  9  Position  Relative  10  program units  202   pwd  197   pwmgen  115    rapid  202   RCS  3   real time  202   RS274NGC  202   RS274NGC STARTUP CODE  25  RTAI  202   RTAPI  202   RTLINUX  202    Searching for Text  198  servo motor  202  SERVO PERIOD  25  Sherline  4   siggen  43  124   signal polarity  100  sim encoder  122  spindle  202   spindle speed control  100  standard pinout  98  step rate  97   stepgen  43  106  stepper  97   stepper motor  202  sudo gedit  197  supply  43    TASK  202   TBL  21   Terminal Commands  197  Tk  202   tkemc  5  22   TRAJ  inifile section   26  TRAJ PERIOD  25   Trivial Kinematics  166    Ubuntu  3  14  UNITS  27  units  6  11  202    VAR  21    Working Directory  197  world coordinates  202    xemc  5    
184. ion scale l    PA   phase A        hase B  position A  1 p  ke i state lookup K NA  i rawcounts counter table La  l counter mn    I prado   I  a phase E  dn e   a  counts ni latch  i    a a  count f   l        l                        j  update_freq   i  frequency m l     Aa  maxiteg f maxaccel  velocity scale al l aT       gt    l up dn  elocit  G ami  velocity x  i RR count              fi       Figure 15 2  Step Pulse Generator Block Diagram  velocity mode        CHAPTER 15  INTERNAL COMPONENTS 109    15 1 2 Removing    emc2  halcmd unloadrt stepgen    15 1 3 Pins    Each step pulse generator will have only some of these pins  depending on the step type and control  type selected     e  FLOAT  stepgen  lt chan gt  position cmd     Desired motor position  in position units  position    mode only       FLOAT  stepgen  lt chan gt  velocity cmd     Desired motor velocity  in position units per sec   ond  velocity mode only       s32  stepgen  lt chan gt  counts     Feedback position in counts  updated by capture_position        FLOAT  stepgen  lt chan gt  position fb     Feedback position in position units  updated by  capture_position        BIT  stepgen    BIT  stepgen    BIT  stepgen    BIT  stepgen      BIT  stepgen     w  4    w  4     BIT  stepgen            BIT  stepgen     stepgen     stepgen      lt Q     lt c     lt c     lt e     lt c    e     lt c     lt c     lt C    nan gt      nan gt      nan gt      nan gt      nan gt      nan gt     nan gt         nan gt      
185. ional Stop    N6871Y56 0612 28 146  N6881Y56 1052 27 894  N6891Y56 112 27 838   N6901 Y56 1262 27 634    N6911 G0Z10     N6931 M9       Figure 1 5  The TkEmc Graphical Interface    switch or turning the hand wheel for an axis  These commands are normally handled on one of the  graphical interfaces by pressing a button with the mouse or holding down a key on the keyboard   In auto mode  a similar button or key press might be used to load or start the running of a whole  program of G code that is stored in a file  In the MDI mode the operator might type in a block of  code and tell the machine to execute it by pressing the  lt return gt  or  lt enter gt  key on the keyboard     Some motion control commands are available and will cause the same changes in motion in all  modes  These include ABORT  ESTOP  and FEED RATE OVERRIDE  Commands like these should be  self explanatory     The AXIS user interface removes some of the distinctions between Auto and the other modes by  making Auto commands available at most times  It also blurs the distinction between Manual and  MDI because some Manual commands like Touch Off are actually implemented by sending MDI  commands     1 5 6 Information Display    While an EMC2 is running  each of the modules keeps up a conversation with the others and with  the graphical display  It is up to the display to select from that stream of information what the  operator needs to see  and to arrange it on the screen in a way that makes it easy for the oper
186. is have the same scaling  so we set the scaling parameters for both to 10000     halcmd  setp freqgen 0 velocity scale 10000  halcmd  setp freqgen 1 velocity scale 10000    This velocity scaling means that when the pin freqgen 0 velocity is 1 000  the step generator  will generate 10000 pulses per second  10KHz   With the motor and leadscrew described above  that  will result in the axis moving at exactly 1 000 inches per second  This illustrates a key HAL concept    things like scaling are done at the lowest possible level  in this case in the step pulse generator   The internal signal X_vel is the velocity of the table in inches per second  and other components  such as siggen don   t know  or care  about the scaling at all  If we changed the leadscrew  or motor   we would change only the scaling parameter of the step pulse generator     CHAPTER 7  HAL TUTORIAL 59    7 5 5 Runit     We now have everything configured and are ready to start it up  Just like in the first example  we  use the start command     halcmd  start    Although nothing appears to happen  inside the computer the step pulse generator is cranking out  step pulses  varying from 10KHz forward to 10KHz reverse and back again every second  Later in  this tutorial we ll see how to bring those internal signals out to run motors in the real world  but  first we want to look at them and see what is happening     7 6 Taking a closer look with halscope     The previous example generates some very interesting signals
187. ital output     16 7 2 Parameters     FLOAT  ppmce  lt port gt  enc  lt channel gt  scale     The number of counts   user unit  to convert  from counts to units          FLOAT  ppmc  lt port gt  pwm  lt channel range gt  freq    The PWM carrier frequency  in Hz  Ap   plies to a group of four consecutive PWM generators  as indicated by  lt channel range gt   Min   imum is 153Hz  maximum is 500KHz      FLOAT  ppmc  lt port gt  pwm  lt channel gt  scale     Scaling for PWM generator  If scale is X   then the duty cycle will be 100  when the value pin is X  or  X            nj     FLOAT  ppmc  lt port gt  pwm  lt channel gt  max dc     Maximum duty cycle  from 0 0 to 1 0          rj    LOAT  ppmc  lt port gt  pwm  lt channel gt  min dc     Minimum duty cycle  from 0 0 to 1 0                        FLOAT  ppmc  lt port gt  pwm  lt channel gt  duty cycle  Actual duty cycle  used mostly for trou   bleshooting          BIT  ppmc  lt port gt  pwm  lt channel gt  bootstrap     If true  the PWM generator will generate a  short sequence of pulses of both polarities when it is enabled  to charge the bootstrap capaca   tors used on some MOSFET gate drivers         U32  ppmc  lt port gt  stepgen  lt channel range gt  setup time     Sets minimum time between  direction change and step pulse  in units of 100nS  Applies to a group fof four consecutive PWM  generators  as indicated by  lt channel range gt       U32  ppmc  lt port gt  stepgen  lt channel range gt  pulse width     Sets width of s
188. l     When we click on    X_vel     the dialog closes and the channel is now selected  The channel 1  button is pressed in  and channel number 1 and the name    X_vel    appear below the row of buttons   That display always indicates the selected channel   you can have many channels on the screen   but the selected one is highlighted  and the various controls like vertical position and scale always  work on the selected one  To add a signal to channel 2  click the    2    button  When the dialog pops  up  click the    Signals    tab  then click on    Y_vel        We also want to look at the square and triangle wave outputs  There are no signals connected  to those pins  so we use the    Pins    tab instead  For channel 3  select    siggen 0 triangle    and for  channel 4  select    siggen 0 square        CHAPTER 7  HAL TUTORIAL 62    7 6 3 Capturing our first waveforms    Now that we have several probes hooked to the HAL  it   s time to capture some waveforms  To start  the scope  click the    Normal    button in the    Run Mode    section of the screen  upper right   Since we  have a 4000 sample record length  and are acquiring 1000 samples per second  it will take halscope  about 2 seconds to fill half of its buffer  During that time a progress bar just above the main screen  will show the buffer filling  Once the buffer is half full  the scope waits for a trigger  Since we  haven t configured one yet  it will wait forever  To manually trigger it  click the    Force    butt
189. l me named my radio one  my radio two  and my   radio three  In the image above     three    is the selected value     18 5 5 Number    The number widget displays the value of a FLOAT signal      lt number gt    lt halpin gt  my number  lt  halpin gt    lt font gt     Helvetica     50  lt  font gt    lt format gt   4 3    lt  format gt    lt  number gt     CHAPTER 18  VIRTUAL CONTROL PANELS 157     12 345     lt font gt  is a Tkinter font type and size specification  Note that on Ubuntu 6 06 Helvetica    is not  available in sizes above ca 40 or 50  One font that will show up to at least size 200 is    courier 10  pitch     so for a really big Number widget you could specify      lt font gt      courier 10 pitch    100   lt  font gt      lt format gt  is a    C style    format specified that determines how the number is displayed     18 5 6 Bar    A bar widget displays the value of a FLOAT signal both graphically using a bar display and numeri   cally      lt bar gt    lt halpin gt  my bar  lt  halpin gt    lt min_ gt 0 lt  min_ gt    lt max_ gt 123 lt  max_ gt    lt bgcolor gt  grey  lt  bgcolor gt    lt fillcolor gt  red  lt  fillcolor gt    lt  bar gt        ee Th    0 0 124       18 5 7 Meter  Meter displays the value of a FLOAT signal using a traditional dial indicator      lt meter gt    lt halpin gt  my meter  lt  halpin gt    lt text gt  Voltage  lt  text gt    lt size gt 300 lt  size gt    lt min_ gt  12 lt  min_ gt    lt max_ gt 33 lt  max_ gt     lt  meter gt      
190. l wae ee 129  Vio  ELI oa peer ec sas Oe age Sas a e eee oe ee dea 129  Woe UNG 6 oe Sheehan AGE EOLEREER SE DEES ERED S we RS Hwee 129  a e PADS 26g  soe Eo BG  ON we Ea  SS SE se eet he he We Se ae we 129  Uno  PUNCO    oo uta Gd AS ee GE RS Be a GS NO alte e Ae 129   Lis  AEREO ok we aa a Rs oad ade ee Rd wea ae 130  16 4 1    Installing  2 ck EER ER ERE EERE RY OE REA Ee Ew ED 130  e A ee fk ev ow a POM Ba ey BOM ee ey wk a eG  eke we se R 130  Voss  TAPETES osas GS a Ba GS ee He hw ae wl A e 131  Via DONS      a  aes aa  ae ee ee RS A we Ke ete oe Be Ge 131    16 5 Mesa Electronics m5i20    Anything I O Card            o o oo ooo ooo    000  131    CONTENTS xi  16 5 1 PING casa PRO RRR kan E k a Ge aa a 132   6 52  e o AI 132  DO  BUON  2h Dd a e Ss Ee es Ee ds ee Ee ee 133  16 5 2 Copnector pinout  lt s sss seat AA RL 133   169A  I Connecdor PZ aia A e e e R 134   16 54 2Connector PS cios a wee A RA E 134   16 54 SComecorPd 6 eed AAA EE a AR ey eo 135   IG GAALEOS   oo cios iia ER EER LE SRL EE EGE ES 136   16 6 Vital Systems Motenc 100 and Motene LITE            o               136  16 6 1 FING AENA Se EG gk ie ow 137  O52 PO bb Oe Eee EOE SDE ERE E EHS SS RRO SHED EM 137  186 5     FURCHONS  oc    a we aa ee A ala Se a 138  16 7 Pico Systems PPMC  Parallel Port Motion Control                     0   138  IGAL PG boo a AD REA EATER A HEH eae ee e a 138  16 72 Parameters   co    sis ew Ee oe a es ee 139    e A ie a 4s tase wee we aS eA ww EO Se eS ie ey eS a 140  16 5 P
191. lation of icons and other elements  widgets  on a computer  screen     EMC An application that presents a graphical screen to the machine operator allowing manip   ulation of machine and the corresponding controlling program     Home A specific location in the machine   s work envelope that is used to make sure the computer  and the actual machine both agree on the tool position     ini file A text file that contains most of the information that configures EMC for a particular ma   chine    Joint Coordinates These specify the angles between the individual joints of the machine  See also  Kinematics    Jog Manually moving an axis of a machine  Jogging either moves the axis a fixed amount for each  key press  or moves the axis at a constant speed as long as you hold down the key     kernel space See real time     Kinematics The position relationship between world coordinates and joint coordinates of a ma   chine  There are two types of kinematics  Forward kinematics is used to calculate world co   ordinates from joint coordinates  Inverse kinematics is used for exactly opposite purpose Note  that kinematics does not take into account  the forces  moments etc  on the machine  It is for  positioning only     Lead screw An screw that is rotated by a motor to move a table or other part of a machine   Lead screws are usually either ball screws or acme screws  although conventional triangu   lar threaded screws may be used where accuracy and long life are not as important as low  cos
192. le   The desired value on  the gauge is called a  setpoint   also called  set value    The difference between the gauge s needle  and the setpoint is the  error      A control loop consists of three parts    1  Measurement by a sensor connected to the process  e g  encoder    2  Decision in a controller element    3  Action through an output device such as an motor     As the controller reads a sensor  it subtracts this measurement from the  setpoint  to determine the   error   It then uses the error to calculate a correction to the process   s input variable  the  action    so that this correction will remove the error from the process   s output measurement     In a PID loop  correction is calculated from the error in three ways  cancel out the current er   ror directly  Proportional   the amount of time the error has continued uncorrected  Integral   and  anticipate the future error from the rate of change of the error over time  Derivative         1This Subsection is taken from an much more extensive article found at http    en wikipedia org wiki PID_controller    176    CHAPTER 22  PID TUNING 177    A PID controller can be used to control any measurable variable which can be affected by manipu   lating some other process variable  For example  it can be used to control temperature  pressure   flow rate  chemical composition  speed  or other variables  Automobile cruise control is an example  of a process outside of industry which utilizes crude PID control     Some contr
193. lid entry     OPEN FILE    full path to file nge The file to show in the preview plot when AXIS starts    EDITOR   gedit The editor to use when selecting File  gt  Edit or File Edit Tool Table from the AXIS  menu  This must be configured for these menu items to work  Another valid entry is gnome   terminal  e vim     4 3 3  FILTER  Section    AXIS has the ability to send loaded files through a filter program  This filter can do any desired  task  Something as simple as making sure the file ends with M2  or something as complicated as  detecting whether the input is a depth image  and generating g code to mill the shape it defines   The  FILTER  section of the ini file controls how filters work  First  for each type of file  write  a PROGRAM_EXTENSION line  Then  specify the program to execute for each type of file  This  program is given the name of the input file as its first argument  and must write rs274ngc code to  standard output  This output is what will be displayed in the text area  previewed in the display  area  and executed by emc when Run  The following lines add support for the image to gcode  converter included with emc2     PROGRAM_EXTENSION    png  gif Greyscale Depth Image    CHAPTER 4  INI CONFIGURATION 25    png   image to gcode    gif   image to gcode  It is also possible to specify an interpreter     PROGRAM_EXTENSION    py Python Script    py   python    In this way  any Python script can be opened  and its output is treated as g code  One such example  
194. lly run the code contained in the function siggen 0 update  we need a realtime thread   The component called threads that is used to create a new thread  Lets create a thread called  test thread with a period of 1mS  1000000nS      halcmd  loadrt threads namel test thread period1 1000000  Let   s see if that worked    halcmd  show thread   Realtime Threads     Period FP Name  Time  Max Time   999849 YES test thread  0 0        It did  The period is not exactly 1000000nS because of hardware limitations  but we have a thread  that runs at approximately the correct rate  and which can handle floating point functions  The  next step is to connect the function to the thread     halcmd  addf siggen 0 update test thread    Up till now  we ve been using halcma only to look at the HAL  However  this time we used the  addf  add function  command to actually change something in the HAL  We told halcmd to add the  function siggen 0 update to the thread test thread  and if we look at the thread list again  we  see that it succeeded     halcmd  show thread  Realtime Threads   Period FP Name  Time  Max Time   999849 YES test thread  07 08   1 siggen 0 update       There is one more step needed before the siggen component starts generating signals  When the  HAL is first started  the thread s  are not actually running  This is to allow you to completely  configure the system before the realtime code starts  Once you are happy with the configuration   you can start the realtime code like this
195. logic gate and to  allow for a selection of any of the basic boolean logic functions and  or  and xor     11 10 Compiling   comp files in the source tree    Place the   comp file in the source directory emc2 src hal components and re run make  Comp files  are automatically detected by the build system     If a  comp file is a driver for hardware  it may be placed in emc2 src hal components and will be  built except if emc2 is configured as a userspace simulator     11 11 Compiling realtime components outside the source tree    comp can process  compile  and install a realtime component in a single step  placing rtexample ko  in the emc2 realtime module directory     comp   install rtexample comp    Or  it can process and compile in one step  leaving example ko  or example so for the simulator   in the current directory     comp   compile rtexample comp  Or it can simply process  leaving example  c in the current directory   comp rtexample comp    comp can also compile and install a component written in C  using the   install and   compile  options shown above     comp   install rtexample2 c    man format documentation can also be created from the information in the declaration section           comp document rtexample comp  The resulting manpage  example  9 can be viewed with  man   example 9    or copied to a standard location for manual pages     CHAPTER 11  COMP  A TOOL FOR CREATING HAL MODULES 89    11 12 Compiling userspace components outside the source tree  comp can pr
196. lowing in your  hal file making  sure you pick the pin that is connected to your control device     net spindle fwd motion spindle forward   gt  parport 0 pin 16 out    net spindle rev motion spindle reverse   gt  parport 0 pin 17 out    Chapter 26    MPG Pendant    This example is to explain how to hook up the common MPG pendants found on the market place  today  This example uses a MPG3 pendant and a C22 pendant interface card from CNC4PC and a  second parallel port plugged into the PCI slot  This example gives you 3 axis with 3 step increments  of 0 1  0 01  0 001     26 1 Second Parallel Port    In this example we are using a second parallel port connected to the MPG Pendant that is plugged  into a PCI slot  To find the address of your parallel port card open a terminal window and type    lspci  v    You will see something similar to this    0000 00 10 0 Communication controller  NetMos Technology PCI 1 port parallel adapter  rev 01   Subsystem  LSI Logic   Symbios Logic  Unknown device 0010    Flags  medium devsel  IRQ 11  I O ports at a800  size 8   I O ports at ac00  size 8   I O ports at b000  size 8   I O ports at b400  size 8   I O ports at b800  size 8   I O ports at bc00  size 16     In my case the address was the first one so I changed my  hal file from  loadrt hal _parport cfg 0x378   to   loadrt hal _parport cfg  0x378 0xa800 in    note the double quotes surrounding the addresses    and added   addf parport l read base thread addf parport 1 write base thread   
197. luto  F  generalis so e eso a a RE EE  Si a ew athe wd 140  16 5 1     REQUIPEMENTS cc i ss to ee ae aa oe pI ee e ae ea 140  IOGA O AE 140  168 3 Physical PIS 64 a edo e A A a ek eS 141  1584 IED ck a a a we a a A 141  Li E ew aera a a we eS we OR Ee ae  a a e ias 141  1686 POMC yc be ba heed AA AR ha ee Pee dats ee kes 141  16 8 7 Rebuilding the FPGA firmware                 00 000 pees 141  16 8 9 Por miore Mmiormationi  s be esas aa we a a a a a 142  16 9 pluto servo  Hardware PWM and quadrature counting                     142  IGS POUC  o sa goea Sw ae tg A   Aare Si a we we el we we 142  16 9 2 Input latching and output updating    lt  ss s ss ss erene ase wia ei 143  16 9 3 HAL Functions  Pins and Parameters                        sse     wa 143  16 9 4 Compatible driver hardware                      eee eee eee 143  16 10 Pluto step  300kHz Hardware Step Generator            o    00 000 000  145  VOL  PIO o EE ae AAA Ad a Geel si he aa do 145  16 10 2 Input latching and output updating                           145  16 10 38 Step Waveform Timings    a ee es 145  16 10 4 HAL Functions  Pins and Parameters  cscs 6  6608  lt  lt   o  on on  eed 147    CONTENTS xii    17 Halui 148  17 1 TEITOCUEGON 2464554545058 ee Gee bb ew ae ee bee ede 148  UY  Haloi pin rererence   ia SA A A a we A AAA AA ee 148   17 21 Machine  sie m e Fk Bw ARA A AA we A A a Be 148  1722 TAS   0 a eRe a e A A A A 148  IA MA a e te heen as da A tad de ak a Ataca 148  17 24 Mist  Flood  LUDE ocres va
198. m the corresponding  ADC     e  BIT  stg in  lt pinnum gt      Tracks a physical input pin     e  BIT  stg in  lt pinnum gt  not     Tracks a physical input pin  but inverted        e  BIT  stg out  lt pinnum gt      Drives a physical output pin        a motion control card usually is a board containing devices to control one or more axes  the control devices are usually    DAC   s to set an analog voltage  encoder counting chips for feedback  etc    5hint  after starting up the driver   dmesg  can be consulted for messages relevant to the driver  e g  autodetected version  number and base address     CHAPTER 16  HARDWARE DRIVERS 131    For each pin   lt channe1 gt  is the axis number  and  lt pinnum gt  is the logic pin number of the STG      The in  HAL pin is TRUE if the physical pin is high  and FALSE if the physical pin is low  The  in  lt pinnum gt  not HAL pin is inverted     it is FALSE if the physical pin is high  By connecting a  signal to one or the other  the user can determine the state of the input     16 4 3 Parameters    e  FLOAT  stg  lt channel gt  position scale     The number of counts   user unit  to convert  from counts to units      e  FLOAT  stg  lt channel gt  dac offset     Sets the offset for the corresponding DAC   e  FLOAT  stg  lt channel gt  dac gain     Sets the gain of the corresponding DAC   e  FLOAT  stg  lt channel gt  adc offset     Sets the offset of the corresponding ADC     e  FLOAT  stg  lt channel gt  adc gain     Sets the gain of the
199. major flaws in EMC was that you couldn t specify the pinout without recompiling the  source code  EMC2 is far more flexible  and now  thanks to the Hardware Abstraction Layer  you  can easily specify which signal goes where   read the 6 1 section for more information about the  HAL      As it is described in the HAL Introduction and tutorial  we have signals  pins and parameters inside  the HAL     The ones relevant for our pinout are      Signals  Xstep  Xdir  amp  Xen    pins  parport 0 pin XX out     parport 0 pin XX in z    Depending on what you have chosen in your ini file you are using either standard_pinout hal or  xylotex_pinout hal  These are two files that instruct the HAL how to link the various signals  amp  pins   Further on we ll investigate the standard_pinout hal     13 3 1 standard_pinout hal    This file contains several HAL commands  and usually looks like this       standard pinout config file for 3 axis steppers    using a parport for I O         first load the parport driver   loadrt hal_parport cfg  0x0378          next connect the parport functions to threads     read inputs first   addf parport 0 read base thread 1     write outputs last  addf parport 0 write base thread  1       finally connect physical pins to the signals  net Xstep   gt  parport 0 pin 03 out       net Xdir   gt  parport 0 pin 02 out  net Ystep   gt  parport 0 pin 05 out  net Ydir   gt  parport 0 pin 04 out  net Zstep   gt  parport 0 pin 07 out  net Zdir   gt  parport 0 pin 06 out  
200. mes     e Digital outputs OUTO through OUTS are all updated at the same time  Digital outputs OUT10  through OUT17 are updated at the same time as the pwm function they are shared with     e Digital inputs INO through IN19 are all latched at the same time     e Quadrature positions for each channel are latched at different times     16 9 3 HAL Functions  Pins and Parameters    A list of all loadrt  arguments  HAL function names  pin names and parameter names is in the  manual page  pluto_servo 9     16 9 4 Compatible driver hardware    A schematic for a 2A  2 axis PWM servo amplifier board is available  http     emergent   unpy  net    projects 01148303608   The L298 H Bridge  L298 H bridge http    www st com stonline books   pdf docs 1773 paf  is inexpensive and can easily be used for motors up to 4A  one motor per    CHAPTER 16  HARDWARE DRIVERS    144    Table 16 1  Pluto Servo Alternate Pin Functions       Primary function    Alternate Function    Behavior if both functions used                                                                                                             UPO PWMO When pwm 0 pwmdir is TRUE  this pin is the PWM output  OUT10 XOR d with UPO or PWMO   UP1 PWM1 When pwm l pwmdir is TRUE  this pin is the PWM output  OUT12 XOR d with UP1 or PWM1   UP2 PWM2 When pwm 2 pwmdir is TRUE  this pin is the PWM output  OUT14 XOR d with UP2 or PWM2   UP3 PWM3 When pwm 3 pwmdir is TRUE  this pin is the PWM output  OUTI16 XOR d with UP3 or PWM3   DNO DIRO When
201. ms including RTAI and RTLINUX  RS 274 NGC The formal name for the language used by EMC part programs    Servo Motor   Servo Loop    Spindle On a mill or drill  the spindle holds the cutting tool  On a lathe  the spindle holds the  workpiece     Stepper Motor A type of motor that turns in fixed steps  By counting steps  it is possible to deter   mine how far the motor has turned  If the load exceeds the torque capability of the motor  it  will skip one or more steps  causing position errors     TASK The module within EMC that coordinates the overall execution and interprets the part pro   gram     Tcl Tk A scripting language and graphical widget toolkit with which EMC   s most popular GUI   s  were written     Units See    Machine Units        Display Units     or    Program Units     above     World Coordinates This is the absolute frame of reference  It gives coordinates in terms of a fixed  reference frame that is attached to some point  generally the base  of the machine tool     Part XIV    Legal Section    Legal Section    Copyright Terms    Copyright  c  2000 LinuxCNC org    Permission is granted to copy  distribute and or modify this document under the terms of the  GNU Free Documentation License  Version 1 1 or any later version published by the Free Software  Foundation  with no Invariant Sections  no Front Cover Texts  and one Back Cover Text   This EMC  Handbook is the product of several authors writing for linuxCNC org  As you find it to be of value in  your work 
202. n 9   software step pulse generation  for more information see 15 1   steptest 9   Used by Stepconf to allow testing of acceleration and velocity values for an axis  streamer 9   stream file data into HAL in real time   sum2 9   Sum of two inputs  each with a gain  and an offset   supply 9   set output pins with values from parameters  deprecated    threads 9   creates hard realtime HAL threads   threadtest 9     timedelta 9     toggle 9   push on  push off from momentary pushbuttons   tripodkins 9   kinematics definitions for emc2    tristate_bit 9   Place a signal on an I O pin only when enabled  similar to a tristate buffer in  electronics    tristate_float 9   Place a signal on an I O pin only when enabled  similar to a tristate buffer in    electronics  trivkins 9   kinematics definitions for emc2  updown 9   Counts up or down  with optional limits and wraparound behavior  wcomp 9   Window comparator    weighted_sum 9   convert a group of bits to an integer    xor2 9   Two input XOR  exclusive OR  gate    Chapter 15    Internal Components    Most components have unix style manual pages  To view manual pages for real time components   type    man 9 componentname    at the terminal prompt     This document focuses on more complicated components which have figures which are hard to  reproduce in the manual page format     15 1 Stepgen    This component provides software based generation of step pulses in response to position or velocity  commands  In position mode  it has a
203. n EPP mode  Although most users connect one board  to a parallel port  in theory any mix of up to 8 or 16 boards can be used on a single parport  One  driver serves all types of boards  The final mix of I O depends on the connected board s   The driver  doesn t distinguish between boards  it simply numbers I O channels  encoders  etc  starting from O  on the first card     Installing   loadrt hal_ppmc port_addr  lt addr1 gt    lt addr2 gt    lt addr3 gt          The port_addr parameter tells the driver what parallel port s  to check  By default   lt addr1 gt  is  0x0378  and  lt addr2 gt  and following are not used  The driver searches the entire address space of  the enhanced parallel port s  at port_addr  looking for any board s  in the PPMC family  It then  exports HAL pins for whatever it finds  During loading  or attempted loading  the driver prints some  usefull debugging message to the kernel log  which can be viewed with dmesg     Up to 3 parport busses may be used  and each bus may have up to 8 devices on it   16 7 1 Pins    In the following pins  parameters  and functions   lt board gt  is the board ID  According to the naming  conventions the first board should always have an ID of zero  However this driver sets the ID based  on a pair of jumpers on the baord  so it may be non zero even if there is only one board     e  s32  ppmc  lt port gt  encoder  lt channel gt  count     Encoder position  in counts     CHAPTER 16  HARDWARE DRIVERS 139     s32  ppmc  lt port gt
204. n com board_pluto P htm1 and from the developer s blog http    emergent    unpy  net 01165081407     16 9 pluto servo  Hardware PWM and quadrature counting    The pluto_servo system is suitable for control of a 4 axis CNC mill with servo motors  a 3 axis mill  with PWM spindle control  a lathe with spindle encoder  etc  The large number of inputs allows a  full set of limit switches     This driver features     e 4 quadrature channels with 40MHz sample rate  The counters operate in  4x  mode  The  maximum useful quadrature rate is 8191 counts per emc2 servo cycle  or about 8MHz for  EMC2 s default 1ms servo rate     e 4 PWM channels   up down  or  pwm dir  style  4095 duty cycles from  100  to  100    including 0   The PWM period is approximately 19 5kHz  40MHz   2047   A PDM like mode  is also available     18 digital outputs  10 dedicated  8 shared with PWM functions   Example  A lathe with  unidirectional PWM spindle control may use 13 total digital outputs     20 digital inputs  8 dedicated  12 shared with Quadrature functions   Example  A lathe with  index pulse only on the spindle may use 13 total digital inputs     EPP communication with the PC  The EPP communication typically takes around 100uS on  machines tested so far  enabling servo rates above 1kHz     16 9 1 Pinout    UPx The  up   up down mode  or    pwm     pwm direction mode  signal from PWM generator X  May  be used as a digital output if the corresponding PWM channel is unused  or the output on the  channel
205. n not pins     e      nj    UNCT  parport read all     Reads physical input pins of all ports and updates HAL  in  and  in not pins     e  FUNCT  parport  lt portnum gt  write     Reads HAL  out pins of port  lt portnum gt  and updates  that port   s physical output pins     e  FUNCT  parport write all   Reads HAL  out pins of all ports and updates all physical  output pins        e  FUNCT  parport  lt portnum gt  reset     Waits until reset time has elapsed since the associ   ated write  then resets pins to values indicated by  out invert and  out invert settings   reset must be later in the same thread as write    The individual functions are provided for situations where one port needs to be updated in a very  fast thread  but other ports can be updated in a slower thread to save CPU time  It is probably not  a good idea to use both an  a11 function and an individual function at the same time     16 1 5 Common problems    If loading the module reports    insmod  error inserting     home jepler emc2 rtlib hal_parport ko      1 Device or resource busy       then ensure that the standard kernel module parport_pc is not loaded  and that no other device  in the system has claimed the I O ports     If the module loads but does not appear to function  then the port address is incorrect or the  probe_parport module is required     16 2 probe_parport    In modern PCs  the parallel port may require plug and play  PNP  configuration before it can be  used  The probe_parport module pe
206. n num gt  phase B     Quadrature output     e  BIT  sim encoder   lt chan num gt  phase Z     Index pulse output     When  speed is positive   phase A leads  phase B     15 5 4 Parameters    e  U32  sim encoder  lt chan num gt  ppr     Pulses Per Revolution     e  FLOAT  sim encoder  lt chan num gt  scale     Scale Factor for speed  The default is 1 0  which  means that speed is in revolutions per second  Change to 60 for RPM  to 360 for degrees per  second  6 283185 for radians per seconed  etc     Note that pulses per revolution is not the same as counts per revolution  A pulse is a complete  quadrature cycle  Most encoder counters will count four times during one complete cycle     15 5 5 Functions    The component exports two functions  Each function affects all simulated encoders        e  FUNCT  sim encoder  make pulses     High speed function to generate quadrature pulses  no  floating point      e  FUNCT  sim encoder update speed     Low speed function to read speed  do scaling  and set  up make pulses     CHAPTER 15  INTERNAL COMPONENTS 123  15 6 Debounce    Debounce is a realtime component that can filter the glitches created by mechanical switch contacts   It may also be useful in other applications where short pulses are to be rejected     15 6 1 Installing    emc2  halcmd loadrt debounce cfg   lt config string gt         lt config string gt  is a series of space separated decimal integers  Each number installs a group of  identical debounce filters  the number de
207. nal documents   forming one section entitled  History   likewise combine any sections entitled  Acknowledgements   and any  sections entitled  Dedications   You must delete all sections entitled  Endorsements      207    6  COLLECTIONS OF DOCUMENTS    You may make a collection consisting of the Document and other documents released under this License  and  replace the individual copies of this License in the various documents with a single copy that is included in the  collection  provided that you follow the rules of this License for verbatim copying of each of the documents in  all other respects     You may extract a single document from such a collection  and distribute it individually under this License   provided you insert a copy of this License into the extracted document  and follow this License in all other  respects regarding verbatim copying of that document     7  AGGREGATION WITH INDEPENDENT WORKS    A compilation of the Document or its derivatives with other separate and independent documents or works   in or on a volume of a storage or distribution medium  does not as a whole count as a Modified Version  of the Document  provided no compilation copyright is claimed for the compilation  Such a compilation is  called an  aggregate   and this License does not apply to the other self contained works thus compiled with  the Document  on account of their being thus compiled  if they are not themselves derivative works of the  Document     If the Cover Text requireme
208. nd minus   feedback     e  BIT  pid  lt loopnum gt  enable     A bit that enables the loop  If  enable is false  all integrators  are reset  and the output is forced to zero  If  enable is true  the loop operates normally     120    CHAPTER 15  INTERNAL COMPONENTS                                                          ndino                                                   jqeu                                                                                                                  y  eqp                                                                                                                                                                        puewwoo                   dqpwo xew  0 pid  lp  p  yndjno xew edd  ES ip  ey p  ldd  apw9 xew  AN  ey  044  Y  seq q10119 xew  F   AN ip  ey P  ureBq   pueqpeap  ON Seu   eS g  i uiebd    10119  XEU  110119 X8 Wu  E f  ee  J                               ueb              10119                         Figure 15 8  PID Loop Block Diagram    CHAPTER 15  INTERNAL COMPONENTS 121    15 4 4 Parameters    The PID gains  limits  and other    tunable    features of the loop are implemented as parameters     e  FLOAT  pid   e  FLOAT  pid   e  FLOAT  pid     e  FLOAT  pid      po    e      nj        F    LOAT  pid     sition       lt      lt      lt      lt      lt     loopnum gt   loopnum gt      loopnum gt         loopnum gt     loopnum gt         LOAT  pid  lt loopnum gt   command  velocity      LOAT  pid  lt l    lLoopnum gt  
209. ns whose titles are designated  as being those of Invariant  Sections  in the notice that says that the Document is released under this License     The  Cover Texts  are certain short passages of text that are listed  as Front Cover Texts or Back Cover Texts   in the notice that says that the Document is released under this License     A  Transparent  copy of the Document means a machine readable copy  represented in a format whose specifi   cation is available to the general public  whose contents can be viewed and edited directly and straightforwardly  with generic text editors or  for images composed of pixels  generic paint programs or  for drawings  some widely  available drawing editor  and that is suitable for input to text formatters or for automatic translation to a vari   ety of formats suitable for input to text formatters  A copy made in an otherwise Transparent file format whose  markup has been designed to thwart or discourage subsequent modification by readers is not Transparent  A  copy that is not  Transparent  is called  Opaque      Examples of suitable formats for Transparent copies include plain ASCII without markup  Texinfo input format   BIFX input format  SGML or XML using a publicly available DTD  and standard conforming simple HTML  designed for human modification  Opaque formats include PostScript  PDF  proprietary formats that can be  read and edited only by proprietary word processors  SGML or XML for which the DTD and or processing tools  are not 
210. nt of section 3 is applicable to these copies of the Document  then if the Document  is less than one quarter of the entire aggregate  the Document s Cover Texts may be placed on covers that  surround only the Document within the aggregate  Otherwise they must appear on covers around the whole  aggregate     8  TRANSLATION    Translation is considered a kind of modification  so you may distribute translations of the Document under  the terms of section 4  Replacing Invariant Sections with translations requires special permission from their  copyright holders  but you may include translations of some or all Invariant Sections in addition to the original  versions of these Invariant Sections  You may include a translation of this License provided that you also  include the original English version of this License  In case of a disagreement between the translation and the  original English version of this License  the original English version will prevail     9  TERMINATION    You may not copy  modify  sublicense  or distribute the Document except as expressly provided for under  this License  Any other attempt to copy  modify  sublicense or distribute the Document is void  and will  automatically terminate your rights under this License  However  parties who have received copies  or rights   from you under this License will not have their licenses terminated so long as such parties remain in full  compliance     10  FUTURE REVISIONS OF THIS LICENSE    The Free Software Foundati
211. nual pages in most cases  Man pages are usually avail   able for most programs and commands in Linux     To view a man page open up a terminal window by going to Applications  Accessories  Terminal  For  example if you wanted to find out something about the find command in the terminal window type     man find    Use the Page Up and Page Down keys to view the man page and the Q key to quit viewing     27 2 List Modules    Sometimes when troubleshooting you need to get a list of modules that are loaded  In a terminal  window type     lsmod  If you want to send the output from lsmod to a text file in a terminal window type   lsmod  gt  mymod txt    The resulting text file will be located in the home directory if you did not change directories when  you opened up the terminal window and it will be named mymod txt or what ever you named it     27 3 Editing a Root File    Editing some root files can have bad results  Be careful when editing root files  You can open and  view most root files normally but they will open in    read only    mode     196    CHAPTER 27  LINUX FAQ 197    27 3 1 The Command Line Way    Open up Applications  Accessories  Terminal   In the terminal window type   sudo gedit   Open the file with File  Open then edit    27 3 2 The GUI Way    1  Right click on the desktop and select Create Launcher  2  Type a name in like sudo edit  3  Type gksudo    gnome open  u    as the command and save the launcher to your desktop    4  Drag a file onto your launcher to op
212. o P is an inexpensive   60  FPGA board featuring the ACEX1K chip from Altera     16 8 1 Requirements    1  A Pluto P board    2  An EPP compatible parallel port  configured for EPP mode in the system BIOS    16 8 2 Connectors    e The Pluto P board is shipped with the left connector presoldered  with the key in the indicated  position  The other connectors are unpopulated  There does not seem to be a standard 12   pin IDC connector  but some of the pins of a 16P connector can hang off the board next to  QA3 QZ3     e The bottom and right connectors are on the same  1  grid  but the left connector is not  If  OUT2   OUT9 are not required  a single IDC connector can span the bottom connector and  the bottom two rows of the right connector        12In a future version this will be changed from    invert to  invert to better match the HAL canonical bit interface    CHAPTER 16  HARDWARE DRIVERS 141    16 8 3 Physical Pins    Read the ACEXIK datasheet for information about input and output voltage thresholds  The  pins are all configured in  LVTTL LVCMOS  mode and are generally compatible with 5V TTL  logic     Before configuration and after properly exiting emc2  all Pluto P pins are tristated with weak  pull ups  20kQ min  50kQ max   If the watchdog timer is enabled  the default   these pins are  also tristated after an interruption of communication between emc2 and the board  The watch   dog timer takes approximately 6 5ms to activate  However  software bugs in the pluto_servo  
213. o on  It is permitted to write  an axis name twice  e g   X Y Y Z for a gantry machine  but this has no effect     AXES   3 One more than the number of the highest joint number in the system  For an XYZ  machine  the joints are numbered O  1 and 2  in this case AXES should be 3  For an XYUV  machine using    trivial kinematics     the V joint is numbered 7 and therefore AXES should be  8  For a machine with nontrivial kinematics  e g   scarakins  this will generally be the number  of controlled joints     HOME   0 0 O Coordinates of the homed position of each axis  Again for a fourth axis you will need  0000  This value is only used for machines with nontrivial kinematics  On machines with  trivial kinematics this value is ignored     LINEAR_UNITS    lt units gt  Specifies the machine units for linear axes  Possible choices are  in   inch  imperial  metric  mm    This does not affect the linear units in NC code  the G20 and G21 words do this      ANGULAR_UNITS    lt units gt  Specifies the machine units for rotational axes  Possible choices are     deg        degree     360 per circle      rad     radian     2pi per circle   grad     or    gon     400 per circle    This does not affect the angular units of NC code  In RS274NGC  A   B  and C  words are  always expressed in degrees     CHAPTER 4  INI CONFIGURATION 27    DEFAULT_VELOCITY   0 0167 The initial rate for jogs of linear axes  in machine units per second   The value shown equals one unit per minute     DEFAULT _ ACCEL
214. o simulations of the machine motors  This  enables entire factories of EMC machines to be set up and run in a computer integrated  manufacturing environment     CHAPTER 1  THE ENHANCED MACHINE CONTROL 4    EMC has been installed on many machines  both with servo motors and stepper motors  Here is a  sampling of the earliest applications     e 3 axis Bridgeport knee mill at Shaver Engineering  The machine uses DC brush servo motors  and encoders for motion control  and OPTO 22 compatible I O interfaced to the PC parallel  port for digital I O to the spindle  coolant  lube  and e stop systems     e 3 axis desktop milling machine used for prototype development  The machine uses DC brush  servo motors and encoders  Spindle control is accomplished using the 4th motion control axis   The machine cuts wax parts     e 4 axis Kearney  amp  Trecker horizontal machining center at General Motors Powertrain in Pontiac   MI  This machine ran a precursor to the full software EMC which used a hardware motion  control board     After these early tests  Jon Elson found the Shaver Engineering notes and replaced a refrigera   tor sized Allen Bradley 7300 control on his Bridgeport with the EMC running on a Red Hat 5 2  distribution of Linux  He was so pleased with the result that he advertised the software on sev   eral newsgroups  He continues to use that installation and has produced several boards that are  supported by the software     From these early applications news of the software spread
215. ocess  compile  install  and document userspace components     comp usrexample comp   comp   compile usrexample comp   comp   install usrexample comp   comp   document usrexample comp                This only works for  comp files  not for  c files     11 13 Examples    11 13 1 constant    This component functions like the one in  blocks     including the default value of 1 0  The declaration     function _    creates functions named    constant 0     etc     component constant    pin out float out    param r float value   1 0   function _        rr    FUNCTION _    out   value       11 13 2 sincos    This component computes the sine and cosine of an input angle in radians  It has different ca   pabilities than the    sine    and    cosine    outputs of siggen  because the input is an angle  rather than  running freely based on a    frequency    parameter     The pins are declared with the names sin_ and cos_ in the source code so that they do not interfere  with the functions sin   and cos    The HAL pins are still called sincos  lt num gt  sin     component sincos   pin out float sin_   pin out float cos_   pin in float theta   function _        tr   include  lt rtapi_math h gt   FUNCTION _    sin_   sin theta   cos_   cos theta           11 13 3 out8    This component is a driver for a fictional card called    out8     which has 8 pins of digital output  which are treated as a single 8 bit value  There can be a varying number of such cards in the  system  and they can be a
216. oder read and DAC write functions to the servo thread  or hooking stepgen   s function to the  base thread  along with the parport function s  to write the steps to the port        3The Lego name is a trademark of the Lego company     Chapter 7    HAL Tutorial    7 1 Before we start    Configuration moves from theory to device   HAL device that is  For those who have had just a bit of  computer programming  this section is the    Hello World    of the HAL  As noted above halrun can be  used to create a working system  It is a command line or text file tool for configuration and tuning   The following examples illustrate its setup and operation     7 1 1 Notation    Command line examples are presented in bold typewriter font  Responses from the computer  will be in typewriter font  Text inside square brackets  like this  is optional  Text inside  angle brackets  lt like this gt  represents a field that can take on different values  and the adjacent  paragraph will explain the appropriate values  Text items separated by a vertical bar means that  one or the other  but not both  should be present  All command line examples assume that you are  in the emc2  directory  and paths will be shown accordingly when needed     7 1 2 The RTAPI environment    RTAPI stands for Real Time Application Programming Interface  Many HAL components work in  realtime  and all HAL components store data in shared memory so realtime components can ac   cess it  Normal Linux does not support realtime pr
217. ogramming or the type of shared memory that  HAL needs  Fortunately there are realtime operating systems  RTOS   s  that provide the neccessary  extensions to Linux  Unfortunately  each RTOS does things a little differently     To address these differences  the EMC team came up with RTAPI  which provides a consistent way  for programs to talk to the RTOS  If you are a programmer who wants to work on the internals of  EMC  you may want to study emc2 src rtapi rtapi h to understand the API  But if you are a  normal person all you need to know about RTAPI is that it  and the RTOS  needs to be loaded into  the memory of your computer before you do anything with HAL     For this tutorial  we are going to assume that you have successfully compiled the emc2  source  tree and  if necessary  invoked the emc environment script to prepare your shell  In that case  all  you need to do is load the required RTOS and RTAPI modules into memory  Just run the following  command     emc2S halrun  halcmd     47    CHAPTER 7  HAL TUTORIAL 48    With the realtime OS and RTAPI loaded  we can move into the first example  Notice that the prompt  has changed from the shell s         to    halemd     This is because subsequent commands will be inter   preted as HAL commands  not shell commands  halrun is a simple shell script  and it is more or  less equivalent to running    emc2  realtime start  emc2S halcmd  kf    When halcmd exits  halrun stops the realtime system  just like  emc2  realtime stop    
218. ol systems arrange PID controllers in cascades or networks  That is  a  master  control  produces signals used by  slave  controllers  One common situation is motor controls  one often  wants the motor to have a controlled speed  with the  slave  controller  often built into a variable  frequency drive  directly managing the speed based on a proportional input  This  slave  input is  fed by the  master  controllers    output  which is controlling based upon a related variable     22 1 2 Theory     PID  is named after its three correcting calculations  which all add to and adjust the controlled  quantity  These additions are actually  subtractions  of error  because the proportions are usually  negative     22 1 2 0 0 1 Proportional To handle the present  the error is multiplied by a  negative  constant  P  for  proportional    and added to  subtracting error from  the controlled quantity  P is only valid  in the band over which a controller   s output is proportional to the error of the system  Note that  when the error is zero  a proportional controller   s output is zero     22 1 2 0 0 2 Integral To learn from the past  the error is integrated  added up  over a period of  time  and then multiplied by a  negative  constant I  making an average   and added to  subtracting  error from  the controlled quantity  I averages the measured error to find the process output   s aver   age error from the setpoint  A simple proportional system either oscillates  moving back and forth  a
219. om   manded position per second per second  resulting in a contribution to the computed voltage  for the motor amplifier  The units on the FF2 gain are volts per machine unit per second per  second  e g   25 if machine units are millimeters     mm s2    OUTPUT_SCALE   1 000    OUTPUT_OFFSET   0 000  HAL  These two values are the scale and offset factors for the axis  output to the motor amplifiers  The second value  offset  is subtracted from the computed  output  in volts   and divided by the first value  scale factor   before being written to the D A  converters  The units on the scale value are in true volts per DAC output volts  The units on  the offset value are in volts  These can be used to linearize a DAC    Specifically  when writing outputs  the EMC first converts the desired output in quasi SI units  to raw actuator values  e g   volts for an amplifier DAC  This scaling looks like     _ output     of f set    scale    The value for scale can be obtained analytically by doing a unit analysis  i e   units are  output  SI units   actuator units   For example  on a machine with a velocity mode amplifier such that  1 volt results in 250 mm sec velocity     mm       ampli fier volts     output 2   s      offset     250    ec secvolt    Note that the units of the offset are in machine units  e g   mm sec  and they are pre   subtracted from the sensor readings  The value for this offset is obtained by finding the value  of your output which yields 0 0 for the actuator outp
220. ometries and variables associated with  each  they are available to be interpreted into G Code  These interpreters are called CAM  Computer  Aided Machining  programs     Like the CAD converters  the rise of drawing programs  like Corel    and the whole bunch of paint  programs  converters have been written that will take a bitmap or raster or vector image and turn  it into G Code that can be run with a CNC     You re asking yourself     Why did I want to know this     The answer is that the EMC2 as it currently  exists does not directly take in CAD or any image and run a machine using it  The EMC2 uses a       1One machine tool manufacturer  Hurco  claims to have a right to the use of these programming schemes and to the use  of the term conversational when used in this context     CHAPTER 1  THE ENHANCED MACHINE CONTROL 3    variant of the earlier CNC language named RS274NGC   Next Generation Controller   All of the com   mands given to the EMC2 must be in a form that is recognized and have meaning to the RS274NGC  interpreter  This means that if you want to carve parts that were drawn in some graphical or draft   ing program you will also have to find a converter that will transform the image or geometry list into  commands that are acceptable to the EMC2 interpreter  Several commercial CAD CAM programs  are available to do this conversion  At least one converter  Ace  has been written that carries a  copyright that makes it available to the public     There has been recen
221. on in the     Trigger    section at the top right  You should see the remainder of the buffer fill  then the screen  will display the captured waveforms  The result will look something like figure 7 7              X A HAL Oscilliscope mak  Horizontal Run Mode  Trigger    Zoom   500 mSec 4047 samples     Normal    e Normal  Pos   per div at 994 Hz C Single  C Auto  SaaS TRIGGER                                     C stop   Force    Vertical Level Pos  Gain Pos    ovens  OR    Scale Level  1 fdiv          elel a  sfrofrifizfrafiafis re  onset   _ rising  Selected Channel 0 000  4 siggen 1 square   Chan Off                    Source  None                   Figure 7 7  Captured Waveforms    The    Selected Channel    box at the bottom tells you that the green trace is the currently selected one   channel 4  which is displaying the value of the pin    siggen 1 square     Try clicking channel buttons  1 through 3 to highlight the other three traces     CHAPTER 7  HAL TUTORIAL 63    7 6 4 Vertical Adjustments    The traces are rather hard to distinguish since all four are on top of each other  To fix this  we  use the    Vertical    controls in the box to the right of the screen  These controls act on the currently  selected channel  When adjusting the gain  notice that it covers a huge range   unlike a real scope   this one can display signals ranging from very tiny  pico units  to very large  Tera units   The  position control moves the displayed trace up and down over the height o
222. on may publish new  revised versions of the GNU Free Documentation License  from time to time  Such new versions will be similar in spirit to the present version  but may differ in detail to  address new problems or concerns  See http       www gnu org copyleft      Each version of the License is given a distinguishing version number  If the Document specifies that a particular  numbered version of this License  or any later version  applies to it  you have the option of following the terms  and conditions either of that specified version or of any later version that has been published  not as a draft   by the Free Software Foundation  If the Document does not specify a version number of this License  you may  choose any version ever published  not as a draft  by the Free Software Foundation     ADDENDUM  How to use this License for your documents    To use this License in a document you have written  include a copy of the License in the document and put  the following copyright and license notices just after the title page     Copyright  c  YEAR YOUR NAME  Permission is granted to copy  distribute and or modify this document  under the terms of the GNU Free Documentation License  Version 1 1 or any later version published by the  Free Software Foundation  with the Invariant Sections being LIST THEIR TITLES  with the Front Cover Texts  being LIST  and with the Back Cover Texts being LIST  A copy of the license is included in the section entitled   GNU Free Documentation Licen
223. ons is unimportant  The following  sections are used by EMC    e  EMC  general information  4 3 1    e  DISPLAY  settings related to the graphical user interface  4 3 2    e  FILTER  settings input filter programs  4 3 3    e  RS274NGC  settings used by the g code interpreter      e  EMCMOT  settings used by the real time motion controller  4 3 5    e  HAL  specifies  hal files  4 3 7    e  TASK  settings used by the task controller  4 3 6    e  TRAJ  additional settings used by the real time motion controller  4 3 8    e  AXIS_0       AXIS_n  individual axis variables  4 3 9    e  EMCIO  settings used by the I O Controller  4 3 10     CHAPTER 4  INI CONFIGURATION 23    4 2 3 Variables    A variable line is made up of a variable name  an equals sign     and a value  Everything from the  first non white space character after the   up to the end of the line is passed as the value  so you  can embed spaces in string symbols if you want to or need to  A variable name is often called a  keyword     The following sections detail each section of the configuration file  using sample values for the  configuration lines     Some of the variables are used by EMC  and must always use the section names and variable names  shown  Other variables are used only by HAL  and the section names and variable names shown  are those used in the sample configuration files     4 2 4 Definitions    Machine Units The units  of length or angle  specified in the ini file for a particular axis    4 3 INI 
224. ontact  e the NC contact    e the coil  output     180    CHAPTER 23  LADDER PROGRAMMING 181    Of course there are way more components to a full ladder language  but understanding these will  help grasp the overall concept     The ladder consists of one or more rungs  These rungs are horizontal traces  with components on  them  inputs  outputs and other   which get evaluated left to right     Bl GO        _        This example is the simplest rung     The input on the left  a normal open contact is connected to the output on the right QO  Now imagine  a voltage gets applied to the leftmost end  as soon as the BO turns true  e g  the input is activated   or the user pushed the NO contact   the voltage reaches the right part QO  As a consequence  the  QO output will turn from O to 1     Chapter 24    ClassicLadder    24 1 Introduction    ClassicLadder is a free implementation of a ladder interpreter  released under the LGPL  It has been  written by Marc Le Douarain     He describes the beginning of the project on his website        I decided to program a ladder language only for test purposes at the start  in february  2001  It was planned  that I would have to participate to a new product after leaving the  enterprise in which I was working at that time  And I was thinking that to have a ladder  language in thoses products could be a nice option to considerate  And so I started to code  the first lines for calculating a rung with minimal elements and displaying dynamically it
225. p  i  i  i  i  AA AA A A AIE ae 4  i steplen  th i 3  c f stepidir 1 stepspace    logic  frequency je   and L dirsetup    timing  position scale i dhol  pos err i  A i  control i position hold  d vel err i  dT as   STEP TYPE   0  maxireq i  7 t  update_freq   mares j    make_pulses   stepgen 0 crau tve   position 1 uses   i  i  H  capture_position   i rawcounts la      counts  lt  a   up  latch 1  position tb    L_ f down  AAA este Be ee AA Me Se ete coe E ae 4  i steplen  i  th    i  a i upldown stepspace    logic  frequency      and H    timing  position scale i dirdelay  i    pos err  i    i    o  control f   position hold  position cmd equation J H vamp  accumulator  a D gt  or   STEP TYPE  N i  ar as j  i  maxieq j  i  7 R  update_freq   mararey     i  i  stepgen 0 crau tvPe   posimion   make_pulses    f  i  i  capture_position   i rawcounts      i phase A  i  I  counts t phase B  i  latch i lookup    hase   position fb   table pu  f  i phase D  I  i    L phase E  1 state  A A VAENE Sa ee oe E ee eee se 4  i  t   i    state steplen  i counter  frequency i and dirdelay    timing  position scale i  i    a y   postion hold  velocity cmd x ramp     ramp SONA    STEP TYPE   2  14  maxieq i  i  i L  update_freq   mans 1  i  stepgen 0 cra rye  vetocity i make_pulses               Figure 15 1  Step Pulse Generator Block Diagram  position mode     CHAPTER 15     INTERNAL COMPONENTS       capture_position            position scale                                                   
226. pical pin definition will look  something like these examples     e  BIT  parport  lt portnum gt  pin  lt pinnum gt  in     The HAL pin associated with the physical  input pin  lt pinnum gt  on the 25 pin D shell connector     e  FLOAT  pid  lt loopnum gt  output     The output of the PID loop   At times  a shortened version of a name may be used   for example the second pin above might be    referred to simply as   output when it can be done without causing confusion     8 2 General Naming Conventions    Consistent naming conventions would make HAL much easier to use  For example  if every encoder  driver provided the same set of pins and named them the same way it would be easy to change  from one type of encoder driver to another  Unfortunately  like many open source projects  HAL is    67    CHAPTER 8  GENERAL REFERENCE INFORMATION 68    a combination of things that were designed  and things that simply evolved  As a result  there are  many inconsistencies  This section attempts to address that problem by defining some conventions   but it will probably be a while before all the modules are converted to follow them     Halemd and other low level HAL utilities treat HAL names as single entities  with no internal struc   ture  However  most modules do have some implicit structure  For example  a board provides  several functional blocks  each block might have several channels  and each channel has one or  more pins  This results in a structure that resembles a directory tre
227. ponse to PWM is simple  0  PWM gives ORPM  10   PWM gives 180 RPM  etc  If there is a minimum PWM required to get the spindle to turn  follow the  example in the nist lathe sample configuration to use a scale component        3the fastest thread in the EMC2 setup  usually the code gets executed every few microseconds    CHAPTER 13  BASIC CONFIGURATIONS FOR A STEPPER BASED SYSTEM 101    13 3 6 Adding an enable signal    Some amplifiers  drives  require an enable signal before they accept and command movement of the  motors  For this reason there are already defined signals called  Xen     Yen        Zen        To connect them use the following example   linksp Xen parport 0 pin 08 out    You can either have one single pin that enables all drives  or several  depending on the setup you  have  Note however that usually when one axis faults  all the other ones will be disabled as well  so  having only one signal   pin is perfectly safe     13 3 7 Adding an external E STOP button    you can see in 13 3 1 by default the stepper configuration assumes no external E STOP button   To add a simple external button you need to replace the line   linkpp iocontrol 0 user enable out iocontrol 0 emc enable in  with  linkpp parport 0 pin 01 in iocontrol 0 emc enable in    This assumes an E STOP switch connected to pin 01 on the parport  As long as the switch will  stay pushed    EMC2 will be in the E STOP state  When the external button gets released EMC2 will  immediately switch to the E STOP
228. position cmd    We see that this signal comes from axis o motor pos cmd and goes to both ddt 0 in and stepgen 0 position   cmd  By connecting our block to the signal we have avoided any complications with the normal flow  of this motion command     The Hal Show Area uses halemd to discover what is happening in a running HAL  It gives you  complete information about what it has discovered  It also updates as you issue commands from  the little editor panel to modify that HAL  There are times when you want a different set of things  displayed without all of the information available in this area  That is where the Hal Watch Area is  of value     10 4 4 Hal Watch Area    Clicking the watch tab produces a blank canvas  You can add signals and pins to this canvas and  watch their values   You can add signals or pins when the watch tab is displayed by clicking on  the name of it  Figure 10 4 shows this canvas with several    bit    type signals  These signals include  enable out for the first three axes and two of the three iocontrol    estop    signals  Notice that the  axes are not enabled even though the estop signals say that the EMC is not in estop  A quick look  at themc shows that the condition of the EMC is ESTOP RESET  The amp enables do not turn true  until the machine has been turned on     The two colors of circles  aka leds  always show dark brown when a bit signal or pin is false  They  show the light yellow whenever that signal is true  If you select a pin or signal 
229. processor like Open Office produce files with  paragraphs and word wrapping and lots of embedded codes that control font size and such  A text editor does none of this    2Usually this file is in the users home directory  e g   home user       21    CHAPTER 4  INI CONFIGURATION 22    e sections     e variables     Each of these elements is separated on single lines  Each end of line or newline character creates a  new element     4 2 1 Comments    A comment line is started with a   or a   mark  When the ini reader sees either of these marks at  the start a line  the rest of the line is ignored by the software  Comments can be used to describe  what some INI element will do       This is my little mill configuration file     I set it up on January 12  2006       Comments can also be used to select between several values of a single variable       DISPLAY   tkemc  DISPLAY   axis     DISPLAY   mini     DISPLAY   keystick    In this list  the DISPLAY variable will be set to axis because all of the others are commented out   If someone carelessly edits a list like this and leaves two of the lines uncommented  the first one  encountered will be used     6 99    Note that inside a variable  the         and         characters do not denote comments        INCORRECT   valu and a comment                4 2 2 Sections    Related parts of an ini file are separated into sections  A section line looks like  THIS_SECTION    The name of the section is enclosed in brackets  The order of secti
230. pulse  A shorter period will allow you to generate more pulses  per second  within limits  But if you go too short  your computer will spend so much time generating  step pulses that everything else will slow to a crawl  or maybe even lock up  Latency and stepper  drive requirements affect the shortest period you can use  as we will see in a minute     Let s look at the Gecko example first  The G202 can handle step pulses that go low for 0 5uS and  high for 4 5uS  it needs the direction pin to be stable 1uS before the falling edge  and remain stable  for 20uS after the falling edge  The longest timing requirement is the 20uS hold time  A simple  approach would be to set the period at 20uS  That means that all changes on the STEP and DIR  lines are separated by 20uS  All is good  right     Wrong  If there was ZERO latency  then all edges would be separated by 20uS  and everything  would be fine  But all computers have some latency  Latency means lateness  If the computer  has 11uS of latency  that means sometimes the software runs as much as 11uS later than it was  supposed to  If one run of the software is 11uS late  and the next one is on time  the delay from the  first to the second is only 9uS  If the first one generated a step pulse  and the second one changed  the direction bit  you just violated the 20uS G202 hold time requirement  That means your drive  might have taken a step in the wrong direction  and your part will be the wrong size     The really nasty part about 
231. put to the hardware  If enable is false   then the output will be O  regardles of value  scale  and offset  The meaning of    0    is dependent on  the hardware  For example  a bipolar 12 bit A D may need to write Ox1FF  mid scale  to the D A  get O volts from the hardware pin  If enable is true  read scale  offset and value and output to the  adc  scale   value    offset  If enable is false  then output 0     9 5 Encoder    The canonical encoder interface  I O type field  encoder   provides the functionality needed for  homing to an index pulse and doing spindle synchronization  as well as basic position and or ve   locity control  This interface should be implementable regardless of the actual underlying hardware   although some hardware will provide    better    results   For example  capture the index position to      1 count while moving faster  or have less jitter on the velocity pin      9 5 1 Pins    e  S32  count     Encoder value in counts    e  FLOAT  position     Encoder value in position units  see parameter    scale       e  FLOAT  velocity     Velocity in position units per second    e  BIT  reset     When True  force counter to zero     e  BIT  index enable    bidirectional  When True  reset to zero on next index pulse  and set pin  False     The    index enable    pin is bi directional  and might require a little more explanation  If    index   enable    is False  the index channel of the encoder will be ignored  and the counter will count  normally  The enco
232. pyright notice for  your modifications adjacent to the other copyright notices  F  Include  immediately after the copyright notices   a license notice giving the public permission to use the Modified Version under the terms of this License  in  the form shown in the Addendum below  G  Preserve in that license notice the full lists of Invariant Sections  and required Cover Texts given in the Document s license notice  H  Include an unaltered copy of this License   I  Preserve the section entitled  History   and its title  and add to it an item stating at least the title  year  new  authors  and publisher of the Modified Version as given on the Title Page  If there is no section entitled  History   in the Document  create one stating the title  year  authors  and publisher of the Document as given on its  Title Page  then add an item describing the Modified Version as stated in the previous sentence  J  Preserve  the network location  if any  given in the Document for public access to a Transparent copy of the Document   and likewise the network locations given in the Document for previous versions it was based on  These may  be placed in the  History  section  You may omit a network location for a work that was published at least  four years before the Document itself  or if the original publisher of the version it refers to gives permission   K  In any section entitled  Acknowledgements  or  Dedications   preserve the section s title  and preserve in  the section all the subs
233. rd gt  enc  lt channel gt  reset count     If this pin is true  the counter will  immediately be reset to zero  and the pin will be cleared      FLOAT  motenc  lt board gt  dac  lt channel gt  value     Analog output value for DAC  in user  units  see  gain and  offset      FLOAT  motenc  lt board gt  adc  lt channel gt  value     Analog input value read by ADC  in user  units  see  gain and  offset      BIT  motenc  lt board gt       BIT  motenc  lt board gt   digital input      BIT  motenc  lt board gt   digital output      BIT  motenc  lt board gt      BIT  motenc  lt board gt             BIT  motenc  lt board gt    is automatically cleared     16 6 2 Parameters    in  lt channel gt   State of digital input pin  see canonical digital input         in  lt channel gt  not     Inverted state of digital input pin  see canonical     out  lt channel gt      Value to be written to digital output  seen canonical     estop in     Dedicated estop input  more details needed        stop in not     Inverted state of dedicated estop input     watchdog reset     Bidirectional    Set TRUE to reset watchdog once      FLOAT  motenc  lt board gt  enc  lt channel gt  scale     The number of counts   user unit  to  convert from counts to units       FLOAT  motenc  lt board gt  dac  lt channel gt  offset     Sets the DAC offset      FLOAT  motenc  lt board gt  dac  lt channel gt  gain     Sets the DAC gain  scaling       FLOAT  motenc  lt board gt  adc  lt channel gt  offset     Sets the ADC of
234. re four extra parameters that determine the  exact timing of the step and direction signals  See figure 15 3 for the meaning of these parameters   The parameters are in nanoseconds  but will be rounded up to an integer multiple of the thread  period for the threaed that calls make_pulses     For example  if make_pulses    is called every  16uS  and steplen is 20000  then the step pulses will be 2 x 16   32uS long  The default value for  all four of the parameters is 1nS  but the automatic rounding takes effect the first time the code  runs  Since one step requires steplen nS high and stepspace nS low  the maximum frequency is  1 000 000 000 divided by  steplen stepspace   If maxfreq is set higher than that limit  it will be  lowered automatically  If maxfreq is zero  it will remain zero  but the output frequency will still be  limited        Step type 1 has two outputs  up and down  Pulses appear on one or the other  depending on  the direction of travel  Each pulse is steplen nS long  and the pulses are separated by at least  stepspace nS  The maximum frequency is the same as for step type O  If maxfreq is set higher  than the limit it will be lowered  If maxfreq is zero  it will remain zero but the output frequency will  still be limited     Step types 2 through 14 are state based  and have from two to five outputs  On each step  a state  counter is incremented or decremented  Figures 15 4  15 5  and 15 6 show the output patterns as  a function of the state counter  The max
235. reamer 1   stream file data into HAL in real time    halui 1  io 1  iocontrol  1    pyvep 1      observe HAL pins and command EMC through NML    accepts NML I O commands  interacts with HAL in userspace    accepts NML I O commands  interacts with HAL in userspace      Virtual Control Panel for EMC2    102    CHAPTER 14  HAL COMPONENTS 103    14 2 Realtime components and kernel modules    Some of these will have expanded descriptions from the man pages  Some will have limited descrip   tions  All of the components have man pages  From this list you know what components exist and  can use man n name to get additional information     abs 9   Compute the absolute value and sign of the input signal  and2 9   Two input AND gate   at_pid 9   proportional integral derivative controller with auto tuning  axis 9   accepts NML motion commands  interacts with HAL in realtime    biquad 9   Biquad IIR filter   blend 9   Perform linear interpolation between two values  blocks 9   Old style HAL blocks  deprecated   charge_pump 9   Create a square wave for the   charge pump   input of some controller boards  clarke2 9   Two input version of Clarke transform  clarke3 9   Clarke  3 phase to cartesian  transform  clarkeinv 9   Inverse Clarke transform   classicladder 9   Realtime software plc based on ladder logic  comp 9   Two input comparator with hysteresis  constant 9   Use a parameter to set the value of a pin  conv_bit_s32 9   Convert a value from bit to s32  conv_bit_u32 9   Convert a val
236. rforms configuration of any PNP ports present  and should be  loaded before hal_parport  On machines without PNP ports  it may be loaded but has no effect     16 2 1 Installing    loadrt probe_parport  loadrt hal_parport       If the Linux kernel prints a message similar to  parport  PnPBIOS parport detected     when the parport_pe module is loaded  sudo modprobe  a parport_pc  sudo rmmod parport_pc   then use of this module is probably required        2In the emc packages for Ubuntu  the file  ete modprobe d emc2 generally prevents parport_pc from being automatically  loaded     CHAPTER 16  HARDWARE DRIVERS 129  16 3 AX5214H    The Axiom Measurement  amp  Control AX5214H is a 48 channel digital I O board  It plugs into an ISA  bus  and resembles a pair of 8255 chips      16 3 1 Installing    loadrt hal_ax5214h cfg   lt config string gt      The config string consists of a hex port address  followed by an 8 character string of    I    and    O     which sets groups of pins as inputs and outputs  The first two character set the direction of the  first two 8 bit blocks of pins  0 7 and 8 15   The next two set blocks of 4 pins  16 19 and 20 23   The  pattern then repeats  two more blocks of 8 bits  24 31 and 32 39  and two blocks of 4 bits  40 43  and 44 47   If more than one board is installed  the data for the second board follows the first  As  an example  the string  0x220 IIIOIIOO 0x300 OIOOIOIO  installs drivers for two boards  The  first board is at address 0x220  and has
237. river    automatically identifies the installed board and exports the appropriate HAL objects         Installing        lOIdeally the encoders  DACs  ADCs  and digital I O would comply with the canonical interfaces defined earlier  but they  don   t  Fixing that is on the things to do list     CHAPTER 16  HARDWARE DRIVERS 137    loadrt hal_motenc    During loading  or attempted loading  the driver prints some usefull debugging message to the  kernel log  which can be viewed with dmesg     Up to 4 boards may be used in one system     16 6 1 Pins    In the following pins  parameters  and functions   lt board gt  is the board ID  According to the naming  conventions the first board should always have an ID of zero  However this driver sets the ID based  on a pair of jumpers on the baord  so it may be non zero even if there is only one board     e  532  motenc  lt board gt  enc  lt channel gt  count     Encoder position  in counts      FLOAT  motenc  lt board gt  enc  lt channel gt  position     Encoder position  in user units      BIT  motenc  lt board gt  enc  lt channel gt  index     Current status of index pulse input      BIT  motenc  lt board gt         enc  lt channel gt  idx latch     Driver sets this pin true when it latches    an index pulse  enabled by latch index   Cleared by clearing latch index         BIT  motenc  lt board gt  enc  lt channel gt  latch index     If this pin is true  the driver will  reset the counter on the next index pulse      BIT  motenc  lt boa
238. river board  delays must always be in the range of microseconds   no matter what      12 3 Create pins and parameters    h   hal component   passthrough      The component itself is created by a call to the constructor    hal component     The arguments are  the HAL component name and  optionally  the prefix used for pin and parameter names  If the prefix  is not specified  the component name is used     h newpin  in   hal HAL FLOAT  hal HAL_IN     Then pins are created by calls to methods on the component object  The arguments are  pin name  suffix  pin type  and pin direction  For parameters  the arguments are  parameter name suffix   parameter type  and parameter direction     Table 12 1  HAL Option Names  Pin and Parameter Types    HAL _BIT   HAL FLOAT   HAL_S32   HAL_U32  Pin Directions  HAL_IN HAL_OUT HAL_IO  Parameter Directions  HAL_RO HAL RW                                  e s    The full pin or parameter name is formed by joining the prefix and the suffix with a          so in the  example the pin created is called passthrough  in     h  ready       Once all the pins and parameters have been created  call the   ready    method     12 3 1 Changing the prefix    The prefix can be changed by calling the  setprefix   method  The current prefix can be retrieved  by calling the  getprefix   method     12 4 Reading and writing pins and parameters    For pins and parameters which are also proper Python identifiers  the value may be accessed or set  using the attribute synt
239. round the setpoint because there   s nothing to remove the error when it overshoots  or oscillates  and or stabilizes at a too low or too high value  By adding a negative proportion of  i e  subtracting  part of  the average error from the process input  the average difference between the process output  and the setpoint is always being reduced  Therefore  eventually  a well tuned PID loop   s process  output will settle down at the setpoint     22 1 2 0 0 3 Derivative To handle the future  the first derivative  the slope of the error  over  time is calculated  and multiplied by another  negative  constant D  and also added to  subtracting  error from  the controlled quantity  The derivative term controls the response to a change in the  system  The larger the derivative term  the more rapidly the controller responds to changes in the  process   s output     More technically  a PID loop can be characterized as a filter applied to a complex frequency domain  system  This is useful in order to calculate whether it will actually reach a stable value  If the values  are chosen incorrectly  the controlled process input can oscillate  and the process output may never  stay at the setpoint     22 1 3 Loop Tuning     Tuning  a control loop is the adjustment of its control parameters  gain proportional band  integral  gain reset  derivative gain rate  to the optimum values for the desired control response  The opti   mum behavior on a process change or setpoint change varies depending
240. rs start at zero and increment   If more than  one device is installed  the channel numbers on additional devices start over at zero  If it is  possible to have a channel number greater than 9  then channel numbers should be two digits   with a leading zero on numbers less than 10 to preserve sort ordering  Some modules have pins  and or parameters that affect more than one channel  For example a PWM generator might  have four channels with four independent    duty cycle    inputs  but one    frequency    parameter  that controls all four channels  due to hardware limitations   The frequency parameter should  use    0 3    as the channel number      lt specific name gt  An individual I O channel might have just a single HAL pin associated with it   but most have more than one  For example  a digital input has two pins  one is the state of  the physical pin  the other is the same thing inverted  That allows the configurator to choose  between active high and active low inputs  For most io types  there is a standard set of pins  and parameters   referred to as the    canonical interface     that the driver should implement   The canonical interfaces are described in chapter 9     8 3 1 1 Examples    motenc 0 encoder 2 position     the position output of the third encoder channel on the first  Motenc board     stg 0 din 03 in  the state of the fourth digital input on the first Servo to Go board     ppme 0 pwm 00 03 frequency  the carrier frequency used for PWM channels O through
241. s                 Owner Type Dir Value Name   03 bit IN FALSE vep light   03 bit OUT FALSE vcp  pushbutton  halcmd     To make something happen  we can connect a HAL signal between the button and the light     halcmd  newsig Jumper bit   halcmd  linksp jumper vcp pushbutton  halcmd  linksp Jumper vcp light  halcmd  show sig          Signals   Type Value Name  bit FALSE jumper     gt  vcp light   lt    vcp pushbutton  halcmd     Now push the button  and the the LED should light up     19 2 VCP  Another small example with EMC    Place the following in the file estop vcp     vep    main window    toggle   halpin   vcp estop         In your  hal file  remove any existing signal linked to iocontrol 0 emc enable in and add the  following lines     loadusr  W halvcp estop vcp   newsig estop bit   linkps vcp estop   gt  estop   linkps estop   gt  jocontrol 0 emc enable in       Now  when running your machine  the ESTOP button in the GUI is disabled  and the ESTOP button  in the VCP window is used instead     CHAPTER 19  VCP 164    19 3 VCP Syntax    19 3 1 Block    A block   s format is   tag   contents      The contents can consist of attributes that describe the block  or other blocks that nest inside it     A attributes format is  name   value    The attribute names that are acceptable for each block depend on the block tag  and will be listed  later     Part VII    Advanced topics    165    Chapter 20    Kinematics in EMC2    20 1 Introduction    When we talk about CNC machines  
242. s  found in the ini     e when the pin halui mdi command  lt nr gt  is activated halui will try to send the MDI command  defined in the ini  This will not always succeed  depending on the operating mode emc2 is in   e g  while in AUTO halui can t successfully send MDI commands      17 3 Case   Studies    User descriptions of working halui and hardware EMC control panels here     Chapter 18    Virtual Control Panels    18 1 Introduction    Traditional machine control panels are large sheets of steel with push buttons  knobs  lights and  sometimes meters mounted on them  They have many advantages   the buttons are far more rugged  than a computer keyboard  and large enough that you can usually operate the correct one by feel  while looking elsewhere  for example at the tool  However  they also have disadvantages  The occupy  a lot of panel space  they are expensive  and wiring them into the PC can use up a lot of I O pins   That is where Virtual Control Panels come in     A Virtual Control Panel  VCP  is a wndow on the computer screen with buttons  meters  switches   etc  When you click on a VCP button  it changes the state of a HAL pin  exactly as if you had pressed  a physical button wired to an input pin on an I O card  Likewise  a VCP LED lights up when a HAL  pin goes true  just like a physical indicator lamp wired to an output pin on an I O card  Virtual  control panels are not intended to replace physical panels   sometimes there is just no substitute  for a big rugged o
243. s reading or writing files  must be done to  complete the shutdown process     12 6 Project ideas    e Create an external control panel with buttons  switches  and indicators  Connect everything  to a microcontroller  and connect the microcontroller to the PC using a serial interface  Python  has a very capable serial interface module called pyserial http    pyserial sourceforge   net    Ubuntu package name    python serial     in the universe repository     e Attach a LCDProc http    lcdproc omnipotent  net   compatible LCD module and use it to  display a digital readout with information of your choice  Ubuntu package name    ledproc     in  the universe repository     e Create a virtual control panel using any GUI library supported by Python  gtk  qt  wxwindows   etc     Part VII    EMC related HAL    Chapter 13    Basic configurations for a stepper  based system    13 1 Introduction    The preferred way to set up a standard stepper machine is with the Step Configuration Wizard  See  the Getting Started Guide for more information on the Step Configuration Wizard     This chapter describes some of the more common settings for manually setting up a stepper based  system  Because of the various possibilities of configuring EMC2  it is very hard to document them  all  and keep this document relatively short     The most common EMC2 usage is for stepper based systems  These systems are using stepper  motors with drives that accept step  amp  direction signals     It is one of th
244. s that  actually get things done  Thread are the method used to make those instructions run when they  are needed  First let s look at the functions available to us     halcmd  show funct  Exported Functions   Owner CodeAddr Arg       P Users Name          F  03 D89051C4 D88F10FC YES 0 siggen 0 update  02 D8902868 D88F1054 YES 0 freqgen capture_position  02 D8902498 D88F1054 NO 0 freqgen make_pulses  02 D89026F0 D88F1054 YES 0 freqgen update_freq    In general  you will have to refer to the documentation for each component to see what its functions  do  In this case  the function siggen 0 update is used to update the outputs of the signal gen   erator  Every time it is executed  it calculates the values of the sine  cosine  triangle  and square  outputs  To make smooth signals  it needs to run at specific intervals     The other three functions are related to the step pulse generators     The first one  freqgen capture_position  is used for position feedback  It captures the value of  an internal counter that counts the step pulses as they are generated  Assuming no missed steps   this counter indicates the position of the motor     The main function for the step pulse generator is freqgen make_pulses  Every time make_pulses  runs it decides if it is time to take a step  and if so sets the outputs accordingly  For smooth step  pulses  it should run as frequently as possible  Because it needs to run so fast  make_pulses is  highly optimized and performs only a few calculations
245. script is available at nc_files holecircle py  This script creates g code for drilling a series of holes  along the circumference of a circle     If the environment variable AXIS PROGRESS_BAR is set  then lines written to stderr of the form  FILTER_PROGRESS  d    will set the AXIS progress bar to the given percentage  This feature should be used by any filter that  runs for a long time     4 3 4  RS274NGC  Section    PARAMETER FILE   file var The file which contains the parameters used by the interpreter  saved  between runs      RS274NGC_STARTUP_CODE   G21 G90 A siring of NC codes that the interpreter is initialized  with  This is not a substitute for specifying modal g codes at the top of each ngc file  because  the modal codes of machines differ  and may be changed by g code interpreted earlier in the  session     4 3 5  EMCMOT  Section    BASE_PERIOD   50000  HAL     Base    task period  in nanoseconds   this is the fastest thread in the  machine   On servo based systems  there is generally no reason for BASE_PERIOD to be smaller than  SERVO_PERIOD   On machines with software step generation  the BASE_PERIOD determines the maximum  number of steps per second  In the absence of long step length and step space requirements   the absolute maximum step rate is one step per BASE_PERIOD  Thus  the BASE_PERIOD  shown above gives an absolute maximum step rate of 20000 steps per second  50000ns is a  fairly conservative value  The smallest usable value is related to the Latency Te
246. se      If you have no Invariant Sections  write  with no Invariant Sections  instead of saying which ones are invariant   If you have no Front Cover Texts  write  no Front Cover Texts  instead of  Front Cover Texts being LIST    likewise for Back Cover Texts     If your document contains nontrivial examples of program code  we recommend releasing these examples in  parallel under your choice of free software license  such as the GNU General Public License  to permit their  use in free software     Part XV    Index    208    Index     emcre  21    ABORT  9   ACEXIK  140   acme screw  200  ANGULAR UNITS  26  Auto  8   AXIS  5  22   axis  200   axis  hal pins   36    backlash  200   backlash compensation  200  ball nut  200   ball screw  200   BASE PERIOD  25   blocks  43   Bridgeport  4    Cartesian machines  166   cd  197   Changing Directories  197  ClassicLadder  43  182   CNC  4  40  200   CNC machines  166   comments  22   coordinate measuring machine  200  CVS  4    debounce  123  dir  197  DISPLAY  22  display units  200  DRO  200    Editing a Root File  196  EDM  200   EMC  200   EMCIO  6  201  EMCMOT  201  EMCTASK  7   enable signal  101  encoder  30  43  117  201  ESTOP  9  101    feed  201   feed override  9  201  feed rate  201  feedback  201    FERROR  28  find  197  Finding a File  197    G Code  201  G code  8  gksudo  197  GNU Linux  3  GPL  4   grep  198  GUI  201    HAL  4  21  40  98  HAL  inifile section   26  HAL Component  42  HAL Function  42   HAL Param
247. sent  the prefix hal_ is removed from the beginning of the component name when creating  pins  parameters and functions    In the HAL identifier for a pin or parameter    denotes an array item  and must be used in  conjunction with a  SIZE  declaration  The hash marks are replaced with a O padded number  with the same length as the number of   characters     When used to create a C identifier  the following changes are applied to the HALNAME        o   we        1  Any   characters  and any             _    or         characters immediately before them  are removed     e    s    2  Any remaining         and         characters are replaced with        9    3  Repeated    _    characters are changed to a single character     CHAPTER 11  COMP  A TOOL FOR CREATING HAL MODULES 85    A trailing _ is retained  so that HAL identifiers which would otherwise collide with reserved  names or keywords  e g    min   can be used                          HALNAME   C Identifier   HAL Identifier  xyz xyz X y Z  X Y Z xyz X y Z  x y_z_ x y_z_ X y Z  x    y x_y MM  x MM z  x    x MM  x MM                   if CONDITION An expression involving the variable personality which is nonzero when the pin or  parameter should be created    SIZE A number that gives the size of an array  The array items are numbered from 0 to SIZE 1     MAXSIZE   CONDSIZE A number that gives the maximum size of the array followed by an expres   sion involving the variable personality and which always evaluates to less than
248. sequential   and select what type  main or subroutine      Select a subroutine number  SRO for exampe   An empty section will be displayed and you can build  your subroutine     When your done that  go back to the section manager and click on the your  main  section  default  name prog 1      Now you can add a CALL COIL to your program  CALL COILs are to be placed at the right most  position in the rung     Remember to change the lable to the subroutine number you choose before     There can only be one CALL COIL per rung the rest wil not be called        Uf the JUMP COLL is true it should JUMP to the new rung right away and not update the rest of the coils of the current  rung    Part XI    Hardware Examples    Chapter 25    Spindle Speed Control    25 1 0 10v Spindle Speed    If your spindle is controlled by a VFD with a O to 10 volt signal and your using a DAC card like the  m5i20 to output the control signal     First you need to figure the scale of spindle speed to control signal  For this example the spindle  top speed of 5000 RPM is equal to 10 volts  10 5000   0 002 so our scale factor is 0 002    We have to add a scale componet to the hal file to scale the motion spindle speed out to the O to 10  needed by the VFD if your DAC card does not do scaling     loadrt scale count 1   addf scale O servo thread   setp scale 0 gain 0 002   net spindle speed scale motion spindle speed out   gt  scale 0 in    net spindle speed DAC scale 0 out   gt   lt your DAC pin name gt     2
249. smod when loading the module  The format consists of a four character string that sets  the direction of each group of pins  Each character of the direction string is either  I  or  O   The  first character sets the direction of port A  Port A   DIO 0 7   the next sets port B  Port B   DIO 8 15    the next sets port C  Port C   DIO 16 23   and the fourth sets port D  Port D   DIO 24 31   The model  field can be used in case the driver doesn   t autodetect the right card version     For example     loadrt hal_stg base 0x300 num_chan 4 dio  IOIO     This example installs the stg driver for a card found at the base address of 0x300  4 channels of  encoder feedback  DAC   s and ADC   s  along with 32 bits of I O configured like this  the first 8  Port  A  configured as Input  the next 8  Port B  configured as Output  the next 8  Port C  configured as  Input  and the last 8  Port D  configured as Output    loadrt hal_stg    This example installs the driver and attempts to autodetect the board address and board model  it  installs 8 axes by default along with a standard I O setup  Port A  amp  B configured as Input  Port C   amp  D configured as Output     16 4 2 Pins    e  s32  stg  lt channel gt  counts     Tracks the counted encoder ticks   e  FLOAT  stg  lt channel gt  position     Outputs a converted position   e  FLOAT  stg  lt channel gt  dac value     Drives the voltage for the corresponding DAC     e  FLOAT  stg  lt channel gt  adc value     Tracks the measured voltage fro
250. st result   the  necessary step length  and the processor speed   Choosing a BASE_PERIOD that is too low can lead to the    Unexpected real time delay    message   lockups  or spontaneous reboots     SERVO_PERIOD   1000000  HAL     Servo    task period is also in nanoseconds  This value will be  rounded to an integer multiple of BASE_PERIOD  This value is used even on systems based  on stepper motors    This is the rate at which new motor positions are computed  following error is checked  PID  output values are updated  and so on    Most systems will not need to change this value  It is the update rate of the low level motion  planner     TRAJ_PERIOD   1000000  HAL  Trajectory Planner task period in nanoseconds This value will be  rounded to an integer multiple of SERVO_PERIOD   Except for machines with unusual kinematics  e g   hexapods  there is no reason to make this  value larger than SERVO_PERIOD     CHAPTER 4  INI CONFIGURATION 26    4 3 6  TASK  Section    CYCLE_TIME   0 001 The period  in seconds  at which EMCTASK will run  This parameter affects  the polling interval when waiting for motion to complete  when executing a pause instruction   and when accepting a command from a user interface  There is usually no need to change this  number     4 3 7  HAL  section    HALFILE   example hal Execute the file  example hal  at start up  If HALFILE is specified multiple  times  the files are executed in the order they appear in the ini file  Almost all configurations  will h
251. stepgen  lt chan gt  dirhold     Minmum time from the end of a step pulse to a direction  change  step type O only   in nanoseconds     CHAPTER 15  INTERNAL COMPONENTS 110    e  FLOAT  stepgen  lt chan gt  dirdelay     Minmum time any step to a step in the opposite direc   tion  step types 1 14 only   in nano seconds     e  s32  stepgen  lt chan gt  rawcounts     The raw feedback count  updated by make_pulses        In position mode  the values of maxvel and maxaccel are used by the internal position loop to avoid  generating step pulse trains that the motor cannot follow  When set to values that are appropriate  for the motor  even a large instantaneous change in commanded position will result in a smooth  trapezoidal move to the new location  The algorithm works by measuring both position error and  velocity error  and calculating an acceleration that attempts to reduce both to zero at the same time   For more details  including the contents of the    control equation    box  consult the code     In velocity mode  maxvel is a simple limit that is applied to the commanded velocity  and maxaccel  is used to ramp the actual frequency if the commanded velocity changes abruptly  As in position  mode  proper values for these parameters ensure that the motor can follow the generated pulse  train     15 1 5 Step Types    The step generator supports 15 different    step types     Step type O is the most familiar  standard step  and direction  When configured for step type O  there a
252. stepper electrical calculations     Chapter 22    PID Tuning    22 1 PID Controller    A proportional integral derivative controller  PID controller  is a common feedback loop component  in industrial control systems       The Controller compares a measured value from a process  typically an industrial process  with a  reference setpoint value  The difference  or  error  signal  is then used to calculate a new value for  a manipulatable input to the process that brings the process    measured value back to its desired  setpoint     Unlike simpler control algorithms  the PID controller can adjust process outputs based on the  history and rate of change of the error signal  which gives more accurate and stable control   It  can be shown mathematically that a PID loop will produce accurate  stable control in cases where  a simple proportional control would either have a steady state error or would cause the process to  oscillate      22 1 1 Control loop basics    Intuitively  the PID loop tries to automate what an intelligent operator with a gauge and a control  knob would do  The operator would read a gauge showing the output measurement of a process  and  use the knob to adjust the input of the process  the  action   until the process s output measurement  stabilizes at the desired value on the gauge     In older control literature this adjustment process is called a  reset  action  The position of the  needle on the gauge is a  measurement    process value  or  process variab
253. t     Machine units The linear and angular units used for machine configuration  These units are used  in the ini file  HAL pins and parameters are also generally in machine units     202  MDI Manual Data Input  This is a mode of operation where the controller executes single lines of  G code as they are typed by the operator     NIST National Institute of Standards and Technology  An agency of the Department of Commerce  in the United States     Offsets    Part Program A description of a part  in a language that the controller can understand  For EMC   that language is RS 274 NGC  commonly known as G code     Program Units The linear and angular units used for part programs     Rapid Fast  possibly less precise motion of the tool  commonly used to move between cuts  If the  tool meets the material during a rapid  it is probably a bad thing     Real time Software that is intended to meet very strict timing deadlines  Under Linux  in order to  meet these requirements it is necessary to install RTAI or RTLINUX and build the software to  run in those special environments  For this reason real time software runs in kernel space     RTAI Real Time Application Interface  see https    www rtai org   one of two real time exten   sions for Linux that EMC can use to achieve real time performance     RTLINUX See http    www rtlinux org  one of two real time extensions for Linux that EMC can  use to achieve real time performance     RTAPI A portable interface to real time operating syste
254. t channel gt  on max limit soft   status pin telling joint is at the positive software  limit    e  817  halui joint  lt channel gt  on min limit hard   status pin telling joint is on the negative hard   ware limit switch    e  817  halui joint  lt channel gt  on max limit hard   status pin telling joint is on the positive hard   ware limit switch    e  817  halui joint  lt channel gt  fault   status pin telling the joint has a fault    e  817  halui joint  lt channel gt  homed   status pin telling that the joint is homed    CHAPTER 17  HALUI 150    17 2 7 Jogging     lt channel gt  is a number between O and 7 and    selected        e  FLOAT  halui jog speed   set jog speed  e  817  halui jog  lt channel gt  minus   jog in negative direction    e  817  halui jog  lt channel gt  plus   jog in positive direction    17 2 8 Selecting a joint    e  U32  halui joint select   select joint  0  7    internal halui  e  U32  halui joint selected   selected joint  0  7    internal halui  e  BIT  halui joint x select bit   pins for selecting a joint   internal halui    e  BIT  halui joint x is selected bit   status pin a joint is selected   internal halui    17 2 9 Feed override    e  FLOAT  halui feed override value   current FO value   e  FLOAT  halui feed override scale   pin for setting the scale on changing the FO   e  S32  halui feed override counts   counts from an encoder for example to change FO  e  BIT  halui feed override increase   pin for increasing the FO    scale     e  BIT
255. t displays some of the variable data and variable names  Notice all variable start with the   sign     The three edit areas at the top allow you to select what 15 variable will be displayed in each column   For instance if there were 30  I variable and you entered 10 at the top of the column  variable  I10  to  I25 would be displayed     The check boxes allow you to set and un set variables but when classicladder is running hal will  update the pins and change them     Near the bottom are the  W variables  These are called word variable and represent positive and  negative  signed  numbers and are used with compare and operate  By clicking on the variable  you  can edit the number to display which ever you want The edit box beside it is the number stored in  the variable  you can change it  and the drop down box beside that allow you to choose whether the  number to be displayed is in hex  decimal or binary     The  I variable represents HAL input bit pins  The  Q represents the relay coil and HAL output bit  pins  The  B represents an internal relay coil or internal contact     CHAPTER 24  CLASSICLADDER 185    Figure 24 1  ClassicLadder Var window    10   O BO  J o    Q0  O 8 O 1   Q1  O B2 0 2    Q2  O 83 0 3     Q3  O B4 OQ 4  J Q4  O Bs O I5  J Q5  O Bs g 6    Q6  O B7 0 7     Q7  O es g 8    Q8  O B9  J 9  J Q9    0  B10  J i10 O  Q10    O B1l O lll    Q11  O  B12  12 O  Q12  O B13   113 O  Q13  O  B14    I14 O  Q14    boo fo Jrs  bon fo  e   bara  o  ee     paa  o  pe  
256. t rtapi_app_main void     e void rtapi_app_exit void   These are the standard setup and tear down functions of RTAPI modules     Part IX    Tuning    Chapter 21    Stepper Tuning    21 1 Getting the most out of Software Stepping    Generating step pulses in software has one very big advantage   it s free  Just about every PC has a  parallel port that is capable of outputting step pulses that are generated by the software  However   software step pulses also have some disadvantages     e limited maximum step rate  e jitter in the generated pulses    e loads the CPU    This chapter has some steps that can help you get the best results from software generated steps     21 1 1 Runa Latency Test    The new easy way to do a latency test is described in the Getting Started Guide     Latency is how long it takes the PC to stop what it is doing and respond to an external request   In our case  the request is the periodic  heartbeat  that serves as a timing reference for the step  pulses  The lower the latency  the faster you can run the heartbeat  and the faster and smoother  the step pulses will be     Latency is far more important than CPU speed  A lowly Pentium II that responds to interrupts  within 10 microseconds each and every time can give better results than the latest and fastest P4  Hyperthreading beast     The CPU isn t the only factor in determining latency  Motherboards  video cards  USB ports  and a  number of other things can hurt the latency  The best way to find out w
257. t talk about writing a    conversational    or geometric interface that would allow  an operator to enter programs is much the same way that several modern proprietary controls enter  programs but it isn t in there yet     1 3 Computer Operating Systems    The EMC2 code can be compiled on almost any GNU Linux Distribution  assuming it has been  patched with a real time extension   In addition to the raw code  some binary distributions are  available  The latest packages have been created around the Ubuntu GNU Linux Distribution   Ubuntu is one of the distributions that is aimed at novice Linux users  and has been found to be  very easy to use  Along with that  there are lots of places around the world that offer support for it   Installing EMC2 on it is trivial  see section 2 2    The EMC2 will not run under a Microsoft  TM  operating system  The reason for this is that the  EMC2 requires a real time environment for the proper operation of its motion planning and stepper  pulse outputs  Along with that  it also benefits from the much needed stability and performance of  the Linux OS     1 4 History of the Software    The EMC code was started by the Intelligent Systems Division at the National Institute of Standards  and Technology in the United States  The quotation below  taken from the NIST web presence  some time back  should lend some understanding of the essential reasons for the existence of this  software and of the NIST involvement in it     As part of our  NIST  coll
258. t various addresses  The pin is called out_ because out is an identifier  used in  lt asm io h gt   It illustrates the use of EXTRA_SETUP and EXTRA_CLEANUP to request an I O  region and then free it in case of error or when the module is unloaded                       CHAPTER 11  COMP  A TOOL FOR CREATING HAL MODULES 90    component out8   pin out unsigned out_  Output value  only low 8 bits are used    param r unsigned ioaddr     function _     option count_function   option extra_setup   option extra_cleanup   option constructable no     rr    include  lt asm io h gt                 define MAX 8  int io MAX     0     RTAPI_MP_ ARRAY _INT io  MAX   I O addresses of out8 boards       int get_count  void     int i   0   for 1 0  i lt MAX  amp  amp  io i   i         Nothing        return i           EXTRA_SETUP       if   rtapi_request_region io extra_arg   1   out8          set this I O port to 0 so that EXTRA_CLEANUP does not release the IO     ports that were never requested   iofextra_arg    0   return  EBUSY                          ioaddr   io extra_arg    return 0              EXTRA_CLEANUP        NE  de   for i 0  i  lt  MAX  amp  amp  io i   i       rtapi_release_region io i   1      FUNCTION _    outb out_  ioaddr        11 13 4 hal_loop    component hal_loop   pin out float example     This fragment of a component illustrates the use of the hal_ prefix in a component name  loop is  the name of a standard Linux kernel module  so a loop component might not successfully
259. tal outputs  e 16 dedicated digital inputs    e EPP communuication with the PC    16 10 1 Pinout    STEPx The    step     clock  output of stepgen channel x   DIRx The    direction    output of stepgen channel x   INx Dedicated digital input  x   OUTx Dedicated digital output  x   GND Ground   VCC  3 3V regulated DC   While the    extended main connector    has a superset of signals usually found on a Step  amp  Direction    DB25 connector 4 step generators  9 inputs  and 6 general purpose outputs   the layout on this  header is different than the layout of a standard 26 pin ribbon cable to DB25 connector     16 10 2 Input latching and output updating    e Step frequencies for each channel are updated at different times   e Digital outputs are all updated at the same time   e Digital inputs are all latched at the same time     e Feedback positions for each channel are latched at different times     16 10 3 Step Waveform Timings    The firmware and driver enforce step length  space  and direction change times  Timings are  rounded up to the next multiple of 1 65  with a maximum of 49 6us  The timings are the same  as for the software stepgen component  except that    dirhold    and    dirsetup    have been merged into  a single parameter    dirtime    which should be the maximum of the two  and that the same step  timings are always applied to all channels     CHAPTER 16  HARDWARE DRIVERS 146    Figure 16 3  Pluto Step Pinout                                                    
260. tance and tone of each of the contributor acknowledgements and or dedications given  therein  L  Preserve all the Invariant Sections of the Document  unaltered in their text and in their titles   Section numbers or the equivalent are not considered part of the section titles  M  Delete any section entitled   Endorsements   Such a section may not be included in the Modified Version  N  Do not retitle any existing  section as  Endorsements  or to conflict in title with any Invariant Section     If the Modified Version includes new front matter sections or appendices that qualify as Secondary Sections  and contain no material copied from the Document  you may at your option designate some or all of these  sections as invariant  To do this  add their titles to the list of Invariant Sections in the Modified Version s  license notice  These titles must be distinct from any other section titles     You may add a section entitled  Endorsements   provided it contains nothing but endorsements of your Mod   ified Version by various parties for example  statements of peer review or that the text has been approved by  an organization as the authoritative definition of a standard     You may add a passage of up to five words as a Front Cover Text  and a passage of up to 25 words as a  Back Cover Text  to the end of the list of Cover Texts in the Modified Version  Only one passage of Front Cover  Text and one of Back Cover Text may be added by  or through arrangements made by  any one entit
261. tem is a conditional item  it is only legal to refer to it when its condition evalued to  a nonzero value     variable name For each variable variable name there is a macro which allows the name to be  used on its own to refer to the variable  When variable_name is an array  the normal C style  subscript is used  variable_namelidx     data If    option data    is specified  this macro allows access to the instance data   fperiod The floating point number of seconds between calls to this realtime function     FOR_ALL_INSTS         For userspace components  This macro uses the variable struct state  xinst to iterate over all the defined instances  Inside the body of the loop  the pin_name   parameter_name  and data macros work as they do in realtime functions     CHAPTER 11  COMP  A TOOL FOR CREATING HAL MODULES 88  11 8 Components with one function    If a component has only one function and the string    FUNCTION    does not appear anywhere after      then the portion after    is all taken to be the body of the component s single function     11 9 Component    Personality       If a component has any pins or parameters with an    if condition    or     maxsize   condsize      it is called  a component with    personality     The    personality    of each instance is specified when the module  is loaded     Personality    can be used to create pins only when needed  For instance  personality is  used in the logic component  to allow for a variable number of input pins to each 
262. tep pulses   in units of 100nS  Applies to a group fof four consecutive PWM generators  as indicated by   lt channel range gt         Index handling does _not_ comply with the canonical encoder interface  and should be changed     CHAPTER 16  HARDWARE DRIVERS 140       e  u32  ppmc  lt port gt  stepgen  lt channel range gt  pulse space min     Sets minimum time  between pulses  in units of 100nS  The maximum step rate is 1   100nS     pulse width    pulse space min     Applies to a group fof four consecutive PWM generators  as indicated  by  lt channel range gt      e  FLOAT  ppmc  lt port gt  stepgen  lt channel gt  scale     Scaling for step pulse generator  The  step frequency in Hz is the absolute value of velocity   scale        e  FLOAT  ppmc  lt port gt  stepgen  lt channel gt  max   vel     The maximum value for velocity   Commands greater than max vel will be clamped  Also applies to negative values   The abso   lute value is clamped         e  FLOAT  ppmc  lt port gt  stepgen  lt channel gt   frequency     Actual step pulse frequency in Hz   used mostly for troubleshooting      e  BIT  ppmc  lt port gt  out  lt channel gt  invert     Inverts a digital output  see canonical digital  output  1     16 7 3 Functions    e  FUNCT  ppmc  lt port gt  read     Reads all inputs  digital inputs and encoder counters  on one  port     e  FUNCT  ppmc  lt port gt  write     Writes all outputs  digital outputs  stepgens  PWMs  on one  port     16 8 Pluto P  generalities    The Plut
263. tepping   no direction change   the increased dirhold value has no effect  It takes two periods totalling 32uS  to make each step  and we have the same 31 250 step per second rate that we got with the Xylotex     The 11uS latency number used in this example is very good  If you work through these examples  with larger latency  like 20 or 25uS  the top step rate for both the Xylotex and the Gecko will be  lower  But the same formulas apply for calculating the optimum BASE_PERIOD  and for tweaking  dirhold or other step generator parameters     21 1 5 No Guessing     For a fast AND reliable software based stepper system  you cannot just guess at periods and other  configuration paremeters  You need to make measurements on your computer  and do the math to    CHAPTER 21  STEPPER TUNING 175    ensure that your drives get the signals they need     To make the math easier  I   ve created an Open Office spreadsheet  http     wiki linuxcnc org uploads StepTimin   You enter your latency test result and your stepper drive timing requirements and the spreadsheet   calculates the optimum BASE_PERIOD  Next  you test the period to make sure it won t slow down or   lock up your PC  Finally  you enter the actual period  and the spreadsheet will tell you the stepgen   parameter settings that are needed to meet your drive s timing requirements  It also calculates the   maximum step rate that you will be able to generate     I ve added a few things to the spreadsheet to calculate max speed and 
264. terminals  perhaps only two for a simple switch  or dozens    40    CHAPTER 6  INTRODUCTION 41    for a servo drive or PLC  They need to be wired together  The motors connect to the servo amps  the  limit switches connect to the controller  and so on  As the machine builder works on the design  he  creates a large wiring diagram that shows how all the parts should be interconnected     When using HAL  components are interconnected by signals  The designer must decide which  signals are needed  and what they should connect     6 1 1 3 Implementation    Once the wiring diagram is complete it is time to build the machine  The pieces need to be acquired  and mounted  and then they are interconnected according to the wiring diagram  In a physical  system  each interconnection is a piece of wire that needs to be cut and connected to the appropriate  terminals     HAL provides a number of tools to help    build    a HAL system  Some of the tools allow you to     connect     or disconnect  a single    wire     Other tools allow you to save a complete list of all the  parts  wires  and other information about the system  so that it can be    rebuilt    with a single  command     6 1 1 4 Testing    Very few machines work right the first time  While testing  the builder may use a meter to see  whether a limit switch is working or to measure the DC voltage going to a servo motor  He may  hook up an oscilloscope to check the tuning of a drive  or to look for electrical noise  He may find 
265. termines how many filters are in the group  For example     emc2  halcmd loadrt debounce cfg  1 4 2     will install three groups of filters  Group O contains one filter  group 1 contains four  and group  2 contains two filters  The default value for  lt config string gt  is    1    which will install a single  group containing a single filter  The maximum number of groups 8  as defined by MAX_GROUPS in  debounce c   The maximum number of filters in a group is limited only by shared memory space   Each group is completely independent  All filters in a single group are identical  and they are all    updated by the same function at the same time  In the following descriptions   lt G gt  is the group  number and  lt F gt  is the filter number within the group  The first filter is group O  filter O     15 6 2 Removing    emc2  halcmd unloadrt debounce    15 6 3 Pins  Each individual filter has two pins     e  BIT  debounce  lt G gt   lt F gt   in     Input of filter  lt F gt  in group  lt G gt      e  BIT  debounce  lt G gt   lt F gt  out     Output of filter  lt F gt  in group  lt C gt      15 6 4 Parameters  Each group of filters has one parameter      e  s32  debounce  lt G gt  delay     Filter delay for all filters in group  lt G gt    The filter delay is in units of thread periods  The minimum delay is zero  The output of a zero delay  filter exactly follows its input   it doesn   t filter anything  As delay increases  longer and longer    glitches are rejected  If delay is 
266. that is not a bit typed  signal  watch will show the numerical value     Watch will quickly allow you to test switches or see the effect of changes that you make to EMC  while using the graphical interface  Watch   s refresh rate is a bit slow to see stepper pulses but you  can use it for these if you move an axis very slowly or in very small increments of distance  If you   ve  used IO_Show in EMC  the watch page in halshow can be setup to watch a parport much as it did        The refresh rate of the watch display is much lower than Halmeter or Halscope  If you need good resolution of the timing  of signals these tools are much more effective     CHAPTER 10  TOOLS AND UTILITIES    Figure 10 4  Watch Display                    TkEMC a  FX   File View Settings Units Scripts Help  HAL Show  ESTOP RESET  Tree View  MANUAL  Components VA WATCH  Tool  0 Offset  ad Fa ane    axis  ddt    0 O axis 0 amp enable out  in   axis 1 amp enable out  out O axis 2 amp enable out  iocontrol E  0 O iocontrol 0 user enable out  coolant flood O iocontrol 0 emc enable in       coolant mist  emc enable in  lube   lube_level  spindle brake  spindle decr spee   spindle forward  spindle incr speed  spindle on  spindle reverse  spindle speed in  enindle  lt need mut    Axis Speed              Chapter 11    comp  a tool for creating HAL  modules    11 1 Introduction    Writing a HAL component can be a tedious process  most of it in setup calls to rtapi_ and hal_  functions and associated error checking
267. that the software  does  But this License is not limited to software manuals  it can be used for any textual work  regardless of  subject matter or whether it is published as a printed book  We recommend this License principally for works  whose purpose is instruction or reference     1  APPLICABILITY AND DEFINITIONS    This License applies to any manual or other work that contains a notice placed by the copyright holder saying  it can be distributed under the terms of this License  The  Document   below  refers to any such manual or  work  Any member of the public is a licensee  and is addressed as  you      A  Modified Version  of the Document means any work containing the Document or a portion of it  either copied  verbatim  or with modifications and or translated into another language     A  Secondary Section  is a named appendix or a front matter section of the Document that deals exclusively  with the relationship of the publishers or authors of the Document to the Document   s overall subject  or to  related matters  and contains nothing that could fall directly within that overall subject   For example  if the    204    205    Document is in part a textbook of mathematics  a Secondary Section may not explain any mathematics   The  relationship could be a matter of historical connection with the subject or with related matters  or of legal   commercial  philosophical  ethical or political position regarding them     The  Invariant Sections  are certain Secondary Sectio
268. the current UNIX time  or a hardware driver for the internal PC speaker     83    CHAPTER 11  COMP  A TOOL FOR CREATING HAL MODULES 84    11 3 Instance creation    For a singleton  the one instance is created when the component is loaded     For a non singleton  the    count    module parameter determines how many numbered instances are  created     11 4 Syntax    A  comp file consists of a number of declarations  followed by    on a line of its own  followed by C  code implementing the module   s functions     Declarations include     e component HALNAME  DOC      e pin PINDIRECTION TYPE HALNAME   SIZE   MAXSIZE   CONDSIZE    if CONDITION      STARTVALUE   DOC      e param PARAMDIRECTION TYPE HALNAME   SIZE   MAXSIZE   CONDSIZE    if CONDITION      STARTVALUE   DOC       e function HALNAME  fp   nofp   DOC    e option OPT  VALUE      e variable CTYPE NAME   SIZE      e description DOC     e see_also DOC        e license LICENSE              Parentheses indicate optional items  A vertical bar indicates alternatives  Words in CAPITALS  indicate variable text  as follows     HALNAME An identifier     When used to create a HAL identifier  any underscores are replaced with dashes  and any  trailing dash or period is removed  so that    this_name_    will be turned into    this name     and  if the name is    _     then a trailing period is removed as well  so that    function _    gives a HAL  function name like component    lt num gt  instead of component   lt num gt      If pre
269. the path each time  After that you can run  EMC2 by issuing       emc2 src  emc    3 7 Simulator    To install EMC2 on a system without a real time kernel  add   enable simulator to the configure  command line  In this mode  EMC2 runs as a purely userspace program  No hardware can be  controlled and real time scheduling is not guaranteed  but the other features of HAL  EMC and  its various user interfaces are available  When using nable run in place  the sudo make  setuid step is not needed        3 8 Editing and Recompiling    You may need to recompile the EMC2 code for a number of reasons  You may have modified the  source code  or you may have downloaded just a few new files  To recompile  do the following        cd   emc2 src     emc2 src  make  amp  amp  sudo make install   for run installed    emc2 src  make  amp  amp  sudo make setuid   for run in place    emc2 src  make   for run in place  simulator       The build process is smart enough to only rebuild things that are affected by your changes     Part V    Configuration     20    Chapter 4    INI Configuration    4 1 Files Used for Configuration    The EMC is configured with human readable text files  All of these files can be read and edited in  any of the common text file editors available with most any Linux distribution   You ll need to be a  bit careful when you edit these files  Some mistakes will cause the start up to fail  These files are  read whenever the software starts up  Some of them are read repeatedl
270. the same function s  at the same time  In the  following descriptions   lt chan gt  is the number of a specific generator  The first generator is number  O     15 2 2 Removing    emc2  halcmd unloadrt pwmgen    15 2 3 Pins    Each PWM generator will have the following pins     e  FLOAT  pwmgen  lt chan gt  value     Command value  in arbitrary units  Will be scaled by the  scale parameter  see below         e  BIT  pwmgen  lt chan gt  enable     Enables or disables the PWM generator outputs   Each PWM generator will also have some of these pins  depending on the output type selected     e  BIT  pwmgen  lt chan gt  pwm     PWM  or PDM  output   output types O and 1 only    e  BIT  pwmgen  lt chan gt  dir     Direction output  output type 1 only    e  BIT  pwmgen  lt chan gt  up      PWM PDM output for positive input value  output type 2 only      e  BIT  pwmgen  lt chan gt  down     PWM PDM output for negative input value  output type 2 only      CHAPTER 15  INTERNAL COMPONENTS 116    15 2 4 Parameters    e  FLOAT  pwmgen  lt chan gt  scale     Scaling factor to convert value from arbitrary units to duty  cycle     e  FLOAT  pwmgen  lt chan gt  pwm freq     Desired PWM frequency  in Hz  If 0 0  generates PDM  instead of PWM  If set higher than internal limits  next call of update_freq   will set it to the  internal limit  If non zero  and dither is false  next call of update_freq   will set it to the  nearest integer multiple of the make_pulses    function period     e  BIT  p
271. this problem is that it can be very very rare  Worst case latencies might  only happen a few times a minute  and the odds of bad latency happening just as the motor is  changing direction are low  So you get very rare errors that ruin a part every once in a while and  are impossible to troubleshoot     The simplest way to avoid this problem is to choose a BASE_PERIOD that is the sum of the longest  timing requirement of your drive  and the worst case latency of your computer  If you are running a  Gecko with a 20uS hold time requirement  and your latency test said you have a maximum latency  of 11uS  then if you set the BASE_PERIOD to 20 11   31uS  31000 nano seconds in the ini file    you are guaranteed to meet the drive   s timing requirements     But there is a tradeoff  Making a step pulse requires at least two periods  One to start the pulse   and one to end it  Since the period is 31uS  it takes 2x31   62uS to create a step pulse  That means    CHAPTER 21  STEPPER TUNING 174    the maximum step rate is only 16 129 steps per second  Not so good   But don t give up yet  we still  have some tweaking to do in the next section      For the Xylotex  the setup and hold times are very short  200nS each  0 2uS   The longest time is the  2us high time  If you have 11uS latency  then you can set the BASE_PERIOD as low as 11 2 13uS   Getting rid of the long 20uS hold time really helps  With a period of 13uS  a complete step takes  2x13   26uS  and the maximum step rate is 38 461 st
272. ts two functions  Each function acts on all of the PWM generators   running  different generators in different threads is not supported        e  FUNCT  pwmgen make pulses     High speed function to generate PWM waveforms  no floating  point      e  FUNCT  pwmgen update     Low speed function to scale and limit value and handle other  paremeters        The high speed function pwmgen make pulses should be run in a very fast thread  from 10 to 50uS  depending on the capabilities of the computer  That thread s period determines the maximum PWM  carrier frequency  as well as the resolution of the PWM or PDM signals  The other function can be  called at a much lower rate     CHAPTER 15  INTERNAL COMPONENTS 117    15 3 Encoder    This component provides software based counting of signals from quadrature encoders  It is a  realtime component only  and depending on CPU speed  etc  is capable of maximum count rates of  10kHz to perhaps 50kHz  Figure 15 7 is a block diagram of one channel of encoder counter        capture position   update counters        position scale  position Ll x    NS                                     rawcounts m        counter          phase A             up dn    quad                count   decode       counts   latch je       phase B                                  reset                edge    detect    ry        lt  index enable    phase Z                   encoder 0       i   i   i   i   1  i   I  i   1  i   1  i   i   i   i   i   i   i   3  I  l  l   i  
273. turning cranks to move a cutting tool  CNC uses a computer  and motors to move the tool  based on a part program     Coordinate Measuring Machine A Coordinate Measuring Machine is used to make many accurate  measurements on parts  These machines can be used to create CAD data for parts where no  drawings can be found  when a hand made prototype needs to be digitized for mold making   or to check the accuracy of machined or molded parts     Display units The linear and angular units used for onscreen display     DRO A Digital Read Out is a device attached to the slides of a machine tool or other device which  has parts that move in a precise manner to indicate the current location of the tool with respect  to some reference position  Nearly all DRO s use linear quadrature encoders to pick up position  information from the machine     EDM EDM is a method of removing metal in hard or difficult to machine or tough metals  or where  rotating tools would not be able to produce the desired shape in a cost effective manner  An  excellent example is rectangular punch dies  where sharp internal corners are desired  Milling  operations can not give sharp internal corners with finite diameter tools  A wire EDM machine  can make internal corners with a radius only slightly larger than the wire   s radius  A    sinker     EDM cam make corners with a radius only slightly larger than the radius on the corner of the  convex EDM electrode     EMC The Enhanced Machine Controller  Initially a NI
274. types unless they are interruptable  and can work in independent threads  If interrupting an encoder read  reading digital inputs  and then resuming the encoder  read will cause problems  then implement a single function that does everything     CHAPTER 8  GENERAL REFERENCE INFORMATION 70    8 3 2 1 Examples    motenc 0 encoder read     reads all encoders on the first motenc board    generic8255 0 din 09 15 read   reads the second 8 bit port on the first generic 8255 based  digital I O board    ppme 0 write     writes all outputs  step generators  pwm  DACs  and digital  on the first ppme  board    Chapter 9    Canonical Device Interfaces     The following sections show the pins  parameters  and functions that are supplied by    canonical  devices     All HAL device drivers should supply the same pins and parameters  and implement the  same behavior     Note that the only the  lt io type gt  and  lt specific name gt  fields are defined for a canonical device   The  lt device name gt    lt device num gt   and  lt chan num gt  fields are set based on the characteristics of  the real device        9 1 Digital Input    The canonical digital input  I O type field  digin  is quite simple     9 1 1 Pins    e  BIT  in     State of the hardware input     e  BIT  in not   Inverted state of the input     9 1 2 Parameters    e None    9 1 3 Functions    e  FUNCT  read     Read hardware and set in and in not HAL pins   9 2 Digital Output  The canonical digital output  I O type field  digo
275. uS long  sampling  at 1KHz isn   t fast enough  To change the sample rate  click on the button that displays the record  length and sample rate to bring up the    Select Sample Rate    dialog  figure   For this example  we  will click on the 50uS thread     fast     which gives us a sample rate of about 20KHz  Now instead  of displaying about 4 seconds worth of data  one record is 4000 samples at 20KHz  or about 0 20  seconds        XA Select Sample Rate  x     Select a thread name and multiplier then click    OK     or  Click  Quit  to exit HALSCOPE       Thread  stepgen thread  Sample Period  50 3 uSec  Sample Rate  19 9 KHz  Thread Period    siggenthread 1 01 mSec    stepgenthread 50 3 uSec  Multiplier  1  Record Length    C 16191 samples  1 channel     C 8095 samples  2 channels     4047 samples  4 channels   C 2023 samples  8 channels     C 1011 samples  16 channels     OK   Quit               Figure 7 10  Sample Rate Dialog    CHAPTER 7  HAL TUTORIAL 66    7 6 7 More Channels    Now let s look at the step pulses  Halscope has 16 channels  but for this example we are using only  4 at a time  Before we select any more channels  we need to turn off a couple  Click on the channel 2  button  then click the    Off    button at the bottom of the    Vertical    box  Then click on channel 3  turn  if off  and do the same for channel 4  Even though the channels are turned off  they still remember  what they are connected to  and in fact we will continue to use channel 3 as the tr
276. ue from bit to u32  conv_float_s32 9   Convert a value from float to s32  conv_float_u32 9   Convert a value from float to u32  conv_s32_bit 9   Convert a value from s32 to bit  conv_s32_float 9   Convert a value from u32 to bit  conv_s32_u32 9   Convert a value from s32 to u32  conv_u32_bit 9   Convert a value from u32 to bit  conv_u32_float 9   Convert a value from u32 to float  conv_u32_s32 9   Convert a value from u32 to s32   counter 9   counts input pulses  deprecated    ddt 9   Compute the derivative of the input function  deadzone 9   Return the center if within the threshold  debounce 9   filter noisy digital inputs  for more information see 15 6  edge 9   Edge detector    encoder 9   software counting of quadrature encoder signals  for more information see 15 3    CHAPTER 14  HAL COMPONENTS 104    encoder_ratio 9   an electronic gear to synchronize two axes  estop_latch 9   ESTOP latch   flipflop 9  D type flip flop   freqgen 9   software step pulse generation    genhexkins 9   kinematics definitions for emc2    hypot 9   Three input hypotenuse  Euclidean distance  calculator  integ 9   Integrator  kins 9   kinematics definitions for emc2    knob2float 9   Convert counts  probably from an encoder  to a float value    limit 1 9   Limit the output signal to fall between min and max  limit2 9   Limit the output signal to fall between min and max  limit3 9   Limit the output signal to fall between min and max  logic 9      lowpass 9   Low pass filter   lut5 9   Arbitrar
277. ut  If the DAC is linearized  this offset is  normally 0 0    The scale and offset can be used to linearize the DAC as well  resulting in values that reflect  the combined effects of amplifier gain  DAC non linearity  DAC units  etc  To do this  follow  this procedure     1  Build a calibration table for the output  driving the DAC with a desired voltage and mea   suring the result  See table 4 3 9 2 for an example of voltage measurements     2  Do a least squares linear fit to get coefficients a  b such that    meas   ax raw   b    3  Note that we want raw output such that our measured result is identical to the com   manded output  This means     a     cmd   a x raw   b   b   raw    cmd     b   a    4  As a result  the a and b coefficients from the linear fit can be used as the scale and offset  for the controller directly     MAX_OUTPUT   10  HAL  The maximum value for the output of the PID compensation that is  written to the motor amplifier  in volts  The computed output value is clamped to this limit   The limit is applied before scaling to raw output units  The value is applied symmetrically to  both the plus and the minus side     CHAPTER 4  INI CONFIGURATION 30    Output Voltage Measurements                            Raw   Measured   10  9 93   9  8 83  0  0 03  1 0 96  9 9 87  10 10 87                INPUT_SCALE   20000  HAL  Specifies the number of pulses that corresponds to a move of one  machine unit  A second number  if specified  is ignored   For example  on a
278. ut  is also very simple     9 2 1 Pins    e  BIT  out     Value to be written  possibly inverted  to the hardware output        TAs of version 2 0  most of the HAL drivers don   t quite match up to the canonical interfaces defined here  In version 2 1   the drivers will be changed to match these specs     71    CHAPTER 9  CANONICAL DEVICE INTERFACES 72    9 2 2 Parameters    e  BIT  invert   If TRUE  out is inverted before writing to the hardware     9 2 3 Functions    e  FUNCT  write     Read out and invert  and set hardware output accordingly     9 3 Analog Input    The canonical analog input  I O type  adcin   This is expected to be used for analog to digital  converters  which convert e g  voltage to a continuous range of values     9 3 1 Pins    e  FLOAT  value     The hardware reading  scaled according to the scale and offset parameters   Value     input reading  in hardware dependent units    scale    offset    9 3 2 Parameters    e  FLOAT  scale     The input voltage  or current  will be multiplied by scale before being output to  value     e  FLOAT  offset     This will be subtracted from the hardware input voltage  or current  after the  scale multiplier has been applied     e  FLOAT  bit_weight   The value of one least significant bit  LSB   This is effectively the granu   larity of the input reading     e  FLOAT  hw_offset     The value present on the input when 0 volts is applied to the input pin s      9 3 3 Functions    e  FUNCT  read   Read the values of this 
279. ut the sets was the building blocks  metal struts and angles and plates  all with  regularly spaced holes  You could design things and hold them together with the little screws and  nuts        1The Erector Set was an invention of AC Gilbert    CHAPTER 6  INTRODUCTION 45    I got my first erector set for my fourth birthday  I know the box suggested a much older  age than I was  Perhaps my father was really giving himself a present  I had a hard time  with the little screws and nuts  I really needed four arms  one each for the screwdriver   screw  parts to be bolted together  and nut  Perseverence  along with father s eventual  boredom  got me to where I had built every project in the booklet  Soon I was lusting  after the bigger sets that were also printed on that paper  Working with those regular  sized pieces opened up a world of construction for me and soon I moved well beyond the  illustrated projects     Hal components are not all the same size and shape but they allow for grouping into larger units  that will do useful work In this sense they are like the parts of an Erector set  Some components  are long and thin  They essentially connect high level commands to specific physical pins  Other  components are more like the rectangular platforms upon which whole machines could be built  An  integrator will quickly get beyond the brief examples and begin to bolt together components in ways  that are unique to them     6 4 3 Tinkertoys       Wooden Tinker toys had a more hum
280. utputs  More complex boards can have digital inputs and outputs   encoder counters  pwm or step pulse generators  analog to digital converters  digital to analog  converters  or other unique capabilities  The I O type is used to identify the kind of I O that a  pin or parameter is associated with  Ideally  drivers that implement the same I O type  even if  for very different devices  should provide a consistent set of pins and parameters and identical  behavior  For example  all digital inputs should behave the same when seen from inside the  HAL  regardless of the device        lUnderscores have all been removed  but there are still a few instances of mixed case  for example    pid O Pgain    instead  of    pid O p gain       2Most drivers do not follow these conventions as of version 2 0  This chapter is really a guide for future development    3Some devices use jumpers or other hardware to attach a specific ID to each board  Ideally  the driver provides a way for  the user to specifically say    device num O is the board with ID XXX     and the device numbers always start at O  However at  present some drivers use the board ID directly as the device number  That means it is possible to have a device number 2   without a device O  This is a bug and will be fixed in version 2 1     CHAPTER 8  GENERAL REFERENCE INFORMATION 69     lt chan num gt  Virtually every I O device has multiple channels  and the channel number identifies  one of them  Like device numbers  channel numbe
281. ve of the command     The component exports one function for each PID loop  This function performs all the calculations  needed for the loop  Since each loop has its own function  individual loops can be included in  different threads and execute at different rates     e  FUNCT  pid  lt loopnum gt  do_pid_calcs     Performs all calculations for a single PID loop     If you want to understand the exact algorithm used to compute the output of the PID loop  refer to  figure 15 8  the comments at the beginning of emc2 src hal components pid c  and of course to  the code itself  The loop calculations are in the C function calc_pid          IFF2 is not currently implemented  but it will be added  Consider this note a    FIXME    for the code    CHAPTER 15  INTERNAL COMPONENTS 122    15 5 Simulated Encoder    The simulated encoder is exactly that  It produces quadrature pulses with an index pulse  at a  speed controlled by a HAL pin  Mostly useful for testing     15 5 1 Installing    emc2  halemd loadrt sim encoder num_chan  lt number gt      lt number gt  is the number of encoders that you want to simulate  If not specified  one encoder will be  installed  The maximum number is 8  as defined by MAX_CHAN in sim_encoder c      15 5 2 Removing    emc2S halcmd unloadrt sim encoder    15 5 3 Pins    e  FLOAT  sim encoder  lt chan num gt   speed     The speed command for the simulated shaft   e  BIT  sim encoder  lt chan num gt  phase A     Quadrature output   e  BIT  sim encoder  lt cha
282. vertical line in the progress box above the screen  The trigger polarity  can be changed by clicking the button just below the trigger level display  Note that changing the  trigger position stops the scope  once the position is adjusted you restart the scope by clicking the     Normal    button in the    Run Mode    box     Now that we have adjusted the vertical controls and triggering  the scope display looks something  like figure 7 9     CHAPTER 7  HAL TUTORIAL          XA HAL Oscilliscope ETE  Horizontal Run Mode  Trigger    Zoom   500 mSec 4047 samples     Normal    e Normal  Pos   per div at 994 Hz C Single  C Auto      TRIGGERED    Stop ENS       gt  vertical Level Pos  E Gain Pos    NANA y 1                                               Scale Level  Po 500m diw 0 000    alala 5 lef 718 93  10 11 12 13 14 15 16  ofset   Rising  Selected Channel 0 000  2 Y_vel   Chan Off             Source  Chan 3                Figure 7 9  Waveforms with Triggering    CHAPTER 7  HAL TUTORIAL 65    7 6 6 Horizontal Adjustments    To look closely at part of a waveform  you can use the zoom slider at the top of the screen to  expand the waveforms horizontally  and the position slider to determine which part of the zoomed  waveform is visible  However  sometimes simply expanding the waveforms isn   t enough and you  need to increase the sampling rate  For example  we would like to look at the actual step pulses  that are being generated in our example  Since the step pulses may be only 50
283. w ubuntu com    14    CHAPTER 2  INSTALLING THE EMC2 SOFTWARE 15  2 3 Other Methods    You will find information about other install methods on the following web sites  These methods are  only needed if you have special needs or you just have to have the bleeding edge version     http     www linuxenc org  Home of EMC2   http     wiki linuxcnc org cgi bin emcinfo pl  User maintained Wiki EMC2 site     2 4 EMC2 install script    We also provide a simple script to install EMC2 on Ubuntu for users with an existing installation of  Ubuntu  It runs the commands explained in 2 5     To use it you need to      e Download the script from http   linuxenc org dapper emc2 install sh  For Ubuntu 6 06     Save it on your Desktop  Right click the icon  select Properties  Go to the Permissions tab and  check the box for Owner  Execute  Close the Properties window     Now double click the emc2 install sh icon  and select  Run in Terminal   A terminal will appear  and you will be asked for your password     e When the installation asks if you are sure you want to install the EMC2 packages  hit Enter to  accept  Now just allow the install to finish     e When it is done  you must reboot  System  gt  Log Out  gt  Restart the Computer   and when you  log in again you can run EMC2 by selecting it on the Applications  gt  CNC Menu     If you aren t ready to set up a machine configuration  try the sim AXIS configuration  it runs a   simulated machine  that requires no attached hardware     Now that
284. we usually think about machines that are commanded to move  to certain locations and perform various tasks  In order to have an unified view of the machine  space  and to make it fit the human point of view over 3D space  most of the machines  if not all   use a common coordinate system called the Cartesian Coordinate System     The Cartesian Coordinate system is composed of 3 axes  X  Y  Z  each perpendicular to the other 2   1    When we talk about a G code program  RS274NGC  we talk about a number of commands  GO   Gl  etc   which have positions as parameters  X  Y  Z    These positions refer exactly to Cartesian  positions  Part of the EMC2 motion controller is responsible for translating those positions into  positions which correspond to the machine kinematics      20 1 1 Joints vs  Axes    A joint of a CNC machine is a one of the physical degrees of freedom of the machine  This might be  linear  leadscrews  or rotary  rotary tables  robot arm joints   There can be any number of joints on  a certain machine  For example a typical robot has 6 joints  and a typical simple milling machine  has only 3     There are certain machines where the joints are layed out to match kinematics axes  joint O along  axis X  joint 1 along axis Y  joint 2 along axis Z   and these machines are called Cartesian machines   or machines with Trivial Kinematics   These are the most common machines used in milling  but  are not very common in other domains of machine control  e g  welding  puma t
285. wmgen  lt chan gt  dither pwm     If true  enables dithering to achieve average PWM fre   quencies or duty cycles that are unobtainable with pure PWM  If false  both the PWM frequency  and the duty cycle will be rounded to values that can be achieved exactly     e  FLOAT  pwmgen  lt chan gt  min dc     Minimum duty cycle  between 0 0 and 1 0  duty cycle will  go to zero when disabled  regardless of this setting      e  FLOAT  pwmgen  lt chan gt  max dc     Maximum duty cycle  between 0 0 and 1 0     e  FLOAT  pwmgen  lt chan gt  curr dc     Current duty cycle   after all limiting and rounding  read  only      15 2 5 Output Types    The PWM generator supports three different    output types     Type O has a single output pin  Only  positive commands are accepted  negative values are treated as zero  and will be affected by min dc  if it is non zero   Type 1 has two output pins  one for the PWM PDM signal and one to indicate  direction  The duty cycle on the PWM pin is based on the absolute value of the command  so negative  values are acceptable  The direction pin is false for positive commands  and true for negative  commands  Finally  type 2 also has two outputs  called up and down  For positive commands  the  PWM signal appears on the up output  and the down output remains false  For negative commands   the PWM signal appears on the down output  and the up output remains false  Output type 2 is  suitable for driving most H bridges     15 2 6 Functions    The component expor
286. wo produce a ramp of error trip points  You could think of this as a graph where one dimension  is speed and the other is permitted following error  As speed increases the amount of following  error also increases toward the FERROR value        3This assumes there was no movement of the machine while powered off  It helps on smaller machines without home  switches     CHAPTER 4  INI CONFIGURATION 28    FERROR   1 0 FERROR is the maximum allowable following error  in machine units  If the differ   ence between commanded and sensed position exceeds this amount  the controller disables  servo calculations  sets all the outputs to 0 0  and disables the amplifiers  If MIN_FERROR is  present in the  ini file  velocity proportional following errors are used  Here  the maximum al   lowable following error is proportional to the speed  with FERROR applying to the rapid rate set  by  TRAJIMAX_VELOCITY  and proportionally smaller following errors for slower speeds  The  maximum allowable following error will always be greater than MIN_FERROR  This prevents  small following errors for stationary axes from inadvertently aborting motion  Small following  errors will always be present due to vibration  etc  The following polarity values determine how  inputs are interpreted and how outputs are applied  They can usually be set via trial and error  since there are only two possibilities  The EMC2 Servo Axis Calibration utility program  in the  AXIS interface menu Machine Calibration and in Tk
287. y  If the  Document already includes a cover text for the same cover  previously added by you or by arrangement made  by the same entity you are acting on behalf of  you may not add another  but you may replace the old one  on  explicit permission from the previous publisher that added the old one     The author s  and publisher s  of the Document do not by this License give permission to use their names for  publicity for or to assert or imply endorsement of any Modified Version     5  COMBINING DOCUMENTS    You may combine the Document with other documents released under this License  under the terms defined in  section 4 above for modified versions  provided that you include in the combination all of the Invariant Sections  of all of the original documents  unmodified  and list them all as Invariant Sections of your combined work in  its license notice     The combined work need only contain one copy of this License  and multiple identical Invariant Sections may  be replaced with a single copy  If there are multiple Invariant Sections with the same name but different  contents  make the title of each such section unique by adding at the end of it  in parentheses  the name of  the original author or publisher of that section if known  or else a unique number  Make the same adjustment  to the section titles in the list of Invariant Sections in the license notice of the combined work     In the combination  you must combine any sections entitled  History  in the various origi
288. y 5 input logic function based on a look up table   m7i43_hm2 9   RTAI driver for the Mesa 7i43 EPP Anything IO board with HostMot2 firmware  maj3 9   Compute the majority of 3 inputs   match8 9   8 bit binary match detector    minmax 9   Track the minimum and maximum values of the input to the outputs    motion 9   accepts NML motion commands  interacts with HAL in realtime   mult2 9   Product of two inputs   mux2 9   Select from one of two input values   mux4 9   Select from one of four input values   not 9   Inverter   offset 9   Adds an offset to an input  and subtracts it from the feedback value  oneshot 9   one shot pulse generator   or2 9   Two input OR gate   pid 9   proportional integral derivative controller  for more information see 15 4    pluto_servo 9   Hardware driver and firmware for the Pluto P parallel port FPGA  for use with ser   vos    pluto_step 9   Hardware driver and firmware for the Pluto P parallel port FPGA  for use with step   pers    pwmgen 9   software PWM PDM generation  for more information see 15 2  rotatekins 9   kinematics definitions for emc2    sample_hold 9   Sample and Hold    CHAPTER 14  HAL COMPONENTS 105    sampler 9   sample data from HAL in real time  scale 9    select8 9   8 bit binary match detector    serport 9   Hardware driver for the digital I O bits of the 8250 and 16550 serial port  siggen 9   signal generator  for more information see 15 7   sim_encoder 9   simulated quadrature encoder  for more information see 15 5  stepge
289. y children and grandchildren build with legos     the same legos  There are a  few thousand of them in an old ratty but heavy duty cardboard box that sits in a corner  of the recreation room  It stays there in the open because it was too much trouble to put  the box away and then get it back out for every visit and it is always used during a visit   There must be Lego parts in there from a couple dozen different sets  The little booklets  that came with them are long gone but the magic of building with interlocking pieces all  the same size is something to watch     6 5 Timing Issues In HAL    Unlike the physical wiring models between black boxes that we have said that HAL is based upon   simply connecting two pins with a hal signal falls far short of the action of the physical case     True relay logic consists of relays connected together  and when a contact opens or closes  current  flows  or stops  immediately  Other coils may change state  etc  and it all just  happens   But in  PLC style ladder logic  it doesn t work that way  Usually in a single pass through the ladder  each  rung is evaluated in the order in which it appears  and only once per pass  A perfect example is a  single rung ladder  with a NC contact in series with a coil  The contact and coil belong to the same  relay     If this were a conventional relay  as soon as the coil is energized  the contacts begin to open and  de energize it  That means the contacts close again  etc  etc  The relay becomes a buzz
290. y while the CNC is running     Configuration files include  INI The ini file overrides defaults that are compiled into the EMC code  It also provides sections  that are read directly by the Hardware Abstraction Layer     HAL The hal files start up process modules and provide linkages between EMC signals and specific  hardware pins     VAR The var file provide a set of numbered variables     parameters     for use by the interpreter  These  values are saved from one run to another  See the Parameters section of the G Code Manual     TBL The tbl file saves tool information  See Tool File section of the G Code Manual     NML The nml file configures the communication channels used by the EMC  It is normally setup  to run all of the communication within a single computer but can be modified to communicate  between several computers      emerc This file saves user specific information and is created to save the name of the directory  when the user first selects an EMC configuration      Items marked  HAL  are used only by the sample HAL files and are suggested as a good convention   Other items are used by EMC directly  and must always have the section and item names given     4 2 The INI File Layout    A typical INI file follows a rather simple layout that includes     e comments        Don t confuse a text editor with a word processor  A text editor like gedit or kwrite produce files that are plain text   They also produce lines of text that are separated from each other  A word 
291. you might see with  some file browsers  At the right is a tabbed notebook with tabs for show and watch     Figure 10 1  Halshow Layout  HAC Configuration       Components SHOW   WATCH    Pins  Parameters Loaded HAL Components   te a hele d23376  i ser halem  cias User halend23370  hal m5i20  pid  motmod  iocontrol          m  Test HAL command   Execute    Commands may be tested here but they will NOT be saved                              CHAPTER 10  TOOLS AND UTILITIES 78    Figure 10 2  Show Menu       Components SHOW   WATCH    Pins  Parameters Realtime Threads  Signals Period FP Name  Time  Max Time   cias 10006914 YES traj thread  0  0    ras 1005720 YES servo thread  43164  81162    A 1 n5i20 0  digital in read  j   traj thread 2 m5i20 0 misc update  HL  servo thread 3 n5120  0  encoder read       base thread 4 motion command handler       5 motion controller   6 pid  0  do pid calcs   7 pid  1 do pid calcs     C     n5i20  0  dac write  10 nm5i20  0  digital out write  50286 NO base thread 0 0        Test HAL command     Execute            Commands may be tested here but they will NOT be saved                            The tree shows all of the major parts of a HAL  In front of each is a small plus     or minus     sign  in a box  Clicking the plus will expand that tree node to display what is under it  If that box shows  a minus sign clicking it will close that section of the tree     You can also expand or collapse the tree display using the Tree View menu at the upp
292. yped robots      20 2 Trivial Kinematics    As we said there is a group of machines in which each joint is placed along one of the Cartesian  axes  On these machines the mapping from Cartesian space  the G code program  to the joint space   the actual actuators of the machine  is trivial  It is a simple 1 1 mapping     pos  gt tran x   joints 0    pos  gt tran y   joints 1         The word    axes    is also commonly  and wrongly  used when talking about CNC machines  and referring to the moving  directions of the machine   2Kinematics  a two way function to transform from Cartesian space to joint space    166    CHAPTER 20  KINEMATICS IN EMC2 167    pos  gt tran z   joints 2    pos  gt a   joints 3    pos  gt b   joints 4    pos  gt c   joints 5      In the above code snippet one can see how the mapping is done  the X position is identical with  the joint 0  Y with joint 1 etc  The above refers to the direct kinematics  one way of the trans   formation  whereas the next code part refers to the inverse kinematics  or the inverse way of the  transformation      joints 0    pos  gt tran x   joints 1    pos  gt tran y   joints 2    pos  gt tran z   joints 3    pos  gt a   joints 4    pos  gt b   joints 5    pos  gt c     As one can see  it   s pretty straightforward to do the transformation for a trivial kins  or Cartesian   machine  It gets a bit more complicated if the machine is missing one of the axes       20 3 Non trivial kinematics    There can be quite a few types of mac
    
Download Pdf Manuals
 
 
    
Related Search
    
Related Contents
「施工説明書」にしたがって正しく施工してください。  IH-101 iHeater Owner`s Manual  Relatório de Atividades do LNEG    EXPR/S    Dale Tiffany GT10231 Instructions / Assembly    dossier complet 2006-2007 - No  *2065552* 2065552    Copyright © All rights reserved. 
   Failed to retrieve file