# 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