Direct Torque Control using arduino mega

Hello i'm an engineering student and im new here. My background it's not electronics but aeronautical. I recently (a year more or less) started to dig into arduino and electronics.

I'm try to develop a four quadrant AC dynamometer for my master thesis. I'll be using labview for the acquisition system but i want to control the dyno with arduino.
Im reading a lot about the DTC but i have some doubts about how to control it via Arduino.

Does anyone here have implemented a DTC using arduino or have some tips related about that?

Hi,

Can you explain what a 4 quadrant AC dyno-mometer is, assume that we have no idea.
DTC also needs explanation.

Thanks.. Tom.... :slight_smile:

Its a 4-quadrant motor/generator used to measure forces/speeds and generate mechanical load
when testing other motors/engines. Electronically its exactly like controlling a motor because
that's what it is. Dyno == force.

A bit more information would be useful from the O.P., like which motor, what range of speeds,
what driver hardware pre-exists. A presume a 3-phase power bridge will be needed or available?

Hi MarkT thanks for respond.
Im trying to use a motor form the honda three phase power generator (not in my hands yet and do not depend on me only). By now im thinking in 5kW of mechanical power since the objective of the thesis is to test the honda Gx160 (5 hp max power and a max speed 3600 RPM).
My concerns are about the capability of the arduino to process the estimation of the torque and flux in time to properly control the inverter/rectifier (parallel Mosfets switch).
I'm considering to try another controller Like Field Oriented Control That can be bought. But i will love to implement the DTC on arduino.

In theory its possible - the tricky part is you have to deal with the lack of DSP-like processing
power in the Arduino, so use ints or fixnums for your calculations and code things tightly.

If you understand the principles of vector control its a question of doing the math really.

You first need an appropriate opto-isolated 3-phase bridge with isolated current-sensors (hall effect)
so you can implement 3-phase torque control. Google "integrated power module" perhaps.

You probably need to fiddle with the ADC settings to get it to convert quicker (or add external
SPI ADC chip(s)) so that you can get frequent current samples - this is needed to close the
current-control loops at a relatively high bandwidth.

That gives you a system that enables you to program an arbitrary 3-phase current by either
bang-bang or 3-phase PWM control (using the current feedback). You can synchronise multiple
counter-timers in the ATmega chip to give 3 lockstep PWM channels which can then be used
to drive a bridge. The Arduino Mega is a good choice because you can generate 6 lock-step signals
allowing complete bridge control including dead-time.

Once you have that you need an outer control loop that uses an estimate of rotor position and
measurement of speed (or much better a measurement of position and speed - ie an a shaft
encoder). If you know the rotor position the control is easier, you control the current phasor
from the position, speed and torque inputs. The phasor needs a field component and a torque
component, where the torque component can change rapidly and provides the actual drive but
the field component sets the overall field strength, which can only change slowly but sets the
responsiveness to the torque component. You can run the field at maximum for lower efficiency
but maximum control.

For position control you have a third control loop that drives the torque via a PID from the position error,
just like a DC servo motor.

Typical update rates needed are something like:

20--100kHz for bang-bang (hysteresis) current control
5--20kHz for 3-phase PWM
100Hz--1kHz for phasor control loop (ie torque control)
100Hz+ for a position control loop

The tricky bits are getting the higher speed loops all running without floating point support, so
fixed-point and integer computation throughout, sines/cosines always by table-lookup, etc.

One nice trick is to avoid quadrature representation completely and do everything in 3-phase
coordinates u,v,w - you only work with u and v, since by definition w = -u-v
This helps because your current measurements come in as u and v readings (you only need
2 sensors), and all your outputs are u,v,w anyway. Bit of algebra needed here and there,
but it less hassle than the Clarke transform and inverse Clarke transform - just think of the
complex plane as geometry and its obvious.