Field Control

Early Controller Experiments

PIC Analogue Timers

...using a 555 monostable triggered by the PIC and fired back into it.

Original gschem schematic

Varying VR1 varies the time period killing two bird with one stone.
The software can use this instead of an internal timer making it separate to the software and this provides analogue control without ADC input.

See PIC Analogue Control for the software.

This would use two pins for each monostable circuit.
Two monostables: one for each mark and space; so 4 pins on total.

This removes the need for the buttons so this is a straight swap for them.


Original gschem schematic

Original inkscape drawing | Drilling mask
Software



This page is being recovered



Original gEDA schematic



This circuit discharges the gate with a transistor and charges using a resistor for both high and low sides.
This means fast off times, but slower on times removing crossover shoot-through.

Original gEDA schematic





Simple Trinary Controller

This is a simple test on a BLDC motor to see trinary software running a real motor using relays to commutate.


Original gschem schematic

Software is here: Trinary Logic Controller



Moving on to a solid state version:

Original gschem schematic

Traces taken from IGBT2 gate, vs MCU1 IO9
0.1sec/div:

1msec/div:

1usec/div:

1msec/div:

1usec/div:


So the fall times (switch off) is fast (1uS), but the rise times (switch on) are very slow at 1,000uS

Improving Switch-On Speed


Part of the problem in this circuit was the slow time of the opto release.
This is improved with a base switch-off resistor (R3/R5) and by switching the base from the supply instead of the collector.


Original gschem schematic
Now we are seeing speeds much closer to the theoretical RC circuit of the 1k charge resistor and gate capacitance.
The 11.5uS is for the time constant of the RC circuit (to ~63%).

10usec/div:



Class D Trinary Amplifier

Here we are (finally) starting the development of the full class D trinary amplifier.
The parts of the test extend from the PWM testing done in the Component Testing.

Low-Side Test

This is the test of the low-side circuit


Original gschem schematic


Original inkscape drawing

We are just using the ground as the gate driver supply.
The offset supply (in the Spice model) will be separately tested.



High-Side Test


Original gschem schematic


Original inkscape drawing



Single Channel Test

This is combining the low-side and high-side into a single trinary class D output.
In the full controller there will be 3 channels for the 3 phases.

Original gschem schematic


Original inkscape drawing





So this is now showing the single output from the Arduino is amplified to the motor and can control the switching of both IGBTs independently.
This is true 3-state trinary amplification of the PWM inputs just as a classic binary PWM output of a class-D audio amplifier.

More importantly this can never suffer from shoot-through as it has does not have the fourth state of both IGBTs on by design.
Thus eradicating the need for complex shoot-through detection and elimination electronics.

Hooking Up To Motor

This was tested on the Tesla model S rear drive unit.
Also see here for the MCU software

Driver board only

TIME:200nS/div, Blue:TP1(2vDC/div), Red:TP2(2vDC/div), Orange:TP3(2vDC/div), Green:TP4(2vDC/div).


TIME:200nS/div, Blue:TP1(2vDC/div), Red:TP2(2vDC/div), Orange:TP3(2vDC/div), Green:TP4(2vDC/div).

Low power output



Output switching transition without load (~50nS):

TIME:50nS/div, Blue:TP1(2vDC/div), Green:V-phase(4vDC/div).

TIME:50nS/div, Blue:TP1(2vDC/div), Green:V-phase(4vDC/div).

Switching delay with a load (2uS max)

TIME:500nS/div, Blue:TP1(2vDC/div), Green:V-phase(4vDC/div).

TIME:500nS/div, Blue:TP1(2vDC/div), Green:V-phase(4vDC/div).

Trinary interface input vs output (~3.33kHz 50:50 PWM)

TIME:50uS/div, Blue:TP1(2vDC/div), Green:V-phase(4vDC/div).



Original inkscape drawing



Checking V-phase Motor input (PWM ~4kHz, field rotation ~1kHz)

TIME:200uS/div, Blue:MCU V-phase(2vDC/div), Red:MCU W-Phase(2vDC/div), Green:MCU U-Phase(2vDC/div), Yellow: Motor V-phase(4vDC/div).

Adding Schmitt Triggers

7414 Schmitt Trigger inverters are very fast, in the order of 10nS switch times.
This is much faster than the BC5x7B circuits so it makes sense to use one as an inverter.
Also having 2 in series provides a good buffered output.

Original gschem schematic



Low Side

TIME:50nS/div, Blue:TP1(2vDC/div), Red:TP3(2vDC/div), Green:TP5(2vDC/div), Yellow:TP6(2vDC/div).


TIME:50nS/div, Blue:TP1(2vDC/div), Red:TP3(2vDC/div), Green:TP5(2vDC/div), Yellow:TP6(2vDC/div).

High Side

TIME:50nS/div, Blue:TP1(2vDC/div), Red:TP2(2vDC/div), Yellow:TP4(2vDC/div).


TIME:50nS/div, Blue:TP1(2vDC/div), Red:TP2(2vDC/div), Yellow:TP4(2vDC/div).

Input from MCU vs Inverter Output

TIME:200nS/div, Blue:TP1(2vDC/div), Red:Motor V-phase(4vDC/div), Green:TP4(2vDC/div), Yellow:TP6(4vDC/div).


TIME:200nS/div, Blue:TP1(2vDC/div), Red:Motor V-phase(4vDC/div), Green:TP4(2vDC/div), Yellow:TP6(4vDC/div).


TIME:50uS/div, Blue:TP1(2vDC/div), Red:Motor V-phase(4vDC/div).

Logic interface

To create the logic interface between the Arduino and the Tesla driver board a bit of stripboard needs to be laid out.


Original inkscape drawing | mask



MCU Upgrade to SAM3X (Arduino Due)


Original gschem schematic


Original inkscape drawing | mask

This is being developed as a production system and being tested here

Classical Controller Design


Original gschem schematic

Basic Gate Driver Test


Original gschem schematic

Version using Arduino Due and Current Sensors


Original gschem schematic


Original inkscape drawing | mask


Original gschem schematic

Basic High Power Inverter on a Real Motor



Original gschem schematic




Refining the Inverter


Original gschem schematic

Servo Controlled Steering

To control the steering box a motor was attached and this is going to be controlled by servo.
Power is controlled using a H-bridge circuit which is fed with PWM to give propotional control in both directions.


Original gschem schematic
Since the feedback part is not created the motor (MV) is controlled by simply differentiating the control (SP) movement.
This gives something similar to servo control, but without any accuracy.
previous_setpoint := 0

loop:
    derivative := (setpoint - previous_setpoint) / dt
    output := Kd x derivative
    previous_setpoint := setpoint
    wait(dt)
    goto loop


Original gschem schematic