# ######################################### # .hal file for Boxford 240F # THIS IS HACKED TO RUN IN SIMULATION - DO NOT USE WITH A REAL MACHINE ############################################ loadrt trivkins loadrt [EMCMOT]EMCMOT base_period_nsec=[EMCMOT]BASE_PERIOD servo_period_nsec=[EMCMOT]SERVO_PERIOD num_joints=[TRAJ]AXES loadrt probe_parport loadrt hal_parport cfg="0x278 out 0x5c00 in" setp parport.0.reset-time 1500 addf parport.0.read base-thread addf parport.0.write base-thread addf parport.0.reset base-thread addf parport.1.read base-thread addf parport.1.write base-thread #################################################################### # should the encoder be on the base thread for both addf statements? #################################################################### loadrt encoder num_chan=2 addf encoder.update-counters base-thread addf encoder.capture-position servo-thread ################################################################# # 5th stepgen for controlling the spindle. # Type must be set to velocity # Stepgens must be declared to match the ini declarations # even if not used, hence there is # one for Y even though it does not exist ################################################################# loadrt stepgen step_type=0,0,0,0,0 ctrl_type=p,p,p,p,v loadrt abs count=2 loadrt scale count=2 loadrt charge_pump loadrt debounce cfg=2 loadusr -W redisclient ################################################################## addf stepgen.make-pulses base-thread #&&&&&&&&&&&&& addf charge-pump base-thread ############################################# # debounce for X Home switch ############################################ addf debounce.0 base-thread #If necessary, you can #to change the amount of debounce; the default is apparently 5, which #means the switch input to emc has to be stable for 5 servo periods #before the debounce output changes. setp debounce.0.delay 100 ############################################### addf stepgen.capture-position servo-thread addf motion-command-handler servo-thread addf motion-controller servo-thread addf stepgen.update-freq servo-thread #################################################################### # This section enables the DIYCNC Spindle2 board to produce # 0-10v scaled upon steps from axis4 and direction of # rotation from Dir signal #################################################################### # Use a scale module for offset and scaling of the stepgen # Offset and scale are determined by first calculating and testing # setp scale.0.in 0 setp scale.0.gain 1.26 # GIVES TRUE 600 RPM in M4 setp scale.0.offset 0 addf scale.0 servo-thread # # Initialise the stepgen for the spindle # setp stepgen.4.position-scale 1 setp stepgen.4.maxvel 2400 setp stepgen.4.steplen 1 setp stepgen.4.stepspace 0 setp stepgen.4.dirhold 20000 setp stepgen.4.dirsetup 20000 setp stepgen.4.maxaccel 200 # Enable it net spindle-enable <= motion.spindle-on => stepgen.4.enable # Connect spindle speed to scaler net spindle-cmd motion.spindle-speed-out => scale.0.in # Connect scaler output to stepgen velocity net spindle-freq <= scale.0.out => stepgen.4.velocity-cmd # Connect output to the pin for the analog voltage of cnc4pc board # net spindle-out <= stepgen.4.step => parport.0.pin-09-out # # Activate relay to power spindle GEC controller net spindle-enable => parport.0.pin-16-out ## Connect DIR pin to inverted DIR signal from stepgen.4 which gives correct relay switching for CCW and CW setp parport.0.pin-08-out-invert 1 # Some problems setting up logic to match the reversing contactor ## This works, connecting CCW to stepgen DIR to Spindle2 DIR net spindle-ccw <= stepgen.4.dir => parport.0.pin-08-out ########################################################################## # Had several tries to get proper index for threading # Eventually used a 120mm PCD 60 hole disc, with optical sensor through # comparator, for clean on/off # spindle index is still provided by a single rare earth magnet via a hall-effect. # At first test, cut a perfect 1.5mm pitch thread using a tool steel cutter # presented at 90deg to the billet! # Optimal pulses appears to be around 120, try another disc some time later ############################################################################ setp encoder.0.position-scale 120 setp encoder.0.counter-mode 1 net spindle-position encoder.0.position-interpolated => motion.spindle-revs net spindle-velocity encoder.0.velocity => motion.spindle-speed-in net spindle-index-enable encoder.0.index-enable <=> motion.spindle-index-enable net spindle-index parport.0.pin-11-in-not => encoder.0.phase-Z net spindle-pulse parport.1.pin-10-in => encoder.0.phase-A ############################################# # Axis step and dir pins ############################################# net xdir => parport.0.pin-02-out net xstep => parport.0.pin-03-out setp parport.0.pin-03-out-reset 1 net adir => parport.0.pin-04-out net astep => parport.0.pin-05-out setp parport.0.pin-05-out-reset 1 net zdir => parport.0.pin-06-out net zstep => parport.0.pin-07-out setp parport.0.pin-07-out-reset 1 ############################################## # Limit and Home switches # HACKED ############################################### #&&&&&&&&&&&&& net xhome-raw <= parport.0.pin-13-in-not => debounce.0.0.in #&&&&&&&&&&&&& net xhome-filtered debounce.0.0.out => axis.0.home-sw-in #&&&&&&&&&&&&& net home-z <= parport.0.pin-15-in-not #&&&&&&&&&&&&& net all-limit <= parport.0.pin-12-in ############################################################################### # Activate coolant mist relay ############################################## net coolant-mist <= iocontrol.0.coolant-mist net coolant-mist => parport.0.pin-17-out ##################### # X AXIS ##################### setp stepgen.0.position-scale [AXIS_0]SCALE setp stepgen.0.steplen 1 setp stepgen.0.stepspace 0 setp stepgen.0.dirhold 16000 setp stepgen.0.dirsetup 31000 setp stepgen.0.maxaccel [AXIS_0]STEPGEN_MAXACCEL net xpos-cmd axis.0.motor-pos-cmd => stepgen.0.position-cmd net xpos-fb stepgen.0.position-fb => axis.0.motor-pos-fb net xstep <= stepgen.0.step net xdir <= stepgen.0.dir net xenable axis.0.amp-enable-out => stepgen.0.enable #&&&&&&&&&&&&& net all-limit => axis.0.neg-lim-sw-in #&&&&&&&&&&&&& net all-limit => axis.0.pos-lim-sw-in #&&&&&&&&&&&&& net home-x => axis.0.home-sw-in ################# ## Z AXIS ################# setp stepgen.2.position-scale [AXIS_2]SCALE setp stepgen.2.steplen 1 setp stepgen.2.stepspace 0 setp stepgen.2.dirhold 16000 setp stepgen.2.dirsetup 31000 setp stepgen.2.maxaccel [AXIS_2]STEPGEN_MAXACCEL net zpos-cmd axis.2.motor-pos-cmd => stepgen.2.position-cmd net zpos-fb stepgen.2.position-fb => axis.2.motor-pos-fb net zstep <= stepgen.2.step net zdir <= stepgen.2.dir net zenable axis.2.amp-enable-out => stepgen.2.enable #&&&&&&&&&&&&& net all-limit => axis.2.neg-lim-sw-in #&&&&&&&&&&&&& net all-limit => axis.2.pos-lim-sw-in #&&&&&&&&&&&&& net home-z => axis.2.home-sw-in ################# # ATC ################# setp stepgen.3.position-scale [AXIS_3]SCALE setp stepgen.3.steplen 1 setp stepgen.3.stepspace 0 setp stepgen.3.dirhold 16000 setp stepgen.3.dirsetup 31000 setp stepgen.3.maxaccel [AXIS_3]STEPGEN_MAXACCEL #net apos-cmd axis.3.motor-pos-cmd => stepgen.3.position-cmd #net apos-fb stepgen.3.position-fb => axis.3.motor-pos-fb net astep <= stepgen.3.step net adir <= stepgen.3.dir net aenable axis.3.amp-enable-out => stepgen.3.enable ################################################################################ # Hardware estop button # This is only setup that ensures external ESTOP works and also enables charge pump #net estop-out <= iocontrol.0.user-enable-out => charge-pump.enable #net estop.ext => charge-pump.enable # is what stepconf gives you and it doesn't work ################################################################################# #&&&&&&&&&&&&& net charge-pump => parport.0.pin-01-out #&&&&&&&&&&&&& net charge-pump <= charge-pump.out #&&&&&&&&&&&&& net estop-out iocontrol.0.user-enable-out #&&&&&&&&&&&&& net estop-ext <= parport.0.pin-10-in-not net estop-out <= iocontrol.0.user-enable-out #&&&&&&&&&&&&& net estop-ext => iocontrol.0.emc-enable-in #### HACK TO FORCE ON TO ALLOW SIMULATION setp iocontrol.0.emc-enable-in true ############################ # LOAD THE TOOLCHANGER ############################################################################# # purpose of the sim is to allow testing beyond initial loading and setting # of the existing tool ############################################################################# loadrt oracchanger addf oracchanger servo-thread loadrt timedelay count=1 addf timedelay.0 servo-thread setp timedelay.0.on-delay 5 net tool-change iocontrol.0.tool-change => oracchanger.toolchange net tool-changed iocontrol.0.tool-changed <= oracchanger.toolchanged net tool-number iocontrol.0.tool-prep-number => oracchanger.toolnumber net tool-oldnumber iocontrol.0.tool-number => oracchanger.currenttoolnumber net tool-prepare-loopback iocontrol.0.tool-prepare => iocontrol.0.tool-prepared net xhomed axis.0.homed => oracchanger.ishomedX net zhomed axis.2.homed => oracchanger.ishomedZ net delaystart timedelay.0.in <= oracchanger.delaystart net delaydone timedelay.0.out => oracchanger.delaydone net ontool oracchanger.starttool => iocontrol.0.currenttool #setp oracchanger.hometool 1 ########################################################################################### # testing redisclient net tool-change => redisclient.B0 net tool-changed => redisclient.B1 net tool-number => redisclient.D0 net tool-oldnumber => redisclient.D1 net xhomed => redisclient.B2 net zhomed => redisclient.B3 net delaystart => redisclient.B4 net delaydone => redisclient.B5 net ontool => => redisclient.D2