Setting Up BLDC spindle motor in Forward/Reverse direction.

More
2 years 2 months ago #308007 by amanker
I have setup linuxCNC using remora.
Its working nice. I want to replace PWM DC motor with BLDC motor.
BLDC contoller has enable and direction pins and 0-10V input pin. I am using PWM tp 0-10V converter.
When I use spindle i forward direction then its working. But in reverse direction its not rotating. I confirmed manullly that spindle/contoller is working ok in both direction.
I can see m3 and m4 signals properly triggering suitable pins. on m3 and m4 I can see enable pin is getting voltage. and like wise direction pin is also working ok. 
But I have noted that PWM out is only working in forward direction. In case of m4 there is no PWM out on pin.
Please help me.
Here is my HAL file.
Code:
# load the realtime components     loadrt [KINS]KINEMATICS     loadrt [EMCMOT]EMCMOT base_period_nsec=[EMCMOT]BASE_PERIOD servo_period_nsec=[EMCMOT]SERVO_PERIOD num_joints=[KINS]JOINTS     #loadrt remora-eth      loadrt remora chip_type=STM SPI_clk_div=32 PRU_base_freq=120000      #loadrt remora chip_type=LPC SPI_clk_div=64                   # estop loopback, SPI comms enable and feedback     net user-enable-out     <= iocontrol.0.user-enable-out        => remora.SPI-enable     net user-request-enable <= iocontrol.0.user-request-enable    => remora.SPI-reset     net remora-status     <= remora.SPI-status     => iocontrol.0.emc-enable-in          # add the remora and motion functions to threads     addf remora.read servo-thread     addf motion-command-handler servo-thread     addf motion-controller servo-thread     addf remora.update-freq servo-thread     addf remora.write servo-thread          # Joint 0 setup     setp remora.joint.0.scale         [JOINT_0]SCALE     setp remora.joint.0.maxaccel     [JOINT_0]STEPGEN_MAXACCEL     setp remora.joint.0.deadband     [JOINT_0]DEADBAND     setp remora.joint.0.pgain     [JOINT_0]P_GAIN     setp remora.joint.0.ff1gain     [JOINT_0]FF1_GAIN     net xpos-cmd         <= joint.0.motor-pos-cmd     => remora.joint.0.pos-cmd       net j0pos-fb         <= remora.joint.0.pos-fb     => joint.0.motor-pos-fb     net j0enable         <= joint.0.amp-enable-out     => remora.joint.0.enable # Joint 1 setup     setp remora.joint.1.scale         [JOINT_1]SCALE     setp remora.joint.1.maxaccel     [JOINT_1]STEPGEN_MAXACCEL     setp remora.joint.1.deadband     [JOINT_1]DEADBAND     setp remora.joint.1.pgain         [JOINT_1]P_GAIN     setp remora.joint.1.ff1gain     [JOINT_1]FF1_GAIN     net j1pos-cmd         <= joint.1.motor-pos-cmd     => remora.joint.1.pos-cmd     net j1pos-fb         <= remora.joint.1.pos-fb     => joint.1.motor-pos-fb      net j1enable         <= joint.1.amp-enable-out     => remora.joint.1.enable # Joint 2 setup     setp remora.joint.2.scale         [JOINT_2]SCALE     setp remora.joint.2.maxaccel     [JOINT_2]STEPGEN_MAXACCEL     setp remora.joint.2.deadband     [JOINT_2]DEADBAND     setp remora.joint.2.pgain         [JOINT_2]P_GAIN     setp remora.joint.2.ff1gain     [JOINT_2]FF1_GAIN     net j2pos-cmd         <= joint.2.motor-pos-cmd     => remora.joint.2.pos-cmd     net j2pos-fb         <= remora.joint.2.pos-fb     => joint.2.motor-pos-fb     net j2enable         <= joint.2.amp-enable-out     => remora.joint.2.enable # Joint 3 setup     setp remora.joint.3.scale         [JOINT_3]SCALE     setp remora.joint.3.maxaccel     [JOINT_3]STEPGEN_MAXACCEL     setp remora.joint.3.deadband     [JOINT_3]DEADBAND     setp remora.joint.3.pgain         [JOINT_3]P_GAIN     setp remora.joint.3.ff1gain     [JOINT_3]FF1_GAIN     net j3pos-cmd         <= joint.3.motor-pos-cmd     => remora.joint.3.pos-cmd     net j3pos-fb         <= remora.joint.3.pos-fb     => joint.3.motor-pos-fb     net j3enable         <= joint.3.amp-enable-out     => remora.joint.3.enable # Joint 4 setup     setp remora.joint.4.scale         [JOINT_4]SCALE     setp remora.joint.4.maxaccel     [JOINT_4]STEPGEN_MAXACCEL     setp remora.joint.4.deadband     [JOINT_4]DEADBAND     setp remora.joint.4.pgain         [JOINT_4]P_GAIN     setp remora.joint.4.ff1gain     [JOINT_4]FF1_GAIN     net j4pos-cmd         <= joint.4.motor-pos-cmd     => remora.joint.4.pos-cmd     net j4pos-fb         <= remora.joint.4.pos-fb     => joint.4.motor-pos-fb     net j4enable         <= joint.4.amp-enable-out     => remora.joint.4.enable # end-stops     net X-min       remora.input.0         => joint.0.neg-lim-sw-in      net X-max       remora.input.1         => joint.0.home-sw-in  joint.0.pos-lim-sw-in #    net X-max       remora.input.1         => joint.0.pos-lim-sw-in          net Y-min       remora.input.2         => joint.1.neg-lim-sw-in     net Y-max       remora.input.3         => joint.1.home-sw-in joint.1.pos-lim-sw-in #    net Y-max       remora.input.3         => joint.1.pos-lim-sw-in          net Z-min       remora.input.4         => joint.2.neg-lim-sw-in     net Z-max       remora.input.5         => joint.2.home-sw-in joint.2.pos-lim-sw-in #    net Z-max       remora.input.5         => joint.2.pos-lim-sw-in         net A-max        remora.input.6            => joint.3.home-sw-in            # Probe #loadrt debounce cfg=1 #addf debounce.0 servo-thread #setp debounce.0.delay 100 #unlinkp motion.probe-input #net probe-in debounce.0.0.in #net probe-filt debounce.0.0.out => motion.probe-input      net probe-input motion.probe-input <= remora.input.7 #    net probe-input => qtdragon.led-probe      # Spindle #    loadrt pwmgen output_type=0 #    addf pwmgen.update servo-thread #    addf pwmgen.make-pulses servo-thread #    net spindle-speed-cmd spindle.0.speed-out => pwmgen.0.value #    net spindle-on spindle.0.on => pwmgen.0.enable #    net spindle-pwm pwmgen.0.pwm => remora.output.0 # Set the spindle's top speed in RPM #    setp pwmgen.0.scale 12000 #    net spindle-speed-feedback spindle.0.speed-out-rps => spindle.0.speed-in     loadrt scale count=7     addf scale.0 servo-thread     addf scale.1 servo-thread     setp scale.0.gain 0.008333 # PWM per RPM, calculated over full scale. Example: 0-100 PWM, 12000 rpm: (100/12000)  = 0.008333     net spindle-scale-in spindle.0.speed-out => scale.0.in scale.1.in     net spindle-speed-scaled scale.0.out => remora.SP.0      # spindle enable pin     net spindle-enable spindle.0.on => remora.output.1     # spindle DIR pin change to where ever it goes     net spindle-rev spindle.0.reverse => remora.output.2     setp scale.1.gain 0.000965     #net spindle-amp-in spindle.0.speed-out => scale.1.in     #net remora-status => halui.machine.on     #net user-enable-out => halui.estop.reset     #net remora-status remora.SPI-status => estop_latch.ok-in     #net estop-status estop_latch.ok-out => iocontrol.0.emc-enable-in     net tool-prepare-loopback iocontrol.0.tool-prepare => iocontrol.0.tool-prepared     

Please Log in to join the conversation.

More
2 years 2 months ago #308015 by Henk
Mu guess is that your pwm gen doesn't like negative spindle speeds and defaults to 0.

So try to change this line in your hal file....

net spindle-scale-in spindle.0.speed-out => scale.0.in scale.1.in

To this....
net spindle-scale-in spindle.0.speed-out-abs => scale.0.in scale.1.in

Please Log in to join the conversation.

More
2 years 2 months ago #308016 by Henk
Copied from the motion man page...



spindle.M.speed-out OUT FLOAT

Desired spindle speed in rotations per minute.

spindle.M.speed-out-abs OUT FLOAT

Desired spindle speed in rotations per minute, always positive regardless of spindle direction.

Please Log in to join the conversation.

Time to create page: 0.857 seconds
Powered by Kunena Forum