rendered paste body# core HAL config file for steppers
# first load the core RT modules that will be needed
# kinematics
loadrt trivkins
# motion controller, get name and thread periods from ini file
loadrt [EMCMOT]EMCMOT base_period_nsec=[EMCMOT]BASE_PERIOD servo_period_nsec=[EMCMOT]SERVO_PERIOD traj_period_nsec=[EMCMOT]TRAJ_PERIOD key=[EMCMOT]SHMEM_KEY
# stepper module, three step generators, all three using step/dir
loadrt stepgen step_type=0,0,0
loadrt hal_parport cfg="0x0378"
# spindle speed pwm
# loadrt freqgen step_type=1
loadrt pwmgen output_type=2
# hook functions to base thread (high speed thread for step generation)
addf stepgen.make-pulses base-thread
# generate spindle pwm base-thread
# addf freqgen.make-pulses base-thread
addf pwmgen.make-pulses base-thread
# hook functions to servo thread
addf stepgen.capture-position servo-thread
addf motion-command-handler servo-thread
addf motion-controller servo-thread
addf stepgen.update-freq servo-thread
# spindle?
# addf freqgen.update-freq servo-thread
addf pwmgen.update servo-thread
# connect position commands from motion module to step generator
newsig Xpos-cmd float
linksp Xpos-cmd <= axis.0.motor-pos-cmd
linksp Xpos-cmd => stepgen.0.position-cmd
newsig Ypos-cmd float
linksp Ypos-cmd <= axis.1.motor-pos-cmd
linksp Ypos-cmd => stepgen.1.position-cmd
newsig Zpos-cmd float
linksp Zpos-cmd <= axis.2.motor-pos-cmd
linksp Zpos-cmd => stepgen.2.position-cmd
# connect position feedback from step generators
# to motion module
newsig Xpos-fb float
linksp Xpos-fb <= stepgen.0.position-fb
linksp Xpos-fb => axis.0.motor-pos-fb
newsig Ypos-fb float
linksp Ypos-fb <= stepgen.1.position-fb
linksp Ypos-fb => axis.1.motor-pos-fb
newsig Zpos-fb float
linksp Zpos-fb <= stepgen.2.position-fb
linksp Zpos-fb => axis.2.motor-pos-fb
# connect enable signals for step generators
newsig Xen bit
linksp Xen <= axis.0.amp-enable-out
linksp Xen => stepgen.0.enable
newsig Yen bit
linksp Yen <= axis.1.amp-enable-out
linksp Yen => stepgen.1.enable
newsig Zen bit
linksp Zen <= axis.2.amp-enable-out
linksp Zen => stepgen.2.enable
# connect signals to step pulse generator outputs
newsig Xstep bit
newsig Xdir bit
newsig Ystep bit
newsig Ydir bit
newsig Zstep bit
newsig Zdir bit
linkps stepgen.0.step Xstep
linkps stepgen.0.dir Xdir
linkps stepgen.1.step Ystep
linkps stepgen.1.dir Ydir
linkps stepgen.2.step Zstep
linkps stepgen.2.dir Zdir
# spindle speed
newsig spindle-speed-cmd float
linkps motion.spindle-speed-out => spindle-speed-cmd
# linksp spindle-speed-cmd => freqgen.0.velocity
linksp spindle-speed-cmd => pwmgen.0.value
# determined emperically: changes if you change base period
# top speed at this gearing of about 1600 rpm
# setp freqgen.0.velocity-scale 36.0
setp pwmgen.0.scale 36
newsig pwmena bit
linksp pwmena pwmgen.0.enable
sets pwmena true
# accel limiting disabled
# setp freqgen.0.maxaccel 0.0
# create a signal for "spindle on"
newsig spindle_on bit
linksp spindle_on <= motion.spindle-on
# spindle enable
# linksp spindle_on => parport.0.pin-09-out
# setp parport.0.pin-09-out-invert 1
# linkpp freqgen.0.up => parport.0.pin-08-out
linkpp pwmgen.0.up => parport.0.pin-01-out
linkpp pwmgen.0.down => parport.0.pin-08-out
# set stepgen module scaling - get values from ini file
setp stepgen.0.position-scale [AXIS_0]INPUT_SCALE
setp stepgen.1.position-scale [AXIS_1]INPUT_SCALE
setp stepgen.2.position-scale [AXIS_2]INPUT_SCALE
# set stepgen module velocity limits - get values from ini file
setp stepgen.0.maxvel [AXIS_0]STEPGEN_MAXVEL
setp stepgen.1.maxvel [AXIS_1]STEPGEN_MAXVEL
setp stepgen.2.maxvel [AXIS_2]STEPGEN_MAXVEL
# set stepgen module accel limits - get values from ini file
setp stepgen.0.maxaccel [AXIS_0]STEPGEN_MAXACCEL
setp stepgen.1.maxaccel [AXIS_1]STEPGEN_MAXACCEL
setp stepgen.2.maxaccel [AXIS_2]STEPGEN_MAXACCEL
# load realtime portion of scope, just to have it handy
loadrt scope_rt