Carlos Orendain
Published © GPL3+

Solid State Precharge

Solid State Precharge CoolMOS solution for automotive HV battery.

AdvancedFull instructions providedOver 3 days6,518

Things used in this project

Hardware components

CoolMOS C7 Gold SJ MOSFET
Infineon CoolMOS C7 Gold SJ MOSFET
×1
PIC18F
Microchip PIC18F
×1
Capacitor 100 nF
Capacitor 100 nF
×6
Capacitor 1 µF
Capacitor 1 µF
×1
Capacitor 22 µF
Capacitor 22 µF
×2
Capacitor 4700 pF
×1
Schottky Diode S1J
×2
PESD1CAN ESD Protection Diode
×1
LED (generic)
LED (generic)
×1
Male-Header 5 Position- 1 Row- Long (0.1")
Male-Header 5 Position- 1 Row- Long (0.1")
×2
Common Mode Choke SRF4532-510Y
×1
Resistor 10 Ohm
×1
Resistor 100 Ohm
×1
Resistor 10K Ohm
×4
Resistor 500 Ohm 45W TKH45P500RFE-TR
×1
Resistor 60.4 Ohm
×2
Resistor 330 Ohm
×1
High-Side Gate Driver - IRS25752
×1
LDO 5V - TL720M05GQKVURQ1
×1
CAN Transceiver TJA1040
×1
Analog Discovery 2
Digilent Analog Discovery 2
×1

Software apps and online services

MPLAB X IDE
Microchip MPLAB X IDE
MPLAB Code Configurator
Microchip MPLAB Code Configurator
Circuit Maker
CircuitMaker by Altium Circuit Maker

Hand tools and fabrication machines

Soldering iron (generic)
Soldering iron (generic)
12V Power Supply
HV Battery 450V

Story

Read more

Custom parts and enclosures

Solid State Precharge Step

STEP file of Solid State Precharge

Schematics

Schematics

Schematics of Solid State Precharge.

Code

Code of toggle function

C/C++
Function for blink the LED and send a status of PWM signal thought a CAN message.
void ToggleLED() {
    LED_Toggle();
    uCAN_MSG txMessage;
    txMessage.frame.id = 0x1FF;
    txMessage.frame.idType = dSTANDARD_CAN_MSG_ID_2_0B;
    txMessage.frame.dlc = 1;
    txMessage.frame.data0 = TMR4_ReadTimer();
    CAN_transmit(&txMessage);
}

Code of CAN reception

C/C++
Function that reads a CAN message and enables the PWM signal if is request a precharge. Also, if the precharge is active can be turned off.
void ECAN_ISR_ECAN_RXB0I(void) {
    uCAN_MSG rxMessage;    
    if (CAN_receive(&rxMessage) == 1) {
        if (rxMessage.frame.data0 == 0xFF) {
            if (en == 0) {
                en = 1;
                TMR4_StartTimer();
            } else {
                en = 0;
                TMR4_StopTimer();
                RC3_SetLow();
            }
        }
    }
    // clear interrupt flag
    PIR5bits.RXB0IF = 0;
}

Credits

Carlos Orendain

Carlos Orendain

3 projects • 10 followers
I'm a Mechatronics engineer. I have 5+ years of experience as a hardware engineer.

Comments