GaN MPPT
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