From: Jon E. <el...@pi...> - 2004-06-25 16:30:01
|
Alex Joni wrote: > After some time hacking with compiling the RTAI kernel and RCSLIB and > EMC (now i find all this pretty confortable :) I started integrating > my machine. > It will be a cutting CNC (for plasma and oxy-fuel cutting), maybe > somebody can give me some advice in using EMC for this purpose (what > G-Codes they use for Arc on, or Oxigen on, etc....) > > The main problem I am facing now is te following: > > I have a DC motor, driven by a Gecko G340 hooked up to an 1500 Impulse > encoder. The Gecko is running fine and the motor is spinning ok. I > wanted to use some feedback into EMC too, so I built a custom board > (very alike to the DRO, but using 2 x LS7166). This board is also > running ok, I can see the counts from the encoder. I built an module > und used it in EMCMOT. It runs ok, and when I turn the encoder I can > see the values for the Axis modify. > The problem is, using this approach I have 2 loopbacks using the same > encoder (one on the gecko and one from EMC). Is this possible? Is it > ok? Or should I just go with freqmod? Right now I get Axis following > errors when trying to move the axis (manual jog). Even if I don`t move > the axis, I just let EMC started, without doing nothing after some > time (5-10 seconds) I can see some impulses on the Step Pin and the > motor starts to turn. What you have to do is reduce the loop gain on each servo. If the total gain is too high, the system becomes unstable. if you don't know how to use the logging/plotting functions, you need to get that set up and plot the response of the total system. Some step pulses is no problem. All servo systems "hunt" for the null, and constantly pass it and have to go back. This should be very gentle, however, and not violent. If the gain is too high, it will get violent, and overheat the drive and motor. EMC has a deadband feature, which you should use. Setting the deadband to 1.5 x the encoder resolution is a minimum. The LS7166 has a problem when right around the zero location (which is exactly where it was when you started EMC). There is a transition between all zero's (the zero location) and one count minus from that, which is represented in binary by all one's. Either the electrical transient caused by changing 24 bits at once, or the carry ripple time for carrying through 24 bits is more than US Digital's designers expected, and you sometimes get latched counts that are between these values. This causes EMC to produce a HUGE output signal that causes analog servos to go nuts. There is a piece of code in the PID algorithm, I think, to suppress wild values. I don't know if your code bypasses this function. It is possible the problem I mention doesn't occur in your board, but it sure does in the Servo-to-Go boards which use this chip. Do you latch the encoder position before reading it? You have to do that so you don't catch the count register in the middle of a count, when the carries have not settled fully. Jon |