+++
title = "Transconductance Amplifiers"
author = ["Dehaeze Thomas"]
draft = false
category = "equipment"
+++
Tags
: [Electronics]({{< relref "electronics.md" >}}), [Voice Coil Actuators]({{< relref "voice_coil_actuators.md" >}})
## Description {#description}
A Transconductance Amplifier converts the control voltage into current with a current source characteristic.
Such a converter is called a voltage-to-current converter, also named a voltage-controlled current source or _transconductance_ amplifier.
Such amplifier is used to control motors (e.g. voice coil, BLDC, stepper motors, ...).
## Manufacturers {#manufacturers}
Table 1:
Drivers with integrated controllers
| Model | Manufacturer | Linear / PWM | Axes | Interfaces | Feedback | Current Bandwidth | ASD at 1kHz [A/sqrt(Hz)] |
|-----------------------------------------------------------------------------------------------------------------------------------|-----------------|--------------|----------------|---------------|--------------|-------------------|--------------------------|
| [Apogee](https://prodrive-technologies.com/motion/products/servo-drives/apogee-kepler-series/) | Prodrive | PWM | 1 to 3 | +/-10V 16bits | Encoder | 7kHz | 1e-6 |
| [S3-400/8](https://prodrive-technologies.com/motion/products/servo-drives/cygnus-series/) | Prodrive | PWM | 1 | +/-10V | Encoder | 1kHz | 1e-4 |
| [LWM7S](https://www.maccon.co.uk/linear-servo-amplifier.html) | Macon | Linear | 1 | | Encoder/Hall | | |
| [Automation1 XL2e](https://www.aerotech.com/product/motion-control-platforms/automation1-xl4s-high-performance-voice-coil-drive/) | Aerotech | Linear | 1 | +/-10V 16bits | Encoder/Hall | 2.5kHz | |
| [Automation1 XL4s](https://www.aerotech.com/product/motion-control-platforms/automation1-xl4s-high-performance-voice-coil-drive/) | Aerotech | Linear | 1 (voice coil) | +/-10V 16bits | ? | | |
| [EM-356B](https://electromen.com/en/products/item/motor-controllers/brushless-dc-motor/EM-356B) | Electromen | PWM | 1 | 0-10V | Hall | | |
| [azbh10a4](https://www.a-m-c.com/product/azbh10a4/) | AMC | PWM | 1 | +/-10V | Hall | | |
| [X-MCC](https://www.zaber.com/products/controllers-joysticks/X-MCC) | Zaber | ?? | 1 to 4 | | | | |
| [TA310](https://www.trustautomation.com/products/linear-drives/ta310-linear-drive/) | TrustAutomation | Linear | 1 | +/-10V | Hall | 5kHz | |
| Model | Manufacturer | Linear / PWM | Axes | Interfaces | Current Bandwidth | Max Current | ASD at 1kHz [A/sqrt(Hz)] |
|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------|--------------|------------------------|------------|-------------------|-------------|--------------------------|
| [LA300](https://varedan.com/product/analog-linear-servo-amplifiers/la-300-analog-linear-servo-amplifier/) | Varedan | Linear | 3 | +/-10V | 10kHz | 4A | |
| [CMAu10](https://www.cedrat-technologies.com/en/products/magnetic-controllers/oem-amplifiers.html) | Cedrat | Linear | 1 | +/-10V | 5kHz | 0.5A | |
| [TA115](https://www.trustautomation.com/products/linear-drives/ta115-linear-drive/) and [TA105](https://www.trustautomation.com/products/linear-drives/ta105-linear-drive/) | TrustAutomation | Linear | 1 | +/-10V | 5kHz | | 1e-6 |
| [SMA6520](https://www.glentek.com/shop/?swoof=1&product_cat=linear-brushless-series&really_curr_tax=21-product_cat) | Glentek | Linear | 1 Brushless (3 phases) | +/-10V | 10kHz | | |
| [SMA5005](https://www.glentek.com/shop/?swoof=1&product_cat=linear-brush-series&really_curr_tax=21-product_cat) | Glentek | Linear | 1 | +/-10V | 10kHz | | |
| [SRS Current Source](https://www.thinksrs.com/products/cs580.html) | SRS | Linear | 1 | | | 0.1A | |
## Required properties {#required-properties}
Main required properties are (taken from ):
- **Power delivery capability**
- **Dynamic properties**
- **Linearity**
- **Voltage or current drive**
- **Efficiency**
- **Four quadrant operation**
## Four Quadrant Operation {#four-quadrant-operation}
The self-inductance of an electromagnetic actuator also causes another problem when the actuator is driven with a period signal, because for a sinusoidal signal the current is out of phase with the voltage.
In the extreme case of a purely reactive load, the maximum current needs to be delivered at zero voltage, while at a quarter of the period a positive current is delivered with a negative voltage and another quarter it is just the other way around.
In mechatronic positioning systems with a high moving mass, the real problem is caused by the kinetic energy that is involved.
At acceleration, the motion voltage of the actuator increases in phase with the current and electric power is inserted in the system and converted into kinetic energy.
The deceleration phase is however completely the opposite.
While the motion voltage still has the same sign as during constant motion, the current needs to be reversed in order to reverse the energy flow.
This means that the full amount of kinetic energy has to be absorbed by the amplifier.
## How to size a linear drive? {#how-to-size-a-linear-drive}
### Why it is important to properly choose a linear drive? {#why-it-is-important-to-properly-choose-a-linear-drive}
From a TrustAutomation [white paper](https://www.trustautomation.com/resources/engineering-blog/how-to-size-a-linear-drive-for-precision-positioning-applications/):
> The price you'll pay for the improved precision (i.e. thanks to the linear drive as compared to a PWM one) will mostly come in the form of heat.
> Linear drive typically maintain small amounts of power inside the drive circuits, increasing heat.
> **Excess voltage not needed by the motor is also dissipated as heat**.
### Determine required currents and voltages {#determine-required-currents-and-voltages}
In order to properly choose a linear amplifier, it is important to determine the voltage and torque that has to be generated.
The required current is based on the force (resp. torque) constant \\(K\_f\\) and peak force (resp. torque).
The required voltage is based on the back EMF constant \\(K\_u\\), peak velocity \\(v\_\text{peak}\\), peak current \\(I\_\text{peak}\\) and winding resistance \\(R\\).
Consider a linear brushless motor with a force constant \\(K\_f\\) equal to 30 N/A, a BEMF constant \\(K\_u\\) equal to \\(18\\,\frac{Vrms}{m/s}\\) (i.e. \\(25\\,\frac{V}{m/s}\\)) and a electrical resistance \\(R\\) of \\(20\\,\Omega\\).
The peak velocity \\(v\_\max\\) is 1 mm/s and the wanted applied peak force \\(F\_\text{peak}\\) is 50 N.
The peak current required is:
\\[ I\_\text{peak} = F\_\text{peak}/K\_f \\]
And we obtain a peak current of 1.7 A.
The peak voltage is:
\\[ V\_\text{peak} = K\_u \cdot v\_\text{peak} + R \cdot I\_\text{peak} + V\_\text{margin} \\]
With \\(V\_\text{margin}\\) of 10 V, we obtain \\(V\_\text{peak} = 45\\,V\\).
From this simple calculation, it is possible to obtain the required capability of the amplifier.
### Determine safe operating area {#determine-safe-operating-area}
There are two danger scenarios: a stalled motor and a dynamic stopping motion
#### Stalled motor {#stalled-motor}
Consider the voltage supply to the drive \\(V\_\text{supply}\\) and the peak current \\(V\_\text{peak}\\).
Now suppose the motor is pushing against a hard stop, the power \\(W\_\text{drive}\\) that the drive must dissipate is equal to:
\\[ W\_\text{drive} = I\_\text{peak} \cdot V\_\text{drive} \\]
with:
\\[ V\_\text{drive} = V\_\text{supply} - I\_\text{peak} R \\]
For our current application, \\(V\_\text{supply} = 45\\,V\\), \\(R = 20\\,\Omega\\) and \\(I\_\text{peak} = 1.7\\,A\\) which gives:
\\[ W\_\text{drive} = 19\\,W \\]
Then, it should be checked that the amplifier can dissipate this amount of power.
#### Dynamic Stopping. {#dynamic-stopping-dot}
With a linear drive, the kinetic energy is absorbed by the drive itself, but must be dissipated as heat.
This energy must be added to the energy required by the drive to stop all motion.
The kinetic energy \\(E\_K\\) is (expressed in Joules):
\\[ E\_K = \frac{1}{2} m v\_\text{peak}^2 \\]
with \\(m\\) the payload mass.
During the linear deceleration phase, the power \\(W\_d\\) that has to be dissipate by the drive is:
\\[ W\_d = \frac{E\_K}{t\_\text{dec}} \\]
with \\(t\_\text{dec}\\) the deceleration time.
Consider a mass of 5 kg with a peak velocity of 1 mm/s and a deceleration time of 0.1s, the power to be dissipated in the drive is:
\\[ W\_d = 25\\,\mu W \\]
which is quite negligible.
If a velocity of 1 m/s is considered instead, we obtain \\(W\_d = 25\\,W\\).
### Matlab Script to size a linear drive {#matlab-script-to-size-a-linear-drive}
```matlab
%% Motor properties
Kt = 28; % Force constant [N/A] or Torque constant [Nm/A]
Ku = 28; % BEMF in [V/(m/s)] or in [V/(rad/s)]
R = 8.5; % Winding resistance [Ohm]
%% Motion property
Fp = 100; % Peak force [N] or Peak torque [Nm]
vp = 10e-3; % Peak Velocity [m/s] or peak rotation [rad/s]
m = 5; % Mass of the payload [kg]
td = 0.1; % Deceleration time [s]
```
```matlab
%% Driver wanted properties
V_margin = 10; % Power supply margin [V]
Imax = Fp / Kt; % Peak current to be supplied by the driver [A]
Vmax = vp * Ku + R * Imax + V_margin; % Peak voltage to be generated by the driver [V]
```
```text
Imax = 3.6 [A], Vmax = 41 [V]
```
```matlab
%% Stalled Motor
W_stalled = Imax * (Vmax - Imax * R); % [W]
```
```text
W_stalled = 37 [W]
```
```matlab
%% Dynamic Stopping
W_stop = 0.5*m*vp^2 / t_dec; % [W]
```
```text
W_stop = 0.0025 [W]
```
## Basic Circuits {#basic-circuits}
### Howland Current Sources {#howland-current-sources}
See Section 4.2.5 in <&horowitz15_art_of_elect_third_edition>.
Howland current source is shown in Figure .
> The output current is sourced through a sense resistor \\(R\_s\\) whose value you can choose independently of the matched resistor array (with resistor pairs \\(R\_1\\) and \\(R\_2\\)).
> The best way to understand this circuit is to think of \\(IC\_1\\) as a difference amplifier whose output sense and reference connections sample the drop across \\(R\_s\\) (i.e., the current); the latter is buffered by follower IC2 so there is no current error.
{{< figure src="/ox-hugo/art_electronics_current_source.png" caption="Figure 1: From <&horowitz15_art_of_elect_third_edition>" >}}
### Other circuits found in the litterature {#other-circuits-found-in-the-litterature}
{{< figure src="/ox-hugo/lafarga24_current_amplifier.png" caption="Figure 2: From <&lafarga24_activ_vibrat_isolat_system_space_applic>, Appendix B" >}}
{{< figure src="/ox-hugo/okyay16_current_amplifier_schematic.png" caption="Figure 3: From <&okyay16_mechat_desig_dynam_contr_metrol>, Appendix A" >}}
## Estimation of the required current noise {#estimation-of-the-required-current-noise}
### Voice Coil Actuator with flexible guiding {#voice-coil-actuator-with-flexible-guiding}
```matlab
%% Frequency vector used for the analysis
freqs = logspace(0, 4, 1000); % [Hz]
%% Motor properties
Kt = 28; % Force constant [N/A]
%% Amplifier Noise
In = 1e-6.*ones(size(freqs)); % Current noise density [A/sqrt(Hz)]
%% DAC Noise
Vn = (20/2^20)^2/12*1e4*ones(size(freqs)); % DAC output noise in [V/sqrt(Hz)]
Vn = 3e-8
Gi = 0.2; % Amplifier Gain [A/V]
%% Mechanical properties
m = 200e-3; % Mobile mass [kg]
k = 1e3; % Guiding stiffness [N/m]
xi = 0.05; % Modal Damping
```
```matlab
%% Transfer function from F [N] to x [m]
Gx = 1/(m*s^2);
```
```matlab
%% Transfer function from I [A] to x [m]
x_asd_i = In.*abs(squeeze(freqresp(Gx*Kt, freqs, 'Hz')))';
x_asd_v = Vn.*abs(squeeze(freqresp(Gx*Gi*Kt, freqs, 'Hz')))';
%% Cumulative amplitude spectrum
figure;
tiledlayout(1, 1, 'TileSpacing', 'Compact', 'Padding', 'None');
nexttile();
hold on;
plot(freqs, sqrt(flip(-cumtrapz(flip(freqs), flip(x_asd_i.^2)))) , '-');
plot(freqs, sqrt(flip(-cumtrapz(flip(freqs), flip(x_asd_v.^2)))) , '-');
plot(freqs, ex , '-');
hold off;
set(gca, 'XScale', 'log'); set(gca, 'YScale', 'log');
ylabel('Magnitude'); xlabel('Frequency [Hz]');
xlim([0, 1e3]);
```
### Approximate analytical formula {#approximate-analytical-formula}
Parameters:
- `Kt`: motor force constant in N/A
- `In`: current noise density of the amplifier in \\(A/\sqrt{Hz}\\)
- `m`: mass in kg
- `fb`: the feedback bandwidth in Hz
We have that the residual motion when the feedback controller is closed is approximately equal to:
\begin{equation}
\epsilon\_x = \sqrt{\int\_\infty^{f\_b} \left(\frac{K\_t I\_n}{m \omega^2}\right)^2 d\omega}
\end{equation}
\begin{equation}
\epsilon\_x = \frac{K\_t I\_n}{m (2\pi)^2} \sqrt{\frac{1}{3 f\_b^3}}
\end{equation}
Therefore, this formula can be used to:
-
```matlab
%% Estimate the position stability from the current noise and system parameters
m = 1; % [kg]
In = 1e-6; % [A/sqrt(Hz)]
Kt = 10; % [N/A]
fb = 10; % [Hz]
ex = In*Kt/m/(2*pi)^2*sqrt(1./(3*fb^3));
```
```text
epsilon x = 4.6 [nm RMS]
```
-
```matlab
%% Estimate the required current noise from the wanted position stability and the parameters of the system
m = 1; % [kg]
Kt = 10; % [N/A]
fb = 50; % [Hz]
ex = 1e-9; % [m RMS]
In = ex*m*(2*pi)^2/Kt * sqrt(3*fb^3);
```
```text
In = 2.4e-06 [A/sqrt(Hz)]
```
## Bibliography {#bibliography}
<./biblio/references.bib>