There are 8 messages in this thread.
You are currently looking at messages 0 to 8.
I am working on a PID control loop for a brushed DC motor, and everything works fine and dandy at high speeds. However, the system see a wide variety of loads, even at low speeds, and I am having trouble controlling this situation. I have used a gearbox and this obviously helps out a ton, but am wondering if anyone has pointers on getting it to work on a motor without a gearbox (other than over sizing the crap out of the motor)? The motor has a 500 count encoder which I am using a x4 count on a dsPIC, so I have 2000 pulses per revolution. I have tried interrupting on every pulse, and expected time per pulse and recalculated the error, but to no avail. I have tried counting pulses over longer durations without much luck. The system is really sensitive at low speeds. Oh, and the goal is constant speed control. Nothing else. Thanks for any suggestions!
greginfinity wrote: > I am working on a PID control loop for a brushed DC motor, and everything > works fine and dandy at high speeds. However, the system see a wide > variety of loads, even at low speeds, and I am having trouble controlling > this situation. I have used a gearbox and this obviously helps out a ton, > but am wondering if anyone has pointers on getting it to work on a motor > without a gearbox (other than over sizing the crap out of the motor)? The > motor has a 500 count encoder which I am using a x4 count on a dsPIC, so I > have 2000 pulses per revolution. I have tried interrupting on every pulse, > and expected time per pulse and recalculated the error, but to no avail. I > have tried counting pulses over longer durations without much luck. The > system is really sensitive at low speeds. > > Oh, and the goal is constant speed control. Nothing else. Thanks for any > suggestions! It's really not clear what your problem is. Does it go unstable? Does the speed vary too much? Does the meaning of "too much" change as the speed goes down? If you measure your performance as the difference between actual and target speed, and if the absolute value of your goal does not change as the speed goes down, then you ought to be able to control things just fine. If you measure your performance as "commanded speed +/- 10%" then you're going to be in trouble when the commanded speed drops to zero, no matter what. I could see problems if your torque requirement goes up as the speed goes down (is this why you're mentioning upping the motor size?), or if you're running into problems with cogging torque in the motor, but you've still lost me as to the particular problem. So: Tell the story of the problem. What is the system supposed to do, and how does it deviate? When does this become a problem? What causes your load to vary? Have you formed any theories of what your problem is? -- Tim Wescott Wescott Design Services http://www.wescottdesign.com Do you need to implement control loops in software? "Applied Control Theory for Embedded Systems" gives you just what it says. See details at http://www.wescottdesign.com/actfes/actfes.html
greginfinity wrote: > > I am working on a PID control loop for a brushed DC motor, and > everything works fine and dandy at high speeds. However, the > system see a wide variety of loads, even at low speeds, and I am > having trouble controlling this situation. I have used a gearbox > and this obviously helps out a ton, but am wondering if anyone > has pointers on getting it to work on a motor without a gearbox > (other than over sizing the crap out of the motor)? The motor > has a 500 count encoder which I am using a x4 count on a dsPIC, > so I have 2000 pulses per revolution. I have tried interrupting > on every pulse, and expected time per pulse and recalculated the > error, but to no avail. I have tried counting pulses over longer > durations without much luck. The system is really sensitive at > low speeds. > > Oh, and the goal is constant speed control. Nothing else. Thanks > for any suggestions! To get good low speed operation measure the back (generated) emf from the motor to measure its speed. You do this by driving it with pulsed power, and measuring while the pulse is off. -- [mail]: Chuck F (cbfalconer at maineline dot net) [page]: <http://cbfalconer.home.att.net> Try the download section.
On Jul 14, 3:07=A0pm, CBFalconer <cbfalco...@yahoo.com> wrote: > greginfinity wrote: > > > I am working on a PID control loop for a brushed DC motor, and > > everything works fine and dandy at high speeds. =A0However, the > > system see a wide variety of loads, even at low speeds, and I am > > having trouble controlling this situation. =A0I have used a gearbox > > and this obviously helps out a ton, but am wondering if anyone > > has pointers on getting it to work on a motor without a gearbox > > (other than over sizing the crap out of the motor)? =A0The motor > > has a 500 count encoder which I am using a x4 count on a dsPIC, > > so I have 2000 pulses per revolution. =A0I have tried interrupting > > on every pulse, and expected time per pulse and recalculated the > > error, but to no avail. =A0I have tried counting pulses over longer > > durations without much luck. =A0The system is really sensitive at > > low speeds. > > > Oh, and the goal is constant speed control. =A0Nothing else. =A0Thanks > > for any suggestions! > > To get good low speed operation measure the back (generated) emf > from the motor to measure its speed. =A0You do this by driving it > with pulsed power, and measuring while the pulse is off. =A0 > > -- > =A0[mail]: Chuck F (cbfalconer at maineline dot net) > =A0[page]: <http://cbfalconer.home.att.net> > =A0 =A0 =A0 =A0 =A0 =A0 Try the download section.- Hide quoted text - > > - Show quoted text - Hi I've had good luck at low speeds by measuring the current with a series resistance. I measure the DC resistance of the motor. I then use this to create a voltage that is subtracted from the running voltage of the motor to find the back emf that is used for feedback in the control loop. This works well at speeds close to zero but needs tweeking to get it to work all the way to zero speed. It is about the same as the pulse back emf method but simpler in that it doesn't require sampling time. Dwight
greginfinity wrote: > I am working on a PID control loop for a brushed DC motor, and everything > works fine and dandy at high speeds. However, the system see a wide > variety of loads, even at low speeds, and I am having trouble controlling > this situation. I have used a gearbox and this obviously helps out a ton, > but am wondering if anyone has pointers on getting it to work on a motor > without a gearbox (other than over sizing the crap out of the motor)? The > motor has a 500 count encoder which I am using a x4 count on a dsPIC, so I > have 2000 pulses per revolution. I have tried interrupting on every pulse, > and expected time per pulse and recalculated the error, but to no avail. I > have tried counting pulses over longer durations without much luck. The > system is really sensitive at low speeds. What do you mean by "low" speeds? 1rev per second, 1 rev per minute, 1 rev per hour? What kind of control are you using? What's the sample rate? The D of a PID loop could be getting very little information at very low speeds with only 2000 ppr. You really need to analyse the whole feedback loop to look for potential instabilities. Also watch for stiction effects. Very non- linear and bugger up the best laid plans. A rule of thumb for initially sizing a motor is to choose one with a rotor J about the same as the load J (allowing for any gearbox). You might also find it easier to use incremental position control at very low speeds, since at these speeds that's really what you want to do- apply a great deal of torque if the rotor position is away from the setpoint. JS
CBFalconer wrote: > greginfinity wrote: >> I am working on a PID control loop for a brushed DC motor, and >> everything works fine and dandy at high speeds. However, the >> system see a wide variety of loads, even at low speeds, and I am >> having trouble controlling this situation. I have used a gearbox >> and this obviously helps out a ton, but am wondering if anyone >> has pointers on getting it to work on a motor without a gearbox >> (other than over sizing the crap out of the motor)? The motor >> has a 500 count encoder which I am using a x4 count on a dsPIC, >> so I have 2000 pulses per revolution. I have tried interrupting >> on every pulse, and expected time per pulse and recalculated the >> error, but to no avail. I have tried counting pulses over longer >> durations without much luck. The system is really sensitive at >> low speeds. >> >> Oh, and the goal is constant speed control. Nothing else. Thanks >> for any suggestions! > > To get good low speed operation measure the back (generated) emf > from the motor to measure its speed. You do this by driving it > with pulsed power, and measuring while the pulse is off. > May not work if the basic problem is the low speed itself (i.e. stiction or some other oddball process), but yes, it's a handy way to get tachometer action without putting a tach on there. I wonder if the OP is ever going to respond to questions, or if this thread is yet another Rorschach blot? -- Tim Wescott Wescott Design Services http://www.wescottdesign.com Do you need to implement control loops in software? "Applied Control Theory for Embedded Systems" gives you just what it says. See details at http://www.wescottdesign.com/actfes/actfes.html
In article <g5hjp0$rns$1...@aioe.org>, JSprocket says... > greginfinity wrote: > > I am working on a PID control loop for a brushed DC motor, and everything > > works fine and dandy at high speeds. However, the system see a wide > > variety of loads, even at low speeds, and I am having trouble controlling > > this situation. I have used a gearbox and this obviously helps out a ton, > > but am wondering if anyone has pointers on getting it to work on a motor > > without a gearbox (other than over sizing the crap out of the motor)? The > > motor has a 500 count encoder which I am using a x4 count on a dsPIC, so I > > have 2000 pulses per revolution. I have tried interrupting on every pulse, > > and expected time per pulse and recalculated the error, but to no avail. I > > have tried counting pulses over longer durations without much luck. The > > system is really sensitive at low speeds. > > What do you mean by "low" speeds? 1rev per second, 1 rev per minute, 1 > rev per hour? > > What kind of control are you using? What's the sample rate? The D of a > PID loop could be getting very little information at very low speeds > with only 2000 ppr. You really need to analyse the whole feedback loop > to look for potential instabilities. Also to add to the questions for the original poster, what kind and size of brushed DC motor? Robert ** Posted from http://www.teranews.com **
On Jul 14, 9:36=EF=BF=BDpm, "greginfinity" <gjohns...@ximedica.com> wrote: > I am working on a PID control loop for a brushed DC motor, and everything > works fine and dandy at high speeds. =EF=BF=BDHowever, the system see a w= ide > variety of loads, even at low speeds, and I am having trouble controlling > this situation. =EF=BF=BDI have used a gearbox and this obviously helps o= ut a ton, > but am wondering if anyone has pointers on getting it to work on a motor > without a gearbox (other than over sizing the crap out of the motor)? =EF= =BF=BDThe > motor has a 500 count encoder which I am using a x4 count on a dsPIC, so = I > have 2000 pulses per revolution. =EF=BF=BDI have tried interrupting on ev= ery pulse, > and expected time per pulse and recalculated the error, but to no avail. = =EF=BF=BDI > have tried counting pulses over longer durations without much luck. =EF= =BF=BDThe > system is really sensitive at low speeds. =EF=BF=BD > > Oh, and the goal is constant speed control. =EF=BF=BDNothing else. =EF=BF= =BDThanks for any > suggestions! Sounds like your proportional gain is too low. At low speed you may need as much as 5 times what works at high speed.