Home
EMC2 Integrator Manual - link here to our old website
Contents
1. H capture_position i rawcounts i i i counts dir f latch 1 i position b G gt step 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 dihod 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 l 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
2. 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 position 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 l Aa maxiteg l maxaccel v
3. 0 0 00 eee eee 33 33 33 33 35 35 35 36 36 36 36 37 38 38 39 CONTENTS 7 HAL Tutorial AL Bele we sail iia a a AA A AA a l l NOTRO AAA AR 7 1 2 The RTAPI Omir OnmiE osado a ss dd bee i Ta LAD COMPIEOE ais a a a ee a e Ta ASimple Example 2 sera EE kaninina eed eask we wo 7 3 1 Loading a realtime component o oo mes 7 3 2 Examining the HAL 65 405854 be ESSERE SH e ds e ee es 7 3 3 Making reslliime COME OUT gt so so sra aae oe e Gok We a De a i 7 3 4 Changing patamettis urraca a A e a a ee 7 3 5 Saving the HAL configuration sooo sola e na e onu eee ee ee eee 7 3 6 Restoring the HAL configuration gt lt s ss sser ersan st endemas 7 4 Looking at the HAL with halmeter aoaaa e 7 4 1 Starine halmeter o g aour a asa A A AR a r RL RS S Sw 7 4 2 Voimme HAMETE coo ua a a a O Gwe d ee ae Set Siew A ee et TO Aslishtiy merecomplex example eo arora ma a ew ee a a 2131 Installing The COmponents s re c 55 eb e e ed es Ta Connecting pins with signals ke ke ee ee i 7 5 3 Setting up realtime execution threads and functions sssaaa eea 7 5 4 SeS PARAMS se a EEEE E O O A wwe oe we 7 6 5 DUI eo a US ee A AE A GO a ed A Sw 7 6 Taking a closer look with halscope eee eee 7 6 1 Staring THalscope roco ir A E e a A A 7 6 2 Hooking up the scope probes lt 0 e sae da a aa 7 6 3 Capturing our first waveforms cocos e ee 7 6 4 Vertic
4. 8 2 NEN ESA SEMEL NOU OS NSS e ll DAOHOQHQQOOQOPOOCL OEO O 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 15 1 Parport Block Diagram CHAPTER 15 HARDWARE DRIVERS 131 The individual functions
5. 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 17 VIRTUAL CONTROL PANELS 161 lt tablespan columns 2 gt lt label text C D cells 1 3 and 1 4 gt lt tablerow gt lt label text E cell 2 1 gt lt tablesticky sticky nsew gt lt tablespan rows 2 gt lt label text spans n2 rows gt lt tablesticky sticky new gt lt label text G cell 2 3 gt lt label text H cell 2 4 gt 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 17 7 VCP A small example NOTE VCP is deprecated and 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 wa LED halpin vcp light 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
6. 02 eee eee ee ee 166 16 3 2 Inverse transformation cocos Ok Ew ek ee ee Ee a s 168 184 Implementation details s se a ra re mara tanid a a ede a ee 168 VII Tuning 169 185 Tanig Servo SYSTEM oc oos ca aa abas EEIE a a a ae as 170 Mal AURA o r pnk eoa a a ON ewe ae a A A 171 13 5 1 Control loop Pasis e ek a ch AR SO we Ay a ee 171 18 51 2T hey ostra a a de a eee 171 18 5 1 3Loop Tuning ocio A OR A de 172 18 6 Tuning stepper Systems oc A A ee a e e 174 A Glossary of Common Terms Used in the EMC Documents 175 B Legal Section 178 B 1 GNU Free Documentation License Version 1 1 March 2000 178 B 1 1 GNU Free Documentation License Version 1 1 March 2000 178 Part 1 Introduction Chapter 1 The Enhanced Machine Control 1 1 Introduction This book is intended for people who want to use the Enhanced Machine Controller to run a mill lathe router or to control some other rather standard kind of machine Computer Numerical Control or CNC is the general term used to name this kind of computer application In order to get right into the essential task of operating it we have limited the amount of information about installation and setup We assume that the user will install one of the standard ways covered in Chapter 2 Machine wiring and setup is limited to what we refer to as a mini or benchtop mill that is powered by stepper motors and amps that use a single parallel port If the user is interested
7. 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 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 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 res
8. 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 7 12 22 176 INPUT SCALE 27 Installing LiveCD 16 Installing manual 16 Installing script 16 iocontrol 43 Java 5 keystick 5 23 kinematics 165 LeadScrew 177 LINEAR UNITS 26 Linux 4 183 INDEX MachineOn 103 units 7 Manual 9 MAX ACCELERATION 27 VAR 12 22 MAX LIMIT 28 MAX VELOCITY 27 xemc 5 MDI 8 9 177 MIN FERROR 28 MIN LIMIT 28 mini 5 23 motion 43 yemc 5 NIST 3 177 NML 12 22 OMAC 3 Open Source 15 Parport 128 pid 43 Pinout 99 PLC 7 Pluto 143 Pluto servo 143 Position Actual 11 Position Commanded 11 Position Machine 11 Position Relative 11 RCS 3 RS274NGC 23 177 RS274NGC STARTUP CODE 24 RTAI 177 RTLINUX 177 Servo Motor 177 SERVO PERIOD 25 Sherline 4 siggen 43 Signal Polarity 102 Spindle 177 Spindle Speed Control 103 standard pinout 100 Step Rate 99 stepgen 43 stepper 99 Stepper Motor 177 supply 43 TASK 23 TBL 12 22 tkemc 5 23 TRAJ 23 TRAJ PERIOD 25 Trivial Kinematics 165 Ubuntu 3 15 UNITS 28 Units 12 184
9. 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 the 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
10. So you say the EMC2 uses millimeters internally If we use UNITS 1 then we have defined our user units as millimeters If we use UNITS 0 03937007874016 then we have defined our user units as inches Using similar arithmetic we could set our units to most any value we wanted You will want to use inches or millimeters for your minimill but some who run vehicles with the EMC2 have been known to set units to kilometers or miles 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 each 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 1 7 2 Some things we may not want to change Within the EMC2 code are a few things that are not easily changed We call these defaults There are connections that have been made between the running components of the EMC2 that we can not easily change We ll see that there are displays and buttons and keyboard keys that are not easily shifted about We ll learn about and get used to these in the chapters ahead 1 7 3 Some things we will need to change The EM
11. V2 0 Integrators Handbook April 25 2007 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 6 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 Contents I Introduction 1 1 The Enhanced Machine Control 2 LI a AI A 2 i The Big UNC POUR 0000 esa as we eR a a a e See we de 2 1 3 Computer Operating Systems 2 0 66 6 6 be e iee trensi 3 14 History ef the Software ccoo escala o a i a a he a a 3 1 5 Blow the BMC Works 6 4 40 e 43 Geka A ow SS Ae eo 4 al Graphical User TnteriBtes co a a ee a a 5 1 52 Motion Controller EMCMOT emoce ee doae ara a a 6 1 53 Discrete I O Controller
12. 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 Kc and the oscillation period of the output Pc Then adjust the P I and D controls as the table shows Control type P I D P 0 5 Kc PI 0 45 Ke Pc 1 2 PID 0 6 Ke Pc 2 Pc 8 18 6 Tuning stepper systems 174 Appendix A Glossary of Common Terms Used in the EMC Documents 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 A that uses an acme thread form Acme threads have somewhat lower friction and wear than simple triangular threads but ball screws A 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 A or other mechanical motion driving system It can result from nuts that are loose on lead
13. 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 operator CHAPTER 1 THE ENHANCED MACHINE CONTROL 11 Figure 1 7 EMC2 Process Diagram PC EMC Process overly Simplified G CO DE iia ACH TkEric Servo to Go Card or a Printer Port Motion Control Routines Drivers for Axis Motors Motors m Servo or stepper Machine Leadscrews Axis le Actuators 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 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
14. Acknowledgements and any sections entitled Dedications You must delete all sections entitled Endorsements 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 requirement of section 3 is applicable to these copies of the Document then if the Document is less than one
15. CNC uses a computer and motors to move the tool based on a part program A 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 175 APPENDIX A GLOSSARY OF COMMON TERMS USED IN THE EMC DOCUMENTS 176 drawings can be found when a hand made prototype needs to be digitized for moldmaking or to check the accuracy of machined or molded parts 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 NIST A project EMC is able to run
16. F3 MDI F5 History m3s3250 MDI Command Active G Codes G1 617 G40 G21 G90 694 G54 49 699 G64 GO M2 MS M9 M48 M53 F75 51000 Feed Override 100 Him Spindle Override 100 mE Jog Speed 12 in min pa 621 G64 618 GOO X13 5 21 0 1000 M3 0 488 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 17 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 signals LED de 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 CHAPTER 17 VIRTUAL CONTROL PANELS 155 17 5 0 1 Syntax Each widget is described briefly followed by the markup used and a screenshot All tags inside the main widget tag are optional 17 5 0 2 General Notes At the present time both a tag based and an attribute based syntax are su
17. HARDWARE DRIVERS 142 s32 ppmc lt port gt 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 3 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
18. MA 02111 1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document but changing it is not allowed B 1 1 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 O 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 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
19. PWM frequency is it should be documented here Also this is the kind of thing that ideally is controlled by a HAL parameter rather than being set when the driver is initially loaded I don t know if that is possible it depends on the hardware and I don t have the neccessary information CHAPTER 15 HARDWARE DRIVERS 135 15 5 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 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 e FLOAT m5i20 lt board gt enc lt channel gt position Encoder position in user units e BIT m5i20 lt board gt enc lt channel gt index Current status of index pulse input e BIT m5i20 lt board gt enc lt channel gt index enabl when TRUE and an index pulse ap pears on the encoder input reset count to zero and clear index enable e BIT m5i20 lt board gt enc lt channel gt reset count Bidirectional why used to reset counter e BIT m5i20 lt board gt dac lt channel gt enable Enables DAC if true DAC outputs zero volts if false e FLOAT m5i20 lt board gt dac lt channel gt value Analog output value for PWM DAC in user units see scale and offset e BIT m5i20 lt board gt in lt c
20. 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 halcmd show thread Realtime Threads Period FP Name 1005720 YES slow 007 005 50286 NO fast 0 0 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 freqgen update_freq slow halcmd addf freqgen make_pulses fast After we give these commands we
21. 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 ca OR a o tun a Scale Level 1 div Te shonldrrrle ore _ en 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 65 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 of 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
22. 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 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 t
23. and the status group consists of 5 input pins In the early 1990 s 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 15 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 15 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 physi
24. indicates E stop reset 16 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 16 HALUI 149 16 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 16 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 16 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 lt channel gt on max lim
25. 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 94 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 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 c
26. step type 1 only e BIT stepgen lt chan gt down DOWN pseudo PWM output step type 1 only e BIT stepgen lt chan gt phase A Phase A output step types 2 14 only e w H stepgen lt chan gt phase B Phase B output step types 2 14 only e w H e BIT stepgen lt chan gt phase D Phase D output step types 5 14 only P P stepgen lt chan gt phase C Phase C output step types 3 14 only P P e BIT stepgen lt chan gt phase E Phase E output step types 11 14 only 14 1 4 Parameters e FLOAT stepgen lt chan gt position scale Steps per position unit This parameter is used for both output and feedback e FLOAT stepgen lt chan gt maxvel Maximum velocity in position units per second If 0 0 has no effect e FLOAT stepgen lt chan gt maxaccel Maximum accel decel rate in positions units per sec ond squared If 0 0 has no effect e FLOAT stepgen lt chan gt frequency The current step rate in steps per second e FLOAT stepgen lt chan 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 O and 1 only in nano seconds 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 nanoseco
27. 150ns six polling times Additional external filtering 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 15 8 5 LED 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 15 8 6 Power 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 through these VCC pins The required current is not yet known but is probably around 50mA plus I O current 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 15 8 7 PC interface At present only a single pluto_servo 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 15 8 8 Input latching and output updating PWM duty cycles for e
28. 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 INCREMENTS 1 mm 5 mm Defines the increments available for incremental jogs See sec tion for more information Only in the AXIS user interface INTRO_GRAPHIC emc2 gif The image shown on the splash screen INTRO_TIME 5 The maximum time to show the splash screen 4 3 3 EMCMOT Section BASE_PERIOD 50000 HaL Base task period in nanoseconds this is the fastest thread in the machine It s units are nanoseconds This is a fairly conservative value but if you are installing on a very old slow processor you may have to make this a larger number or the machine may lock up or reboot 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 setup or hold times the absolute maximum step rate is one step per two BASE_PERIODs Thus the BASE_PERIOD shown above gives an absolute maximum step rate of 10000 steps per second SERVO_PERIOD 1000000 HAL Servo task period is also in nanoseconds This value w
29. Abstraction Layer which allows simple reconfiguration of EMC2 without the need of recompiling 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 an interactive command line program named emcpanel e a character based screen graphics program named keystick 1 3 e X Windows programs named xemc 1 6 and yeme e a Java based GUI emcgui 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 CHAPTER 1 THE ENHANCED MACHINE CONTROL 6 axis ngc AXIS fol File Machine View Help OGIE g d oz NIX IY POS Manual Control F3 MDI F5 Xx 7 Axis fx OY C2 Continuous x _ Home All Touch Off Override Limits Spindle Stop Y Coolant Mist FT 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 E GOO Z 1 No tool Position Relative Actual Figure 1 2 The AXIS Graphical Interface 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 m
30. 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_vel 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
31. BS o orenera a OR a e BS Ge dw dada E a S 104 14 0 2 KOMOVING 6c 24 ke rka damak AA A A ek Se a 104 Wl TGS 6 oo CALS EERE EGEEEOEERSADREREE EASES EERE EHE OER 106 ELA Parmel cuac a aaa RE we a EO a ee 106 LLS CEP Types or A A AAA A AR AR A ech amp 107 IlG PURCUOAS aora A HES ES 110 14 2 Fregen co ee a PE we we we a Oe ee ee 111 E AA 1 AA IEA 111 Ia 2 REMOVIDOS o aida a de ds CAO ORE ES 111 14 2 3 PRS A a wee a Sel Pa a 111 Peo A IIA we EO Ee oe ie we 113 12 5 Otep Types 2 bc ck eke RE RE RGR ERR ERR hae ew ae oboe ee as 113 142 6 II A 114 PS PARN E aa a IA O a TA o ey a V ari 114 aoe Jastalips ok oe A AR e A a A a e OS 114 14 3 2 REMOVIDOS so so a a a e e de 114 e PS eane aruia a aa a a KA eS we GOR E I a V ae ee aa 114 1434 Parame AAN 115 1435 up Types gt es e sa roe saoe aa Ewe a a a a A ee 115 DERO PIOUS gine ces en e A A a e VA ae Be a 115 E TON os A NA AA a OP KES a Gas aA 117 14 4 1 Installing E 117 laaa REMOVE ss a e AA ARA E A AA tee A ic 117 laS A AER De a a g 118 A TARA D SICES oia ida a Se ass a la e 118 LAS BUON 2 ck cee we Sek a a cd dae ee ed 118 POS ee eS A NA Gk He Ae A Oe Ba Gas SESS 119 451 AR 119 DZ Removes a oraraa a a we a Ve a 119 E JTI a a ACR A REE ERS EPA Ee Rw eee OEE be a Seah SS 119 14 548 Parameters ocaso a SN a a a we ed BADE we 121 12 55 o PENA 121 14 6 Simulated Encoder 3 sa RAR A REPRE A ee hi hsb 122 161 Ineralling wk aa he aR a a a we 122 14 6 2 TKeMOVING oasi ke eee Re e ee a e
32. EMGIO o ssa 6s cuca ee we a 7 1 5 4 Task Executor EMCTASK gt c coco tora Pa aace doei Boae e ee T 1 6 Thinking Like a Machine Operator aoao a aee 9 1 6 1 Modes oF Operation ea ad a A ROW e e A ee a 9 1 6 2 Information Display ccoo tie sese tebes es 10 L7 This Like An Integrator osos eee a a e a G A a a as Fc we hS 12 1 7 1 TIMES lt a RA A Se LS a Ge ce Sie we S 12 1 7 2 Some things we may not want to change osaa a 12 1 7 3 Some things we will need to change 12 II Installing 14 2 Installing the EMC2 software 15 a OOO o i ipo ie wan a e e aa a Moe DA A at Pe ae 15 ae EMG Download Page o oops sisas ea o a e 15 20 EMC2 TVECD o o se oe sma dadi a a a le a a 16 2A BMS tet Sorp cc ocio A ele ae a 16 2 5 Manual installing using apt commands 0 0 00 00 00008 16 ii CONTENTS 3 Compiling EMC2 from source 3 1 3 2 3 3 3 4 3 5 3 6 3 7 3 8 bcn AAA EMC Download Pag 2 4545 08040804 Ce eee Eee eee ewe eee ES ENICZ Release Description saca a Rw AL EW Se ee ee ad ae g Download and source preparation sooo e ee ee ee 3 4 1 Downloading The CVS Version o es coso ess we ee ee we e Mies sana ia ee a a eee a da BUTSITIEP ALE lor a A de a Ne ee a SUD Soo bo als Se A A ad de ao a e dd de Editing and Recompiling s o s cossi o ers aa we II EMC Configuration 4 INI Configuration 4 1 4 2 4 3 4 4 Files Used Tor Config ra
33. QAO VCC GND QA1 QZ1 GND QZ2 WAS UZ3 15 8 3 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 CHAPTER 15 HARDWARE DRIVERS 145 Table 15 1 Pluto P Pin Alternate 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 1 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 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
34. 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 counts t phase B i latch i lookup hase position fb table pu i phase D i L phase E l state A E E EEO E E EES A AA 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 AA i STEP TYPE 2 14 maxireg i i 7 i update_freq maar 1 i stepgen 0 cra rye vetocity i make_pulses Figure 14 1 Step Pulse Generator Block Diagram 105 CHAPTER 14 INTERNAL COMPONENTS 106 14 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 e FLOAT stepgen lt chan gt velocity cmd Desired motor velocity in position units per sec ond velocity mode only e s532 stepgen lt chan gt counts Feedback position in counts updated by capture_position e FLOAT stepgen lt chan gt position fb Feedback position in position units updated by capture_position e BIT stepgen lt chan gt step Step pulse output step type O only e BIT stepgen lt chan gt dir Direction output step type O only e BIT stepgen lt chan gt up UP pseudo PWM output
35. Shalrun halcmd 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 17 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 CHAPTER 17 VIRTUAL CONTROL PANELS 162 Figure 17 1 tiny vcp on the screen halcmd show pin Component Pins 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 17 8 VCP Another small example with EMC Place the following in the file estop vcp vep main
36. 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 18 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 typed robots 18 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
37. 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 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
38. 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 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 the 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
39. 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 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 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 MDI 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 Optional 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 1 6 Thinking Like a Machine Operator This book will not even pretend that it can teach you to run a mill or a lathe Becoming a machinist takes time and hard
40. a wide range of motion devices EMCIO The module within EMCA that handles general purpose I O unrelated to the actual motion of the axes EMCMOT The module within EMC A 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 machanical 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 Feedrate The speed at which a motion occurs In manual mode jog speed can be set from the graphical interface In auto or mdi mode feedrate is commanded using a f word F10 would mean ten units per minute Feedback Feedrate 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 A GUI Graphical User Interface General A type of interface that allows communications between a computer and human in most cases via the manipulation of icons and other elements widgets on a computer screen EMC An application that presents a graphical screen to the machine opera
41. 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 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 wi
42. 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 0 0 1 siggen 0 update 2 freqgen update freq 50286 NO fast 0 O 1 freqgen make pulses Now each thread is followed by the names of the functions in the order in which the functions will run CHAPTER 7 HAL TUTORIAL 60 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 axis have the same scaling so we set the scaling parameters for both
43. 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 91 11 12 Compiling userspace components outside the source tree comp can process 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 function
44. 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 syntax 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 97 12 4
45. controlled quantity These additions are actually subtractions of error because the proportions are usually negative 5This Subsection is taken from an much more extensive article found at http en wikipedia org wiki PID_controller 172 18 5 1 2 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 18 5 1 2 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 around 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 18 5 1 2 0 3 Deriva
46. dac lt channel gt gain Sets the DAC gain scaling LOAT motenc lt board gt adc lt channel gt offset Sets the ADC offset LOAT motenc lt board gt adc lt channel gt gain Sets the ADC gain scaling CHAPTER 15 HARDWARE DRIVERS 141 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 15 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 15 7 Pico Systems PPMC Parallel Port Motion Control Pico Systems
47. dated 2005 06 07 Memc2 src hal drivers m5i20 REGMAP4E CHAPTER 15 HARDWARE DRIVERS 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 15 5 4 4 LEDs 139 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 LEDs 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 15 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 o
48. 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 18 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 18 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 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 18 KINEMATICS IN
49. emc2 gt gt etc apt sources list sudo sh c echo deb src http www linuxcnc org emc2 dapper emc2 gt gt etc apt sources list CHAPTER 2 INSTALLING THE EMC2 SOFTWARE 17 Or replace dapper above with breezy if you still use Ubuntu 5 10 Breezy Badger Then update amp get emc2 axis sudo apt get update sudo apt get install emc2 axis This command will install the emc2 axis 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 gpg keyserver pgpkeys mit edu recv key BC92B87F gpg a export BC92B87F sudo apt key add 3The emc2 axis package is the AXIS gui packaged for emc2 4The 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 3 Compiling EMC2 from source 3 1 Introduction The third hurdle that you face when you begin to set up the EMC2 is getting and installing the EMC2 software itself All of EMC2 has been placed on cvs linuxenc org in a concurrent versioning CVS repository EMC2 is also available as a precompiled package for various platforms for download from that site Installation can be a daunting task to people new to Linux The hardest
50. has a family of boards for doing servo stepper and pwm control The boards connect to the PC through a parallel port working in 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 15 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 15
51. home sequence 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 7 2 Servo related items The following items are for servo based systems and servo like systems including the univstep board from Pico Systems P 50 HAL The proportional gain for the axis servo This value multiplies the error between commanded and actual position in user units resulting in a contribution to the computed voltage for the motor amplifier The units on the P gain are volts per user unit 5Refer to the the EMC2_Integrator_Manual for further information about servo systems and PID control CHAPTER 4 INI CONFIGURATION 29 I O HAL The integral gain for the axis servo The value multiplies the cumulative error between commanded and actual position in user units resulting in a contribution to the computed voltage for the motor amplifier The units on the I gain are volts per user unit seconds 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 user unit per second F
52. i a 152 17 3 Security Cf pyVCP sraa noaa Ree EEE ER ER a eee ad 153 174 Using pyVCP CM AMIS ci a ER KEM ERAGE EA ERAS 153 17 0 VRP ASCO oo va a ee AR a Swe Ne a e A S 154 estime IEEE 155 EE o NOES IES 155 a O e ANN AN 155 a BUN A eet ae Bee gp Sig as dh we gale Tae we es Wi del we celal ee woe 156 ii SPCR 11 o ea even 4 Aha acca wa Gy ae Bah os HO a 156 7 54 RadiODULOT ocd ds aE PASE ORES HER TE SESS ED eee Eee Ee 156 a A o oh ee hh ee ee a he ee Eres Ge dee Dee 2 156 Uae Bar ioe we PS AE a Re AA ae ie ioe Ge he we a 157 o IC bbe Yee a eae we es eS ee Be ee 157 17 0 ADMI i ck hee RE EERE RRS ERG dee a eww as 158 LS OE oe ha ceo ec Be a OMe eee ae de a ne See we ee ee a 158 179 10 Jogwhtel oc ee ek eh a ea a a a ae al a we 158 17 6 pyyvCcP Container TERTE o as Oe a ON ee OE ee eh es 159 trL BOS 4 i ah bk ae ba ha AE PES LADS TERE Hee ae bee eed 159 Re ower os ia Be NR 159 A MABEL sie se ke E 160 a VARS AIN 160 17659 Table coso noir e 160 E E SS RN 161 17 8 VCP Another small example wthEMC o eee ee ee ee 162 a VOP OAS at ee a Tet Sree e a ree AA TE a ee he ete ee Be a 163 17 9 1 II eR OE eee ee ea wade eee a lt 163 CONTENTS xii VI Advanced topics 164 18 Kinematics in EMC2 165 18 1 TnroducUon 4 6 os sae a a a a ew A a AR 165 E A a AAA 165 19 2 Trivial Kncmatits ak hoa A RA A dd D Pew heed 165 18 3 Non trivial kinematics lt 60 6 6 a we A e AA 166 18 3 1 Forward transformation 0
53. 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 Note This is the intended pinout of P3 Unfortunately in the current FPGA configuration dis tributed with EMC2 the secondary encoders enc 04 enc 05 enc 06 and enc 07 are wrongly configured The input pins for enc 04 and enc 05 partly overlap as do the pins for enc 06 and enc 07 Thus it is possible to use enc 04 and enc 06 simultaneously but using enc 04 and enc 05 is not possible since counts on enc 04 will make the count on enc 05 jump by 1 If you are using pins in 00 to in 11 as general purpose inputs you are not affected by this bug 15 5 4 3 Connector P4 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 l0emc2 src hal drivers m5i20 HM5 4E h
54. include hooking the STG driver s encoder read and DAC write functions to the servo thread or hooking stepgen s function to the fast thread along with the parport function s to write the steps to the port 6 6 Dynamic Linking and Configuration It is indeed possible to configure HAL with a form of dynamic linking But it is different than DLLs as used by Microsoft tm or shared libraries as used in Linux Both DLLs and shared libraries essentially say Here I am I have this code you might want to use where you is other modules Then when those other modules or programs are loaded they say I need a function called X is there one and if the answer is YES they link to it With HAL a component still says Here I am I have this code you might want to use but you is the system integrator The integrator gets to decide what functions are used and doesn t have to worry about another module needing function X and not finding it HAL can follow the normal DLL model as well Although most components will simply export pins functions and parameters and then wait for the integrator or a saved file to interconnect them we can write modules that attempt to make connections when they are installed One specific place where this would work well is kinematics as illustrated in the Lego section 6 4 4 Chapter 7 HAL Tutorial 7 1 Before we start Configuration moves from theory to device HAL device that is For those
55. 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 command 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 14 INTERNAL COMPONENTS ndino jqeu yoeqpaay puewwoo dqpwo xew 0 pid lp p yndjno xew edd EN 1P S p ldd apw9 xew AN ey 044 T seiq q10119 xew pA a ip ae P urebg pueqpeap ON ES NS E i uiebd 10119 XEU 110119 X8 Wu E f NY J ueb 101
56. 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 driven FALSE when an external estop 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 estop condition exists iocontrol 0 user request enable TRUE when the user has requested that estop be cleared Part IV HAL Specifics 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
57. 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 it is Notice that its id is 08 Next we need to find out what functions are available with it so we look at functions Exported Functions Owner CodeAddr Arg FP Users Name 08 E0B97630 EODC7674 YES 0 ddt 0 EODEF83C 00000000 YES 1 motion command handler 3 EODFOBF3 00000000 YES 1 motion controller 6 EOB541FE EODC75B8 NO parport 0 read 6 E0B54270 EODC75B8 N parport 0 write 6 E0B54309 E
58. lt pyvcp gt a mypanel I This is a LED indicator 152 CHAPTER 17 VIRTUAL CONTROL PANELS 153 If you place this text in a file called tiny xml and run 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 form the pyVCP pins is done with halemd linksp as usual If you are new to HAL the HAL Tutorial7 is recommended 17 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 17 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
59. 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 64 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 button 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
60. o AS AS a ree J eee ro ooop Figure 14 4 Five Phase Step Types CHAPTER 14 INTERNAL COMPONENTS 110 14 1 6 Functions The component exports three functions Each function acts on all of the step pulse generators rumning 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 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 CHAPTER 14 INTERNAL COMPONENTS 111 14 2 Freqgen FREQGEN IS DEPRECATED Use stepgen s velocity mode for stepper control and use pwmgen for Pulse Width Modulation Freqgen may be removed in future releases This component provides software based generation of step pulses from a frequency or velocity command EMC normally uses position commands not velocity commands and stepgen described in section 14 1 is more
61. 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 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 copyright notice for your modifications adjacent to the other copyright notices F Include immediately after the copyright no
62. 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 17 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 17 VIRTUAL CONTROL PANELS 159 17 6 pyVCP Container reference Containers are widgets that contain other widgets 17 6 1 Hbox Use a Hbox when you want to stack widgets horizontally next to eachother lt hbox 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 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 resized 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 17 6 2 Vbox Use a Vbox when you want to stack w
63. 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 about 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 Erec
64. on gt spindle on connect it to a physical pin linksp spindle on gt parport 0 pin 09 out INote we are only presenting one axis to keep it short all others are similar 2Refer to section 15 1 for additional information CHAPTER 13 BASIC CONFIGURATIONS FOR A STEPPER BASED SYSTEM 101 i You might use something like this to enable chopper drives when machine ON i the Xen signal is defined in core_stepper hal linksp 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 newsig Xhome bit linkps parport 0 pin 10 in gt Xhome linksp Xhome gt axis 0 home sw in i 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 user manual newsig homeswitches bit linkps parport 0 pin 10 in gt homeswitches linksp homeswitches gt axis 0 home sw in linksp homeswitches gt axis 1 home sw in linksp homeswitches gt axis 2 home sw in Sample separate l
65. 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 Information how to access this can be found on the www linuxcnc org page under Download 3 2 EMC Download Page You will find the most recent releases of EMC2 announced on www linuxcnc org The releases of EMC2 will be done in two ways sources and binary package The sources described furtheron 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 Released 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 sourc
66. pins for example parport 0 pin 12 in and parport 0 pin 12 in not Pins 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 15 1 3 Parameters e BIT parport lt portnum gt pin lt pinnum gt out 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 15 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 in not pins e rj 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 CHAPTER 15 HARDWARE DRIVERS 130 8
67. pluto servo The Pluto P is an inexpensive 60 FPGA board featuring the ACEX1K chip from Altera Pluto_servo is released under the terms of the GNU General Public License version 2 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 The board 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 An axis with index pulse must have fewer than 8192 counts per revolution 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 e EPP communication with the PC The EPP communication typically takes around 100uS on machines tested so far enabling servo rates above 1kHz 15 8 1 Requirements 1 A Pluto P board 2 An EPP compatible parallel port configured for EPP mode in the
68. 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 Foundation may publish new revised versions of the GNU Free Documentation License from time to time Such n
69. 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 55 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 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
70. 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 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 aswell so having only one signal pin is perfectly safe 13 3 7 Adding an external ESTOP button As you can see in 13 3 1 by default the stepper configuration assumes no external ESTOP 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 parp
71. speed Low speed function to read speed do scaling and set up make pulses CHAPTER 14 INTERNAL COMPONENTS 123 14 7 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 14 7 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 determines 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 14 7 2 Removing emc2 halcmd unloadrt debounce 14 7 3 Pins Each individual filter has two pins e BIT debounce lt G gt l
72. system BIOS CHAPTER 15 HARDWARE DRIVERS 144 15 8 2 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 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 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 15 2 Pluto P Pinout mano AS Parallel Port Connector 2 mer 2 VC Jack gt 3 IN4 OUT8 OUTS 5 IN6 ALEA FROGA OUT6 OUT GND OUT4 OUTS LED 0UT2 0UT3 INO UPO UP1 GND DN3 UP3 UBO VCC QZ0 UBT UAZ QB2 OUTO Bs OUTI DNO GND DN1 DN2 UP2 GND
73. we focus on only a small part of that awesome capability the minimill 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 stepper 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 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 Typical EMC2 Controlled Machine Power supply Linux PC emc2 installed Stepper Stepper drives motors 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 minimill 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
74. who have had just a bit of computer programming this section is the Hello World of the HAL As noted above halemd 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 programming 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
75. 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 17 VIRTUAL CONTROL PANELS 163 17 9 VCP Syntax 17 9 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 attribute s format is name value The attribute names that are acceptable for each block depend on the block tag and will be listed later Part VI Advanced topics Chapter 18 Kinematics in EMC2 18 1 Introduction When we talk about CNC machines 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
76. work An author once said We learn from experience if at all Broken tools gouged vices and scars are the evidence of lessons taught Good part finish close tolerances and careful work are the evidence of lessons learned No machine no computer program can take the place of human experience As you begin to work with the EMC2 program you will need to place yourself in the position of operator You need to think of yourself in the role of the one in charge of a machine It is a machine that is either waiting for your command or executing the command that you have just given it Throughout these pages we will give information that will help you become a good operator of the EMC2 mill You will need some information right up front here so that the following pages will make sense to you 1 6 1 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 separate In human terms a manual command might be turn on coolant or jog X at 25 inches per m
77. work coordinate systems We ll get into some of the details of these files as we begin to hook up and operate our little machine In addition to these four files there is a standard startup file Back in the early days of the EMC it was common to have to start up several different tasks in different terminal windows in order to get the EMC to run a machine Each of these tasks had to be supplied a bunch of information in the form of arguments in order to be certain that the task started the way that we expected it to All of this was tedious and has been replaced by one script It is named simply emc This executable script file controls the startup of all of the modules needed to run a standard version of the EMC2 When run it lets the user choose a certain configuration Part II Installing 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 hun
78. 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 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 48 CHAPTER 7 HAL TUTORIAL 49 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 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 ide
79. 0 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 15 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 from 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 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 i
80. 000000 Let s see if that worked halcmd show thread Realtime Threads Period FP Name Time Max Time 999849 YES test thread 00 505 9 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 0 O 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 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 sigge
81. 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 as 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
82. 19 Figure 14 7 PID Loop Block Diagram CHAPTER 14 INTERNAL COMPONENTS 121 14 5 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 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 eo 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 Lim
83. 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 17 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 17 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 one ae Two three Note that the HAL pins in the example above will me named my radio one my radio two and my radio three In the image above three is the selected value 17 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 3f lt format gt lt number gt CHAPTER 17 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 u
84. 32 ee ew ee we ee bo eo Oe eh eS ee AE ee ee 132 UNS Paranierers lt lt 00 rra RE Dea ee we ae 132 I BONA efi ws oe ON ee e BO ee a a A eh le a we ee 132 MOS DENO ToD cara a a A ag Arto Sit aa a gi ei Sol ii e 132 toad Weeping ce eee a Re ae 4 SR ae Se ee i Be ed 133 15 4 2 Piss lt 5 2 ca pa hs dee bcs es ngs Gente thos GE eo Gch a GP te A ge te ad Be a 133 CONTENTS x 1545 A e NAAA 134 A TOn DDS IAN AN 134 15 5 Mesa Electronics m5i20 Anything I O Card 134 EE A APRA AAA 135 Da POO eeraa a AR AA A A RA A A ss Ge 135 looa PUTAS cra a a we Oe 136 15 94 Connector pinout ss pra cg Che eR cda a a be da 136 15 5 4 1Connecor P2 oa Gok eRe ae A a eM ea a 137 els AE 137 A e o o eeraa ee He ee ee a A 138 PALAIS ia BARA EA RRA A A wha ET whew heb od 139 15 6 Vital Systems Motenc 100 and Motenc LITE 0 00 00 000 139 15 6 1 PARE soos SR as Sk BE ah eth a RG SR So EE Se a we a 140 13 0 2 Payers es cs coslada er ee ee ke Ga Ve ke BA 140 ibs FONCIONS A A OE OR Ae RR ae SRE id 141 15 7 Pico Systems PPMC Parallel Port Motion Control 0 5 141 Iod PG aora sa a e BR Be evn AA 141 157 2 PORE E ea ect ee e a e ae a A e ae hk ee a 142 lana Fanes e 1 2 A AR A RA A A EO hE Os a a a 143 loa PIOS O erer cr ew He OR A EE kaaa A A ae OA 143 Ssd REGUM esco a a a E we all e e e e 143 Wee POU e es Sake Ye 4 a Nace ee a ae BO oe Ge eo ai Aa ias 144 So SOMMERIONS nie b
85. 4 3 7 e EMCIO emc s input and output variables 4 3 8 Each of these section names are on a line by themselves so you can quickly scan through the file CHAPTER 4 INI CONFIGURATION 24 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 whitespace 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 These variables and the values they are assigned are the way that the INI affects the operation of the EMC You can edit the values for each keyword in any text editor Changes don t take effect until the next time the controller is run 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 3 INI Variable Definitions 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 l
86. 50kHz Figure 14 6 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 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 14 6 Encoder Counter Block Diagram 14 4 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 14 4 2 Removing emc2 halcmd unloadrt encoder CHAPTER 14 INTERNAL COMPONENTS 118 14 4 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 quadra
87. APTER 11 COMP A TOOL FOR CREATING HAL MODULES 92 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 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
88. C2 is configured with files that are read at startup and used to override the compiled de faults No real controller will likely use the compiled defaults so you will certainly need to edit at least some of these files to reflect the specifics of your machine There are five kinds of configuration files INI NML TBL VAR and HAL files These are reflected in lower case file extensions to a file name They may be named stepper tbl or generic tbl but they do the same thing when they are read by the EMC2 as it starts up Many users copy these and name them for the specific machine A set of these files named Sherlinemill ini Sherlinemill var Sherlinemill tbl and Sherlinemill nml are certainly more descriptive than a bunch of files named generic These files each contain specific information for your CNC CHAPTER 1 THE ENHANCED MACHINE CONTROL 13 e stepper ini contains all the machine parameters such as servo gains scale factors cycle times units etc and will certainly need to be edited e emc nml contains communication settings for shared memory and network ports you may need to override on your system although it is likely that you can leave these settings alone e stepper tbl contains the tool information such as which pocket contains which tool and the length and diameter for each tool e rs274ngc var contains variables specific to the RS 274 NGC dialect of NC code notably for setting the persistent numeric variables for the nine
89. Cartesian space to joint space 165 CHAPTER 18 KINEMATICS IN EMC2 166 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 18 3 Non trivial kinematics There can be quite a few types of machine 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
90. 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 generally available and the machine generated HTML produced by some word processors for output purposes only The Title Page means for a printed
91. D HH ES 93 LLIB Be ie ee a aia aa ae WR a a ee 93 12 Creating Userspace Python Components with the hal module 95 ADD Dast WSN eis ees Se ee we es I a E GE Re we Ge ee we Go 95 12 2 Userspace components and delays lt o ss ssd sea 8482 Eara a a 96 12 3 Create pins and parameters oe cocs coea ava aana ee es 96 123 1 Changing the prefix ce mor anga er t aa ew a ea 96 12 4 Reading and writing pins and parameters 96 12 4 1 Driving output HAL OUT pins 97 12 4 2 Driving bidirectional HAL_IO pins 97 AN In a ica ad RIA a o a G 97 2 Peot ideas lt a ea ds a Aa e e ed de Rd le e oA 97 V EMC related HAL 98 13 Basic configurations for a stepper based system 99 13 1 TOUCH occiso si A a OE a ee pss ia Bs 99 15 2 Maxlimumsteprale lt lt css a RO e a me ae e 99 laa TEMO o a e A ee e eG a a e t 99 13 3 1 standard pinot bal os co ece raad a aa a e a a Ve e a 100 13 3 2 Overview of the standard_pinout hal o o 102 13 3 3 Changing the standard_pinout hal o 102 13 3 4 Changing the polarity of a signal 102 13 3 5 Adding PWM Spindle Speed Control o 103 1306 Adding an enable Signal coo ee we we ee ee ee 103 13 3 7 Adding an external ESTOP button 103 CONTENTS viii 14 Internal Components 104 121 GEP o er A A ad e dr RE eH ES 104 Pe
92. EMC2 Figure 18 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 167 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 18 KINEMATICS IN EMC2 168 18 3 2 Inverse transformation The inverse kinematics is lots easier in our example 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 18 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 _FO
93. FO O HAL The O th order feedforward 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 user unit FF1 O HAL The Ist order feedforward 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 user unit per second FF2 O HAL The 2nd order feedforward gain This number is multiplied by the change in com manded position per second per second resulting in a contribution to the computed voltage for the motor amplifier The units on the FF1 gain are volts per user unit per second per second 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 raw scale The value for scale
94. 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 15 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 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 The driver prints some usefull debugging message to the kernel log which can be viewed with dmesg 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 8 don t know what the maximum and minimum if any
95. H 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 4 4 3 3 HOME_IGNORE_LIMITS HOME_IGNORE_LIMITS is another settable option in the AXIS_ section It s a boolean flag and 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 HOME_USE_INDEX is a single bit settable in the AXIS_ section It 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 search_vel and latch_vel If HOME_SEARCH_VEL is zero the latch phase is skipped and this parameter is ignored The default value is NO 4 4 3 5 HOME_OFFSET HOME_OFFSET is a value setable from the ini in the AXIS _ section It 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
96. 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 15 HARDWARE DRIVERS 15 5 4 1 Connecor 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 15 5 4 2 Connector P3 Encoder counters 4 7 work simultaneously with in 00 to in 11 137 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 15 HARDWARE DRIVERS 138 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
97. 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 cases 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
98. MODULES 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 93 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 xor of up to 16 inputs Determine the proper value for by adding IP bu 4 The number of input pins usually from 2 to 16 IP bu 256 0x100 if the and output is desired IP bu 512 0x200 if the or output is desired vandig Or personality CHAPTER 11 COMP A TOOL FOR CREATING HAL MODULES IP bu 1024 0x400 if the xor exclusive or output is desired
99. OCITY 1 2 Per axis maximum velocity while coordinated motion is in effect MAX ACCELERATION 20 0 Per axis maximum acceleration while coordinated motion is in effect BACKLASH 0 000 Backlash compensation value can be used to make up for small deficiencies in the hardware used to drive an axis Don t expect this to compensate for poor mechanical elements The value set here is in UNITS 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 COMP_FILE_TYPE 1 Specifying a non zero value changes the expected format ofthe COMP_FILE While type 0 the expected values are triplets for nominal forward amp reverse With COMP_FILE_TYPE non zero the expected values in the COMP_FILE are nominal forward_trim and reverse_trim These correspond to the nominal nominal forward and nominal reverse defined above INPUT_SCALE 40000 Specifies the number of pulses that corresponds to a move of one UNIT For stepper systems this is the number of step pulses issued per UNIT For servo systems this is the number of feedback pulses per UNIT A second number if specified is ignored The value f
100. ODC75B8 N parport read all 6 E0B5433A EODC75B8 N parport write all 5 4 4 4 o w OoOOOrR FF O O O E0AD712D 00000000 NO scope sample EOB618C1 EODC7448 YES 1 stepgen capture position Y EOB612F5 EODC7448 NO 1 stepgen make pulses EOB614AD E0DC7448 YES 1 stepgen update freq On OG O 0 0 00 0 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 addf ddt 0 servo thread CHAPTER 10 TOOLS AND UTILITIES 82 Figure 10 3 Addf Command HAC Configuration File View Components Show watch Modify Tune 0 Tune 1 Tune 2 1 parport 0 read 2 stepgen make pulses 3 parport 0 write Enter HAL command addf ddt 0 servo thread JA Pins Parameters Realtime Threads Signals Period FP Name Time Max Time Functions 1005720 YES servo thread 7622 36172 Threads 1 stepgen capture position 2 motion command handler servo thread 3 motion controll
101. RWARD_FL fflags KINEMATICS_INVERSE_ FLAGS x iflags Implements the forward kinematics function as described in section 18 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 18 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 int rtapi_app_main void e void rtapi_app_exit void These are the standard setup and tear down functions of RTAPI modules Part VII Tuning 169 18 5 Tuning servo systems 170 171 18 5 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 manipulatab
102. S 10 Tools and Utilities WO WAGON oe 204 bee CER eR EE THEE TAREE TOES UA PEC y ad Se eR he a a a 19 3 Figiseope susi RA RE A AA 104 Talbot oe eb ae SEER EERE ESHER THERE ESS 10 4 1 Ral Tee AN 10 4 2 Hal Show ATA siii ORES RES 104 5 Hal Watch Area cc e abras 11 comp a tool for creating HAL modules 11 1 Introd cton oe e s sa esa ee ee ea ks ULA DEDOS ois ok dd a a a i a 11 4 Instance Cr ation o s secs e ad a a a AR aa A E e II a a 11 5 Per instance data storage o ossos lt lt 11 6 Other restrictions on comp files 11 7 Convenience Macrie o bee ee ee ee on 11 8 Components with one function vi 73 73 73 73 73 73 73 74 74 74 74 74 74 74 75 75 75 75 76 76 77 77 77 77 79 79 80 83 CONTENTS vii LLO Component Personality s ror eean divaa wki ER wo OO ee Se ee 90 11 10 Compiling comp files in the source tree o eee eee 90 11 11 Compiling realtime components outside the source tree 0 4 90 11 12 Compiling userspace components outside the source tree 91 Li US EXAMpPIES ooo ee ee SHEESH ER ebb he eee be ewes 91 LIA constant oca a a we a a A a ee 91 ILIS SNCS crea A A ce HE cee 91 Vinee Mace oe bk CAGED CREED EES EERE SED A HE SES 91 ILIJA Neldoop ig ik eh boc a EP ok wee ae a Oe ee ee 92 LUE Cav fn ck RA eR EAA RE By bbe ee SO 93 Vie Ga oe oe bk CES EM REHEAT REE ESSE ERE SOS R
103. 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 Index emcre 22 ABORT 10 ACEXIK 143 Acme Screw 175 ANGULAR UNITS 26 Auto 8 9 AXIS 5 23 AXIS 0 1 2 23 Backlash 175 Backlash Compensation 175 Ball Nut 175 Ball Screw 175 BASE PERIOD 25 blocks 43 Bridgeport 4 Carthesian machines 165 classicladder 43 CNC 4 40 175 CNC machines 165 Comments 23 CVS 4 DISPLAY 23 DRO 176 EDM 176 EMC 23 176 emcgui 5 EMCIO 7 23 176 EMCMOT 23 176 emcpanel 5 EMCTASK 7 enable signal 103 Encoder 176 encoder 27 43 ESTOP 10 103 Feed 176 Feed Override 176 Feedrate 176 Feedrate Override 10 FERROR 28 freqgen 43 G Code 176 G code 8 GNU Linux 3 GPL 4 HAL 5 12 22 23 40 100 HAL Component 42 HAL Function 42 HAL Parameter 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 176
104. 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 15 HARDWARE DRIVERS 146 15 8 4 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 However software bugs in the pluto_servo firmware or emc2 or a crash of the computer where emc2 is running 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
105. a printed book We recommend this License principally for works whose purpose is instruction or reference 178 APPENDIX B LEGAL SECTION 179 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 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 Sections whose titles are designated as being those of Invariant Sections in the notice that says that the Document is released under this License The
106. 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 V EMC related HAL Chapter 13 Basic configurations for a stepper based system 13 1 Introduction This chapter describes some of the more common settings that users want to change when setting up EMC2 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 as reported by our users is for stepper based systems These systems are using stepper motors with drives that accept step amp direction signals It is one of the 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 maximu
107. ach channel are updated at different times Digital outputs OUTO through OUT9 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 Digital inputs INO through IN19 are all latched at the same time Quadrature positions for each channel are latched at different times CHAPTER 15 HARDWARE DRIVERS 147 15 8 9 Rebuilding the FPGA firmware The src hal drivers pluto_servo_firmware subdirectory contains the Verilog source code plus ad ditional files used by Quartus for the FPGA firmware Altera s Quartus II software is required to rebuild the FPGA firmware To rebuild the firmware from the hdl and other source files open pluto_servo qpf 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 15 8 10 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 15 8 11 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 fpga4fun com board_pluto P htm1 and from the develop
108. achine 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 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 CHAPTER 1 THE ENHANCED MACHINE CONTROL 7 keystick FL Estop On Off FS HDI Mode PS Spend Fuwd OFF ESC Aborts Actions F2 Machine OnO0ff FA Reset Interp FIO Spndl Rev OFF TR Selects Params F 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
109. al Adjustments o lt lt oso a a a a ee es 7 6 5 THEME cai ae We ES a a e e GE S 7 6 6 Horizontal AdjUStMENTS o co cca eG ee e ee ee a TOT More Channela rop e maor Sag af eM A A A ale ea 7 6 8 Mor samples 1 445236 444 5545 A e e a beet de e be 8 General Reference Information 8 1 MOTO caia aia ha eas as a A a 8 1 1 Typographical Conventions o lt e 8 1 2 INES o a a Gd a Pern ee es ia 8 2 General Naming Conventions c resas es ra a a a 8 3 Hardware Driver Naming Conventions 8 3 1 Pin Parameler names sc a da ee RH ee ae Ee we 8 3 1 1 EXAM ples 0 ck aa a et da 8 3 2 PUMICE AIS aa a a ee a oa a Ye oh ee i 8032 EXamplEs ocio ee a we ee 48 48 48 48 49 49 49 49 51 52 52 53 53 53 55 56 56 57 58 60 60 60 60 63 64 65 65 67 68 68 CONTENTS 9 Canonical Device Interfaces 9 1 1 o AE 9 1 2 Parameters 6464 64 8b KR TR RRR ORS 9 1 3 PURCHONS ais ea A a ES 9 2 1 LIS Loose A a a a a g 9 2 2 Parameter a a a SHES EES SS 9 2 3 PURCUOAS 220 aida a ES PE ww ws sl PMG EE 9 3 2 Parameters E Ge bone we 9 3 3 PACO lt a sis aaa a A IA 9 4 1 Parameters sve a we a ee Ob we Se ne 9 4 2 PUEDAS lt a ee a wa OR ae A Oe we 2 1 Digital e o s hae ORG ew ERE HRE SS a EES O22 Digital ODU siii da Re we es 9 4 Analog pul ss gk A eR RRS at ot AAA 9 5 Heeger AI 9 5 1 A 9 5 2 PAISES aoa a A A SA 9 5 3 Functions o 6 eo ee RR a ROR eR O
110. 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 stopped rumning 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 minimill here you will be thinking of other applications and other capabilities These are the topics of the other linuxcnc org handbooks CHAPTER 1 THE ENHANCED MACHINE CONTROL 12 1 7 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 Most of this is not the topic of this book but there are a few things that you will have to understand in order to make our little minimill work for us like we expect it to work 1 7 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 1 or UNITS 0 03937007874016 The long number above is the distance represented by one millimeter if we convert it into inches
111. alue for lt config array gt is 0 0 0 which will install three type 0 step dir generators The maximum number of frequency generators is 8 as defined by MAX_CHAN in freqgen 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 14 2 2 Removing emc2 halcmd unloadrt freqgen 14 2 3 Pins Each frequency generator will have only some of these pins depending on the step type selected e FLOAT freqgen lt chan gt velocity Desired velocity in arbitrary units e BIT freqgen lt chan gt step Step pulse output step type O only e BIT freqgen lt chan gt dir Direction output step type O only e BIT freqgen lt chan gt up UP pseudo PWM output step type 1 only e BIT freqgen lt chan gt down DOWN pseudo PWM output step type 1 only e BIT freqgen lt chan gt phase A Phase A output step types 2 14 only CHAPTER 14 INTERNAL COMPONENTS capture_position position scale make_pulses
112. antly CHAPTER 14 INTERNAL COMPONENTS 114 14 2 6 Functions The component exports three functions Each function acts on all of the step pulse generators rumning different generators in different threads is not supported e FUNCT freqgen make pulses High speed function to generate and count pulses no float ing point e FUNCT freqgen update freq Low speed function to scale and limit velocity command e FUNCT freggen capture position Low speed function for feedback updates latches and scales position The high speed function freqgen 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 and is also the time unit used by the length space setup and hold parameters step type 0 The other two functions can be called at a much lower rate 14 3 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 14 3 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 de
113. appropriate However there may be applications where velocity based pulses are needed One such application is using step type 1 as a pseudo PWM output Combined with a PID loop the software encoder counter module and a simple H bridge this has been used to run small DC servomotors however now that the pwmgen component has been added it is a better choice for this purpose Another possible use for freqgen is to simply spin a stepper motor at a constant or adjustable rate while ignoring position Freqgen uses the same pulse generator core as stepgen however it has no position loop It is a realtime component only and depending on CPU speed etc is capable of maximum step rates of 10kHz to perhaps 50kHz Figure 14 5 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 1 up down or pseudo PWM and the third is for step types 2 through 14 various stepping patterns 14 2 1 Installing emc2 halcmd loadrt freqgen step type lt config array gt lt config array gt is a series of comma separated decimal integers Each number causes a sin gle frequency generator to be loaded the value of the number determines the stepping type For example emc2 halcmd loadrt freqgen step type 0 0 2 will install three frequency generators two with step type 0 step and direction and one with step type 2 quadrature The default v
114. are 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 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
115. 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 15 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 15 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 performs configuration of any PNP ports present and should be loaded before hal_parport On machines without PNP ports it cannot be loaded 15 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 then use of this module is probably required 15 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 2In the emc packages for Ubuntu the file ete modprobe d emc2 genera
116. aries 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 14 2 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 siggen 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 f
117. as been ported to the PC Linux Windows NT and Sun Solaris operating CHAPTER 1 THE ENHANCED MACHINE CONTROL 4 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 to simulations of the machine motors This enables entire factories of EMC machines to be set up and run in a computer integrated manufacturing environment 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
118. ation core_stepper hal and one which specifies the machine pinout 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 inifile 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 estop 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 for more information 4 3 6 TRAJ Section The TRAJ section contains general parameters for the trajectory planning module in EMCMOT You will not need to change these if you are applying EMC to a common three axis mill in the United States of America If you are in an area using metric hardware components you might be working with the stepper_mm ini where these numbers are already setup for that system of units AXES 3 The number of controlled axes in the system If you have a four axis system put that number here and edit the next two variables as well COORDINATES X Y Z The names of the axes
119. ational 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 collaboration 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 h
120. ator e FLOAT integ lt num gt out Output of integrator e FLOAT ddt lt num gt in Input of differentiator e FLOAT ddt lt num gt out Output of differentiator e and so on too many pins to list them all here but you can easily see them with halemd show pin 14 8 5 Parameters Some of the blocks have parameters that control and adjust the details of their operation Like the pin names they begin with the block name and the block number then the parameter name e FLOAT constant lt num gt value The value to be written to the out pin default value is 1 0 e FLOAT comp lt num gt hyst Hystersis for 2 input comparator default is 0 0 e FLOAT wcomp lt num gt min Minimum threshold for window comparator default is 1 0 e FLOAT wcomp lt num gt max Maximum threshold for window comparator default is 1 0 e FLOAT sum2 lt num gt gain0 Value by which in0 is multiplied default is 1 0 e FLOAT sum2 lt num gt gainl Value by which in1 is multiplied default is 1 0 CHAPTER 14 INTERNAL COMPONENTS 126 14 8 6 Functions Each individual block has its own function This allows complete control over when each block executes In general blocks should execute in the order of signal flow If the outputs of blocks A and B are connected to inputs of block C then the functions for A and B should be executed before the function for C Note that unless these functions are c
121. be written to digital output seen canonical digital output 15 7 2 Parameters FLOAT ppmc 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 chan
122. being controlled X Y Z A B and C are all valid It is also possible to have X Y Y Z and control ganged slides For a fourth axis mounted on X you would use X Y Z A This has no effect on the mapping from G code axis names X Y Z to joint numbers kinematics does this but is largely for documentation 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 The name of units to be used Possible choices are in inch imperial metric mm For systems executing in native English inch units this value shall be any one of in inch or imperial For systems executing in native millimeter units this value shall be mm or metric This does not affect the ability to program in English or metric units in NC code It is used to determine how to interpret the numbers reported in the controller status by external programs ANGULAR_UNITS lt units gt The name of units to be used For systems executing in native degree units this value should be deg or degree For systems executing in radians this value is rad or radian Another possible value is grad or gon for units operating in gradians 400 gradians in a full circle DEFAULT_VELOCITY 0 0167 The initial velocity used for axis or coordina
123. 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 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 thes
124. 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 ta 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 CHAPTER 15 HARDWARE DRIVERS 133 15 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 insmod 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 0x30
125. cal pins 2 through 9 and whether to create input HAL pins for the physical 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 128 CHAPTER 15 HARDWARE DRIVERS 129 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 p
126. 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 n mm ampli fier volts output of fset 250 sec sec volt Note that the units of the offset are in user 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 output If the DAC is linearized this offset is normally 0 0 The scale and offset can be used to linearize the DACs 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 DACs with a desired voltage and measuring the result See table 4 3 7 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 CHAPTER 4 INI CONFIGURATION 30 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
127. chemes 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 geometries and variables associated with each they are available to be interpreted into G Code These interpreters are called CAM Computer Aided Machining programs 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 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 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
128. crease pin for decreasing the FO scale 16 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 16 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 16 HALUI 151 16 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 16 2 13 General e BIT halui abort pin to send an abort message clears out most errors 16 3 Case Studies User descriptions of working halui and hardware EMC control panels here Chapter 17 Virtual Control Panels 17 1 Introduction Traditional machine control panels are large sheets of steel with pushbuttons 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 Howev
129. d iocontrol E Test HAL command Execute Commands may be tested here but they will NOT be saved We 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 upper left edge of the display This menu is shown in figure xx CHAPTER 10 TOOLS AND UTILITIES 80 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 n eas 1005720 YES servo thread 43164 81162 H 1 m5i20 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 nay be tested here but they will NOT be saved 10 4 2 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 wi
130. d 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 x inst 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 90 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 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
131. d 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 my 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 Notice the following description of building a set of motion components in the HAL and how much like a wall of lego blocks it is The motion module exports a pin for each axis in cartesean space and another pin for each axis in joint space When it is loaded it automatically creates a jumper signal for each axis and automatically connects those signals from the joint pin to the cartesean pin So you automatically have trivkins as soon as you load the motion module trivkins trivial kinematics is th
132. does a rapid to HOME if HOME is not equal to HOME_OFFSET 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 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 HOME_LATCH_VEL is also defined in the ini file for each AXIS It specifies the speed and di rection that EMC uses when it makes its final accurate determination of the home switch and index pulse location 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 pha
133. dreds 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 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 EMC Download Page You will find the most recent releases of EMC2 announced on www linuxcnc org The releases of EMC2 will be done in two ways sources and binary package The sources described in the Developers Handbook consist of a tarball emc2 lt version gt tar gz which you should download and unpack into your home directory This document oriented towards the end user will only try to explain how to install the binary package on the Ubuntu distribution 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 www ubun
134. e a EPR DEG REST EERE HOR Eee Es 144 IA Physical PNS e ccs bk ee ke we ee Be Ew ok ee ee Pee ee bo 146 Lia MD ioe eS AE OS ee A ae ws Sw ee GE ee we a 146 Lie POWER oa a AA A SES ee ee 146 Las PLIDISIADE hsm ers a a ea ee ews bw be owe de 146 15 8 8 Input latching and output updating 146 15 8 9 Rebuilding the FPGA firmware 00 00 eee 147 15 8 10 HAL Functions Pins and Parameters gt ss xeres ses eee eee ees 147 15 8 11 Formore inforiiation s o saaa 8c c bee hea eee ee eee ee 147 16 Halui 148 A A o uk we wee ee ee Pe Bae BO oe a ee ee 148 16 2 Halui pinreferenc orar EE ee ee aes 148 RL BOI co ws ie eo es ee a ee Se A ee le aw es E 148 Wee 2 SIP ne Ae a i GE ee a Ge Da Se ah we we a we AP we A 148 Mo MIRE pa anos SO ae DE e ee ee 148 16 2 4 Mist Flood LUb E gt sasacg esrara aiaa daaa a ka aaa naka ee 149 CONTENTS xi 10 2 5 Se o e A A AA A AR AR A a 149 a A JOIS A ee ee a eee oe Gd a tw a als 149 LOLA JURINE ciar a A A eee wad hod OLD Pee whe FS 150 16 28 Selecting aol lt lt ka aa en ac A ae ee AI As 150 16 29 PELOS e oak eR AR A OR RE A Se e OE o 150 16 2 10 Spindle ou ade 4006 2b ee ea ea a ee wes 150 VEZ UL Dl a Bw a AA eS AG BEDS BG EERE 150 IGZ 12 Progra 6 os eee a a ee a A ed ee 151 VENA LA EEES gt eae GAR A A AA NS ee Gk Be AA DAR 4 a A amp 151 103 Case DUES ia eae AAA ee a ee ee ee 151 17 Virtual Control Panels 152 17 1 a A NE 152 A wt a a ey
135. e ae we 122 LES PTE foe oh does sg Seas ee GY ee ae apm GON Be ee Be hl eh Sees aw ee 122 CONTENTS x 1464 Parameters oo oqadi eand mie aui a RR A She a Ge 122 UGS Tunmise erare are ERa oa ea ee ae a AAN 122 IEF DDUM la A RR A RRA dd d 123 E A ew ee Ye a ee 123 W472 JROMOVING cursi A A Be a ae os 123 IATa PRS aaa a a la ew 123 Uae Parameters sce ok a aE UR OR Ra MR aoe we a a 123 a PI ee ie oe we ee RN ee eK BO A 123 A DO eis a a A A RS ok ta ENE AR OS Se A Bae oe 124 14 8 1 Available Blocks s 63006404 bev eee ea ae Ae eee ee eA 124 148 2 Metalina cias A AA EE EASE eo dG oS hw he bes 124 llaa REMOVAL aoe Gade es 125 Wee PB a el A A AAA A hes 125 1285 e AAA 125 EA o A A NN 126 149 SURT coca ao A a ee ea Ge a 127 LERL Wistallvig cc Bik Ra RAP EBA RES ee Ee eh ew 127 1492 KeMOvVING 64664 44 be be be RR RR a ee a a 127 U9 FON ga ee RAR ARR EEE ORE BOR AE OR REE ee oe ae 127 lao AR aa a Ae we ae a 127 14959 PUBCUONE oo eraa cw ye eae Nw a OA wae e ww Vl we a le e 127 15 Hardware Drivers 128 UE Po fh bri eee Sok SE eR BR we Pha SA ee eG cl es de pi E Go a a 128 lahi Deranged Ss ee 128 ie PU a ee ee ae we ee eS ee Be ee 129 US leo A e o IN 129 E P AM AN 129 15 15 Common PPOD EME esca a FA da de al wa ie 131 150 2 Probe POO orere a ae a a e a GO de Re de ee Ho ds 131 15621 Tistallite tn kk Re S ERE ERR ER a e a wee as 131 Va A oi arin he Dhak Seas Ge oR Se Ee A Be ee e See oe de E eA 131 lag A ge ae ek Ge a we Se awe ws ee 1
136. e case where each motor moves a single axis at 90 degrees to the others The motion module is like a pair of legos in a line end to end Trivkins is just like a single block overlapping the two The in and out motion pins are plugged into each other by the block resting above But the parallel goes on If you need some other kinematics you then load a specific kins component This com ponent knows the names of the pins that the motion module uses for each axis both joint and cartesean When the module loads it again automatically creates signals and connects its own pins to the motion module s pins which will disconnect the jumpers It could also know the thread names used by the motion module and could automatically add its own functions to those threads Trivkins is removed so that the motion blocks can be spread apart and by using other blocks a different bridge is built between input and output pins In Lego terms trivkins might be a gray block and xxkins might be a yellow block So the net result is that 24 HAL signals and two HAL functions are configured with no action needed by the integrator other than loading the module 24 signals are from 6 axis 2 because we have joint and cartesean 2 because we have forward and inverse kinematics Two functions because we have forward and inverse Because these HAL signals exist they can be metered or scoped or whatever for testing But because both modules know their names and know
137. e 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 APPENDIX B LEGAL SECTION 180 of added material which the general network using public has access to download anonymously at no charge using public standard network protocols Ifyou 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 agents or retailers of that edition to the public It is requested but not required that you contact the authors
138. e 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 item 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 use
139. e 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 77 CHAPTER 10 TOOLS AND UTILITIES now refer to section 7 6 in the tutorial chapter which explains the basics 78 CHAPTER 10 TOOLS AND UTILITIES 79 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 Hal Tree Area At the left of its display as shown in figure 10 1 is a tree view somewhat like 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 doma a hele d23376 i ser halem cher User halend23370 hal_m5i20 pid motmo
140. e lines of G code A 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 A 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 A or RTLINUX A 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 http www aero polimi it rtai http www aero polimi it rtai one of two real time extensions for Linux that EMC can use to achieve real time A performance RTLINUX See http www rtlinux org http www rtlinux org one of two real time extensions for Linux that EMC can use to achieve real time A performance RS 274 NGC The formal name for the language used by EMC A part programs A 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 mi
141. e setable from the ini in the AXIS section This value is used to perform 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 7The 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 will not be homed by the HOME ALL sequence HOME_SEQUENCE numbers start with O and there may be no unused numbers Chapter 5 EMC2 and HAL 5 1 motion realtime These pins parameters and functions are created by the realtime motmod module 5 1 1 Pins motion adaptive feed IN float When adaptive feed is enabled with M52 P1 See section 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
142. e 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 18 CHAPTER 3 COMPILING EMC2 FROM SOURCE 19 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 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 concensus of lead developers
143. eave 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 RS274NGC_STARTUP_CODE G21 G90 A string 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 beacause the modal codes of machines differ and may be changed by g code interpreted earlier in the session 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 25 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 minimum spindle override the user may select 0 5 means
144. ed 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 88 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 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 component
145. ed 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 a HAL aware realtime version of ClassicLadder would export 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 we might have a 15uS thread a 1mS thread and a 10mS thread These would be created based on Period ServoPeriod and TrajPeriod respectively the actual times would depend on the ini That is one part of the config process and although it could be done manually it would normally be automatic The next step is to decide what each thread needs to do Some of those decisions would also be automatic the motion module would automatically connect its PlanTrajectory function to the TrajPeriod thread and its ControlMotion function to the ServoPeriod thread Other connections would be made by the integrator at least the first time These might
146. el lt siggen 0 cosine float 0 00000e 00 Y vel 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 linksp X_vel 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 signal generator to the input of the second step pulse generator halcmd linksp Y vel siggen 0 sine halcmd linksp Y vel 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 instructions that actually get things done Thread are the method used to make those instructions run wh
147. elocity scale al i ee gt l up dn elocit G ami velocity x i ER count f Figure 14 5 Step Pulse Generator Block Diagram CHAPTER 14 INTERNAL COMPONENTS 113 e BIT e s e BIT freqgen freqgen e BIT freqgen e BIT freqgen 32 freqgen lt chan gt lt chan gt lt chan gt lt chan gt lt chan gt phase B Phase B output step types 2 14 only phase C Phase C output step types 3 14 only phase D Phase D output step types 5 14 only phase E Phase E output step types 11 14 only count Feedback position in counts updated by capture_position e FLOAT freqgen lt chan gt position fb Position feedback in arbitrary units updated by capture_position 14 2 4 Parameters eo F pulses per second Hz eo F LOAT freqgen lt chan gt velocity scale Scaling factor to convert from velocity units to LOAT freqgen lt chan gt maxfreq Maximum frequency in Hz If 0 0 has no effect If set higher than internal limits next call of update_freq will set it to the internal limit eo F scaling and limiting eo F has no effect eo F eo F O only eo F LOAT freqgen lt chan gt frequency The current frequency in Hz This is the value after LOAT freqgen lt chan gt maxaccel Maximum accel decel rate in Hz per second If 0 0 LOAT freqgen lt chan gt steplen Length of a step
148. en 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 CHAPTER 7 HAL TUTORIAL 59 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 Unlike the others it does not need floating point math
149. enabled with M53 P1 See section 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 the 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 sync OUT 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 serv
150. ent 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 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 control 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 18 5 1 2 Theory PID is named after its three correcting calculations which all add to and adjust the
151. er s blog http emergent unpy net 01165081407 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 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 Chapter 16 Halui 16 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 16 2 Halui pin reference 16 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 16 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 halui estop is activated
152. er base thread 4 stepgen update freq 5 ddt 0 50286 NO base thread 6535 35508 CHAPTER 10 TOOLS AND UTILITIES 83 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 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 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 use
153. er 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 substiture for a big rugged oil tight pushbutton 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 Currently there are two VCP implementations included with EMC2 The older simply named VCP which used GTK widgets and the newer called pyVCP which uses Tkinter widgets VCP is depre cated and should not be used it may be removed in the future 17 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 pyvep gt lt label text This is a LED indicator gt lt led gt
154. erent blocks For example emc2 halcmd loadrt blocks wcomp 2 sum2 1 comp 3 installs two window comparators wcomp one two input summer sum2 and three standard com parators comp CHAPTER 14 INTERNAL COMPONENTS 125 14 8 3 Removing emc2S halcmd unloadrt blocks 14 8 4 Pins The various blocks each have their own input and output pins Each pin begins with the block name then the block number and finally the pin function e FLOAT constant lt num gt out Output of constant block tracks the parameter value e FLOAT comp lt num gt in0 Inverting input of 2 input comparator e FLOAT comp lt num gt in1 Non inverting input of 2 input comparator e BIT comp lt num gt out Output true if inl gt ino e FLOAT wcomp lt num gt in Input of window comparator e BIT wcomp lt num gt out Output TRUE if min lt input lt max e FLOAT sum2 lt num gt in0 First input of 2 input summer e FLOAT sum2 lt num gt inl Second input of 2 input summer e FLOAT sum2 lt num gt out Output equals in0 gain0 inl gainl e FLOAT mux2 lt num gt in0 First input of 2 input multiplexor e FLOAT mux2 lt num gt inl Second input of 2 input multiplexor e BIT mux2 lt num gt sel Control input of 2 input multiplexor e FLOAT mux2 lt num gt out Output equals in0 if sel is FALSE inl if sel is TRUE e FLOAT integ lt num gt in Input of integr
155. es 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 the current UNIX time or a hardware driver for the internal PC speaker 85 CHAPTER 11 COMP A TOOL FOR CREATING HAL MODULES 86 11 3 Instance creation For a singleton the one instance is created when the component is loaded For a non single
156. ew 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 APPENDIX B LEGAL SECTION 182 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 License If you have no Invariant Sections write with no Invariant
157. g cd emc2 src make amp amp sudo make install for run installed make amp amp sudo make setuid for run in place make for run in place simulator Ur Ur AN Ur The build process is smart enough to only rebuild things that are affected by your changes 2By 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 Part III EMC Configuration 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 startup to fail These files are read whenever the software starts up Some of them are read repeatedly 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 for use by the interpreter These values are saved from one run to another TBL The tbl file saves tool information NML The nml file configures the communication channels used by the EMC It is n
158. 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 recent 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 as you will see in Chapter 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 N
159. ggen 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 halcma 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 CHAPTER 7 HAL TUTORIAL 53 loadrt siggen signals links F parameter values setp siggen 0 amplitude 5 00000e 00 setp siggen 0 frequency 1 00000e 00 setp siggen 0 offset 0 00000e 00 realtime thread function links addf siggen 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 redirec
160. gt cosine Cosine output e FLOAT siggen lt chan gt sawtooth 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 14 9 4 Parameters None 14 9 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 15 Hardware Drivers 15 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
161. hannel gt State of digital input pin see canonical digital input e BIT m5i20 lt board gt in lt channel gt not Inverted state of digital input pin see canonical digital input e BIT m5i20 lt board gt out lt channel gt Value to be written to digital output see canonical digital output e BIT m5i20 lt board gt estop in Dedicated estop input more details needed e BIT m5i20 lt board gt estop in not Inverted state of dedicated estop input e BIT m5i20 lt board gt watchdog reset 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 15 5 2 Parameters e FLOAT m5i20 lt board gt enc lt channel gt scale The number of counts user unit to con vert from counts to units e FLOAT m5i20 lt board gt dac lt channel gt offset Sets the DAC offset e FLOAT m5i20 lt board gt dac lt channel gt gain Sets the DAC gain scaling e BIT 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 e BIT m5i20 lt board gt out lt channel gt invert Inverts a digital output see canonical dig ital output 9With normal 10 bit PWM 50 duty cycle would be 512 cycles
162. haracter 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 4 2 2 Sections Sections in an INI file work like file folders in a drawer They separate variables based on what part of the EMC they refer to A section line looks like THIS_SECTION The name of the section is enclosed in brackets Common INI files have several sections including e EMC general information 4 3 1 e DISPLAY selects and sets up some display characteristics 4 3 2 e TASK sets up the task planner 4 3 4 e RS274NGC location of interpreter specific file e EMCMOT motion module and default characteristics 4 3 3 e HAL hardware configuration files and commands 4 3 5 e TRAJ information for the motion planner 4 3 6 e AXIS_0 AXIS_n individual axis variables
163. hat 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 67 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 50uS 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
164. 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 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 tha
165. he installed method CHAPTER 3 COMPILING EMC2 FROM SOURCE 20 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 configur nable run in plac make amp amp sudo make setuid In a shell session where you want to use the run in place version of emc execute emc2 scripts emc environment 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 the path each time After that you can run EMC2 by issuing emc 3 7 Simulator To install EMC2 on a system without a realtime kernel add enable simulator to the configure commandline In this mode EMC2 runs as a purely userspace program No hardware can be controlled and realtime 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 unneeded 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 followin
166. he 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 outputs More complex boards can have digital inputs and outputs encoder counters pwm or step pulse generators analog to digital converters digital to a
167. hmod 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 95 CHAPTER 12 CREATING USERSPACE PYTHON COMPONENTS WITH THE HAL MODULE 96 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 driver 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
168. how to automatically connect them the integrator doesn t have to know or care This kind of automatic HAL configuration is possible because all kinematics modules plug in the same way 3The Lego name is a trademark of the Lego company CHAPTER 6 INTRODUCTION 47 6 5 Timing Issues In HAL Threads is going to take a major intellectual push because unlike the physical wiring models be tween 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 buzzer 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 ignor
169. idgets 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 17 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 resized 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 17 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 17 6 4 Labelframe A labelframe is a frame with a groove and a label at the upper left corner lt labelframe text Group Title gt lt hbox gt lt led gt lt led gt lt hbox gt lt labelframe gt 17 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
170. ill be rounded to an integer multiple of BASE_PERIOD Most systems will not need to change this value It is the update rate of the low level motion planner You ll need it even if you only have steppers TRAJ_PERIOD 10000000 HAL Trajectory Planner task period in nanoseconds This value will be rounded to an integer multiple of SERVO_PERIOD Folk with fast computers have found that reducing this value by half will give them smother motion blending during contour cutting 4 3 4 TASK Section The TASK section contains general parameters for EMCTASK which includes primarily the NC language interpreter and the sequencing logic for sending commands to EMCMOT and EMCIO CYCLE_TIME 0 100 The period in seconds at which EMCTASK will run This parameter mostly affects the polling interval when waiting for motion to complete or when executing a pause instruction It no longer affects the throughput when transferring segments to the real time layer Making it 0 0 or a negative number will tell EMCTASK not to sleep at all There is usually no need to change this number CHAPTER 4 INI CONFIGURATION 26 4 3 5 HAL section HALFILE example hal Execute the file example hal at startup If HALFILE is specified multiple times the files are executed in the order they appear in the inifile Almost all configurations will have at least one HALFILE and stepper systems typically have two such files one which specifies the generic stepper configur
171. imit switches on the X axis axis 0 newsig X neg limit bit linkps parport 0 pin 11 in gt X neg limit linksp X neg limit gt axis 0 neg lim sw in newsig X pos limit bit linkps parport 0 pin 12 in gt X pos limit linksp X pos limit gt axis 0 pos lim sw in 4 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 i you which switch axis has faulted Use caution when recovering from this newsig Xlimits bit linkps parport 0 pin 13 in gt Xlimits CHAPTER 13 BASIC CONFIGURATIONS FOR A STEPPER BASED SYSTEM 102 linksp Xlimits gt axis 0 neg lim sw in linksp Xlimits gt axis 0 pos lim sw in you Can also use the net syntax to accomplish the newsig and link operations all at once This command does the same thing as the above block 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 The Parport driver gets loaded see 15 1 for details The read amp write funct
172. in developing their own install using some other distribution of Linux or another operating system or applying the EMC2 to a more complex machine they should study the Integrators Handbook where these topics are covered in greater detail 1 2 The Big CNC Picture The term CNC 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 handwheels 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 s
173. ins 2 9 as inputs and one at 0x20A0 with pins 2 9 explicitly specified 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 15 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
174. inute These are roughly equivalent to flipping a switch or turning the handwheel for an axis These commands are normally handled on one of the CHAPTER 1 THE ENHANCED MACHINE CONTROL 10 Filis mur Fuel Lrips H T MEE CEE a SPIDER RWI 400RT AITE Flan FF ARAAKE Ot lool Foston Actual Felabiva Jol Olfael 2 Wop Work OTt 5D 0000 00000 20000000 1 1 8273 2 2 2158 3 3 6875 4 10 5600 Sait nee pal AE zh Po TO sed Oeste E a se of contmuous BEE A tuu gt BN osea rot Logging u N AA A AA Gal E IA EA Program Ho PE aiet State PAUSCO Oper min Pause Resume step erty aT j it Ge Tz Li z odra A AO ETE TE a EN E Figure 1 6 The XEMC Graphical Interface 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 FEEDRATE OVERRIDE Commands like these should be self explanatory 1 6 2 Information Display While an EMC2 is running each of the modules keeps up a conversation with the others and with
175. ions of the parport driver get assigned to the Base thread The step amp direction signals for axes X Y Z get linked to pins on the parport Further IO signals get connected estop loopback toolchanger loopback ao AeA O N e A spindle On 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 basicly 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 0 invert TRUE 3the fastest thread in the EMC2 setup usually the code gets executed every few microseconds CHAPTER 13 BASIC CONFIGURATIONS FOR A STEPPER BASED SYSTEM 103 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
176. 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 89 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 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 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 realtim
177. is true the driver will reset the counter on the next index pulse o B T motenc lt board 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 eo F LOAT motenc lt board gt dac lt channel gt value Analog output value for DAC in user units see gain and offset eo F LOAT motenc lt board gt adc lt channel gt value Analog input value read by ADC in user units see gain and offset o B o B T motenc lt board gt in lt channel gt State of digital input pin see canonical digital input T motenc lt board gt in lt channel gt not Inverted state of digital input pin see canonical digital input o B T motenc lt board gt out lt channel gt Value to be written to digital output seen canonical digital output o B o B o B T motenc lt board gt estop in Dedicated estop input more details needed T motenc lt board gt estop in not Inverted state of dedicated estop input T motenc lt board gt watchdog reset Bidirectional Set TRUE to reset watchdog once is automatically cleared 15 6 2 Parameters F LOAT motenc lt board gt enc lt channel gt scale The number of counts user unit to convert from counts to units LOAT motenc lt board gt dac lt channel gt offset Sets the DAC offset LOAT motenc lt board gt
178. it 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 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 jogwheel 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
179. it 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 14 5 5 Functions oopnum gt oopnum gt error Integral of error errorD Derivative of error commandD Derivative of the command commandDD 2nd derivative 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 14 7 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 14 INTERNAL COMPONENTS 122 14 6 Simulated Encoder The simulated encoder is exactly that It produces quadrature pulses with an index pulse at a speed controlled by a HAL pin Most
180. it 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 16 HALUI 150 16 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 16 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 16 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 halui feed override de
181. ives 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 76 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 1 count or less between calls to the read function FLOAT velocity resolution optional The resolution of the velocity output in position units pe
182. l following errors are used Here the maximum allowable following error is proportional to the speed with FERROR applying to the rapid rate set by TRAJ MAX_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 EMCMOT utility program USRMOT can be used to set these interactively and verify their results so that the proper values can be put in the INI file with a minimum of trouble UNITS inch Historically the UNITS were specified for each axis It is now preferable to specify the TRAJ LINEAR_UNITS and TRAJ JANGULAR_UNITS values only and have no AXIS_nJUNITS setting 4 3 7 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 HOME SEARCH VEL 0 0 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 This is the final velocity to be used during a
183. lant 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 nped nut SHOW Tool 0 Axis Speed WATCH axis 0 amp enable out axis 1 amp enable out axis 2 amp enable out iocontrol 0 user enable out iocontrol 0 emc enable in 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 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 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 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 lin
184. le 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 18 5 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 variable 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 measurem
185. limits to acceleration and velocity We have discovered that it needs to have a little headroom over the accel by the trajectory planner otherwise it can fall slightly behind during accel and later overshoot as it catches up In the long term we hope to come up with a clean fix for this problem In the meantime please set STEPGEN_MAXVEL to a few percent higher than MAX_VELOCITY the regular velocity limit and STEPGEN_MAXACCEL slightly larger that of MAX_ACCELERATION CHAPTER 4 INI CONFIGURATION 31 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 the ini and can be tweaked to obtain the result you are after 4 4 3 1 HOME_SEARCH_VEL HOME_SEARCH_ VEL is defined in each AXIS_ section The default value is zero A value of zero causes EMC to assume that there is no home switch The search and latch stages of homing are skipped EMC declares the current position to be HOME_OFFSET and
186. ll 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 halcmd 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 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 e newsig delsig e linkpp linksp linkps unlinkp e setp sets CHAPTER 10 TOOLS AND UTILITIES 81 This
187. lly prevents parport_pc from being automatically loaded 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 15 HARDWARE DRIVERS 132 15 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 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 15 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 boardnu
188. loat 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 57 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 u32 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 No
189. ly useful for testing 14 6 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 14 6 2 Removing emc2S halcmd unloadrt sim encoder 14 6 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 chan 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 14 6 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 14 6 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
190. m 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 15 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 the 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 15 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 15 4 Servo To Go The Servo To Go is one of the first PC motion control cards supported
191. m 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 13 3 Pinout One of the majour 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 99 CHAPTER 13 BASIC CONFIGURATIONS FOR A STEPPER BASED SYSTEM 100 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 fo
192. me 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 APPENDIX B LEGAL SECTION 181 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 original documents forming one section entitled History likewise combine any sections entitled
193. meter 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 start 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 Th
194. n 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 CHAPTER 7 HAL TUTORIAL 52 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 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 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 si
195. n can be selected 14 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 ctr1_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 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 14 1 2 Removing emc2 halcmd unloadrt stepgen 104 CHAPTER 14 INTERNAL COMPONENTS
196. nalog 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 71 lt chan num gt Virtually every I O device has multiple channels and the channel number identifies one of them Like device numbers channel numbers 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
197. nds e FLOAT stepgen lt chan gt dirhold Minmum time from the end of a step pulse to a direction hange step type O only in nanoseconds e 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 s532 stepgen lt chan gt rawcounts The raw feedback count updated by make_pulses CHAPTER 14 INTERNAL COMPONENTS 107 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 14 1 5 Step Types The step generator supports 15 different step types Step type O is the most familiar standard step and direction When config
198. ne 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 A that coordinates the overall execution and interprets the part program Tel Tk A scripting language and graphical widget toolkit with which EMC s most popular GUI s A were written 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 Appendix B Legal Section Handbook 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 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 B 1 GNU Free Documentation License Version 1 1 March 2000 Copyright C 2000 Free Software Foundation Inc 59 Temple Place Suite 330 Boston
199. nel range gt pulse width Sets width of step pulses in units of 100nS Applies to a group fof four consecutive PWM generators as indicated by lt channel range gt 13Index handling does _not_ comply with the canonical encoder interface and should be changed CHAPTER 15 HARDWARE DRIVERS 143 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 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 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 FLOAT ppmc lt port gt stepgen lt channel gt frequency Actual step pulse frequency in Hz used mostly for troubleshooting BIT ppmc lt port gt out lt channel gt invert Inverts a digital output see canonical digital output 15 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 15 8
200. nly 4 encoder counters 32 digital inputs and 16 digital outputs but it still has 8 analog inputs and 8 analog outputs The driver automatically identifies the installed board and exports the appropriate HAL objects 1 Installing 1Ideally 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 15 HARDWARE DRIVERS 140 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 15 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 s32 motenc lt board gt enc lt channel gt count Encoder position in counts eo F LOAT motenc lt board gt enc lt channel gt position Encoder position in user units e BIT motenc lt board gt enc lt channel gt index Current status of index pulse input e 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 o B T motenc lt board gt enc lt channel gt latch index If this pin
201. nt 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 was 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 tha
202. ntifiers 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 14 9 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 Type Name PID State 32769 RT siggen ready 9775 User halcmd9775 9775 initializing CHAPTER 7 HAL TUTORIAL 50 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 Compone
203. ntions 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 typical 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
204. o 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 realtime motion controller is meeting its timing constraints motion servo overruns By noting large differences between successive values of motion servo last period 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 realtime 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 b
205. ode 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 already loaded the numeric argument to halscope will have no effect Chapter 8 General Reference Information 8 1 Notation 8 1 1 Typographical Conve
206. oder read will cause problems then implement a single function that does everything CHAPTER 8 GENERAL REFERENCE INFORMATION 72 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 ppmc 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 digout 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
207. oe ce suas rise ketei eere 5 EMC2 and HAL motion realtime cono cours ee we ee A Ll Peo g a a EA Be E a S2 Parame eiS e eea aa a a a we ds SLS FONGO AA ER ads realtime se ee ce ae oa aa alal e a a a eo el e we 5 2 1 a cate de a eo AAA 5 2 2 ii 4 6 boo ee SHES EE SEES ESE bee ee eS locontwol MSerspate lt a ow Oe Se A ea we a a AAA ce AA 5 31 Png cosines a aea AA A AAA A As a a Rs BG da IV HAL Specifics 6 Introduction Whatis HAL lt a a we A O De A a A A 6 1 1 HAL is based on traditional system design techniques Goll Part Selectii iones e a bee e Ea 6 1 1 2 Interconnection Design lt o ss sx ee man Se we G L Implementation 6 oo sess e a eS a Gwe a e id BAe we a GU UA TORUS oe ee ee a a a A 6 1 2 io oe oR OR OR RR a wh wk eo ee ww HAL COMCEP S fo cs a ar a ae a ee a A HAL COMIPOUGING sis Ew eee ee A SARE ERS ERE 6 3 1 External Programs with HAL hooks o o 6 3 2 MEDAL ORIO e ue Ge OM ie a oe OP a e ee A 6 3 3 Hardware DIVES aora OS we ee de ee a 6 3 4 Tools and Wes o cocinar a ae Ga ee ee we Tinkertoys Erector Sets Legos and the HAL o 6 4 1 TOWE lis lea ce ak Bae ads Ee A ea St a he a A A ok 6 4 2 Erector EELS o po Saas a ae ee ee Ss a a dad Be a 6 4 3 TUKOY 264 GR Ea ERE EGR ERE ERE GRE eR OE DG he eee er 6 4 4 A Lego example daa Pe ae A A a a Tit Temes i A ci A We SAE Boe EOS wd St Se Ae Dynamic Linking and Configuration
208. 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 15 HARDWARE DRIVERS 136 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 15 5 3 Functions e FUNCT m5i20 lt board gt encoder read Reads all encoder counters 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 15 5 4 Connector pinout The
209. onnected to a realtime thread so that they execute the blocks do nothing at all e FUNCT constant lt num gt Writes parameter value to pin out e FUNCT comp lt num gt Compares in0 and inl with hysteresis writes result to out e FUNCT wcomp lt num gt Compares in to min and max writes result to out e FUNCT sum2 lt num gt Computes out in0 x gain0 inl x gainl e FUNCT mux2 lt num gt If sel is TRUE writes in1 to out else writes in0 to out e FUNCT integ lt num gt Calculates integral of in writes result to out e FUNCT constant lt num gt Calculates derivative of in writes result to out CHAPTER 14 INTERNAL COMPONENTS 127 14 9 Siggen Siggen is a realtime component that generates square triangle and sine waves It is primarily used for testing 14 9 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 14 9 2 Removing emc2 halcmd unloadrt siggen 14 9 3 Pins Each generator has five output pins e FLOAT siggen lt chan gt sine Sine wave output e FLOAT siggen lt chan
210. or scale can be obtained by doing a unit analysis i e units are sensor units desiredinput SI units For example on a 2000 counts per rev encoder and 10 revs inch gearing and desired units of mm we have 2 ange counts 10 rev linch input_scale rev inch 25 4mm s pa mm This assumes there was no movement of the machine while powered off It helps on smaller machines without home switches CHAPTER 4 INI CONFIGURATION 28 MIN_LIMIT 1000 The minimum limit soft limit for axis motion in user units When this limit is exceeded the controller aborts axis motion MAX_LIMIT 1000 The maximum limit soft limit for axis motion in user units When this limit is exceeded the controller aborts axis motion MIN_FERROR 0 010 This is the value by which the axis is permitted to deviate from commanded position at very low speeds If MIN_FERROR is smaller than FERROR the two 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 FERROR 1 0 FERROR is the maximum allowable following error in user units If the difference 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 proportiona
211. org emc2 install sh for Ubuntu 5 10 or http linuxcnc 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 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 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
212. ormally 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 This chapter describes the EMC2 s INI file in just enough detail so that the reader can understand which variable values might need to be edited in order to make a stock configuration conform to a real machine 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 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 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 Complete reference to these files are left to the Integrator and Developer Handbooks 22 CHAPTER 4 INI CONFIGURATION 23 4 2 The INI File Layout A typical INI file follows a rather simple layout that includes e comments e sections e variables Each of these elements is separated on single lines Each end of line or newline c
213. ort 0 pin 01 in iocontrol 0 emc enable in This assumes an ESTOP switch connected to pin 01 on the parport As long as the switch will stay pushed EMC2 will be in the ESTOP state When the external button gets released EMC2 will imediately switch to the ESTOP 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 ESTOP circuitry is explained in the wiki linuxcnc org and in the Integrator Manual 5make sure you use a maintained switch for ESTOP Chapter 14 Internal Components 14 1 Stepgen This component provides software based generation of step pulses in response to position or velocity commands In position mode it has a 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 14 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 1 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 combinatio
214. p 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 17 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 427 0 0 123 17 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 CHAPTER 17 VIRTUAL CONTROL PANELS 158 17 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 spibox 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 17 5 9 Scale Scale controls a FLOAT pin You increase or decrease the value
215. 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 CHAPTER 7 HAL TUTORIAL 56 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 libr
216. 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 69 CHAPTER 8 GENERAL REFERENCE INFORMATION 70 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 tree Even though halemd doesn t recognize the tree structure proper choice of naming conventions will let it group related items together since it sorts t
217. ples 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 HAL 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 arrive
218. ponsible 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 handwheel are coded into blocks If a machinist wanted his CHAPTER 1 THE ENHANCED MACHINE CONTROL 8 EMC HAL SIM 4 Editor W Backplot 4 Tools x 92 0000 x 36 1280 Z 10 0000 Feed Override 120 mmj MESSAGES Ps Open Run Pause Resume Step Verify N6891 56 112 27 838 N6901Y56 1282 27 634 N6911G0210 N6931M9 N6941M2 f Figure 1 4 The Mini Graphical Interface mill to move an inch in the X direction at some feedrate he might slowly turn the handwheel five turns clockwise in 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 feedrate 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 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
219. 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 value 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
220. pported 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 attribute s 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 evalued as a Python expression The examples below show a mix of formats 17 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_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 17 VIRTUAL CONTROL PANELS 156 17 5
221. pulse step type O only LOAT freqgen lt chan gt stepspace Minimum spacing between two step pulses step type LOAT freqgen lt chan gt dirsetup Minimum time from a direction change to the begin ning of the next step pulse step type O only eo F LOAT fregqgen lt chan gt dirhold Minmum time from the end of a step pulse to a direction change step type O only e s532 freqgen lt chan gt rawcounts The raw feedback count updated by make_pulses e FLOAT freqgen lt chan gt position scale The scale factor used to convert from feedback counts to position units 14 2 5 Step Types The frequency generator supports 15 different step types Except for stepping type 1 they are identical to those generated by the stepgen component Refer to section 14 1 5 for more information There is one difference between stepgen and freqgen 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 one thread period long Stepgen assumes that you need a distinct pulse for each step so it limits the frequency to half of the thread rate to allow for one low period between pulses However freqgen allows higher frequencies up to the thread rate This allows step type 1 to be used as a pseudo PWM source or filtered to use as a D to A converter At the maximum frequency equal to the thread rate the up or down output will remain on const
222. put 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 75 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 output 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 hardwa
223. r our pinout are Signals Xstep Xdir amp Xen pins parport 0 pin XX out amp parport 0 pin XX in 2 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 Furtheron 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 1 0 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 linksp Xstep gt parport 0 pin 03 out linksp Xdir gt parport 0 pin 02 out linksp Ystep gt parport 0 pin 05 out linksp Ydir gt parport 0 pin 04 out linksp Zstep gt parport 0 pin 07 out linksp Zdir gt parport 0 pin 06 out create a signal for the estop loopback linkpp iocontrol 0 user enable out iocontrol 0 emc enable in create signals for tool loading loopback linkpp iocontrol 0 tool prepare iocontrol 0 tool prepared linkpp iocontrol 0 tool change iocontrol 0 tool changed create a signal for spindle on newsig spindle on bit connect the controller to it linkps motion spindle
224. r 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 e 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 the 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 hal
225. re 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 encoder 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 arr
226. ring 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 flexible 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 pa
227. rs 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 15 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 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
228. rts 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 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 w
229. s 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 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
230. s as follows e constant makes a parameter value available on a pin e comp standard 2 input comparator with adjustable hysteresis e wcomp window comparator output true when input is between adjustable upper and lower limits e sum2 2 input summer output inO gainO inl gainl e mux2 2 input multiplexor output inO if sel is false output in if sel is true e mux4 4 input multiplexor output in lt n gt based on sel0 sell integ integrator input of 1 0 produces an output ramp of 1 0 per second ddt differentiator input ramp of 1 0 per second produces output of 1 0 limit1 first order limiter limits output limit2 second order limiter limits output and 1st derivative limit3 third order limiter limits ouput 1st amp 2nd derivative estop latch for estops or other faults with reset not logical inverter e and2 2 input logical and or2 2 input logical or scale gain offset block out in gain offset lowpass lowpass filter out last_out 1 gain in gain match8 8 bit binary match detector with input for cascading 14 8 2 Installing emc2 halcmd loadrt blocks lt blockname gt lt number gt lt blockname gt is the name of one of the functional blocks that the component can provide and lt number gt is the desired quantity of that block Multiple name number pairs may be specified on the command line to install a variety of diff
231. s 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 14 3 6 Functions The component exports 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 CHAPTER 14 INTERNAL COMPONENTS 116 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 14 INTERNAL COMPONENTS 117 14 4 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
232. s 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 CHAPTER 7 HAL TUTORIAL gt lt Realtime function not linked x 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 Sample Period Sample Rate Thread siggen thread 1 01 mSec stepgenthread 50 3 uSec 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 61 CHAPTER 7 HAL TUTORIAL 62 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
233. s 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 3 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 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 84 TkEMC File View Settings Units Scripts ESTOP RESET M Tree View HAL Show MANUAL FL orrset MN Components Pins axis ddt 0 in out iocontrol 0 coolant flood coo
234. s high By connecting a signal to one or the other the user can determine the state of the input Shint after starting up the driver dmesg can be consulted for messages relevant to the driver e g autodetected version number and base address Sif TOO 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 CHAPTER 15 HARDWARE DRIVERS 134 15 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 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 15 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
235. s 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 _ option extra_setup yes 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_ out pin out float cos_ out pin in float theta in function _ ry 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 at 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 CH
236. screws 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 A and screw to reduce friction Ball screws have very low friction and backlash A 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 turning cranks to move a cutting tool
237. se 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 the latch phase is skipped and this parameter is ignored If HOME_SEARCH_VEL is non zero and this parameter is zero it is an error and the homing operation will fail The default value is zero CHAPTER 4 INI CONFIGURATION SEARCH_VEL POSITIVE HOME_OFFSET 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 SEARC
238. sh 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 87 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_ xyz 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 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
239. 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 startup 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 spindle_to_pyvcp hal CHAPTER 17 VIRTUAL CONTROL PANELS 154 This change will run the HAL commands specified in spindle_to_pyvcp hal In our example the contents could look like this linksp spindle rpm filtered pyvcp spindle speed assuming that a singlal called spindle rpm filtered already exists Note that when running to gether with AXIS all pyVCP widget HAL pins have names that start with pyvcp DI lathe pawn ngc AXIS m File Machine View Help Spindle speed 1000 0 0 0 5000 Manual Control
240. 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 18 5 1 3 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 tuning 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 173 Effects of increasing parameters 18 5 1 3 0 5 Ziegler Nichols method Another tuning method is formally known as the Ziegler Nichols method
241. 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 HOME is a value setable from the ini in the AXIS_ section It is 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_OFFSET 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 7 4 4 3 7 HOME_IS_ SHARED HOME_IS_SHARED is a value setable from the ini in the AXIS_ section 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 HOME_SEQUENCE is a valu
242. t 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 14 7 4 Parameters Each group of filters has one parameter e 332 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 4 all glitches less than or equal to four thread periods will be rejected 14 7 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 14 INTERNAL COMPONENTS 124 14 8 Blocks Blocks is a realtime HAL component containing a number of simple functional blocks They are primarily intended for testing and other offhand uses but may prove useful for some EMC configu rations as well 14 8 1 Available Blocks The complete list of available blocks i
243. t 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 51 7 3 3 Making realtime code run To actually run the code contained in the function siggen 0 update we need a realtime thread Eventually halcma will have a newthread command that can be used to create a thread but that requires some significant internal changes For now we have a 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 1
244. t 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 halcmd f lt filename gt which reads commands from a file emc2S halemd f saved hal 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 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 54 X A HAL Meter x Select Exit Figure 7 1 Halmeter at startup nothing
245. t type 2 only 14 3 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 pwmgen 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 14 3 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 i
246. t 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 types unless they are interruptable and can work in independent threads If interrupting an encoder read reading digital inputs and then resuming the enc
247. ted axis motion in user units per second The value shown is one inch per minute DEFAULT_ACCELERATION 2 0 The initial acceleration used for axis or coordinated axis motion in user units per second per second CHAPTER 4 INI CONFIGURATION 27 MAX_VELOCITY 5 0 The maximum velocity for any axis or coordinated move in user units per second Think for a moment what this value really means in hardware terms The formula is MAX_VELOCITY 60 In this case this is 300 inches per minute MAX_ACCELERATION 20 0 The maximum acceleration for any axis or coordinated axis move in user 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 7 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 Values for the various parameters of LINEAR axes are in the units specified in the TRAJ LIN EAR_UNITS entry Values for the position of ANGULAR axes are in the units specified in the TRAJ ANGULAR_UNITS entry TYPE LINEAR The type of axes either LINEAR or ANGULAR MAX VEL
248. termines 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 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 14 3 2 Removing emc2 halcmd unloadrt pwmgen 14 3 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 CHAPTER 14 INTERNAL COMPONENTS 115 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 pumgen lt chan gt down PWM PDM output for negative input value outpu
249. 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 68 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 trigger 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 m
250. 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 73 CHAPTER 9 CANONICAL DEVICE INTERFACES 74 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 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 out
251. 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 X A HAL Oscilliscope mak Horizontal Run Mode Trigger Zoom 500 mSec 4047 samples Normal Normal Pos per div at 994 Hz C Single C Auto E IDLE stop Face vertical Level Pos Gain Pos J did gH Scale Level alelalals el 7 e s roftifrzfsafrafis i6 orst Selected Channel gt EZ Chan Off Rising Source None Figure 7 5 Initial scope window 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 than 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 63 7 6 2 Hooking up the scope probes
252. this component can be used to implement other feedback loops such as speed torch height tem perature etc Figure 14 7 is a block diagram of a single PID loop 14 5 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 specific 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 14 5 2 Removing emc2 halcmd unloadrt pid 14 5 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
253. tices 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 Ifthere 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 substance and tone of each of the contributor acknowledgements and or dedications given therein L Preserve all the Invariant Sec
254. tions 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 entity If the Document already includes a cover text for the same cover previously added by you or by arrangement made by the sa
255. tiorni so eses cocos me ARA ee ee ee a a The INI File Layout so soca ee a ee a ee ee a 4 2 1 aa 5 ki REG eee bE G EG EMER EGE ee Saeed be 4 Heed 8 4 2 2 SPOCONE i kA BU A AR A ERR AA RRM RG hE ha dw Bale 4 2 3 YDE A A E E A e te E a A INI Variable Definitions o o cos corra a e A 4 3 1 EMCI Sectio sos ars a m are a ia e Be ic 4 3 2 DISPLAY Section 4 3 3 EMCMOT Section 0 0 0 ee 4 3 4 TASR SECON co cee cy ese ea a E a ke Mise ad DS Kowa Aw ee eee be ee 4 3 5 HALI GECO a aa ae a a a RR 4 3 6 TRAJ SECTION s aci sai a eai aa a RR ae ae GO a a A 4 3 7 AXIS_ lt num gt Section oaoa e ee 4 3 7 1 Homing related ems co 2 ee ee eS 4 3 7 2 SErvo TElated items soso RR ee e a 4 3 7 3 Stepper relaied items s ociosa a A ee a 4 3 8 EMCIONSECUOD oscars eA a ee ae Ae a ee ot EUS y e a A AA A ee OR ES A a a we ee 4 4 1 ONE o ek goes a A A de ae Hae eke ae 4 4 2 Homing SOEQUEUCE eeraa ER a e oA 4 4 3 Confiduration p cs esce ee am kw EE we Re a a a cee a ae ws a 4 4 3 1 HOME_SEARCH_VEL e 44392 HOME LATCH VEL gt redoa eaa AR RA OR e eee we 44 3 5 HOME IGNORE LIMITS lt lt lt esa a a 4 4 34 HOME USE INDEX 2 454 bee eb ee a a e a iii 18 18 18 18 19 19 19 20 20 20 21 CONTENTS 44 3 0 HOME OFFSET 263 26a ete a A E ow Se aoe ee ow 44 3 6 HOME erso bie et ee bbe Eaua d ee we we 1437 HOME IS SHARED 0 ae e ne Ew kek lee bs we ei ee So eee we ce 44 3 6 HOME SEQUENCE 6
256. tive 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 Ifthe values are chosen incorrectly the controlled process input can oscillate and the process output may never stay at the setpoint 18 5 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 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 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
257. 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 7 5 5 Run it 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 But much of what happens is far too fast to see with halmeter To take a closer look at what i
258. 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 needed This section lists 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 14 1 freqgen Software step pulse generator See section 14 2 encoder Software based encoder counter See section 14 4 pid Proportional Integral Derivative control loops See section 14 5 siggen A sine cosine triangle square wave generator for testing See section 14 9 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 Drive
259. ton 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 present 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 ha
260. tor 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 A for a particular machine Joint_Coordinates These specify the angles between the individual joints of the machine Kine matics APPENDIX A GLOSSARY OF COMMON TERMS USED IN THE EMC DOCUMENTS 177 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 Kinematics The position relationship between world coordinates A and joint coordinates A of a machine 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 A or acme screws A although conventional triangular threaded screws may be used where accuracy and long life are not as important as low cost MDI Manual Data Input This is a mode of operation where the controller executes singl
261. tor 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 humane 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 Exam
262. 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 Indicates 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 tagg
263. tu com 2For information regarding other Linux variants check the Developers Handbook or ask for help on the emc developers mailing list http sourceforge net mail group_id 6744 15 CHAPTER 2 INSTALLING THE EMC2 SOFTWARE 16 2 3 EMC2 Live CD The EMC2 team now has a custom Live CD based on Ubuntu 6 06 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 http linuxecnc org iso emc2 ubuntu6 06 desktop i386 iso EU Mirror http dsplabs utt ro juve emc and burn it to a CD The MD5SUM of the CD is 6ee5048eb9cb424aa030dfedccc5386b 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 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 Download the script from http www linuxcnc
264. ture 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 14 4 4 Parameters e s532 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 14 4 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 14 INTERNAL COMPONENTS 119 14 5 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
265. ured for step type O there are four extra parameters that determine the exact timing of the step and direction signals See figure 14 2 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 the 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 A O XA stepspace stepspace steplen min A steplen min steplen dirsetup dirhold dirsetup min min min direction x step Figure 14 2 Step and Direction Timing 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 CHAPTER 14 INTERNAL COMPONENTS 108 than the limit it will be lowered If maxfreq is zero it will remain zero but the outp
266. 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 1 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 3 4 1 Downloading the CVS version If you wish to use the TRUNK version of emc2 please follow the instructions on our wiki to obtain the source code http wiki linuxcnc org cgi bin emcinfo pl CVS 3 5 Installed EMC2 followes the standard way of compiling linux software To compile it simply go to the sources folder cd emc2 src and issue these commands configure S make amp amp sudo make install To run it simply type emc 1The pre built packages for Ubuntu Linux use t
267. ut 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 14 3 and 14 4 show the output patterns as a function of the state counter The maximum 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 s 2 J 00 E e O A A col MO A Bal E ih om i oe fp P e irr tf 2 oe ff P A A gt a niga Sat SRS ad oh tS St ae A tie ee ee 7 lt o a hh ae E ii WV al oti ai ar ii ft OA o wW co w w w a u lt fa o a u lt co o a u lt foal o gt gt gt o o gt gt gt gt gt gt gt gt o E a a B a E a a a a B a a 2 ES ES 3 ES S ES ES a lt a lt lt o w a a a a to a a a a w a a a a E E E wn N n Figure 14 3 Four Phase Step Types 109 CHAPTER 14 INTERNAL COMPONENTS STEP TYPE 11 STEP TYPE 12 phase A phase B o J o co Ko wo lt e N o ma o o o o o N N n n N E oO oO oO oO oO a Pe san a a a a a a a uy E wo o o co Ko wo lt ma N o E w lt faa o o N N a Z a 5 a a mn s lt XX
268. w 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 To create them we use the the newsig command We also need to specify the type of data that will flow through these wires in this case it is floating point halcmd newsig X vel float halcmd newsig Y vel float To make sure that worked we can look at all the signals halcmd show sig Signals Type Value Name float 0 00000e 00 X_vel float 0 00000e 00 Y vel The next step is to connect the signals to component pins The signal X_ve1 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 linksp command halcmd linksp X_vel siggen 0 cosine To see the effect of the 1inksp command we show the signals again CHAPTER 7 HAL TUTORIAL 58 halcmd show sig ignals Type Value Name float 0 00000e 00 X_v
269. 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 MIN_OUTPUT 10 HAL The minimum value for the output of the PID compensation that is writ ten 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 Output Voltage Measurements Raw Measured 10 9 93 9 8 83 0 0 03 1 0 96 9 9 87 10 10 87 4 3 7 3 Stepper related items The following items are used by core_stepper hal to set limits on the step waveforms that will be generated They typically include a headroom of 5 to 10 compared to the MAX_VELOCITY and MAX_ACCEL items in the same AXIS STEPGEN_MAXVEL 1 4 HAL A value applied to the stepper pulse generator to provide some overhead for following error catch up STEPGEN_MAXACCEL 21 0 HAL Overhead for the stepper pulse generator when it needs to catch up 4 3 8 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 change this number TOOL _TABLE tool tbl The file which contains tool information described in TOOL_CHANGE_POSITION 0 O 2 Specifies the XYZ location to move to when performing a tool change SThe step generator module stepgen applies its own
Download Pdf Manuals
Related Search
Related Contents
ACCUSTAT™ P2/DL User Manual Introduction to CUDA Istruzioni per l`uso AWM 6140 前半 ( ぜんはん ) P1〜9とP20(1928KB) 全ページ版(PDF:3647KB) 取扱説明書(PDF版) HP S9500 Owner`s Manual - Yacht Supply Depot Anleitung - Galaxian Laser ESTACIÓN METEOROLÓGICA INALÁMBRICA DE Copyright © All rights reserved.
Failed to retrieve file