Maximizing the bandwidth of Torque Control

The latest achievement in IONI servo drive development was the maximization of torque control bandwidth. IONI actuates motor by a 20 kHz pulse width modulated (PWM) power output which essentially means switching the supply voltage between 0V and supply voltage (HV+) very fast causing the desired current to flow in the motor coils. Drive samples coil currents once at every PWM cycle and also re-calculates the PWM duty cycles on every cycle.

Last couple of we have spent perfecting the torque controller speed without sacrificing the dynamic range or smoothness. Bandwidth of controller is dictated by two factors: update rate and delay. Update rate was already at maximum (every cycle) but previously the delay was one full PWM cycle (50 µs). By optimizing code enough, drive is able to complete torque control calculations within half PWM cycle (<25 µs) which shortens the delay by 25 µs.

High bandwidth torque control timing diagram. Torque controller has the highest bandwidth when update rate is at maximum and delay at minimum.

High bandwidth torque control timing diagram demonstrating half PWM cycle delay and full PWM frequency update rate. Torque controller has the highest bandwidth when the update rate is at the maximum and delay at the minimum.

Ok, 25 µs doesn’t sound much. But it actually is more notable than it first seems. This change yields 30-50% boost in torque control bandwidth which can be seen sharper change of torque without causing any overshoot. This allows us to set position and velocity control gains higher without losing stability. In the end, the result is more stable and more stiff servo motor.

Torque controller step response with one PWM cycle torque control delay (top) and half PWM cycle delay ( bot). Notice the overshoot caused by the additional delay.

Torque controller step response with one PWM cycle torque control delay (top) and half PWM cycle delay (bot) without changing torque controller gains. Notice the overshoot caused by the additional delay. The overshoot can be cured by lowering torque control gains, but that also reduces bandwidth.

Never seen servo motor so stiff :)

3-phase magic trick

Latest innovation made to IONI firmware allows generating 15% higher output voltage for 3 phase AC motors which in practice means 15% greater maximum possible speed of motor. This is achieved by by altering the duty cycle generation of power stage so that it’s being utilized better for this kind of waveforms.

By looking the typical 3-phase motor voltage waveforms below, one can notice the peaks of sine waves occur one-at-a-time which means there is some headroom in the opposing polarity waves.

Standard 3 phase sinusoidal waveforms. Range from 1 to -1 means it uses full output voltage span available in drive (i.e. 0V to 50V).

Standard 3 phase sinusoidal waveforms. Range from 1 to -1 means it uses full output voltage span available in drive (i.e. 0V to 55V)

We can utilize these empty gaps by shifting all three waves up and down so that empty gaps become filled.

Same signals with summed third harmonic (cyan) to all phase values. This reduces peak amplitude of all signals by 16% without affecting to any phase-to-phase waveform shape or amplitude.

Same signals with summed third harmonic (cyan) to all phase values. This reduces peak amplitude of all signals by 15% without affecting to any phase-to-phase waveform shape or amplitude. In other words, motor sees no difference between this and the original.

After this step, we can multiply them by 1.15 without exceeding the maximum range of +/-1. This method has been tested and it works flawlessly. Same smoothness but just a bit higher speed range is available from the drive. The trick effectively does same as increasing drive supply voltage from 55 V to 64 V without actually increasing it.

This, and as many as possible, new features of IONI will be ported back to ARGON as soon as the IONI is out.

Adaptive current limit

We have been experimenting with adaptive current limit on IONI prototypes. This means there isn’t fixed specifications saying how much current drive outputs continuously and peak but there is just one specification: maximum. Drive will allow maximum output if it runs cool enough and will start throttling down current if temperature rises beyond certain level. This means, if you cool it well, you will get lots of power.

So far it seems to be working very nicely! See the video below.

As we were now able to push prototypes to their limits without worrying to break the only units, it turned out that we have been underestimating them! Without cooling it seems to output approx 9-10 Amps and with cooling 15 Amps (actually it could go higher but the lab power supply ran out of juice). What do you think about this?

Fanuc serial pulse coder support for Argon servo drive

As Fanuc servo motors are quite common target for drive retrofitting, it was tempting idea to make native support for their serial communication based encoder on Argon drive.

The protocol seems quite straightforward based on the details people have found out. So without much wasting time, I purchased a Fanuc motor and hooked it on the drive. Argon encoder port has total of three programmable RS422 inputs and two RS485 inputs/outputs which would make it possible to communicate with almost any kind of serial encoder.

Fanuc servo motor with serial pulse code connected to Argon drive

Fanuc “red cap” servo motor with serial pulse code connected to Argon drive

Fanuc encoder outputs data in form of asynchronous serial communication that is transmitted and received by UART. During testing, it occurred to me that encoder outputs very unusual 76 bit word with single start and stop bit. Standard UART support 5 to 8 bit words so the internal UART of drive’s microcontroller will not help here. Implementing a custom 76 bit 1024 kbps serial receiver with bare software would be so tricky that plan of supporting Fanuc protocol is unfortunately looking quite improbable at the moment.

The working solutions for using a Fanuc motor are:

Most of serial encoder protocols (SSI, BiSS, etc) use SPI style transmission which is way easier to implement on software. Plan of supporting those is in the future plans, we just need some hardware and time to begin with.

How high dynamic range torque control works?

Motor coil current sensing is one of the most critical component in a well behaving motor drive. This is true because current readout data is being used as feedback signal for closed loop torque controller as motor torque is directly proportional to coil currents. The importance of good torque control can be understood by knowing the fact that the the final step in drive’s signal path is always a torque controller. This means, any error in current sensing will eventually reflect to motor shaft, no matter which control mode is being used.

Today’s big achievement was the implementation of adaptive current sensing for high dynamic range torque control (HDRT) for ION drive. The captures below reveal the inner workings of this technology.

Illustration of measured current signals from ION. Each phase current is measured twice: with high sensitivity and low sensitivity. The high sensitivity signal has higher current precision but is limited to about +/-3.5A range. The low sensitivity signal has range of +/-23A but comes with less precision. The drive combines these two signals into one by making it both accurate and high dynamic range.

Illustration of measured current signals from ION. Each phase current is measured in two channels: with high sensitivity and low sensitivity. The high sensitivity signal has higher precision but is limited to about +/-3.5A range. The low sensitivity signal has range of +/-23A but comes with less precision. The drive combines these two signals into one by making it both precise and high dynamic range.

Zoomed image of the combined high dynamic range current sense signal. The switch between high and low sensitivity happens at 2.5A. As seen from the image, the curve above 2.5A is little bit more rough than below 2.5A.

Zoomed image of the combined current sense signal. The switch between high and low sensitivity happens at 2.5A. As seen from the image, the curve above 2.5A is bit more rough than below 2.5A.

One major motivator behind HDRT is to expand the range of motors that can be driven with single drive without exhibiting any of the typical drawbacks that come when a small motor is being driven with a large drive (motor hiss, jitter, torque ripple, position hunting). It also gives maximum precision for those who want the best performance in torque control mode.

Both ION and ARGON utilize low noise 12 bit analog-to-digital converters (ADC) and discrete Op-Amps for acquiring the sensor signals yielding the effective current sense precision of 14 to 15 bits. Most of the drives I’ve examined use a single sensing range and a 10 bit ADC. That is a significant enough difference to be seen, heard and felt by anyone :)

Something completely different – Laser diode driver!

Along motor controllers, we have been designing a laser diode driver. Laser diode driver, or LDD, is basically a current regulator that is used to drive constant or pulsed current to a semiconductor diode that emits laser light.

Intensify Nx50 laser diode driver delivers continuous current of 50 A at exceptional 95% efficiency.

Intensify Nx50 laser diode driver delivers continuous current of 50 A at exceptional 95% efficiency.

The story behind this is the fact that I have been working close to laser diode industry where I get understanding of how laser diodes are utilized and controlled, as well as expertise of precision current control from motor drives. Combining these two makes it almost trivial to make a new kind of LDD that has never seen before.

Intenisify Nx50 laser diode driver delivers up to 150 A continuous current when three boards are connected parallel by stacking

Three Nx50’s stacked forming a 0 – 150 A driver.

The product is now finished and it’s called Intensify Nx50. It has unique ability to be stacked to increase output rating. Single board outputs current between 0 – 50 A and voltage between 0.8 – 5.0 V. Two of them output 0 – 100 A / 0.8 – 5.0 V and three 0 -150 / A 0.8 – 5.0 V etc.

Funny observation from testing of 150 A driver in pulsed mode is that the thick cables tend to physically move due to magnetic force generated by flowing current. When current flows in parallel conductors in opposite directions, cables repel each other. It takes hefty amount of current to feel and see it :)

Servo drive internal construction

For those who are interested to see how servo drive internals are constructed, see the new Wiki article: Signal path of servo motor drive. The diagrams presented in the article are useful when designing systems where servo drives are part of the system.

Signal path from setpoint source (user interface) to internal setpoint (fed to actual servo control)

Signal path from setpoint source (user interface) to internal setpoint (fed to actual servo control)

Drive block diagram that applies to all GD drives starting from VSD-E

Drive block diagram that applies to all GD drives starting from VSD-E

The diagrams are also useful when designing custom code to Argon open source I/O side firmware. The I/O side microcontroller acts as provider of User setpoint as well as position and velocity feedbacks referred in the images. Rest of the illustrated logic lies inside the GraniteCore.