346 lines
16 KiB
Markdown
346 lines
16 KiB
Markdown
+++
|
|
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}
|
|
|
|
<a id="table--tab:table-name"></a>
|
|
<div class="table-caption">
|
|
<span class="table-number"><a href="#table--tab:table-name">Table 1</a>:</span>
|
|
Drivers with integrated controllers
|
|
</div>
|
|
|
|
| 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 | |
|
|
|
|
<a id="table--tab:table-name"></a>
|
|
<div class="table-caption">
|
|
<span class="table-number"><a href="#table--tab:table-name">Table 2</a>:</span>
|
|
Pure Drivers
|
|
</div>
|
|
|
|
| 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 <schmidt20_desig_high_perfor_mechat_third_revis_edition>):
|
|
|
|
- **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\\).
|
|
|
|
<div class="exampl">
|
|
|
|
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.
|
|
|
|
</div>
|
|
|
|
|
|
### 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 \\]
|
|
|
|
<div class="exampl">
|
|
|
|
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.
|
|
|
|
</div>
|
|
|
|
|
|
#### 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.
|
|
|
|
<div class="exampl">
|
|
|
|
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\\).
|
|
|
|
</div>
|
|
|
|
|
|
### 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 <fig:art_electronics_current_source>.
|
|
|
|
> 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.
|
|
|
|
<a id="figure--fig:art-electronics-current-source"></a>
|
|
|
|
{{< figure src="/ox-hugo/art_electronics_current_source.png" caption="<span class=\"figure-number\">Figure 1: </span>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="<span class=\"figure-number\">Figure 2: </span>From <&lafarga24_activ_vibrat_isolat_system_space_applic>, Appendix B" >}}
|
|
|
|
{{< figure src="/ox-hugo/okyay16_current_amplifier_schematic.png" caption="<span class=\"figure-number\">Figure 3: </span>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:
|
|
|
|
-
|
|
|
|
<!--listend-->
|
|
|
|
```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]
|
|
```
|
|
|
|
-
|
|
|
|
<!--listend-->
|
|
|
|
```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>
|