Continue to Site

Eng-Tips is the largest engineering community on the Internet

Intelligent Work Forums for Engineering Professionals

  • Congratulations IDS on being selected by the Eng-Tips community for having the most helpful posts in the forums last week. Way to Go!

Closed and Open loop current control for Brushless Servo Motors 3

Status
Not open for further replies.

FeX32

Mechanical
Jan 11, 2009
2,055
Hi guys,

I have been having an issue finding and specing a drive/amplifier for a motor (Closest I have is this: (to which I'm not sure will work)

I want to be able to run it in torque/current mode (with internal fast PI loop). But, I also want it to act like an amplifier and not have an internal current loop active.
That is, I would like to be able to have a mode where I can supply a voltage via my controller and have the Amp feedback the current, and then my controller reacts externally.

Are there any motor drives that are high performance in their built in current loops (via analog in) and also with the ability to run open loop current control?

Thanks for the help,

Fe
 
Replies continue below

Recommended for you

Mike:

I share the same hesitance you do about selling on this forum, but in principle our "direct PWM" drives, which accept the actual on/off PWM signals for each of the 6 power transistors for a 3-phase motor, could help the OP. This is because all of the loops, including the current loop, are closed digitally in the controller.

The large majority of these direct PWM drives are used with our own controllers, which have both the hardware and software to control these drives easily. We do have a few customers who disable the current loop digitally to run in voltage mode. We have at least one customer with his own controller who always uses the drives in voltage mode, not using the current feedback at all.

The drives in his power range could run to 15 kHz PWM, which means that they could be updated with new commands at 30 kHz.

But I don't know if these would be of practical use to the OP.

Curt Wilson
Omron Delta Tau
 
Thanks for the interest and comments guys.

Mike, I understand. I'll have to email you. I do have a local (I'm in Toronto) supplier for Kollmorgen. They are not nearly as knowledgeable (I won't elaborate..).

Curt, I'm interested for sure. If I can guarantee 30kHz current control loop with my generated control loop I would be happy. Actually, anything 16kHz and up should suffice.
However, what exactly does voltage mode mean technically? Can I add a current sensor manually to the motor and feed this back to my Real Time control box? Would this be easy to setup?

Can someone explain this "could run to 15 kHz PWM, which means that they could be updated with new commands at 30 kHz"
How can the PWM output be updated at twice the rate it outputs? Does this imply the update or analog input to the drive can run at 30kHz - or the Nyquist?

And just for the record, IMO nothing in this thread is selling. We are talking all technical, some drives and amps are simply technically different than others.

Thanks!

Fe

 
I think it's important to understand that with, say, a 15 kHz PWM, if you want anything near a current loop sine wave, about the best you can do is 1.5 kHz; 10 samples per cycle. The reason that a 15 kHz PWM can be sampled at 30 kHz is that you can update on both the leading and trailing edges.

To get a 20 kHz bandwidth you will need a PWM frequency of 100 kHz sampled on both edges. This is possible today with, say, Silicon Carbide FETs, but this may not be available off the shelf.

You might research Silicon Carbide Power Blocks interfaced with a high speed Field Bus.

Having said all that, I'd still suggest a linear servo amplifier. 20 kHz current loop bandwidths are not a problem.
 
Fe:

In a single PWM cycle, you have two decision points: when to turn on, and when to turn off. It is possible to have different command values for the two decision points. (It is not possible to have more, which I sometimes have to remind people of...) So you could update at 30 kHz for a 15 kHz PWM.

Our direct-PWM drives do have current sensors on two phases with ADCs and serial communications (SPI protocol) back to the controller. 95+% of our customers use the current feedback to close current loops and improve their dynamic performance. But a few don't, and just use the PWM outputs to command the phase voltages without regard to the current measurements.

Neither the hardware nor the software to command these drives is trivial. If you want 12-bit resolution on the 15 kHz PWM, you need your PWM counter to run at 60 MHz. You need to create a very accurate deadtime, generated in hardware between the top and bottom commands on each phase. If you want to use current feedback some of the time, you would have to implement the SPI interface.

Your software would need to rotate the command angle based on rotor angle feedback, be able to close all the desired loops, and generate the three individual phase commands (with or without current feedback) at a very high rate.

Is this within the scope of your project?

Curt Wilson
Omron Delta Tau
 
Thanks sreid.
1.5kHz sinus is high in my books. Below 500Hz sinus torque profile should be good.
Do these liner servo amplifiers have commutation and supply each of the 3 phases? I'm looking for ease of setup as well.

Thank you Curt.
I now understand where the 30kHz comes from.
While I would love to put this within the scope of my project, it just involves more on top that I am unsure what direction to go.
I can tell you that I will be using the best real time control system on the market that is capable of controlling PWM's for servo motors. Better than 100ns PWM generation.
(think of something like this:
I understand the software and hardware is not trivial.
This is why I am being particularly careful. I don't want to have to spend a lot of time on getting the commutation and PWM as well as the hardware right. I don't know this depth of servo hardware electronics.
So far, Options are:
1) I would like an amp or drive that runs fast that I can control the Analog inputs with my Real time solution and the drive/amp simply helps in converting (at at least 8kHz) this analog voltage signal to a voltage/current in the servo (it will have its own commutation and PWM). I then want at least the same speed feedback to my Real time software (or I can add a sensor to the motor).
2) The amp/drive does not generate the PWM and I generate these from my RT controller. It simply provides a current sink that responds to the fast voltage changes I give. I will then sense the current directly off the motor back to my controller.

Where I am stuck in #2 is weather I have to commutate the motor as well with my RT software? Or do drives/amps exist that can commutate but will accept PWM signals? (Sort of like the "direct PWMs" not sure)

My simulation shows a 8kHz control loop should do, but if I cascade the controller (like if I run a closed current drive) and then also feedback and control the setpoint really fast, there comes a point of instability. Mind you this is a very small point.

To summarize, I don't want to go with an option 1 and then regret it because option 2 will give me soo much more with some initial extra work.

Thanks for your thoughts.

[cheers]
 
Thanks sreid!

I have been using Simulink for simulations. How does it compare?

I use discrtized differential equations for every phase of the motor, at the bandwidth of interest.
 
FeX32,

My thought was that you probably needed to do simulations (which you are). This was based on the two choices you suggested, 1) a Power Block with you closing the current loop digitally or 2) letting the amplifier close the current loops and commutating the motor. If your primary task is to implement a control algorithm, I'd suggest option 2).

A Kollmorgen AKD amplifier can do this. Run it in current mode (the error signal to the amplifier is current). Also using a Kollmorgen motor and cables will simplify hook up.
 
Thanks guys.

Regarding simulation. I believe option 2 gives me less flexibility since I cannot bypass the drives internal current PI loop, and I am limited to the BW of the Ain and Aout.
If I then adaptively control the setpoint to this drives controller there is some risk of instability depending on how fast the setpoint changes. Inherent stability comes only when the outter control loop is faster than the internal PI. Which in this case it is significantly slower due to the AD and DA conversion.

Like before, pg. 142 here Ain has 16kHz and Aout is 4kHz. Internal PI current loop also runs at a least 16kHz.

Sim shows 16kHz is good enough. But I will have to overcome sensing at only 4Khz by adding a sensor to the motor (not really a big deal). And there is not really a better solution than to cascade the control.

However, I believe I can get more than 16kHz entire loop closure (and full motor flexibility) if I use something like:
 
Make certain that you are not confusing PWM frequency and current loop bandwidth. dspace is thought to be the "Gold Standard" for "Hardware in the Loop" control system development.
 
Thanks sreid.

I'm looking at an amp that will connect to my RT box custom made for the box.

It hase max PWM of more than 50kHz and default current feedback of 8kHz (from an Analog low pass filter), changeable to >20kHz.
There is no "current loop" as the current is closed by FPGA on my RT box.
This was the max I have seen.

I understand dSpace is known for "HIL", I have used it for this before actually.

Anything I should know?
 
Even 20 kHz bandwidth for current feedback is not exceptionally high. To have a minimum phase lag loop effect, the feed back bandwidth should be at least 10 times the current loop bandwidth.

Factor in digital delays. Conversion times, transmission times, velocity estimation time, etc. Sometimes these delays can be significant and cause loss of phase margin.
 
When controlling a brushless motor, the current loop is "inside" the commutation. So if you want to implement the current loop yourself (even to disable it sometimes), you must also perform the phase commutation for the motor yourself. Here is a block diagram of control tasks that I like to use:

[URL unfurl="true"]https://res.cloudinary.com/engineering-com/raw/upload/v1443718594/tips/Control_Modes_j6cn5b.vsd[/url]

(This is true unless you have a separate communications channel into a digital drive that is performing commutation and current loop -- say, a digital "torque-mode" drive -- that you could use to change the configuration and settings of the current loop.)
 
Thanks sreid,

I agree. The drive I am looking at now can get >150kHz on the feedback of current (I think it is basically an analog sensor on the motor). I think it is unreasonable to assume I will obtain this because I will have to filter at below 60kHz likely.
So if I get output updates to the motor through the drive at 20-50kHz I should be ok.
I understand there will be some conversion times added on. But at least with FPGA (which runs on my controller and feeds the drive) it will be minimal.

Thank you cswilson,
I cannot see your diagram.
I think I know what you mean by "inside". The fact that 1 phase is switched off while 2 are on periodically - we are switching the voltage (and thus current) on and off. (though the current would not drop so fast depending on the inductance) ?
I understand that commutation is fundamental to the operation of BLDC motors, but there is still for each of the 3 phases; v(t)=di/dt*L+R*i(t)+kb*w . Which means that the current is controlled directly by the voltage in each phase. Feeding back the current value (nominal or each phase), we should then be able to close the loop by providing a control voltage signal.
I know I simplified it a bit, but the fundamental dynamics should hold.

The commutation will be done by FPGA by my controller (with Hall signals from the motor). This should allow me full control of the current feedback and control of it.
Agree?
 
FeX32:

Hmmm... The diagram was linked as a Microsoft Vizio file, not as a simple graphic. If I have time later, I will see if I can provide a better method of linking or embedding it.

What I meant by the current loop being "inside" the commutation is that the outputs of the commutation algorithm -- the commanded phase currents needed to provide the commanded torque at this rotor angle -- are inputs to the current loops.

Since we live in a world of voltage sources, the job of the current loops is to calculate the phase voltages needed to get the actual phase currents to match the commanded values as closely as possible. Usually the phase voltage command values are encoded as PWM duty cycles in the output signals.

Of course, it is possible to dispense with the current loop and use the phase outputs of the commutation algorithm directly as voltage commands. Just don't expect the resulting torque to be proportional to the command input to the commutation algorithm, and don't expect the motor to be as responsive as with a current loop.

Curt Wilson
Omron Delta Tau
 
Thanks again Curt.
Thanks I'd appreciate to see a screen shot of the graphic is possible.

Curt said:
Since we live in a world of voltage sources, the job of the current loops is to calculate the phase voltages needed to get the actual phase currents to match the commanded values as closely as possible. Usually the phase voltage command values are encoded as PWM duty cycles in the output signals.

I understand this. So after this you are saying that maybe even if I compute these PWM phase voltages with FPGA it won't be as fast as a current loop closed by say an AKD or similar drive?
It would still be set in current/torque control, but instead of closing the loop directly by the drive I will use FPGA.
I will think about this some more.
 
FeX32:

I guess I didn't make myself very clear. Performance-wise, where these algorithms are computed -- controller or drive -- is not the important thing. (We often do both in the controller and get very high performance.)

It's just that the commutation must be done before the current loop, so that if you want to do the current loop in the controller, you must also do the commutation in the controller.

My performance comment was regarding current loop versus no current loop. Without a current loop, the motor current responds to voltage with an L/R time constant. With a current loop, the effective time constant is reduced to L/(R+K), where K is the proportional current loop gain. Another way of looking at it is that the frequency of the pole of current response is increased from R/L to (R+K)/L.
 
I see. Thanks for the response Curt.
This makes perfect sense to me. If no feedback and controller (typically a PI) is used we would see a difference in performance.
Likely quite a bit IMO. I presume the factor of V/R would also apply to the nominal value.
I like the L/(R+K) estimate for closed loop response time. I will keep this in mind for sure, thanks.

I typically compute a bode plot to estimate the closed loop response.
Though, I don't have much experience with servo drives, and computing one that includes all the intricacies of the drive looks non-simplistic (for example most dynamic systems I can derive the differential equations and go from there..).
So because of this I focused on accuracy of the motor dynamic equations and estimated the drive by including discrete bandwidths for signals to and from the motor dynamics (for closed loop response).
 
Status
Not open for further replies.

Part and Inventory Search

Sponsor