Difference between revisions of "GaN MPPT"

From 'Engineers of Innovation Wiki'
Jump to navigation Jump to search
 
(3 intermediate revisions by the same user not shown)
Line 1: Line 1:
First idea's for a GaN based MPPT
[[File:MPPT overview.jpg|thumb|Baseboard with two phases populated]]
Part of a system consisting of 8x Gan Phases and 1x Baseboard.: Picture above is fully populated BaseBoard with 8 GaN boost converters mounted. PCB's can be cooled through Inductors on the bottom using a coldplate, while still being easily replaced from the top by remving the four bolts. Software based on TPEE MPPT


# Individual Phases are replaceable easily
== Can Bus Protocol Format ==
# Software based on TPEE MPPT[https://www.tpee.nl/open-sec-open-source-mppt-developed-for-high-efficiency-solar-cars/]
The CAN bus telemetry is output using Standard CAN IDs (11-bit) by default. The ID structure uses the upper 7 bits for the Node ID (default 64, offset by hardware pins) and the lower 4 bits for the Packet ID.
##TPEE uses USB for config
 
# Compatible with 14S , sufficient protection for transients etc.
Here is the documentation for the telemetry messages:
# Some way to get heat out of the enclosure
 
# Easy connectors on the enclosure (no conta-clip)
CAN Bus Frame Format
# Enough channels to have 2 MPPT's boards for the whole boat, probably 6 or 8?
 
# Interleaved operation to reduce RMS current through capacitors
Frame Type: Standard Frame (11-bit ID)
# Functional isolation on CAN and safety inputs
 
Bitrate: 1000kbps
 
Node ID: Configurable generalCanId (64) + Hardware ID offset (Pins ID0-ID3)
 
NB: The ID is based on the position on the mainboard. Where ID0-ID2 is equal to the position 0-7, and ID3 is dependent on the DIP-switch on the mainboard. Front ID3 = 1, Read ID3 = 0.
 
CAN ID Construction: (NodeID << 4) | PacketID
 
=== Power ===
Packet ID 0x00: Power (2Hz)
 
Sent every 500ms. Contains the primary voltage and current measurements.
 
Packet ID: 0x00
 
Data Length: 8 Bytes
 
Format: Big Endian (Network Order)
{| class="wikitable"
|'''Byte'''
|'''Name'''
|'''Type'''
|'''Scaling'''
|'''Description'''
|-
|0-1
|Input  Voltage
|int16
|0.01  V/bit
|Input  Voltage (Vlow)
|-
|2-3
|Input  Current
|int16
|0.0005  A/bit
|Input  Current (Iind). Scaling factor 2000.0f
|-
|4-5
|Output  Voltage
|int16
|0.01  V/bit
|Output  Voltage (Vhigh)
|-
|6-7
|Output  Current
|int16
|0.0005  A/bit
|Output  Current (Ihigh). Scaling factor 2000.0f
|}
Note on Scaling:
 
buffer_append_float16(data, value, scale, &index) multiplies the float value by scale and stores it as an int16.
 
To decode: float value = (float)((int16_t)received_value) / scale
 
Input/Output Current Scale: 2000.0 -> Divide received int16 by 2000.0 to get Amps.
 
Input/Output Voltage Scale: 100.0 -> Divide received int16 by 100.0 to get Volts.
 
=== Status ===
Packet ID 0x01: Status (1Hz)
 
Sent every 1000ms. Contains the operating state and fault codes.
 
Packet ID: 0x01
 
Data Length: 5 Bytes
{| class="wikitable"
|'''Byte'''
|'''Name'''
|'''Type'''
|'''Scaling  / Enum'''
|'''Description'''
|-
|0
|Mode
|uint8
|PhaseMode_t
|Operating  Mode (1=CIV, 2=CIC, 3=MinInputCurrent, 4=COV, 5=COC, 6=Temp Derating,  7=Fault)
|-
|1
|Fault
|uint8
|PhaseFault_t
|Fault  Code (0=OK, 1=Config, 2=Input OV, 3=Output OV, 4=Output OC, 5=Input OC,  6=Input UC, 7=Phase OC)
|-
|2
|Enabled
|uint8
|bool
|1 if  Enabled, 0 if Disabled
|-
|3
|Board  Temp
|int8
|1  °C/bit
|Ambient  Temperature in °C
|-
|4
|Heat  Sink Temp
|int8
|1  °C/bit
|Heatsink  Temperature in °C
|}
 
=== Sweep Data ===
Packet ID 0x02: Sweep Data (On Request)
 
Sent during an MPPT sweep operation.
 
Packet ID: 0x02
 
Data Length: 5 Bytes
{| class="wikitable"
|'''Byte'''
|'''Name'''
|'''Type'''
|'''Scaling'''
|'''Description'''
|-
|0
|Index
|uint8
|1
|Sweep  point index (0-255)
|-
|1-2
|Current
|int16
|0.0005  A/bit
|Current  at this sweep point (Scale 2000.0)
|-
|3-4
|Voltage
|int16
|0.01  V/bit
|Voltage  at this sweep point (Scale 100.0)
|}
 
=== Enums ===
 
=== PhaseMode_t (Byte 0 of Status) ===
0: None (Start)
 
1: CIV (Constant Input Voltage)
 
2: CIC (Constant Input Current)
 
3: MinInputCurrent
 
4: COV (Constant Output Voltage)
 
5: COC (Constant Output Current)
 
6: TD (Temperature Derating)
 
7: Fault
 
==== PhaseFault_t (Byte 1 of Status) ====
0: OK
 
1: Config Error
 
2: Input Over Voltage
 
3: Output Over Voltage
 
4: Output Over Current
 
5: Input Over Current
 
6: Input Under Current
 
7: Phase Over Current
 
8: General Fault
#
#

Latest revision as of 14:00, 28 February 2026

Baseboard with two phases populated

Part of a system consisting of 8x Gan Phases and 1x Baseboard.: Picture above is fully populated BaseBoard with 8 GaN boost converters mounted. PCB's can be cooled through Inductors on the bottom using a coldplate, while still being easily replaced from the top by remving the four bolts. Software based on TPEE MPPT

Can Bus Protocol Format

The CAN bus telemetry is output using Standard CAN IDs (11-bit) by default. The ID structure uses the upper 7 bits for the Node ID (default 64, offset by hardware pins) and the lower 4 bits for the Packet ID.

Here is the documentation for the telemetry messages:

CAN Bus Frame Format

Frame Type: Standard Frame (11-bit ID)

Bitrate: 1000kbps

Node ID: Configurable generalCanId (64) + Hardware ID offset (Pins ID0-ID3)

NB: The ID is based on the position on the mainboard. Where ID0-ID2 is equal to the position 0-7, and ID3 is dependent on the DIP-switch on the mainboard. Front ID3 = 1, Read ID3 = 0.

CAN ID Construction: (NodeID << 4) | PacketID

Power

Packet ID 0x00: Power (2Hz)

Sent every 500ms. Contains the primary voltage and current measurements.

Packet ID: 0x00

Data Length: 8 Bytes

Format: Big Endian (Network Order)

Byte Name Type Scaling Description
0-1 Input Voltage int16 0.01 V/bit Input Voltage (Vlow)
2-3 Input Current int16 0.0005 A/bit Input Current (Iind). Scaling factor 2000.0f
4-5 Output Voltage int16 0.01 V/bit Output Voltage (Vhigh)
6-7 Output Current int16 0.0005 A/bit Output Current (Ihigh). Scaling factor 2000.0f

Note on Scaling:

buffer_append_float16(data, value, scale, &index) multiplies the float value by scale and stores it as an int16.

To decode: float value = (float)((int16_t)received_value) / scale

Input/Output Current Scale: 2000.0 -> Divide received int16 by 2000.0 to get Amps.

Input/Output Voltage Scale: 100.0 -> Divide received int16 by 100.0 to get Volts.

Status

Packet ID 0x01: Status (1Hz)

Sent every 1000ms. Contains the operating state and fault codes.

Packet ID: 0x01

Data Length: 5 Bytes

Byte Name Type Scaling / Enum Description
0 Mode uint8 PhaseMode_t Operating Mode (1=CIV, 2=CIC, 3=MinInputCurrent, 4=COV, 5=COC, 6=Temp Derating, 7=Fault)
1 Fault uint8 PhaseFault_t Fault Code (0=OK, 1=Config, 2=Input OV, 3=Output OV, 4=Output OC, 5=Input OC, 6=Input UC, 7=Phase OC)
2 Enabled uint8 bool 1 if Enabled, 0 if Disabled
3 Board Temp int8 1 °C/bit Ambient Temperature in °C
4 Heat Sink Temp int8 1 °C/bit Heatsink Temperature in °C

Sweep Data

Packet ID 0x02: Sweep Data (On Request)

Sent during an MPPT sweep operation.

Packet ID: 0x02

Data Length: 5 Bytes

Byte Name Type Scaling Description
0 Index uint8 1 Sweep point index (0-255)
1-2 Current int16 0.0005 A/bit Current at this sweep point (Scale 2000.0)
3-4 Voltage int16 0.01 V/bit Voltage at this sweep point (Scale 100.0)

Enums

PhaseMode_t (Byte 0 of Status)

0: None (Start)

1: CIV (Constant Input Voltage)

2: CIC (Constant Input Current)

3: MinInputCurrent

4: COV (Constant Output Voltage)

5: COC (Constant Output Current)

6: TD (Temperature Derating)

7: Fault

PhaseFault_t (Byte 1 of Status)

0: OK

1: Config Error

2: Input Over Voltage

3: Output Over Voltage

4: Output Over Current

5: Input Over Current

6: Input Under Current

7: Phase Over Current

8: General Fault