Advertisement
Guest User

Working Linuxcnc PID Speed control

a guest
Apr 9th, 2017
127
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.66 KB | None | 0 0
  1. #cnc3040.hal for linuxcnc I'm using a Ebay 400W 45v dv spindle, 50v 10a speed control
  2. #3 neo magnetsepoxied in the fan of the spindle. hall effect sensor 5v-36v brown + blue - black signal
  3. # coming off my pin 1 fof my ebay Parallel port BOB
  4.  
  5. #Youtube RobiSydney
  6. #freenode irc #linuxcnc Crom or Cromaglious
  7.  
  8. # Generated by stepconf 1.1 at Sat Apr 8 18:10:51 2017
  9. # If you make changes to this file, they will be
  10. # overwritten when you run stepconf again
  11. loadrt [KINS]KINEMATICS
  12. loadrt [EMCMOT]EMCMOT base_period_nsec=[EMCMOT]BASE_PERIOD servo_period_nsec=[EMCMOT]SERVO_PERIOD num_joints=[KINS]JOINTS
  13. loadrt hal_parport cfg="0 out"
  14. setp parport.0.reset-time 2500
  15. loadrt stepgen step_type=0,0,0
  16.  
  17.  
  18.  
  19.  
  20. #============================================================
  21. #============================================================
  22. #============================================================
  23. #============================================================
  24.  
  25.  
  26. # --------------------------------------------------
  27. # Closed Loop Spindle Control
  28. # --------------------------------------------------
  29. # Initialize the encoder (spindle)
  30. loadrt encoder num_chan=1
  31. addf encoder.update-counters base-thread
  32. addf encoder.capture-position servo-thread
  33. setp encoder.0.position-scale 0.05
  34. setp encoder.0.counter-mode 1
  35.  
  36. # Initialize the PID
  37. loadrt pid num_chan=1
  38. addf pid.0.do-pid-calcs servo-thread
  39. setp pid.0.Pgain 1
  40. setp pid.0.Igain 1
  41. setp pid.0.Dgain 0.5
  42. setp pid.0.maxoutput 2000
  43. setp pid.0.FF0 1
  44. setp pid.0.FF1 1
  45. setp pid.0.FF2 1
  46. setp pid.0.enable 1
  47. setp pid.0.deadband 50
  48. setp pid.0.maxerror 2000
  49.  
  50. # Initialize the pwmgen
  51. loadrt pwmgen output_type=0
  52. addf pwmgen.update servo-thread
  53. addf pwmgen.make-pulses base-thread
  54. setp pwmgen.0.pwm-freq 2000.0
  55. setp pwmgen.0.scale 12000
  56. setp pwmgen.0.dither-pwm true
  57.  
  58. # Initialize the scale
  59. # (This is used to scale the encoder pulse to RPM)
  60. # (In my case, i have 1 ppr so it is scaled by 60)
  61. loadrt scale count=1
  62. addf scale.0 servo-thread
  63. setp scale.0.gain 1
  64.  
  65. # Initialize the sum2
  66. loadrt sum2 count=1
  67. addf sum2.0 servo-thread
  68.  
  69. # Attach the motion.spindle-on to enable the pwmgen and the pid
  70. net spindle_enable motion.spindle-on => pwmgen.0.enable => pid.0.enable
  71.  
  72. # Attach the encoder to the parallel port pin
  73. net parport_10_in parport.0.pin-10-in => encoder.0.phase-A
  74.  
  75. # Attach the encoder to the motion and the scale
  76. net spindle_rev_count encoder.0.position => motion.spindle-revs
  77. net spindle_index_enable encoder.0.index-enable <=> motion.spindle-index-enable
  78. # net encoder_raw_velocity encoder.0.velocity => motion.spindle-speed-in
  79. net encoder_raw_velocity => motion.spindle-speed-in
  80.  
  81. # Attach the pid to the scale, motion, and sum
  82. net pid_feedback pid.0.feedback <= encoder.0.velocity # motion.spindle-speed-in
  83. net pid_command pid.0.command <= motion.spindle-speed-out => sum2.0.in0
  84. # net pid_output pid.0.output => sum2.0.in1
  85.  
  86. # Attach the pwmgen to the sum and the parallel port
  87. net pwmgen_value pwmgen.0.value <= pid.0.output
  88. net pwmgen_out pwmgen.0.pwm => parport.0.pin-01-out
  89.  
  90. #============================================================
  91. #============================================================
  92. #============================================================
  93. #============================================================
  94.  
  95.  
  96.  
  97. addf parport.0.read base-thread
  98. addf stepgen.make-pulses base-thread
  99. addf parport.0.write base-thread
  100. addf parport.0.reset base-thread
  101.  
  102. addf stepgen.capture-position servo-thread
  103. #addf encoder.capture-position servo-thread
  104. addf motion-command-handler servo-thread
  105. addf motion-controller servo-thread
  106. addf stepgen.update-freq servo-thread
  107.  
  108. #net spindle-cmd-rpm => pwmgen.0.value
  109. #net spindle-on <= motion.spindle-on => pwmgen.0.enable
  110. #net spindle-pwm <= pwmgen.0.pwm
  111. setp pwmgen.0.offset 0.0
  112.  
  113. #net spindle-cmd-rpm <= motion.spindle-speed-out
  114. net spindle-cmd-rpm-abs <= motion.spindle-speed-out-abs
  115. net spindle-cmd-rps <= motion.spindle-speed-out-rps
  116. net spindle-cmd-rps-abs <= motion.spindle-speed-out-rps-abs
  117. net spindle-at-speed => motion.spindle-at-speed
  118. net spindle-ccw <= motion.spindle-reverse
  119.  
  120. #setp encoder.0.position-scale 3.000000
  121. #setp encoder.0.counter-mode 1
  122. #net spindle-position encoder.0.position => motion.spindle-revs
  123. #net spindle-velocity-feedback-rps encoder.0.velocity => motion.spindle-speed-in
  124. #net spindle-index-enable encoder.0.index-enable <=> motion.spindle-index-enable
  125. #net spindle-phase-a encoder.0.phase-A
  126. #net spindle-phase-b encoder.0.phase-B
  127. #net spindle-index encoder.0.phase-Z
  128.  
  129. net probe-in => motion.probe-input
  130.  
  131. #net spindle-pwm => parport.0.pin-01-out
  132. net xstep => parport.0.pin-02-out
  133. setp parport.0.pin-02-out-reset 1
  134. net xdir => parport.0.pin-03-out
  135. net ystep => parport.0.pin-04-out
  136. setp parport.0.pin-04-out-reset 1
  137. net ydir => parport.0.pin-05-out
  138. net zstep => parport.0.pin-06-out
  139. setp parport.0.pin-06-out-reset 1
  140. net zdir => parport.0.pin-07-out
  141. net astep => parport.0.pin-08-out
  142. setp parport.0.pin-08-out-reset 1
  143. net adir => parport.0.pin-09-out
  144. net xenable => parport.0.pin-14-out
  145. net spindle-ccw => parport.0.pin-16-out
  146. net spindle-on => parport.0.pin-17-out
  147. #net spindle-phase-a <= parport.0.pin-10-in
  148. net home-y <= parport.0.pin-11-in
  149. net home-z <= parport.0.pin-12-in
  150. net probe-in <= parport.0.pin-13-in
  151. net home-x <= parport.0.pin-15-in
  152.  
  153. setp stepgen.0.position-scale [JOINT_0]SCALE
  154. setp stepgen.0.steplen 1
  155. setp stepgen.0.stepspace 0
  156. setp stepgen.0.dirhold 36500
  157. setp stepgen.0.dirsetup 36500
  158. setp stepgen.0.maxaccel [JOINT_0]STEPGEN_MAXACCEL
  159. net xpos-cmd joint.0.motor-pos-cmd => stepgen.0.position-cmd
  160. net xpos-fb stepgen.0.position-fb => joint.0.motor-pos-fb
  161. net xstep <= stepgen.0.step
  162. net xdir <= stepgen.0.dir
  163. net xenable joint.0.amp-enable-out => stepgen.0.enable
  164. net home-x => joint.0.home-sw-in
  165.  
  166. setp stepgen.1.position-scale [JOINT_1]SCALE
  167. setp stepgen.1.steplen 1
  168. setp stepgen.1.stepspace 0
  169. setp stepgen.1.dirhold 36500
  170. setp stepgen.1.dirsetup 36500
  171. setp stepgen.1.maxaccel [JOINT_1]STEPGEN_MAXACCEL
  172. net ypos-cmd joint.1.motor-pos-cmd => stepgen.1.position-cmd
  173. net ypos-fb stepgen.1.position-fb => joint.1.motor-pos-fb
  174. net ystep <= stepgen.1.step
  175. net ydir <= stepgen.1.dir
  176. net yenable joint.1.amp-enable-out => stepgen.1.enable
  177. net home-y => joint.1.home-sw-in
  178.  
  179. setp stepgen.2.position-scale [JOINT_2]SCALE
  180. setp stepgen.2.steplen 1
  181. setp stepgen.2.stepspace 0
  182. setp stepgen.2.dirhold 36500
  183. setp stepgen.2.dirsetup 36500
  184. setp stepgen.2.maxaccel [JOINT_2]STEPGEN_MAXACCEL
  185. net zpos-cmd joint.2.motor-pos-cmd => stepgen.2.position-cmd
  186. net zpos-fb stepgen.2.position-fb => joint.2.motor-pos-fb
  187. net zstep <= stepgen.2.step
  188. net zdir <= stepgen.2.dir
  189. net zenable joint.2.amp-enable-out => stepgen.2.enable
  190. net home-z => joint.2.home-sw-in
  191.  
  192. net estop-out <= iocontrol.0.user-enable-out
  193. net estop-out => iocontrol.0.emc-enable-in
  194.  
  195. loadusr -W hal_manualtoolchange
  196. net tool-change iocontrol.0.tool-change => hal_manualtoolchange.change
  197. net tool-changed iocontrol.0.tool-changed <= hal_manualtoolchange.changed
  198. net tool-number iocontrol.0.tool-prep-number => hal_manualtoolchange.number
  199. net tool-prepare-loopback iocontrol.0.tool-prepare => iocontrol.0.tool-prepared
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement